redis集羣(Centos7)-安裝配置說明,添加刪除節點(超詳細)

redis集羣

redis集羣共有16384個hash槽,每個redis key通過crc16檢驗後,對16384取模來決定放在哪個槽中,每個節點負責一部分槽,如果集羣中有3個主庫(從庫節點槽跟隨他的主庫),那麼節點與槽安置見下:
節點1:0至5460號hash槽
節點2:5461至10922號hash槽
節點3:10922至16384號hash槽
至少有3臺redis主庫,從庫一般也至少3臺,一一對應,當主庫宕機時,從庫頂上變主庫,當舊主庫上線時,變成從庫(隸屬於新主庫)

案例(羣集搭建+添加與刪除節點演示)

一、 環境

在這裏插入圖片描述

二、源碼安裝redis5

安裝環境軟件支持

[root@localhost src]# yum install gcc-c++ -y

下載redis

[root@localhost src]# wget -c http://download.redis.io/releases/redis-5.0.5.tar.gz

編譯安裝

[root@localhost src]# tar xf redis-5.0.5.tar.gz
[root@localhost src]# cd redis-5.0.5
[root@localhost redis-5.0.5]# vim src/Makefile
PREFIX?=/usr/local/redis
[root@localhost redis-5.0.5]# make PREFIX=/usr/local/redis MALLOC=libc install
[root@localhost redis-5.0.5]# make install
[root@localhost redis-5.0.5]# mkdir -p /usr/local/redis/6379
[root@localhost redis-5.0.5]# mkdir -p /usr/local/redis/6380  準備兩臺實例
[root@localhost redis-5.0.5]# cp redis.conf /usr/local/redis/6379/6379.conf
[root@localhost redis-5.0.5]# cp redis.conf /usr/local/redis/6380/6380.conf
[root@localhost redis-5.0.5]# cp /usr/local/redis/bin/redis-server /usr/local/redis/bin/redis6379-server
[root@localhost redis-5.0.5]# cp /usr/local/redis/bin/redis-server /usr/local/redis/bin/redis6380-server
[root@localhost redis-5.0.5]# ls /usr/local/redis/
6379  6380  bin
[root@localhost redis-5.0.5]# ls /usr/local/redis/6379/
6379.conf
[root@localhost redis-5.0.5]# ls /usr/local/redis/bin/
redis6379-server  redis6380-server  redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli  redis-sentinel  redis-server

編譯sysctl.conf文件

[root@localhost redis-5.0.5]# vim /etc/sysctl.conf
net.core.somaxconn=512
vm.overcommit_memory=1

讓redis負責內存管理

[root@localhost redis-5.0.5]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@localhost redis-5.0.5]# cat /sys/kernel/mm/transparent_hugepage/enabled 
always madvise [never]

執行sysctl -p,讓內核重新讀取sysctl

[root@localhost redis-5.0.5]# sysctl -p
net.core.somaxconn = 512
vm.overcommit_memory = 1

配置啓動腳本

執行兩次

[root@localhost redis-5.0.5]# /usr/src/redis-5.0.5/utils/install_server.sh 
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379] 6379		#端口
Please select the redis config file name [/etc/redis/6379.conf] /usr/local/redis/6379/6379.conf	#配置文件
Please select the redis log file name [/var/log/redis_6379.log] /usr/local/redis/6379/redis_6379.log	#日誌文件
Please select the data directory for this instance [/var/lib/redis/6379] /usr/local/redis/6379/	#數據目錄
Please select the redis executable path [] /usr/local/redis/bin/redis6379-server	#啓動腳本
Selected config:
Port           : 6379
Config file    : /usr/local/redis/6379/6379.conf
Log file       : /usr/local/redis/6379/redis_6379.log
Data dir       : /usr/local/redis/6379/
Executable     : /usr/local/redis/bin/redis6379-server
Cli Executable : /usr/local/redis/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!



[root@localhost redis-5.0.5]# /usr/src/redis-5.0.5/utils/install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379] 6380
Please select the redis config file name [/etc/redis/6380.conf] /usr/local/redis/6380/6380.conf
Please select the redis log file name [/var/log/redis_6380.log] /usr/local/redis/6380/redis_6380.log
Please select the data directory for this instance [/var/lib/redis/6380] /usr/local/redis/6380/
Please select the redis executable path [] /usr/local/redis/bin/redis6380-server
Selected config:
Port           : 6380
Config file    : /usr/local/redis/6380/6380.conf
Log file       : /usr/local/redis/6380/redis_6380.log
Data dir       : /usr/local/redis/6380/
Executable     : /usr/local/redis/bin/redis6380-server
Cli Executable : /usr/local/redis/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6380.conf => /etc/init.d/redis_6380
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!

如此,就可以通過以下命令,直接進行啓動、停止及重啓了

[root@localhost redis-5.0.5]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...

編輯配置文件

vim /usr/local/redis/6379/6379.conf
vim /usr/local/redis/6380/6380.conf port 6380
配置rdb與aof持久化

注:這裏只要配置下面4行,其他默認即可
bind 0.0.0.0 監聽IP
port 6379 監聽端口
appendonly yes 開啓AOF持久化
no-appendfsync-on-rewrite yes 當rdb寫入時,停止aof寫入

[root@localhost redis-5.0.5]#  vim /usr/local/redis/6379/6379.conf
  70 bind 0.0.0.0		監聽IP
  89 protected-mode yes	可以查看鍵值
  93 port 6379			監聽端口
  102 tcp-backlog 511	tcp隊列長度,這裏默認
  114 timeout 0			客戶端與服務器之間的連接超時時間,0爲永不超時
  131 tcp-keepalive 300300秒給客戶端發送ACK握手包
  137 daemonize yes		後臺啓動
  148 supervised no		可以通過upstart和systemd管理redis守護進程
  159 pidfile /var/run/redis_6379.pid	進程文件
  167 loglevel notice	日誌級別,默認即可
  172 logfile /usr/local/redis/6379/redis_6379.log	日誌文件路徑
  176 # syslog-enabled no	是否輸出到系統日誌
  187 databases 16		數據庫個數0-15編號,共16個數據庫
  195 always-show-logo yes	啓動時是否顯示日誌
  219 save 900 1
  220 save 300 10
  221 save 60 10000
  236 stop-writes-on-bgsave-error yes	快照出問題時,不可寫
  242 rdbcompression yes	rdb模式,是否啓動壓縮,啓用
  251 rdbchecksum yes	對rdb數據文件操作時,啓動校驗
  254 dbfilename dump.rdb	rdb持久化的快照文件名
  264 dir /usr/local/redis/6379/	rdb文件路徑

 以下是AOF模式配置,這裏rdb和AOF持久化都啓用
  700 appendonly yes	開啓AOF持久化
  704 appendfilename "appendonly.aof"	AOF持久化快照文件名
  730 appendfsync everysec		每秒保存至快照
  752 no-appendfsync-on-rewrite yes	當rdb寫入時,停止aof寫入
  771 auto-aof-rewrite-percentage 100	aof文件增長100%時,重寫
  772 auto-aof-rewrite-min-size 64mb	aof文件大於64M時,重寫
  796 aof-load-truncated yes			aof文件加載時,忽略最後一條命令
 

服務重啓

[root@localhost redis-5.0.5]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...
[root@localhost redis-5.0.5]# ps -ef|grep redis
root      2835     1  0 12:29 ?        00:00:00 /usr/local/redis/bin/redis6379-server 0.0.0.0:6379
root      2840  1672  0 12:29 pts/1    00:00:00 grep --color=auto redis

關閉selinux及配置防火牆

[root@localhost redis-5.0.5]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config  
[root@localhost redis-5.0.5]# firewall-cmd --zone=public --add-port=6379/tcp --permanent
success
[root@localhost redis-5.0.5]# firewall-cmd --zone=public --add-port=6380/tcp --permanent  
success
[root@localhost ~]# firewall-cmd --zone=public --add-port=16379/tcp --permanent
success
[root@localhost ~]# firewall-cmd --zone=public --add-port=16380/tcp --permanent  
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --zone=public --list-ports
80/tcp 22/tcp 6379/tcp 26379/tcp 6380/tcp 16379/tcp 16380/tcp

注:三臺都做以上安裝及配置

二、集羣配置

配置下別名

[root@localhost src]# alias redis-cli="/usr/local/redis/bin/redis-cli"

1、開啓redis 集羣,在實例配置文件中

更改所有實例配置文件,這裏只臺粘出一臺
vim /usr/local/redis/6379/6379.conf

[root@localhost ~]# vim /usr/local/redis/6379/6379.conf 
 833 cluster-enabled yes						開啓集羣
 841 cluster-config-file nodes-6379.conf		集羣配置文件
 847 cluster-node-timeout 15000					主庫超時時間
 700 appendonly yes								開啓AOF持久化

服務重啓

[root@localhost ~]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...
[root@localhost ~]# /etc/init.d/redis_6380 restart
Stopping ...
Redis stopped
Starting Redis server...
[root@localhost ~]# ps -ef|grep  redis
root      3115     1  0 14:51 ?        00:00:00 /usr/local/redis/bin/redis6379-server 0.0.0.0:6379 [cluster]
root      3125     1  0 14:51 ?        00:00:00 /usr/local/redis/bin/redis6380-server 0.0.0.0:6380 [cluster]
root      3130  1947  0 14:51 pts/0    00:00:00 grep --color=auto redis
[root@localhost ~]# 
[root@localhost ~]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1471/master         
tcp        0      0 0.0.0.0:16379           0.0.0.0:*               LISTEN      2908/redis6379-serv 
tcp        0      0 0.0.0.0:16380           0.0.0.0:*               LISTEN      2918/redis6380-serv 
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      2908/redis6379-serv 
tcp        0      0 0.0.0.0:6380            0.0.0.0:*               LISTEN      2918/redis6380-serv 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1383/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1471/master         
tcp6       0      0 :::22                   :::*                    LISTEN      1383/sshd           

2、創建集羣

在集羣中任意一臺中進行
[root@localhost ~]# redis-cli --cluster create 192.168.1.21:6379 192.168.1.21:6380 192.168.1.22:6379 192.168.1.22:6380 192.168.1.23:6379 192.168.1.23:6380 --cluster-replicas 1

[root@localhost ~]#  redis-cli --cluster create 192.168.1.21:6379 192.168.1.21:6380 192.168.1.22:6379 192.168.1.22:6380 192.168.1.23:6379 192.168.1.23:6380 --cluster-replicas 1

>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.1.22:6380 to 192.168.1.21:6379
Adding replica 192.168.1.23:6380 to 192.168.1.22:6379
Adding replica 192.168.1.21:6380 to 192.168.1.23:6379
M: 905200f086c8e1bd593e0be87d88232b19132829 192.168.1.21:6379
   slots:[0-5460] (5461 slots) master
S: 90b6081dafecc3aa3e21bcedfe3584b4a300108c 192.168.1.21:6380
   replicates d1caa936095ed03513f103ee691d7d1b56e97145
M: c6338fc863dcb7bb9e2d00bbd5890dc8a9d58879 192.168.1.22:6379
   slots:[5461-10922] (5462 slots) master
S: 99556144dc4ff7b7aa7c74c02a9bc828f6bf83b3 192.168.1.22:6380
   replicates 905200f086c8e1bd593e0be87d88232b19132829
M: d1caa936095ed03513f103ee691d7d1b56e97145 192.168.1.23:6379
   slots:[10923-16383] (5461 slots) master
S: 95853c2d5b17543f90d4377b14287701882167a5 192.168.1.23:6380
   replicates c6338fc863dcb7bb9e2d00bbd5890dc8a9d58879
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.........
>>> Performing Cluster Check (using node 192.168.1.21:6379)
M: 905200f086c8e1bd593e0be87d88232b19132829 192.168.1.21:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 90b6081dafecc3aa3e21bcedfe3584b4a300108c 192.168.1.21:6380
   slots: (0 slots) slave
   replicates d1caa936095ed03513f103ee691d7d1b56e97145
M: d1caa936095ed03513f103ee691d7d1b56e97145 192.168.1.23:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 95853c2d5b17543f90d4377b14287701882167a5 192.168.1.23:6380
   slots: (0 slots) slave
   replicates c6338fc863dcb7bb9e2d00bbd5890dc8a9d58879
S: 99556144dc4ff7b7aa7c74c02a9bc828f6bf83b3 192.168.1.22:6380
   slots: (0 slots) slave
   replicates 905200f086c8e1bd593e0be87d88232b19132829
M: c6338fc863dcb7bb9e2d00bbd5890dc8a9d58879 192.168.1.22:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

檢查主從關係

[root@localhost ~]# redis-cli -p 6379 --cluster check 192.168.1.21:6379
192.168.1.21:6379 (905200f0...) -> 0 keys | 5461 slots | 1 slaves.
192.168.1.23:6379 (d1caa936...) -> 0 keys | 5461 slots | 1 slaves.
192.168.1.22:6379 (c6338fc8...) -> 0 keys | 5462 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.1.21:6379)
M: 905200f086c8e1bd593e0be87d88232b19132829 192.168.1.21:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 90b6081dafecc3aa3e21bcedfe3584b4a300108c 192.168.1.21:6380
   slots: (0 slots) slave
   replicates d1caa936095ed03513f103ee691d7d1b56e97145
M: d1caa936095ed03513f103ee691d7d1b56e97145 192.168.1.23:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 95853c2d5b17543f90d4377b14287701882167a5 192.168.1.23:6380
   slots: (0 slots) slave
   replicates c6338fc863dcb7bb9e2d00bbd5890dc8a9d58879
S: 99556144dc4ff7b7aa7c74c02a9bc828f6bf83b3 192.168.1.22:6380
   slots: (0 slots) slave
   replicates 905200f086c8e1bd593e0be87d88232b19132829
M: c6338fc863dcb7bb9e2d00bbd5890dc8a9d58879 192.168.1.22:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

由上得出主從關係爲
master: 192.168.1.22:6379 -> slave: 192.168.1.23:6380
master: 192.168.1.21:6379 -> slave: 192.168.1.22:6380
master: 192.168.1.23:6379 -> slave: 192.168.1.21:6380

三、集羣演示

1、插入數據後

[root@localhost ~]# redis-cli -p 6380 -c	登錄集羣模式
127.0.0.1:6380> set name toyix
-> Redirected to slot [5798] located at 192.168.1.22:6379
OK
192.168.1.22:6379> get name
"toyix"
192.168.1.22:6379> KEYS *
1) "name"
192.168.1.22:6379> 

注:集羣上的數據,除了所在主庫外,其餘都不可直接可,包括此主庫的從庫,除非加-c 進入集羣模式

2、添加節點(主庫)

現加入一節點: 192.168.1.24:6379主庫

[root@localhost ~]# redis-cli --cluster add-node 192.168.1.24:6379 192.168.1.22:6379
>>> Adding node 192.168.1.24:6379 to cluster 192.168.1.22:6379
>>> Performing Cluster Check (using node 192.168.1.22:6379)
M: c6338fc863dcb7bb9e2d00bbd5890dc8a9d58879 192.168.1.22:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 90b6081dafecc3aa3e21bcedfe3584b4a300108c 192.168.1.21:6380
   slots: (0 slots) slave
   replicates d1caa936095ed03513f103ee691d7d1b56e97145
M: d1caa936095ed03513f103ee691d7d1b56e97145 192.168.1.23:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 95853c2d5b17543f90d4377b14287701882167a5 192.168.1.23:6380
   slots: (0 slots) slave
   replicates c6338fc863dcb7bb9e2d00bbd5890dc8a9d58879
M: 905200f086c8e1bd593e0be87d88232b19132829 192.168.1.21:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 99556144dc4ff7b7aa7c74c02a9bc828f6bf83b3 192.168.1.22:6380
   slots: (0 slots) slave
   replicates 905200f086c8e1bd593e0be87d88232b19132829
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 192.168.1.24:6379 to make it join the cluster.
[OK] New node added correctly.

檢查

[root@localhost ~]# redis-cli --cluster check 192.168.1.23:6379
192.168.1.23:6379 (d1caa936...) -> 0 keys | 5461 slots | 1 slaves.
192.168.1.24:6379 (8da8a6b0...) -> 0 keys | 0 slots | 0 slaves.
192.168.1.21:6379 (905200f0...) -> 0 keys | 5461 slots | 1 slaves.
192.168.1.22:6379 (c6338fc8...) -> 1 keys | 5462 slots | 1 slaves.
[OK] 1 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.1.23:6379)
M: d1caa936095ed03513f103ee691d7d1b56e97145 192.168.1.23:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 99556144dc4ff7b7aa7c74c02a9bc828f6bf83b3 192.168.1.22:6380
   slots: (0 slots) slave
   replicates 905200f086c8e1bd593e0be87d88232b19132829
M: 8da8a6b054e35f8412e94823be7d62cbe6f4c52e 192.168.1.24:6379    新加入的節點
   slots: (0 slots) master
S: 90b6081dafecc3aa3e21bcedfe3584b4a300108c 192.168.1.21:6380
   slots: (0 slots) slave
   replicates d1caa936095ed03513f103ee691d7d1b56e97145
M: 905200f086c8e1bd593e0be87d88232b19132829 192.168.1.21:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: c6338fc863dcb7bb9e2d00bbd5890dc8a9d58879 192.168.1.22:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: 95853c2d5b17543f90d4377b14287701882167a5 192.168.1.23:6380
   slots: (0 slots) slave
   replicates c6338fc863dcb7bb9e2d00bbd5890dc8a9d58879
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@localhost ~]# 

發現192.168.1.24:6379 ,但因爲沒有多餘的hash槽了,此時,所以要重新分配hash槽

分配hash槽

[root@localhost ~]# redis-cli --cluster reshard 192.168.1.23:6379
How many slots do you want to move (from 1 to 16384)? 3000  分配3000個hash槽
What is the receiving node ID?
8da8a6b054e35f8412e94823be7d62cbe6f4c52e    新節點ID
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the
hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1: c6338fc863dcb7bb9e2d00bbd5890dc8a9d58879  從192.168.1.22上分配
Source node #2: done
Do you want to proceed with the proposed reshard plan
(yes/no)? yes 
Moving slot 7931 from 192.168.1.22:6379 to 192.168.1.24:6379: 
Moving slot 7932 from 192.168.1.22:6379 to 192.168.1.24:6379: 
Moving slot 7933 from 192.168.1.22:6379 to 192.168.1.24:6379: 
Moving slot 7934 from 192.168.1.22:6379 to 192.168.1.24:6379: 
Moving slot 7935 from 192.168.1.22:6379 to 192.168.1.24:6379: 
Moving slot 7936 from 192.168.1.22:6379 to 192.168.1.24:6379: 

檢查分配後結果
在這裏插入圖片描述

再次添加一節點192.168.1.24:6380

[root@localhost ~]# redis-cli --cluster add-node 192.168.1.24:6380 192.168.1.22:6379
>>> Adding node 192.168.1.24:6380 to cluster 192.168.1.22:6379
>>> Performing Cluster Check (using node 192.168.1.22:6379)
M: c6338fc863dcb7bb9e2d00bbd5890dc8a9d58879 192.168.1.22:6379
   slots:[8461-10922] (2462 slots) master
   1 additional replica(s)
M: 8da8a6b054e35f8412e94823be7d62cbe6f4c52e 192.168.1.24:6379
   slots:[5461-8460] (3000 slots) master
S: 90b6081dafecc3aa3e21bcedfe3584b4a300108c 192.168.1.21:6380
   slots: (0 slots) slave
   replicates d1caa936095ed03513f103ee691d7d1b56e97145
M: d1caa936095ed03513f103ee691d7d1b56e97145 192.168.1.23:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 95853c2d5b17543f90d4377b14287701882167a5 192.168.1.23:6380
   slots: (0 slots) slave
   replicates c6338fc863dcb7bb9e2d00bbd5890dc8a9d58879
M: 905200f086c8e1bd593e0be87d88232b19132829 192.168.1.21:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 99556144dc4ff7b7aa7c74c02a9bc828f6bf83b3 192.168.1.22:6380
   slots: (0 slots) slave
   replicates 905200f086c8e1bd593e0be87d88232b19132829
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 192.168.1.24:6380 to make it join the cluster.
[OK] New node added correctly.


檢查
[root@localhost ~]# redis-cli --cluster check 192.168.1.23:6379                     
192.168.1.23:6379 (d1caa936...) -> 0 keys | 5461 slots | 1 slaves.
192.168.1.24:6379 (8da8a6b0...) -> 1 keys | 3000 slots | 0 slaves.
192.168.1.24:6380 (437378da...) -> 0 keys | 0 slots | 0 slaves.
192.168.1.21:6379 (905200f0...) -> 0 keys | 5461 slots | 1 slaves.
192.168.1.22:6379 (c6338fc8...) -> 0 keys | 2462 slots | 1 slaves.
[OK] 1 keys in 5 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.1.23:6379)
M: d1caa936095ed03513f103ee691d7d1b56e97145 192.168.1.23:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 99556144dc4ff7b7aa7c74c02a9bc828f6bf83b3 192.168.1.22:6380
   slots: (0 slots) slave
   replicates 905200f086c8e1bd593e0be87d88232b19132829
M: 8da8a6b054e35f8412e94823be7d62cbe6f4c52e 192.168.1.24:6379
   slots:[5461-8460] (3000 slots) master
S: 90b6081dafecc3aa3e21bcedfe3584b4a300108c 192.168.1.21:6380
   slots: (0 slots) slave
   replicates d1caa936095ed03513f103ee691d7d1b56e97145
M: 437378da815f11a9664f56fbde66c6bd6c0971fb 192.168.1.24:6380   新增加節點
   slots: (0 slots) master
M: 905200f086c8e1bd593e0be87d88232b19132829 192.168.1.21:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: c6338fc863dcb7bb9e2d00bbd5890dc8a9d58879 192.168.1.22:6379
   slots:[8461-10922] (2462 slots) master
   1 additional replica(s)
S: 95853c2d5b17543f90d4377b14287701882167a5 192.168.1.23:6380
   slots: (0 slots) slave
   replicates c6338fc863dcb7bb9e2d00bbd5890dc8a9d58879
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@localhost ~]# 

由上可以,新增的節點都爲master
檢查節點並分槽

[root@localhost ~]# redis-cli --cluster reshard 192.168.1.23:6379                     
>>> Performing Cluster Check (using node 192.168.1.23:6379)
M: d1caa936095ed03513f103ee691d7d1b56e97145 192.168.1.23:6379
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 99556144dc4ff7b7aa7c74c02a9bc828f6bf83b3 192.168.1.22:6380
   slots: (0 slots) slave
   replicates 905200f086c8e1bd593e0be87d88232b19132829
M: 8da8a6b054e35f8412e94823be7d62cbe6f4c52e 192.168.1.24:6379
   slots:[5461-8460] (3000 slots) master
S: 90b6081dafecc3aa3e21bcedfe3584b4a300108c 192.168.1.21:6380
   slots: (0 slots) slave
   replicates d1caa936095ed03513f103ee691d7d1b56e97145
M: 437378da815f11a9664f56fbde66c6bd6c0971fb 192.168.1.24:6380
   slots: (0 slots) master
M: 905200f086c8e1bd593e0be87d88232b19132829 192.168.1.21:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: c6338fc863dcb7bb9e2d00bbd5890dc8a9d58879 192.168.1.22:6379
   slots:[8461-10922] (2462 slots) master
   1 additional replica(s)
S: 95853c2d5b17543f90d4377b14287701882167a5 192.168.1.23:6380
   slots: (0 slots) slave
   replicates c6338fc863dcb7bb9e2d00bbd5890dc8a9d58879
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 3000
What is the receiving node ID? 437378da815f11a9664f56fbde66c6bd6c0971fb
Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.
Source node #1: all
Do you want to proceed with the proposed reshard plan
(yes/no)? yes
.......

刪除節點

現在是5主3從,刪除2個沒有從庫的節點
在這裏插入圖片描述

將24:6380節點分配給24:6379

[root@localhost ~]# redis-cli --cluster reshard 192.168.1.23:6379  
How many slots do you want to move (from 1 to 16384)? 2998
246379的ID,表示他要得到hash槽
What is the receiving node ID? 8da8a6b054e35f8412e94823be7d62cbe6f4c52e  
246380的ID,表示他要分出去2998個hash槽
Source node #1: 437378da815f11a9664f56fbde66c6bd6c0971fb
Source node #2: done
.....
Moving slot 11922 from 437378da815f11a9664f56fbde66c6bd6c0971fb
Do you want to proceed with the proposed reshard plan (yes/no)? yes
Moving slot 11910 from 192.168.1.24:6380 to 192.168.1.24:6379: 

查看節點信息,發現24:6380 hash槽爲0了
在這裏插入圖片描述
刪除節點

[root@localhost ~]#  redis-cli --cluster del-node 192.168.1.24:6380 437378da815f11a9664f56fbde66c6bd6c0971fb
>>> Removing node 437378da815f11a9664f56fbde66c6bd6c0971fb from cluster 192.168.1.24:6380
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.

查看節點

[root@localhost ~]# redis-cli --cluster check 192.168.1.23:6379
192.168.1.23:6379 (d1caa936...) -> 0 keys | 4461 slots | 1 slaves.
192.168.1.24:6379 (8da8a6b0...) -> 1 keys | 5449 slots | 0 slaves.
192.168.1.21:6379 (905200f0...) -> 0 keys | 4462 slots | 1 slaves.
192.168.1.22:6379 (c6338fc8...) -> 0 keys | 2012 slots | 1 slaves.
[OK] 1 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.1.23:6379)
M: d1caa936095ed03513f103ee691d7d1b56e97145 192.168.1.23:6379
   slots:[11923-16383] (4461 slots) master
   1 additional replica(s)
S: 99556144dc4ff7b7aa7c74c02a9bc828f6bf83b3 192.168.1.22:6380
   slots: (0 slots) slave
   replicates 905200f086c8e1bd593e0be87d88232b19132829
M: 8da8a6b054e35f8412e94823be7d62cbe6f4c52e 192.168.1.24:6379
   slots:[0-998],[5461-8910],[10923-11922] (5449 slots) master
S: 90b6081dafecc3aa3e21bcedfe3584b4a300108c 192.168.1.21:6380
   slots: (0 slots) slave
   replicates d1caa936095ed03513f103ee691d7d1b56e97145
M: 905200f086c8e1bd593e0be87d88232b19132829 192.168.1.21:6379
   slots:[999-5460] (4462 slots) master
   1 additional replica(s)
M: c6338fc863dcb7bb9e2d00bbd5890dc8a9d58879 192.168.1.22:6379
   slots:[8911-10922] (2012 slots) master
   1 additional replica(s)
S: 95853c2d5b17543f90d4377b14287701882167a5 192.168.1.23:6380
   slots: (0 slots) slave
   replicates c6338fc863dcb7bb9e2d00bbd5890dc8a9d58879
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
找不到24:6380節點了

宕機主節點,再啓動

192.168.1.23:6380 從 192.168.1.22:6379 主
停止22:6379節點

[root@localhost ~]# ifconfig|grep 192.168.1.
        inet 192.168.1.22  netmask 255.255.255.0  broadcast 192.168.1.255
[root@localhost ~]# ps -ef|grep redis
root      3254     1  0 15:21 ?        00:00:35 /usr/local/redis/bin/redis6379-server 0.0.0.0:6379 [cluster]
root      3257     1  0 15:21 ?        00:00:29 /usr/local/redis/bin/redis6380-server 0.0.0.0:6380 [cluster]
root      3576  1947  0 18:36 pts/0    00:00:00 grep --color=auto redis
[root@localhost ~]# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped

查看節點信息
23:6380由從變成了主
在這裏插入圖片描述
啓動22:6379

[root@localhost ~]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@localhost ~]# ps -ef|grep redis
root      3257     1  0 15:21 ?        00:00:31 /usr/local/redis/bin/redis6380-server 0.0.0.0:6380 [cluster]
root      3591     1  0 18:41 ?        00:00:00 /usr/local/redis/bin/redis6379-server 0.0.0.0:6379 [cluster]
root      3597  1947  0 18:41 pts/0    00:00:00 grep --color=auto redis
[root@localhost ~]# ifconfig|grep 255
        inet 192.168.1.22  netmask 255.255.255.0  broadcast 192.168.1.255

查看節點
在這裏插入圖片描述
22:6379變爲了23:6380的從

注:

1、刪除節點前要先將hash槽分配出去,也可以通過以下腳本來分配hash槽
redis-cli reshard : --cluster-from  --cluster-to  --cluster-slots  --cluster-yes
2、在對集羣操作時,儘量不要使用127.0.0.1,要寫對外的其他節點的真實IP
3、如果創建出現問題,需要先停止服務,然後刪除6379下除了6379.conf、log外所有內容,纔可以繼續創建,見下

pkill redis rm -rf /usr/local/redis/6379/nodes-6379.conf
rm -rf /usr/local/redis/6379/appendonly.aof
rm -rf/usr/local/redis/6379/dump.rdb
rm -rf /usr/local/redis/6380/dump.rdb
rm -rf /usr/local/redis/6380/nodes-6379.conf
rm -rf /usr/local/redis/6380/appendonly.aof
ls /usr/local/redis/6379/
ls /usr/local/redis/6380/
/etc/init.d/redis_6379 start
/etc/init.d/redis_6380 start
ps -ef|grep redis
netstat -tnlp

-------------------------end

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