目錄
一、環境規劃
二、基礎環境
1、創建配置目錄
2、生成配置文件
3、修改監聽端口
4、修改數據目錄
5、修改日志目錄
6、修改PID文件目錄
7、修改保護模式
8、修改進程運行模式
9、修改監聽地址
10、生成集群配置
11、啟動服務
三、構建集群
1、將其他節點加入集群
2、分配slot
3、建立主從關系
4、集群操作命令
四、故障恢復
1、模式故障
2、故障恢復
3、cluster failover命令
yum安裝redis實現Cluster集群案例
1、更改配置文件
2、將其他節點加入集群
3、分配slot
4、建立主從關系
5、查看集群部署情況
6、驗證不同節點管理不同槽位
7、模擬主節點出故障,從節點接替管理槽位
8、手動觸發主從切換
一、環境規劃
主機名 | IP地址 | 端口 | 描述 |
---|---|---|---|
redis-master | 192.168.166.9 | 6379 | redis-master01 |
6381 | redis-master02 | ||
6383 | redis-master03 | ||
redis-slave | 192.168.166.9 | 6380 | redis-slave01 |
6382 | redis-slave02 | ||
6384 | redis-slave03 |
二、基礎環境
1、創建配置目錄
mkdir /etc/redis ? mv /etc/redis.conf /etc/redis/6379.conf ? cd /etc/redis cat 6379.com bind 192.168.166.9 protected-mode no port 6379 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize yes supervised systemd pidfile /var/run/redis_6379.pid loglevel notice logfile /var/log/redis/redis.log databases 16 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename "dump.rdb" dir /var/lib/redis replica-serve-stale-data yes replica-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-disable-tcp-nodelay no replica-priority 100 lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly no appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble yes lua-time-limit 5000 slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-size -2 list-compress-depth 0 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 stream-node-max-bytes 4096 stream-node-max-entries 100 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit replica 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 dynamic-hz yes aof-rewrite-incremental-fsync yes rdb-save-incremental-fsync yes ?
2、生成配置文件
[root@localhost redis]# for i in {6380..6384};do cp ./6379.conf ${i}.conf ;done [root@localhost redis]# ls 6379.conf ?6380.conf ?6381.conf ?6382.conf ?6383.conf ?6384.conf
3、修改監聽端口
[root@localhost redis]# for i in {6380..6384};do sed -i "s/port 6379/port ${i}/" ./${i}.conf;done [root@localhost redis]# for i in {6380..6384};do grep "^port" ./${i}.conf;done port 6380 port 6381 port 6382 port 6383 port 6384
4、修改數據目錄
[root@localhost redis]# for i in {6379..6384};do sed -i "s#dir /var/lib/redis#dir /var/lib/redis/${i}#" ./${i}.conf;done [root@localhost redis]# for i in {6379..6384};do grep "^di" ./${i}.conf;done dir /var/lib/redis/6379 dir /var/lib/redis/6380 dir /var/lib/redis/6381 dir /var/lib/redis/6382 dir /var/lib/redis/6383 dir /var/lib/redis/6384
5、修改日志目錄
[root@localhost redis]# for i in {6379..6384};do sed -i "s#logfile /var/log/redis/redis.log#logfile /var/log/redis/${i}.log#" ./${i}.conf;done [root@localhost redis]# for i in {6379..6384};do grep "^logfile" ./${i}.conf;done logfile /var/log/redis/6379.log logfile /var/log/redis/6380.log logfile /var/log/redis/6381.log logfile /var/log/redis/6382.log logfile /var/log/redis/6383.log logfile /var/log/redis/6384.log
6、修改PID文件目錄
[root@localhost redis]# for i in {6379..6384};do sed -i "s#pidfile /var/run/redis_6379.pid#pidfile /var/run/redis/${i}.pid#" ${i}.conf;done [root@localhost redis]# for i in {6379..6384};do grep "^pidfile" ${i}.conf;done pidfile /var/run/redis/6379.pid pidfile /var/run/redis/6380.pid pidfile /var/run/redis/6381.pid pidfile /var/run/redis/6382.pid pidfile /var/run/redis/6383.pid pidfile /var/run/redis/6384.pid
7、修改保護模式
[root@localhost redis]# for i in {6379..6384};do sed -i "s#protected-mode yes#protected-mode no#" ${i}.conf;done [root@localhost redis]# for i in {6379..6384};do grep "^protected-mode" ${i}.conf;done protected-mode no protected-mode no protected-mode no protected-mode no protected-mode no protected-mode no
8、修改進程運行模式
[root@localhost redis]# for i in {6379..6384};do sed -i "s#daemonize no#daemonize yes#" ${i}.conf;done [root@localhost redis]# for i in {6379..6384};do grep "^daemonize" ${i}.conf;done daemonize yes daemonize yes daemonize yes daemonize yes daemonize yes daemonize yes
9、修改監聽地址
[root@localhost redis]# for i in {6379..6384};do sed -i "s#bind 127.0.0.1#bind 192.168.166.9#" ${i}.conf;done [root@localhost redis]# for i in {6379..6384};do grep "^bind" ${i}.conf;done bind 192.168.166.9 bind 192.168.166.9 bind 192.168.166.9 bind 192.168.166.9 bind 192.168.166.9 bind 192.168.166.9
10、生成集群配置
[root@localhost ~]# cd /var/lib/redis/ [root@localhost redis]# mkdir {6379..6384} [root@localhost redis]# ls 6379 ?6380 ?6381 ?6382 ?6383 ?6384 ? [root@localhost ~]# cd /var/run/ [root@localhost run]# mkdir redis [root@localhost run]# cd /etc/redis [root@localhost redis]# for i in {6379..6384};do echo -e "cluster-enabled yes\ncluster-config-file nodes-${i}.conf\ncluster-node-timeout 15000" >> ${i}.conf;done [root@localhost redis]# for i in {6379..6384};do tail -3 ${i}.conf;done cluster-enabled yes cluster-config-file nodes-6379.conf cluster-node-timeout 15000 cluster-enabled yes cluster-config-file nodes-6380.conf cluster-node-timeout 15000 cluster-enabled yes cluster-config-file nodes-6381.conf cluster-node-timeout 15000 cluster-enabled yes cluster-config-file nodes-6382.conf cluster-node-timeout 15000 cluster-enabled yes cluster-config-file nodes-6383.conf cluster-node-timeout 15000 cluster-enabled yes cluster-config-file nodes-6384.conf cluster-node-timeout 15000 ?
11、啟動服務
[root@localhost redis]# for((i=6379;i<=6384;i++));do redis-server /etc/redis/${i}.conf;done [root@localhost redis]# netstat -anptu | grep redis tcp ? ? ? ?0 ? ? ?0 192.168.166.9:16380 ? 0.0.0.0:* ? ? ? ? ? ? ? LISTEN ? ? ?3154/redis-server 1 tcp ? ? ? ?0 ? ? ?0 192.168.166.9:16381 ? 0.0.0.0:* ? ? ? ? ? ? ? LISTEN ? ? ?3156/redis-server 1 tcp ? ? ? ?0 ? ? ?0 192.168.166.9:16382 ? 0.0.0.0:* ? ? ? ? ? ? ? LISTEN ? ? ?3160/redis-server 1 tcp ? ? ? ?0 ? ? ?0 192.168.166.9:16383 ? 0.0.0.0:* ? ? ? ? ? ? ? LISTEN ? ? ?3166/redis-server 1 tcp ? ? ? ?0 ? ? ?0 192.168.166.9:16384 ? 0.0.0.0:* ? ? ? ? ? ? ? LISTEN ? ? ?3170/redis-server 1 tcp ? ? ? ?0 ? ? ?0 192.168.166.9:6379 ? ?0.0.0.0:* ? ? ? ? ? ? ? LISTEN ? ? ?3150/redis-server 1 tcp ? ? ? ?0 ? ? ?0 192.168.166.9:6380 ? ?0.0.0.0:* ? ? ? ? ? ? ? LISTEN ? ? ?3154/redis-server 1 tcp ? ? ? ?0 ? ? ?0 192.168.166.9:6381 ? ?0.0.0.0:* ? ? ? ? ? ? ? LISTEN ? ? ?3156/redis-server 1 tcp ? ? ? ?0 ? ? ?0 192.168.166.9:6382 ? ?0.0.0.0:* ? ? ? ? ? ? ? LISTEN ? ? ?3160/redis-server 1 tcp ? ? ? ?0 ? ? ?0 192.168.166.9:6383 ? ?0.0.0.0:* ? ? ? ? ? ? ? LISTEN ? ? ?3166/redis-server 1 tcp ? ? ? ?0 ? ? ?0 192.168.166.9:6384 ? ?0.0.0.0:* ? ? ? ? ? ? ? LISTEN ? ? ?3170/redis-server 1 tcp ? ? ? ?0 ? ? ?0 192.168.166.9:16379 ? 0.0.0.0:* ? ? ? ? ? ? ? LISTEN ? ? ?3150/redis-server 1
三、構建集群
以下操作需要登錄某個節點的redis數據庫
1、將其他節點加入集群
[root@localhost redis]# redis-cli -h 192.168.166.9 ? 192.168.166.9:6379> CLUSTER MEET 192.168.166.9 6380 OK 192.168.166.9:6379> CLUSTER MEET 192.168.166.9 6381 OK 192.168.166.9:6379> CLUSTER MEET 192.168.166.9 6382 OK 192.168.166.9:6379> CLUSTER MEET 192.168.166.9 6383 OK 192.168.166.9:6379> CLUSTER MEET 192.168.166.9 6384 OK ? ########或者終端執行如下指令##### for i in {6380..6384};do redis-cli -h 192.168.166.9 -p 6379 cluster meet 192.168.166.9 $i;done
2、分配slot
也是在規劃誰是master節點
[root@localhost redis]# redis-cli -h 192.168.166.9 -p 6379 cluster addslots {0..5461} OK [root@localhost redis]# redis-cli -h 192.168.166.9 -p 6381 cluster addslots {5462..10922} OK [root@localhost redis]# redis-cli -h 192.168.166.9 -p 6383 cluster addslots {10923..16383} OK
3、建立主從關系
查看所有群集節點
[root@localhost redis]# redis-cli -h 192.168.166.9 -p 6379 cluster nodes 69ed2c9d99ac83e52851d67e2597927142f47ebf 192.168.166.9:6381 master - 0 1709263044558 5 connected 5462-10922 c3f6d16785ab3de1b88f8ddb8e5bea3e7c6de5d4 192.168.166.9:6382 master - 0 1709263043555 0 connected a8b96d687e681dd4c606e6959468b2bc1a5b0b1f 192.168.166.9:6379 myself,master - 0 0 2 connected 0-5461 bbdc8d353e2afa87d3d1430eecbbe436206fd213 192.168.166.9:6384 master - 0 1709263042550 4 connected 20a5e5bb03ab273fea553b3ccafeba01e83a6eb2 192.168.166.9:6380 master - 0 1709263043052 1 connected 98fe02fecd9f99d2d220cbf3de921063a9413428 192.168.166.9:6383 master - 0 1709263045565 3 connected 10923-16383 ?
查看master節點ID
[root@localhost redis]# redis-cli -h 192.168.166.9 -p 6380 cluster replicate a8b96d687e681dd4c606e6959468b2bc1a5b0b1f OK [root@localhost redis]# redis-cli -h 192.168.166.9 -p 6382 cluster replicate 69ed2c9d99ac83e52851d67e2597927142f47ebf OK [root@localhost redis]# redis-cli -h 192.168.166.9 -p 6384 cluster replicate 98fe02fecd9f99d2d220cbf3de921063a9413428 OK ?
4、集群操作命令
命令 | 作用 |
---|---|
cluster info | 打印集群的信息 |
cluster nodes | 列出集群當前已知的所有節點( node),以及這些節點的相關信息。 |
cluster meet <ip> <port> | 將 ip 和 port 所指定的節點添加到集群當中,讓它成為集群的一份子。 |
cluster forget <node_id> | 從集群中移除 node_id 指定的節點。 |
cluster replicate <master_node_id> | 將當前從節點設置為 node_id 指定的master節點的slave節點。只能針對slave節點操作。 |
cluster saveconfig | 將節點的配置文件保存到硬盤里面。 |
cluster addslots <slot> [slot ...] | 將一個或多個槽( slot)指派( assign)給當前節點。 |
cluster delslots <slot> [slot ...] | 移除一個或多個槽對當前節點的指派。 |
cluster flushslots | 移除指派給當前節點的所有槽,讓當前節點變成一個沒有指派任何槽的節點。 |
cluster setslot <slot> node <node_id> | 將槽 slot 指派給 node_id 指定的節點,如果槽已經指派給另一個節點,那么先讓另一個節點刪除該槽>,然后再進行指派。 |
cluster setslot <slot> migrating <node_id> | 將本節點的槽 slot 遷移到 node_id 指定的節點中。 |
cluster setslot <slot> importing <node_id> | 從 node_id 指定的節點中導入槽 slot 到本節點。 |
cluster setslot <slot> stable | 取消對槽 slot 的導入( import)或者遷移( migrate)。 |
cluster keyslot <key> | 計算鍵 key 應該被放置在哪個槽上。 |
cluster countkeysinslot <slot> | 返回槽 slot 目前包含的鍵值對數量。 |
cluster getkeysinslot <slot> <count> | 返回 count 個 slot 槽中的鍵 。 |
cluster reset | 重置集群命令 |
四、故障恢復
1、模式故障
kill -9 PID #殺死其中一個redis進程
2、故障恢復
-
啟動殺死的redis進程
-
通過 cluster nodes查看節點狀態
-
通過 cluster info 查看集群狀態
-
登錄所有從節點
3、cluster failover命令
Redis Cluster模式下的cluster failover(集群故障轉移)的作用是確保Redis集群在主節點(Master)發生故障或不可用的情況下,能夠自動將主節點的工作負載轉移到備用節點(Slave)上,并使備用節點成為新的主節點,保證Redis集群的高可用性和持續可用性。
當主節點發生故障時,Redis Cluster會自動檢測到主節點的不可用,并從備用節點中選出一個合適的備用節點作為新的主節點。該備用節點經過選舉后,會接管原主節點的數據和工作負載,并開始對外提供服務。集群的其它節點也會更新集群拓撲信息,以便客戶端能夠正確地路由請求到新的主節點。
cluster failover的作用主要包括:
-
高可用性:當主節點發生故障時,能夠及時切換到備用節點,保證Redis集群的繼續正常運行,避免因單點故障而導致服務不可用。
-
數據保護:在主節點發生故障時,能夠將數據從主節點復制到備用節點,并在故障轉移時將備用節點提升為新的主節點,從而保證數據的持久性和一致性。
-
自動化管理:集群故障轉移是自動化過程,無需人工干預,減少了對系統運維的依賴,并提高了系統的可靠性和可維護性。
yum安裝redis實現Cluster集群案例
yum安裝
準備兩臺主機(ip分別為192.168.58.180、192.168.58.182、192.168.58.183)
1、更改配置文件
####192.168.58.180 ##安裝redis-server [root@localhost ~]# yum install -y redis-server ? ##更改配置文件 [root@localhost ~]# vim /etc/redis.conf ##找到bind 127.0.0.1 -::1并把它改為: bind 192.168.58.180 ? ##找到protected-mode no把它改為: protected-mode no ? ##找到daemonize no把它改為: daemonize yes ? ##在最后加上 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 15000 ? [root@localhost ~]# cp /etc/reddis.conf /etc/redis_6380.conf [root@localhost ~]# vim /etc/redis_6380.conf ##在文件里面使用改命令,把6379全部改為6380 :%s/6379/6380/g ? ##在最后把cluster-config-file nodes.conf改為: cluster-config-file nodes_6380.conf ? [root@localhost ~]# ps aux | grep redis root ? ? 548851 0.0 0.2 21992 7804 pts/0 ? S+ ? 16:36 ? 0:00 grep --color=auto redis ? ##注意要用絕對路徑啟動服務 [root@localhost ~]# redis-server /etc/redis.conf [root@localhost ~]# redis-server /etc/redis_6380.conf [root@localhost ~]# !ps ps aux | grep redis root ? ? 549663 0.1 0.3 154880 12172 ? ? ? ? Ssl 16:38 ? 0:00 redis-server 192.168.58.180:6379 [cluster] root ? ? 549724 0.2 0.3 154880 12136 ? ? ? ? Ssl 16:38 ? 0:00 redis-server 192.168.58.180:6380 [cluster] root ? ? 549839 0.0 0.2 21992 7908 pts/0 ? S+ ? 16:38 ? 0:00 grep --color=auto redis ? ?
####192.168.58.182 ##安裝redis-server [root@localhost ~]# yum install -y redis-server ? ##更改配置文件 [root@localhost ~]# vim /etc/redis.conf ##找到bind 127.0.0.1 -::1并把它改為: bind 192.168.58.182 ? ##找到protected-mode no把它改為: protected-mode no ? ##找到daemonize no把它改為: daemonize yes ? ##在最后加上 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 15000 ? [root@localhost ~]# cp /etc/reddis.conf /etc/redis_6380.conf [root@localhost ~]# vim /etc/redis_6380.conf ##在文件里面使用改命令,把6379全部改為6380 :%s/6379/6380/g ? ##在最后把cluster-config-file nodes.conf改為: cluster-config-file nodes_6380.conf ? [root@localhost redis]# redis-server /etc/redis.conf [root@localhost redis]# redis-server /etc/redis_6380.conf ?
####192.168.58.183 ##安裝redis-server [root@localhost ~]# yum install -y redis-server ? ##更改配置文件 [root@localhost ~]# vim /etc/redis.conf ##找到bind 127.0.0.1 -::1并把它改為: bind 192.168.58.183 ? ##找到protected-mode no把它改為: protected-mode no ? ##找到daemonize no把它改為: daemonize yes ? ##在最后加上 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 15000 ? [root@localhost ~]# cp /etc/reddis.conf /etc/redis_6380.conf [root@localhost ~]# vim /etc/redis_6380.conf ##在文件里面使用改命令,把6379全部改為6380 :%s/6379/6380/g ? ##在最后把cluster-config-file nodes.conf改為: cluster-config-file nodes_6380.conf ? [root@localhost redis]# redis-server /etc/redis.conf [root@localhost redis]# redis-server /etc/redis_6380.conf ?
2、將其他節點加入集群
####192.168.58.180 [root@localhost ~]# redis-cli -h 192.168.58.180 192.168.58.180:6379> cluster nodes 83025a16978dbd24bed4d7c4404c247e3b267f43 :6379@16379 myself,master - 0 0 0 connected ? 192.168.58.180:6379> CLUSTER MEET 192.168.58.180 6380 OK 192.168.58.180:6379> cluster nodes ab9daba33fd7aba28734f3c43734aec5d42944a6 192.168.58.180:6380@16380 master - 0 1752223123275 0 connected 83025a16978dbd24bed4d7c4404c247e3b267f43 192.168.58.180:6379@16379 myself,master - 0 0 1 connected ? 192.168.58.180:6379> CLUSTER MEET 192.168.58.182 6379 OK 192.168.58.180:6379> CLUSTER MEET 192.168.58.182 6380 OK 192.168.58.180:6379> CLUSTER MEET 192.168.58.183 6379 OK 192.168.58.180:6379> CLUSTER MEET 192.168.58.183 6380 OK 192.168.58.180:6379> cluster nodes d9e5540b8e54d4340903380998bf1dacad77c990 192.168.58.183:6380@16380 master - 0 1752223229129 0 connected 8b426ac7d752f8f65ecf035b555b8ef9465cd517 192.168.58.183:6379@16379 master - 0 1752223231304 6 connected ab9daba33fd7aba28734f3c43734aec5d42944a6 192.168.58.180:6380@16380 master - 0 1752223232466 0 connected 83025a16978dbd24bed4d7c4404c247e3b267f43 192.168.58.180:6379@16379 myself,master - 0 1752223228000 1 connected 0b2ffa9b8510eeebffddbdf242d968b784768891 192.168.58.182:6379@16379 master - 0 1752223231000 2 connected 2ef3226f071ca16473adc3edf17869b266b91773 192.168.58.182:6380@16380 master - 0 1752223227919 3 connected 192.168.58.180:6379> exit
3、分配slot
####192.168.58.180 ##分配slot(也是在規劃誰是master節點及管理的槽位) [root@localhost ~]# redis-cli -h 192.168.58.180 -p 6379 cluster addslots {0..5461} OK [root@localhost ~]# redis-cli -h 192.168.58.182 -p 6381 cluster addslots {5462..10922} Could not connect to Redis at 192.168.58.182:6381: Connection refused [root@localhost ~]# redis-cli -h 192.168.58.182 -p 6379 cluster addslots {5462..10922} OK [root@localhost ~]# redis-cli -h 192.168.58.183 -p 6379 cluster addslots {10923..16383} OK [root@localhost ~]# redis-cli -h 192.168.58.180 192.168.58.180:6379> cluster nodes d9e5540b8e54d4340903380998bf1dacad77c990 192.168.58.183:6380@16380 master - 0 1752223535303 0 connected 8b426ac7d752f8f65ecf035b555b8ef9465cd517 192.168.58.183:6379@16379 master - 0 1752223534145 6 connected 10923-16383 ab9daba33fd7aba28734f3c43734aec5d42944a6 192.168.58.180:6380@16380 master - 0 1752223533000 7 connected 83025a16978dbd24bed4d7c4404c247e3b267f43 192.168.58.180:6379@16379 myself,master - 0 1752223527000 1 connected 0-5461 0b2ffa9b8510eeebffddbdf242d968b784768891 192.168.58.182:6379@16379 master - 0 1752223536464 2 connected 5462-10922 2ef3226f071ca16473adc3edf17869b266b91773 192.168.58.182:6380@16380 master - 0 1752223537591 3 connected 192.168.58.180:6379> exit
4、建立主從關系
####192.168.58.180 ##用主的節點ID建立一一對應的主從關系 [root@localhost ~]# redis-cli -h 192.168.58.180 -p 6380 cluster replicate 83025a16978dbd24bed4d7c4404c247e3b267f43 OK [root@localhost ~]# redis-cli -h 192.168.58.180 192.168.58.180:6379> cluster nodes d9e5540b8e54d4340903380998bf1dacad77c990 192.168.58.183:6380@16380 master - 0 1752223782000 0 connected 8b426ac7d752f8f65ecf035b555b8ef9465cd517 192.168.58.183:6379@16379 master - 0 1752223782076 6 connected 10923-16383 ab9daba33fd7aba28734f3c43734aec5d42944a6 192.168.58.180:6380@16380 slave 83025a16978dbd24bed4d7c4404c247e3b267f43 0 1752223782428 1 connected 83025a16978dbd24bed4d7c4404c247e3b267f43 192.168.58.180:6379@16379 myself,master - 0 1752223765000 1 connected 0-5461 0b2ffa9b8510eeebffddbdf242d968b784768891 192.168.58.182:6379@16379 master - 0 1752223783575 2 connected 5462-10922 2ef3226f071ca16473adc3edf17869b266b91773 192.168.58.182:6380@16380 master - 0 1752223784731 3 connected 192.168.58.180:6379> exit [root@localhost ~]# redis-cli -h 192.168.58.182 -p 6380 cluster replicate 0b2ffa9b8510eeebffddbdf242d968b784768891 OK [root@localhost ~]# redis-cli -h 192.168.58.183 -p 6380 cluster replicate 8b426ac7d752f8f65ecf035b555b8ef9465cd517 OK ?
5、查看集群部署情況
####192.168.58.180 [root@localhost ~]# redis-cli -h 192.168.58.180 192.168.58.180:6379> cluster nodes d9e5540b8e54d4340903380998bf1dacad77c990 192.168.58.183:6380@16380 slave 8b426ac7d752f8f65ecf035b555b8ef9465cd517 0 1752223872659 6 connected 8b426ac7d752f8f65ecf035b555b8ef9465cd517 192.168.58.183:6379@16379 master - 0 1752223871510 6 connected 10923-16383 ab9daba33fd7aba28734f3c43734aec5d42944a6 192.168.58.180:6380@16380 slave 83025a16978dbd24bed4d7c4404c247e3b267f43 0 1752223874577 1 connected 83025a16978dbd24bed4d7c4404c247e3b267f43 192.168.58.180:6379@16379 myself,master - 0 1752223874000 1 connected 0-5461 0b2ffa9b8510eeebffddbdf242d968b784768891 192.168.58.182:6379@16379 master - 0 1752223873778 2 connected 5462-10922 2ef3226f071ca16473adc3edf17869b266b91773 192.168.58.182:6380@16380 slave 0b2ffa9b8510eeebffddbdf242d968b784768891 0 1752223874915 2 connected
6、驗證不同節點管理不同槽位
####192.168.58.180 ##驗證:不同的槽位放在固定的數值,需要進入對應的節點才能設置鍵值對,否則做出提示讓你到對應的節點設置 192.168.58.180:6379> set a 1 (error) MOVED 15495 192.168.58.183:6379 192.168.58.180:6379> exit ? [root@localhost ~]# redis-cli -h 192.168.58.183 192.168.58.183:6379> set a 1 OK 192.168.58.183:6379> set b 2 (error) MOVED 3300 192.168.58.180:6379 192.168.58.183:6379> exit ? [root@localhost ~]# redis-cli -h 192.168.58.180 192.168.58.180:6379> set b 2 OK 192.168.58.180:6379> exit
7、模擬主節點出故障,從節點接替管理槽位
####192.168.58.180 [root@localhost ~]# ps aux | grep redis root ? ? 549663 0.2 0.3 154880 11896 ? ? ? ? Ssl 16:38 ? 0:03 redis-server 192.168.58.180:6379 [cluster] root ? ? 549724 0.2 0.3 154880 11868 ? ? ? ? Ssl 16:38 ? 0:03 redis-server 192.168.58.180:6380 [cluster] root ? ? 563007 0.0 0.2 21992 7912 pts/0 ? S+ ? 17:00 ? 0:00 grep --color=auto redis [root@localhost ~]# kill 549663 [root@localhost ~]# ps aux | grep redis root ? ? 549724 0.2 0.3 154880 11868 ? ? ? ? Ssl 16:38 ? 0:03 redis-server 192.168.58.180:6380 [cluster] root ? ? 563171 0.0 0.2 21992 8012 pts/0 ? S+ ? 17:00 ? 0:00 grep --color=auto redis ? [root@localhost ~]# redis-cli -h 192.168.58.180 Could not connect to Redis at 192.168.58.180:6379: Connection refused not connected> exit [root@localhost ~]# redis-cli -h 192.168.58.180 -p 6380 192.168.58.180:6380> cluster nodes 0b2ffa9b8510eeebffddbdf242d968b784768891 192.168.58.182:6379@16379 master - 0 1752224473097 2 connected 5462-10922 ab9daba33fd7aba28734f3c43734aec5d42944a6 192.168.58.180:6380@16380 myself,master - 0 1752224417000 8 connected 0-5461 d9e5540b8e54d4340903380998bf1dacad77c990 192.168.58.183:6380@16380 slave 8b426ac7d752f8f65ecf035b555b8ef9465cd517 0 1752224471974 6 connected 83025a16978dbd24bed4d7c4404c247e3b267f43 192.168.58.180:6379@16379 master,fail - 1752224435167 1752224430704 1 disconnected 2ef3226f071ca16473adc3edf17869b266b91773 192.168.58.182:6380@16380 slave 0b2ffa9b8510eeebffddbdf242d968b784768891 0 1752224474256 2 connected 8b426ac7d752f8f65ecf035b555b8ef9465cd517 192.168.58.183:6379@16379 master - 0 1752224470842 6 connected 10923-16383 192.168.58.180:6380> get b "2" 192.168.58.180:6380> exit ? ? ##等原來的192.168.58.180 6379重新連接上,已經從master變為了slave [root@localhost ~]# redis-server /etc/redis.conf [root@localhost ~]# ps aux | grep redis root ? ? 549724 0.2 0.3 154880 11996 ? ? ? ? Ssl 16:38 ? 0:03 redis-server 192.168.58.180:6380 [cluster] root ? ? 564268 0.2 0.3 157952 12048 ? ? ? ? Ssl 17:02 ? 0:00 redis-server 192.168.58.180:6379 [cluster] root ? ? 564383 0.0 0.2 21992 7912 pts/0 ? S+ ? 17:02 ? 0:00 grep --color=auto redis [root@localhost ~]# redis-cli -h 192.168.58.180 -p 6380 192.168.58.180:6380> cluster nodes 0b2ffa9b8510eeebffddbdf242d968b784768891 192.168.58.182:6379@16379 master - 0 1752224565575 2 connected 5462-10922 ab9daba33fd7aba28734f3c43734aec5d42944a6 192.168.58.180:6380@16380 myself,master - 0 1752224558000 8 connected 0-5461 d9e5540b8e54d4340903380998bf1dacad77c990 192.168.58.183:6380@16380 slave 8b426ac7d752f8f65ecf035b555b8ef9465cd517 0 1752224564418 6 connected 83025a16978dbd24bed4d7c4404c247e3b267f43 192.168.58.180:6379@16379 slave ab9daba33fd7aba28734f3c43734aec5d42944a6 0 1752224563299 8 connected 2ef3226f071ca16473adc3edf17869b266b91773 192.168.58.182:6380@16380 slave 0b2ffa9b8510eeebffddbdf242d968b784768891 0 1752224565222 2 connected 8b426ac7d752f8f65ecf035b555b8ef9465cd517 192.168.58.183:6379@16379 master - 0 1752224562181 6 connected 10923-16383 192.168.58.180:6380> exit
8、手動觸發主從切換
####192.168.58.180 ##在 Redis 集群中使用CLUSTER FAILOVER命令手動觸發主從切換 [root@localhost ~]# redis-cli -h 192.168.58.180 -p 6379 192.168.58.180:6379> CLUSTER FAILOVER OK 192.168.58.180:6379> CLUSTER NODES ab9daba33fd7aba28734f3c43734aec5d42944a6 192.168.58.180:6380@16380 slave 83025a16978dbd24bed4d7c4404c247e3b267f43 0 1752224639970 9 connected 0b2ffa9b8510eeebffddbdf242d968b784768891 192.168.58.182:6379@16379 master - 0 1752224642000 2 connected 5462-10922 2ef3226f071ca16473adc3edf17869b266b91773 192.168.58.182:6380@16380 slave 0b2ffa9b8510eeebffddbdf242d968b784768891 0 1752224643000 2 connected 8b426ac7d752f8f65ecf035b555b8ef9465cd517 192.168.58.183:6379@16379 master - 0 1752224642296 6 connected 10923-16383 83025a16978dbd24bed4d7c4404c247e3b267f43 192.168.58.180:6379@16379 myself,master - 0 1752224639000 9 connected 0-5461 d9e5540b8e54d4340903380998bf1dacad77c990 192.168.58.183:6380@16380 slave 8b426ac7d752f8f65ecf035b555b8ef9465cd517 0 1752224644527 6 connected