redis-cluster

服務器:

Master: 192.168.1.200   192.168.1.202   192.168.1.203

Slave:  192.168.1.206   192.168.1.207   192.168.1.208

所有服務器已編譯安裝redis

 

 

一、準備redis-cluster集羣環境:

yum install -y ruby

yum install  -y rubygems

gem install redis             //速度很慢

 

 

 

二、創建集羣:

1.集羣配置參數

cluster-enabled <yes/no>               //是否啓用集羣

 

cluster-config-file <filename>        

//指定一個文件,由集羣自動維護,用於保存集羣相關的信息

 

cluster-node-timeout <milliseconds>       //節點超時時間,單位爲毫秒

 

cluster-slave-validity-factor <factor>

//舉例:如果設置超時時間爲5秒,factor10.master宕機後,如果slave節點與該master節點斷開時間超過50秒(即5*10)的時候,該slave不會被選舉爲master

 

cluster-migration-barrier <count>

//舉例,如果設置爲2,表示master後面至少要維持2slave,多餘的slave可以被遷移到其他孤立的master

 

cluster-require-full-coverage <yes/no>

//槽位是否全覆蓋,即當有master宕機且沒有slave可以頂替的情況下是否還允許集羣繼續工作

 

 

實驗中配置:

bind 192.168.1.200

cluster-config-file nodes.conf

cluster-node-timeout 15000

cluster-enabled yes

appendonly yes

 

 

2.  創建集羣

  各個節點啓動redis

redis-server /etc/redis/redis.conf

wKioL1hyTTKCxxoMAAFpsAh8NRM042.png

 

 

  創建集羣

redis-trib.rbcreate --replicas 1 192.168.1.200:6379 192.168.1.202:6379 192.168.1.203:6379192.168.1.206:6379 192.168.1.207:6379 192.168.1.208:6379

wKiom1hyTVXiFzOWAAPJPDBCkPo416.png

 

wKiom1hyTcPi6ArGAACMSzdno8I889.png

 wKioL1hyTaXgzf5GAAETifK5Sps679.png

 


 

 

3.  簡單測試

redis-cli -c -h192.168.1.200 -p 6379   

//使用-c選項,可以自動切換到其他節點上

 

wKioL1hyTfrSvSv0AAGUPzSl1LI143.png

 

 

redis-cli -h192.168.1.200 -p 6379   //指定訪問200節點,不自動切換

wKiom1hyThaQh8AuAAFRhq0HDZY398.png

 

 

 

redis-cli -h192.168.1.206 -p 6379        //指定訪問slave節點

 

wKioL1hyTjDToGTiAACd-qGGJKs296.png

 

 

wKiom1hyTkvCu_tUAAF1svyBnc8117.png

 

 

三、測試故障轉移:

1.關閉203節點

wKioL1hyTn-CArbaAAC7aIqv5iQ426.png

 

wKiom1hyTpmAZainAABuloNHIp4976.png

 

 

2. 重啓203節點

wKioL1hyTq_zxZCfAADBbBuFpSA454.png

 

 

3. 關閉並重置203節點

wKiom1hyTt2xILd6AAC1dP4--4E459.png

 

 

4. 移除203節點

wKioL1hyTxLi_D0pAADJa0zWOLc786.png

停止所有節點上的redis服務

 

修改各節點的nodes.conf

vim nodes.conf

wKiom1hyTzGyfuW0AACsnxQ8IE0293.png

 

重啓所有redis服務

wKioL1hyT0vAbXqHAACPdfWEphA532.png

 

 

5. 重建203節點

啓動redis服務

 

添加203節點

redis-trib.rbadd-node 192.168.1.203:6379192.168.1.200:6379

//可以通過集羣內任一節點添加新節點

 

wKiom1hyT3uBJEoTAAGdsyfwpy8994.png

redis-trib.rbdel-node 192.168.1.203:6379 4246aef39ae381bca47835132902293d4bac6b00

//刪除203節點重新以slave身份添加,還需要刪除203節點上的nodes.conf文件

 

redis-trib.rbadd-node --slave 192.168.1.203:6379 192.168.1.200:6379

//使用--master-id可以指定作爲哪一個masterslave

wKioL1hyT7vhDOHOAADLEd-9Phg685.png

 

關閉208節點

wKiom1hyT9HBb_L9AACy76caXdg942.png

 

wKioL1hyT-nBPcarAACe4IdKy4I910.png

 

 

四、集羣擴容:

1.準備兩個redis節點

Master:  192.168.1.204   

Slave:   192.168.1.205

 

 

2. 加入兩個節點

redis-trib.rbadd-node 192.168.1.204:6379 192.168.1.200:6379

wKioL1hyUBij-ghfAAFcseZDzZw521.png

 

redis-trib.rbadd-node --slave --master-id 0996e2a2cf52fab07f85cfdd729573915ce55359  192.168.1.205:6379 192.168.1.200:6379

//指定爲204節點的slave

 

 

3.  重新分配槽位

wKiom1hyUD2Aq_-oAADvotG64GI244.png

 

redis-trib.rbrebalance --use-empty-masters 192.168.1.200:6379

//讓空節點參與rebalance

 

wKiom1hyUFrQvfZEAADsaYpLaHM955.png

 

redis-trib.rbreshard 192.168.1.200:6379        //可以手動選擇遷移多少槽位

 

 

五、手動降級Master:

wKioL1hyUJ2gcprvAAED7w-cg7Q971.png

1.使用cli登錄207(即202節點的slave節點)

redis-cli -h192.168.1.207 -p 6379

 

wKioL1hyULOi_AtZAABwyUSAj2s406.png

 

wKiom1hyUMmhA3paAAD687MWpog386.png

 

 

六、測試slave節點的自動遷移:

1.重新準備redis集羣

Master: 192.168.1.200   192.168.1.202   192.168.1.203

Slave:  192.168.1.206   192.168.1.207   192.168.1.208

 

 

bind 192.168.1.200

cluster-config-filenodes.conf

cluster-node-timeout15000

cluster-enabled yes

appendonly yes

cluster-migration-barrier1

//指定每個master後面應該有一個slave

 

wKiom1hyUPnRSD8UAADJ0Lsb3Fo103.png

 

2. 新添加204,205節點,都作爲200節點的slave

wKioL1hyURvzl4BzAAD5Fi3i2g8261.png

 

 

3.移除 202節點的slave

wKiom1hyUTzSLILaAADXgLg8AwY571.png

 

 

 

 

 

 

附:

計算key的插槽值:

key的有效部分使用CRC16算法計算出哈希值,再將哈希值對16384取餘,得到插槽值。

 

什麼是有效部分?

1、如果key中包含了{符號,且在{符號後存在}符號,並且{和}之間至少有一個字符,則有效部分是指{和}之間的部分;

  1. key={hello}_tatao的有效部分是hello

2、如果不滿足上一條情況,整個key都是有效部分;

  1. key=hello_taotao的有效部分是全部

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章