Redis Cluster 手動部署(小白的“升級打怪”成長之路)

目錄

一、環境規劃

二、基礎環境

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-master192.168.166.96379redis-master01
6381redis-master02
6383redis-master03
redis-slave192.168.166.96380redis-slave01
6382redis-slave02
6384redis-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、故障恢復

  1. 啟動殺死的redis進程

  2. 通過 cluster nodes查看節點狀態

  3. 通過 cluster info 查看集群狀態

  4. 登錄所有從節點

3、cluster failover命令

Redis Cluster模式下的cluster failover(集群故障轉移)的作用是確保Redis集群在主節點(Master)發生故障或不可用的情況下,能夠自動將主節點的工作負載轉移到備用節點(Slave)上,并使備用節點成為新的主節點,保證Redis集群的高可用性和持續可用性。

當主節點發生故障時,Redis Cluster會自動檢測到主節點的不可用,并從備用節點中選出一個合適的備用節點作為新的主節點。該備用節點經過選舉后,會接管原主節點的數據和工作負載,并開始對外提供服務。集群的其它節點也會更新集群拓撲信息,以便客戶端能夠正確地路由請求到新的主節點。

cluster failover的作用主要包括:

  1. 高可用性:當主節點發生故障時,能夠及時切換到備用節點,保證Redis集群的繼續正常運行,避免因單點故障而導致服務不可用。

  2. 數據保護:在主節點發生故障時,能夠將數據從主節點復制到備用節點,并在故障轉移時將備用節點提升為新的主節點,從而保證數據的持久性和一致性。

  3. 自動化管理:集群故障轉移是自動化過程,無需人工干預,減少了對系統運維的依賴,并提高了系統的可靠性和可維護性。

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

看到感覺有幫助的朋友,勞煩動動發財的小手給博主點個贊

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/90876.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/90876.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/90876.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Java入門到精通】(三)Java基礎語法(下)

一、面向對象&#xff08;類和對象&#xff09;1.1 萬事萬物皆對象類&#xff1a;對對象向上抽取出像的部分、公共的部分以此形成類&#xff0c;類就相當于一個模板。對象&#xff1a;模板下具體的產物可以理解為具體對象&#xff0c;對象就是一個一個具體的實例&#xff0c;就…

Java文件傳輸要點

Java文件傳輸要點 一、前端 <form action"/upload" method"post" enctype"multipart/form-data"> <!--<form action"/upload" method"post">-->姓名: <input type"text" name"username…

Spring Boot 中使用 Lombok 進行依賴注入的示例

Spring Boot 中使用 Lombok 進行依賴注入的示例 下面我將展示 Spring Boot 中使用 Lombok 進行依賴注入的不同方式&#xff0c;包括構造器注入、屬性注入和 setter 方法注入&#xff0c;以及相應的測試用例。 1. 構造器注入&#xff08;推薦方式&#xff09; import lombok.Req…

vue3+vit+vue-router路由,側邊欄菜單,面包屑導航設置層級結構

文章目錄注意效果圖目錄結構代碼vite.config.ts需要配置路徑別名符號main.tsApp.vueBreadcrumb.vue面包屑組件menus.ts// src/router/index.ts其他文件注意 目錄結構僅供參考DefaultLayout.vue 沒有用到&#xff0c;我直接寫在APP文件中vux-store我也沒有用到&#xff0c;單獨…

使用Selenium自動化獲取抖音創作者平臺視頻數據

前言 在當今短視頻盛行的時代&#xff0c;抖音作為國內領先的短視頻平臺&#xff0c;吸引了大量內容創作者。對于創作者而言&#xff0c;了解自己發布的視頻表現&#xff08;如播放量、發布時間等&#xff09;至關重要。本文將介紹如何使用Python的Selenium庫來自動化獲取抖音…

SpringCloud之Eureka

SpringCloud之Eureka 推薦參考&#xff1a;https://www.springcloud.cc/spring-cloud-dalston.html#_service_discovery_eureka_clients 1. 什么是Eureka Eureka 用于簡化分布式系統的服務治理&#xff0c;基于REST的服務&#xff0c;用于服務的注冊與發現。通過注冊發現、客戶…

squash壓縮合并

要將test分支的多次提交合并到dev分支并壓縮為一個commit&#xff0c;核心是使用 git merge --squash 命令&#xff08;壓縮合并&#xff09;&#xff0c;具體步驟如下&#xff1a; 詳細步驟&#xff1a; 1. 切換到dev分支并拉取最新代碼先確保本地dev分支是最新的&#xff0c;…

飛書CEO謝欣:挑戰巨頭,打造AI新時代的Office

引言&#xff1a;飛書要做AI時代辦公協作的逐夢者與破局者。文 | 大力財經在AI浪潮席卷的當下&#xff0c;企業對AI既滿懷期待又充滿焦慮。“AI到底能不能用&#xff1f;AI到底怎么用&#xff1f;”成為縈繞在眾多企業心頭的難題。7月9日召開的飛書未來無限大會&#xff0c;飛書…

React 組件中怎么做事件代理?它的原理是什么?

在 React 組件中&#xff0c;**事件代理&#xff08;Event Delegation&#xff09;**其實是 React 內部實現的一部分&#xff0c;開發者通常無需手動實現事件代理&#xff0c;但理解它的原理和使用方式對于優化性能和掌握底層機制非常重要。一、React 中事件代理的原理React 使…

Vue 2現代模式打包:雙包架構下的性能突圍戰

文章目錄一、場景痛點&#xff1a;兼容性與性能的撕裂二、技術解析&#xff1a;Modern Mode的雙引擎驅動1. 基礎認知&#xff1a;什么是Modern Mode&#xff1f;2. 原理深入&#xff1a;HTML智能分發與Safari 10修復3. 性能收益對比表三、Vue 2項目實戰&#xff1a;啟用Modern模…

UniHttp中HttpApiProcessor生命周期鉤子介紹以及公共參數填充-以百度天氣接口為例

目錄 引言 一、UniHttp與HttpApiProcessor簡介 1、生命周期鉤子的重要性 2、公共參數填充的需求 3、生命周期鉤子相關介紹 二、HttpApiProcessor的實際應用 1、在Yml中定義相關參數 2、自定義HttpAPI注解 3、對接接口的定義 4、HttpApiProcessor的具體實現 5、實際調…

pytorch深度學習—RNN-循環神經網絡

結合生活實例&#xff0c;先簡單認識一下什么是循環神經網絡先想個問題&#xff1a;為什么需要 “循環”&#xff1f;你平時看句子、聽語音、看視頻&#xff0c;都是 “按順序” 來的吧&#xff1f;比如 “我吃蘋果” 和 “蘋果吃我”&#xff0c;字一樣但順序不同&#xff0c;…

深度學習常見名詞解釋、評價指標

目錄 一、魯棒性(robustness) 二、泛化能力&#xff08;Generalization Ability&#xff09; 核心含義&#xff1a; 如何衡量泛化能力&#xff1f; 三、先驗信息&#xff08;Prior Information&#xff09; 四、mIoU &#xff08;Mean Intersection over Union&#xff0…

docker-compose安裝常用中間件

分為3大部分&#xff1a;數據庫&#xff1a;mysql&#xff0c;redis&#xff0c;mongodb&#xff0c;elasticsearch&#xff0c;neo4j&#xff0c;minio&#xff0c;influxdb&#xff0c;canal-server應用中間件&#xff1a;nacos&#xff0c;apollo&#xff0c;zookeeper&…

基于無人機 RTK 和 yolov8 的目標定位算法

目錄 背景 算法思路 代碼實現 驗證 背景 在城市交通巡檢中如何進行車輛違停判斷很重要&#xff0c;一個方法是通過精確坐標判斷車輛中心是否位于違停框中&#xff0c;我們假設無人機坐標已知&#xff0c;并且無人機云臺鏡頭垂直地面朝下&#xff0c;可根據圖像分辨率、無人機參…

go入門 - day1 - 環境搭建

0. 介紹 go語言可以做什么&#xff1f; a. 區塊鏈 b. 分布式/微服務/云原生 c. 服務器/游戲軟件go的優勢 a. 代碼量比C和Java少 b. 編譯速度比Java或者C快上5到6倍&#xff0c;比Scale塊10被 c. 性能比C慢20%&#xff0c;但是比Java、python等快上5到10倍 d. 內存管理和C媲美&a…

【華為OD】MVP爭奪戰(C++、Java、Python)

文章目錄題目描述輸入描述輸出描述示例解題思路算法思路核心步驟代碼實現C實現Java實現Python實現算法要點復雜度分析解題總結題目描述 在星球爭霸籃球賽對抗賽中&#xff0c;最大的宇宙戰隊希望每個人都能拿到MVP&#xff0c;MVP的條件是單場最高分得分獲得者。可以并列所以宇…

Datawhale 2025 AI夏令營 MCP Server Task2

魔搭MCP &Agent賽事&#xff08;MCP Server開發&#xff09;/夏令營&#xff1a;動手開發MCP Server學習鏈接&#xff1a;魔搭MCP &Agent賽事&#xff08;MCP Server開發&#xff09; - Datawhale Task1回顧 1.task1應用功能 luner_info每日黃歷 這是一個可以獲取某天…

敏捷開發方法全景解析

核心理念:敏捷開發是以快速響應變化為核心的項目管理方法論,通過迭代式交付、自組織團隊和持續反饋,實現高質量軟件的高效交付。其本質是擁抱變化優于遵循計劃,強調"可工作的軟件高于詳盡的文檔"。 一、敏捷核心思想體系 #mermaid-svg-y7iyWsQGVWn3IpEi {font-fa…

Socket到底是什么(簡單來說)

簡單來說&#xff1a; Socket 抽象了網絡通信的復雜底層細節&#xff0c;讓應用程序開發者可以專注于發送和接收數據&#xff0c;而不用去操心數據在網絡上是如何傳輸的。 它就像一個“黑盒子”&#xff0c;你只需要把數據扔進去&#xff0c;或者從里面取數據&#xff0c;至于數…