<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 1??Redis集群配置 ### 1.1簡介 Redis集群是一個由多個節點組成的分布式服務器群,它具有復制、高可用和分片特性; Redis集群沒有中心節點,并且帶有復制和故障轉移特性,這可以避免單個節點成為性能瓶頸,或者因為某個節點下線而導致整個集群下線; 集群中的主節點負責處理槽(存儲數據),從節點則是主節點的復制品; Redis集群將整個數據庫分成16384個槽,數據庫中的每個鍵都屬于16384個槽中的其中一個; 集群中的每個主節點都可以負責0到16384個槽,當16384個槽都有節點在負責時,集群進入上線狀態,可以執行客戶端發送的數據命令; 主節點只會執行和自己負責的槽相關的命令,當節點接收到不屬于自己處理的槽的命令時,它會將處理指定槽的節點的地址返回給客戶端,而客戶端會向正確的節點重新發送命令,這個過程稱為“轉向”; Redis?集群**通過分區(**partition)來提供一定程度的可用性**(availability):即使集群中有一部分節點失效或者無法進行通訊,集群也可以繼續處理命令請求。 Redis?集群提供了以下兩個好處: - 將數據自動切分(split)到多個節點的能力。 - 當集群中的一部分節點失效或者無法進行通訊時, 仍然可以繼續處理命令請求的能力。 ### 1.2實現機制 Redis Cluster? 是Redis的集群實現,內置數據自動分片機制,集群內部將所有的key映射到16384個Slot中,集群中的每個Redis Instance負責其中的一部分的Slot的讀寫。集群客戶端連接集群中任一Redis Instance即可發送命令,當Redis Instance收到自己不負責的Slot的請求時,會將負責請求Key所在Slot的Redis Instance地址返回給客戶端,客戶端收到后自動將原請求重新發往這個地址,對外部透明。一個Key到底屬于哪個Slot由crc16(key)% 16384 決定。 關于集群成員管理,集群的節點(Redis Instance)和節點之間兩兩定期交換集群內節點信息并且更新,從發送節點的角度看,這些信息包括:集群內有哪些節點,IP和PORT是什么,節點名字是什么,節點的狀態(比如OK,PFAIL,FAIL,后面詳述)是什么,包括節點角色(master或者 slave)等。 關于可用性,集群由N組主從Redis Instance組成。主可以沒有從,但是沒有從 意味著主宕機后主負責的Slot讀寫服務不可用。一個主可以有多個從,主宕機時,某個從會被提升為主,具體哪個從被提升為主,協議類似于Raft,參見這里。如何檢測主宕機?Redis Cluster采用quorum+心跳的機制。從節點的角度看,節點會定期給其他所有的節點發送Ping,cluster-node-timeout(可配置,秒級)時間內沒有收到對方的回復,則單方面認為對端節點宕機,將該節點標為PFAIL狀態。通過節點之間交換信息收集到quorum個節點都認為這個節點為PFAIL,則將該節點標記為FAIL,并且將其發送給其他所有節點,其他所有節點收到后立即認為該節點宕機。從這里可以看出,主宕機后,至少cluster-node-timeout時間內該主所負責的Slot的讀寫服務不可用。 ### 1.3依賴配置 Redis集群配置之前需要依賴一些相關庫配置,因此需要先安裝以下相關庫; (1)???確保系統安裝zlib,否則gem install會報(no such file to load -- zlib) # download:zlib-1.2.8.tar.gz # tar –zxvfzlib-1.2. 8.tar.gz # cd zlib-1.2.8 #./configure? # make? # makeinstall? (2)???安裝ruby:version(2.2.2) # download:ruby-2.2.2.tar.gz? # tar –zxvf?ruby-2.2.2.tar.gz # cd? /ruby-2.2.2 #./configure-prefix=/usr/local/ruby? # make? # makeinstall? # cp ruby/usr/local/bin? 安裝完成后可以查看相應的版本信息: # ruby –v (3)安裝rubygem:version(1.8.16) # down rubygems-2.4.7.tar.gz? # tar –zxvf?rubygems-2.4.7.tar.gz # cd ?rubygems-2.4.7 # rubysetup.rb? # cp rubygems-2.4.7/bin/gem/usr/local/bin? 安裝完成后可以查看相應的版本信息: # gem –v (4)安裝redis與ruby接口gem-redis:version(3.0.6) gem ?install ?-l ?/data/soft/redis-3.0.6.gem? ### 1.4集群配置 **集群配置案例:** **1、?redis源碼下載,make安裝;** $ tar xzf redis-3.0.1.tar.gz $ cd redis-3.0.1 $ make The binaries that are nowcompiled are available in the src directory. Run Redis with: **2、新建6個instance,3個master,3個slave;** 新建實例時需要**更改每一個實例**redis.conf的內容,需要綁定網卡IP以及修改相應端口號,集群配置如下: **daemonize? yes????????????????????????????????? #是否以后臺進程運行,默認為no** **pidfile? /var/run/redis_xxxx.pid?????????????? ?#如以后臺進程運行,則需指定一個pid文件** **logfile? /var/log/redis.log????????????? ???????#日志記錄方式,默認值為stdout** **dbfilename dump.rdb???????????????????????????? #本地數據庫文件名,默認值為dump.rdb** **dir ./????????????????????????????????????????? #本地數據庫存放路徑,默認值為 ./** **bind ??x.x.x.x????????????????????????????????? #綁定主機IP,必須綁定相應的網卡IP** **port?? xxxx??????????? ?????????????????????????#監聽端口,默認為6379** **cluster-enabledyes?????????????????????????? #是否啟用集群** **cluster-config-file/user/software/redis/nodefile/nodes-設置為相應端口號xxxx.conf** **cluster-node-timeout15** 本例中的最后相應master與slave配置如下: master: ip????????????????????? port -------------------------------------------------------- 172.168.10.252????? 7000 172.168.10.253????? 7000 172.168.10.254????? 7000 slave ip????????????????? ? ?port???????? -------------------------------------------------------- 172.168.10.252????? 7001??????????? 172.168.10.253????? 7001??????????? 172.168.10.254????? 7001??????????? **3、創建集群節點:** 創建集群的操作可以通過使用位于Redis安裝文件夾內的redis-trib.rb來完成, 使用redis任意一實例src下redis-trib.rb進行集群節點配置; 其中—replicas表示設置slave節點 如不設置slave節點則 --replicas 0: [root@node01 src]# ./redis-trib.rb create --replicas 0172.168.10.252:7000 172.168.10.253:7000 172.168.10.254:7000 若設置一個slave節點則 --replicas 1: [root@node01 src]# ./redis-trib.rb create --replicas 1172.168.10.252:7000 172.168.10.253:7000 172.168.10.254:7000 172.168.10.252:7001172.168.10.253:7001 172.168.10.254:7001 Creating cluster Connecting to node 172.168.10.252:7000: OK Connecting to node 172.168.10.253:7000: OK Connecting to node 172.168.10.254:7000: OK Connecting to node 172.168.10.252:7001: OK Connecting to node 172.168.10.253:7001: OK ~~~ Connecting to node 172.168.10.254:7001: OK? ###首先嘗試連接給定的六個節點,檢查它們是否存在 ~~~ Performing hash slots allocation on 6 nodes... Using 3 masters: 172.168.10.252:7000 172.168.10.253:7000 172.168.10.254:7000 Adding replica 172.168.10.253:7001 to 172.168.10.252:7000 Adding replica 172.168.10.252:7001 to 172.168.10.253:7000 ~~~ Adding replica 172.168.10.254:7001 to 172.168.10.254: 7000 ###在確定這些節點都是可連接之后,redistrib.rb 再將7000設置為主節點,而7001、7001和7001則分別被設置為三個主節點的從節點 ~~~ M: 50a69c4c99413b86e1afbe0eee499b11d0ea4bb7 172.168.10.252:7000 slots:0-5460 (5461slots) master M: 3c7a80e633fc9318c9adbb95d56109f11e0a5f39 172.168.10.253:7000 slots:5461-10922 (5462slots) master ~~~ ###對于三個主節點,redis-trib.rb 會分別為它們指派5461、5462和5461個槽(默認情況下使用平均分配) ~~~ M: 4e20023a126560c39832e56456898a54816b6daa 172.168.10.254:7000 slots:10923-16383(5461 slots) master S: 62078686a716e7ee402725fcd1853cbf8f127355 172.168.10.252:7001 replicates3c7a80e633fc9318c9adbb95d56109f11e0a5f39 S: f1409c7ec4619f6c964cf7fa413710009e55ef04 172.168.10.253:7001 replicates50a69c4c99413b86e1afbe0eee499b11d0ea4bb7 S: e16542a68d0a5b0aec0e3cf0d85ad37638677aad 172.168.10.254:7001 replicates 4e20023a126560c39832e56456898a54816b6daa **Can I set the aboveconfiguration? (type 'yes' to accept): yes** 這個配置沒問題的話,就可以鍵入 yes 并按下回車 ~~~ Nodes configuration updated ~~~ ~~~ >>> Assign a different config epoch to each node ~~~ ###redis-trib.rb 會對集群進行測試,檢查是否每個節點都按照原先展示的配置設置好了 **[OK] All nodesagree about slots configuration.** Check for open slots... Check slots coverage... **[OK] All 16384slots covered.** **至此集群配置完成.** ### 1.5測試驗證 [root@node01 src]# ./redis-cli -h 172.168.10.252 -p 7000 172.168.10.252:7000> get date (nil) 172.168.10.252:7000> get aa (nil) 172.168.10.252:7000> get name (error) MOVED 5798 172.168.10.253:7000 172.168.10.252:7000> # 2 集群訪問 使用集群客戶端向集群發送命令請求 目前主要的 Redis 集群客戶端(或者說,支持集群功能的 Redis 客戶端)有以下這些: 1、redis-rb-cluster:antirez 使用Ruby 編寫的 Redis 集群客戶端,集群客戶端的官方實現; 2、predis:Redis的 PHP 客戶端,支持集群功能; 3、jredis:Redis的 JAVA 客戶端,支持集群功能; 4、StackExchange.Redis:Redis 的C# 客戶端,支持集群功能; 5、內置的 redis-cli :在啟動時給定 -c 參數即可進入集群模式,支持部分集群功能;
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看