1 Redis-cluster集群
1.1 哨兵模式的缺陷
在哨兵模式中,仍然只有一個Master節點。當並發寫請求較大時,哨兵模式並不能緩解寫壓力。
我們知道只有主節點才具有寫能力,那如果在一個集群中,能夠配置多個主節點,是不是就可以緩解寫壓力了呢?
答:是的。這個就是redis-cluster集群模式。
1.2 Redis-cluster集群概念
(1)由多個Redis服務器組成的分布式網絡服務集群;
(2)集群之中有多個Master主節點,每一個主節點都可讀可寫;
(3)節點之間會互相通信,兩兩相連;
(4)Redis集群無中心節點。
1.3 集群節點復制
在Redis-Cluster集群中,可以給每一個主節點添加從節點,主節點和從節點直接遵循主從模型的特性。
當用戶需要處理更多讀請求的時候,添加從節點可以擴展系統的讀性能。
1.4 故障轉移
Redis集群的主節點內置了類似Redis Sentinel的節點故障檢測和自動故障轉移功能,當集群中的某個主節點下線時,集群中的其他在線主節點會注意到這一點,並對已下線的主節點進行故障轉移。
集群進行故障轉移的方法和Redis Sentinel進行故障轉移的方法基本一樣,不同的是,在集群里面,故障轉移是由集群中其他在線的主節點負責進行的,所以集群不必另外使用Redis Sentinel。
1.5 集群分片策略
Redis-cluster分片策略,是用來解決key存儲位置的。
集群將整個數據庫分為16384個槽位slot,所有key-value數據都存儲在這些slot中的某一個上。一個slot槽位可以存放多個數據,key的槽位計算公式為:slot_number=crc16(key)%16384,其中crc16為16位的循環冗余校驗和函數。
集群中的每個主節點都可以處理0個至16383個槽,當16384個槽都有某個節點在負責處理時,集群進入上線狀態,並開始處理客戶端發送的數據命令請求。
1.6 集群redirect轉向
由於Redis集群無中心節點,請求會隨機發給任意主節點;
主節點只會處理自己負責槽位的命令請求,其它槽位的命令請求,該主節點會返回客戶端一個轉向錯誤;
客戶端根據錯誤中包含的地址和端口重新向正確的負責的主節點發起命令請求。
1.7 集群搭建
1.7.1 准備工作
(1)安裝ruby環境
redis集群管理工具redis-trib.rb依賴ruby環境,首先需要安裝ruby環境:
yum -y install ruby yum -y install rubygems |
(2)安裝ruby和redis的接口程序
拷貝redis-3.0.0.gem至/usr/local下,執行安裝:
gem install /usr/local/redis-3.0.0.gem |
1.7.2 集群規划
(1)Redis集群最少需要6個節點,可以分布在一台或者多台主機上。
本教案在一台主機上創建偽分布式集群,不同的端口表示不同的redis節點,如下:
主節點:192.168.56.3:7001 192.168.56.3:7002 192.168.56.3:7003
從節點:192.168.56.3:7004 192.168.56.3:7005 192.168.56.3:7006
(2)在/usr/local/redis下創建redis-cluster目錄,其下創建7001、7002。。7006目錄,如下:
(3)將redis解壓路徑下的配置文件redis.conf,依次拷貝到每個700X目錄內,並修改每個700X目錄下的redis.conf配置文件:
必選配置: port 700X bind 192.168.23.3 cluster-enabled yes 建議配置: daemonized yes logfile /usr/local/redis/redis-cluster/700X/node.log |
1.7.3 啟動每個結點redis服務
依次以700X下的redis.conf,啟動redis節點。(必須指定redis.conf文件)
redis-server /usr/local/redis/redis-cluster/700X/redis.conf |
1.7.4 執行創建集群命令
進入到redis源碼存放目錄redis/redis-4.10.3/src下,執行redis-trib.rb,此腳本是ruby腳本,它依賴ruby環境。
./redis-trib.rb create --replicas 1 192.168.159.10:7001 192.168.159.10:7002 192.168.159.10:7003 192.168.159.10:7004 192.168.159.10:7005 192.168.159.10:7006 |
創建過程如下:
1.7.5 查詢集群信息
集群創建成功登陸任意redis結點查詢集群中的節點情況。
./redis-cli -c -h 192.168.56.3 -p 7001
說明:./redis-cli -c -h 192.168.56.3 -p 7001 ,其中:
-c表示以集群方式連接redis, -h指定ip地址, -p指定端口號
cluster nodes 查詢集群結點信息; cluster info 查詢集群狀態信。 |