86 redis集群分片之3主集群搭建
3主3從redis集群配置
找3臺真實虛擬機,各自新建
????????m?dir -p /myredis/cluster
新建6個獨立的redis實例服務
????????IP:192.168.111.175+端口6381/端口6382
? ? ? ? ? ? ? ? vim /myredis/cluster/redisCluster6381.conf
bind 0.0.0.0
daemonize yes
protected-mode no
port 6381
logfile "/myredis/cluster/cluster6381.log'
pidfile /myredis/cluster6381.pid
dir /myredis/cluster
dbfilename dump6381.rdb
appendonly yes
appendfilename "appendonly6381.aof"
requirepass 111111
masterauth 111111cluster-enabled yes
cluster-config-file nodes-6381.conf
cluster-node-timeout 5000
cluster-enabled yes? //打開集群
cluster-config-file nodes-6381.conf? //聲明集群配置文件
cluster-node-timeout 5000 //集群之間的超時時間5s
????????????????vim /myredis/cluster/redisCluster6382.conf
????????IP:192.168.111.172+端口6383/端口6384
????????IP:192.168.111.174+端口6385/端口6386
? ? ? ? 三主三從:
通過redis-cli命令為6臺機器構建集群關系
啟動6臺redis機器實例
后面有[cluster]告訴你這是以集群方式啟動的
構建主從的關系命令
--cluster create以集群形式創建
-- cluster-replicas 1 表示為每個master創建一個slave節點
集群聯通成功后會產生nodes-6381.conf和nodes-6382.conf
鏈接進入6381作為切入點,查看并檢驗集群狀態
info replication? ? ? ? 查看主從狀態
cluster nodes? ? ? ? 查看集群節點之間的關系
cluster info? ? ? ??展示關于節點、集群健康狀態、槽位、配置等的摘要信息。
88 redis集群分片之3主3從集群讀寫
當前連接6381 發現沒有k1但有k2。set k1告訴你應該在6385
但在6385中可以set k1但卻不能set k2,告訴你k2在6381
為什么報錯?
如何解決
防止路由失效加參數-c并新增兩個key
重新連接,記得加-c,-c的含義:開啟客戶端的 自動重定向支持(cluster support / follow MOVED/ASK redirects)
此時在6381連接的redis中set k1 v1會重定向到6385連接的redis
如何查看某個key屬于哪個槽位
CLUSTER KEYSLOT k1
根據分片,12706應該落在6385上
89 redis集群分片之主從容錯切換
主從容錯切換遷移案例
容錯切換遷移
- 主6381和從機切換,先停止主機6381
-
6381主機停了,對應的真實從機6384會不會上位? 會! 目前是3主2從
-
- 再次查看集群信息
- 6384變為主機且能夠正常使用
- 隨后,6381原來的主機回來了,是否會上位?
- 不會,并且以從節點形式回歸
集群不保證數據一致性,一定會有數據丟失情況
Redis集群不保證強一致性,這意味著在特定的條件下,Redis集群可能會丟掉一些被系統收到的寫入請求命令
手動故障轉移or節點從屬調整該如何處理
上面一換后6381、6384主從對調了,和原始設計圖不一樣了,該如何調換回去?
重新登陸6381機器
常用命令?CLUSTER FAILOVER
? ? ? ? 此時6381重新變為主機,6384變為6381的從機