服務器:node
Master: 192.168.1.200 192.168.1.202 192.168.1.203redis
Slave: 192.168.1.206 192.168.1.207 192.168.1.208算法
全部服務器已編譯安裝redisvim
1、準備redis-cluster集羣環境:ruby
yum install -y ruby服務器
yum install -y rubygemsapp
gem install redis //速度很慢ide
2、建立集羣:測試
1.集羣配置參數ui
cluster-enabled <yes/no> //是否啓用集羣
cluster-config-file <filename>
//指定一個文件,由集羣自動維護,用於保存集羣相關的信息
cluster-node-timeout <milliseconds> //節點超時時間,單位爲毫秒
cluster-slave-validity-factor <factor>
//舉例:若是設置超時時間爲5秒,factor爲10.當master宕機後,若是slave節點與該master節點斷開時間超過50秒(即5*10)的時候,該slave不會被選舉爲master
cluster-migration-barrier <count>
//舉例,若是設置爲2,表示master後面至少要維持2個slave,多餘的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
② 建立集羣
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
3. 簡單測試
redis-cli -c -h192.168.1.200 -p 6379
//使用-c選項,能夠自動切換到其餘節點上
redis-cli -h192.168.1.200 -p 6379 //指定訪問200節點,不自動切換
redis-cli -h192.168.1.206 -p 6379 //指定訪問slave節點
3、測試故障轉移:
1.關閉203節點
2. 重啓203節點
3. 關閉並重置203節點
4. 移除203節點
① 中止全部節點上的redis服務
略
② 修改各節點的nodes.conf
vim nodes.conf
③ 重啓全部redis服務
5. 重建203節點
①啓動redis服務
略
②添加203節點
redis-trib.rbadd-node 192.168.1.203:6379192.168.1.200:6379
//能夠經過集羣內任一節點添加新節點
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能夠指定做爲哪個master的slave
③ 關閉208節點
4、集羣擴容:
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
redis-trib.rbadd-node --slave --master-id 0996e2a2cf52fab07f85cfdd729573915ce55359 192.168.1.205:6379 192.168.1.200:6379
//指定爲204節點的slave
3. 從新分配槽位
redis-trib.rbrebalance --use-empty-masters 192.168.1.200:6379
//讓空節點參與rebalance
redis-trib.rbreshard 192.168.1.200:6379 //能夠手動選擇遷移多少槽位
5、手動降級Master:
1.使用cli登陸207(即202節點的slave節點)
redis-cli -h192.168.1.207 -p 6379
6、測試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
2. 新添加204,205節點,都做爲200節點的slave
3.移除 202節點的slave
附:
計算key的插槽值:
key的有效部分使用CRC16算法計算出哈希值,再將哈希值對16384取餘,獲得插槽值。
什麼是有效部分?
一、若是key中包含了{符號,且在{符號後存在}符號,而且{和}之間至少有一個字符,則有效部分是指{和}之間的部分;
key={hello}_tatao的有效部分是hello
二、若是不知足上一條狀況,整個key都是有效部分;
key=hello_taotao的有效部分是所有