Redis 4.0.9 cluster expansion

I. Experimental Environment

1. System version: Centos 7.6 x86 64
 2. Redis version 4.0.9
 3. Cluster IP information
172.16.100.201  172.16.100.202  172.16.100.203
 4. IP information ready to join the cluster
172.16.100.204  172.16.100.205  172.16.100.206
 5, purpose
 Expand the 3 primary and 3 secondary nodes of Redis cluster to 6 primary and 6 secondary nodes, and add 1 primary and 1 secondary node for each of the three new nodes 204, 205 and 206!

II. Install and configure Redis cluster

1,Install on 3 servers redis,Two examples for each set are as follows:
172.16.100.201  8000 8001
172.16.100.202  8002 8003
172.16.100.203  8004 8005
//Start installation
#tar xf redis-4.0.9.tar.gz
#cd redis-4.0.9
#make
#mv redis-4.0.9  /opt/app/redis8000
2,Provide profile
#cat /opt/app/redis8000/redis.conf
daemonize yes
port 8000
bind 172.16.100.201
appendonly no
save 900 1
save 300 10
save 60 10000000
dir /opt/app/redis8000/db/
pidfile /opt/app/redis8000/redis_8000.pid
logfile /opt/app/redis8000/logs/redis8000.log
cluster-enabled yes
cluster-config-file nodes8000.conf
cluster-node-timeout 20000
cluster-require-full-coverage no

3,Modify system parameters
#vim  /etc/security/limits.conf 
*   soft      nofile   65535
*   hard      nofile   65535
*   soft      nproc    65535
*   hard      nproc    65535

#vim /etc/sysctl.conf
#redis
vm.overcommit_memory=1
net.core.somaxconn = 511

//Close large page
#echo never > /sys/kernel/mm/transparent_hugepage/enabled

//Make configuration effective
#sysctl  -p

//Start up:
/opt/app/redis8000/src/redis-server /opt/app/redis8000/redis.conf 

//The above is an example of 201 server 8000 node configuration. 202 and 203 server are two node configurations. Just refer to the above. Note that listening to ip address, port and path name needs to be modified accordingly.

III. create Redis 4.0.9 cluster (just operate on server 201)

1. Install the software package
#yum install ruby rubygems -y
#gem install redis -v 3.3.5
 2. Create a cluster
#/opt/app/redis8000/src/redis-trib.rb create --replicas 1 172.16.100.201:8000 172.16.100.201:8001 172.16.100.202:8002 172.16.100.202:8003 172.16.100.203:8004 172.16.100.203:8005
 3. View cluster IP information
172.16.100.203:8005 slave
172.16.100.201:8001 slave 
172.16.100.203:8004 master    10923-16383
172.16.100.202:8003 slave 
172.16.100.201:8000 master    0-5460 
172.16.100.202:8002 master    5461-10922

Copy the online corresponding 3 Master 3 from dump.rdb of the Redis cluster slot to the corresponding node, and start it. The purpose is to let the Redis cluster have data in the experimental environment, or create some data by yourself. This step is omitted! To demonstrate the effect, I
 Here, set several key s manually, as follows:
172.16.100.201:8000> set name1 jodan
............
172.16.100.201:8000> set name10 kawayi
............

IV. add the new node to the cluster and migrate the slot (operate on the 172.16.100.201 server)

notes:Start 2 in 204, 205 and 206 redis For example, ports are allocated as follows:
204  master 8006  slave  8007
205  master 8008  slave  8009
206  master 8010  slave  8011

1,Configure to start a new server Redis(Three servers and six servers in total redis Example),Refer to step 2 for configuration method, which will not be described here.

2,Will 3 master Nodes join the cluster
//Original cluster details: 3 Master 3 slave
# /opt/app/redis8000/src/redis-cli  -h 172.16.100.201 -p 8000  cluster nodes
11ae0bcc3aeae0cb7e40c28f407e3d2a30504989 172.16.100.202:8002@18002 master - 0 1575702279000 3 connected 5461-10922
b87a9f751b1eb4496c2eff495d216c88c22065ac 172.16.100.203:8004@18004 master - 0 1575702277798 5 connected 10923-16383
95ccd1953fa78a1ffa599d65b72d547f8277c3b5 172.16.100.201:8001@18001 slave b87a9f751b1eb4496c2eff495d216c88c22065ac 0 1575702279804 5 connected
2c67f0832908ae6375fec57b2399a0a8f4c9e9cc 172.16.100.203:8005@18005 slave 11ae0bcc3aeae0cb7e40c28f407e3d2a30504989 0 1575702279000 6 connected
9a02a2120d4a0f9bd8b3ae7e11ffe28d0e03d6fc 172.16.100.201:8000@18000 myself,master - 0 1575702278000 1 connected 0-5460
187eba647c002ff47674c71225c428fb8db59444 172.16.100.202:8003@18003 slave 9a02a2120d4a0f9bd8b3ae7e11ffe28d0e03d6fc 0 1575702276795 4 connected

//Add 172.16.100.204:8006 to the cluster,
/opt/app/redis8000/src/redis-trib.rb add-node 172.16.100.204:8006 172.16.100.201:8000

//Add 172.16.100.205:8008 to the cluster
/opt/app/redis8000/src/redis-trib.rb add-node 172.16.100.205:8008 172.16.100.201:8000

//Add 172.16.100.206:8010 to the cluster
/opt/app/redis8000/src/redis-trib.rb add-node 172.16.100.206:8010 172.16.100.201:8000

//View the cluster information after joining 3 master nodes:
#/opt/app/redis8000/src/redis-cli  -h 172.16.100.201 -p 8000  cluster nodes           
11ae0bcc3aeae0cb7e40c28f407e3d2a30504989 172.16.100.202:8002@18002 master - 0 1575704459051 3 connected 5461-10922
95ccd1953fa78a1ffa599d65b72d547f8277c3b5 172.16.100.201:8001@18001 slave b87a9f751b1eb4496c2eff495d216c88c22065ac 0 1575704457045 5 connected
187eba647c002ff47674c71225c428fb8db59444 172.16.100.202:8003@18003 slave 9a02a2120d4a0f9bd8b3ae7e11ffe28d0e03d6fc 0 1575704457000 4 connected
9a02a2120d4a0f9bd8b3ae7e11ffe28d0e03d6fc 172.16.100.201:8000@18000 myself,master - 0 1575704458000 1 connected 0-5460
c4772e933405eda022b0f7b837a67f05690c76da 172.16.100.204:8006@18006 master - 0 1575704458048 0 connected   
564d7877350b0a4789f18162c393a04584f9d311 172.16.100.205:8008@18008 master - 0 1575704455000 7 connected
b87a9f751b1eb4496c2eff495d216c88c22065ac 172.16.100.203:8004@18004 master - 0 1575704455040 5 connected 10923-16383
3dc917e0d7a1387caf646add2d06814cdb3560ab 172.16.100.206:8010@18010 master - 0 1575704458548 0 connected
2c67f0832908ae6375fec57b2399a0a8f4c9e9cc 172.16.100.203:8005@18005 slave 11ae0bcc3aeae0cb7e40c28f407e3d2a30504989 0 1575704457000 6 connected
//You can see that there are no slots for the newly added nodes, so you need to migrate some slots of the other three master nodes.

3,start slot auto migrate
#ruby /opt/app/redis8000/src/redis-trib.rb rebalance --auto-weights --use-empty-masters 172.16.100.201:8000
>>> Performing Cluster Check (using node 172.16.100.201:8000)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Rebalancing across 6 nodes. Total weight = 6
Moving 2732 slots from 172.16.100.202:8002 to 172.16.100.204:8006
#################Time spent depends on the amount of data migrated
Moving 2731 slots from 172.16.100.203:8004 to 172.16.100.206:8010
#################
Moving 2731 slots from 172.16.100.201:8000 to 172.16.100.205:8008
#################

//After that, check the cluster information again:
# /opt/app/redis8000/src/redis-cli  -h 172.16.100.201 -p 8000  cluster nodes                                
11ae0bcc3aeae0cb7e40c28f407e3d2a30504989 172.16.100.202:8002@18002 master - 0 1575706557000 3 connected 8193-10922
95ccd1953fa78a1ffa599d65b72d547f8277c3b5 172.16.100.201:8001@18001 slave b87a9f751b1eb4496c2eff495d216c88c22065ac 0 1575706557000 5 connected
187eba647c002ff47674c71225c428fb8db59444 172.16.100.202:8003@18003 slave 9a02a2120d4a0f9bd8b3ae7e11ffe28d0e03d6fc 0 1575706554000 4 connected
9a02a2120d4a0f9bd8b3ae7e11ffe28d0e03d6fc 172.16.100.201:8000@18000 myself,master - 0 1575706555000 1 connected 2731-5460
c4772e933405eda022b0f7b837a67f05690c76da 172.16.100.204:8006@18006 master - 0 1575706558000 9 connected 5461-8192
564d7877350b0a4789f18162c393a04584f9d311 172.16.100.205:8008@18008 master - 0 1575706557237 11 connected 0-2730
b87a9f751b1eb4496c2eff495d216c88c22065ac 172.16.100.203:8004@18004 master - 0 1575706556000 5 connected 13654-16383
3dc917e0d7a1387caf646add2d06814cdb3560ab 172.16.100.206:8010@18010 master - 0 1575706559243 10 connected 10923-13653
2c67f0832908ae6375fec57b2399a0a8f4c9e9cc 172.16.100.203:8005@18005 slave 11ae0bcc3aeae0cb7e40c28f407e3d2a30504989 0 1575706558240 6 connected

//You can see that the three new master nodes have slot s.

//Check whether the previously manually added key has been successfully migrated to the new master node, as follows:
172.16.100.201:8000> get name1
-> Redirected to slot [12933] located at 172.16.100.206:8010    #New node
"jodan"
172.16.100.206:8010> get name2
-> Redirected to slot [742] located at 172.16.100.205:8008      #New node
"kobe"
172.16.100.205:8008> get name3
-> Redirected to slot [4807] located at 172.16.100.201:8000
"onier"
172.16.100.201:8000> get name4
-> Redirected to slot [8736] located at 172.16.100.202:8002
"curry"
172.16.100.202:8002> get name5
-> Redirected to slot [12801] located at 172.16.100.206:8010    #New node
"james"
172.16.100.206:8010> get name6
-> Redirected to slot [610] located at 172.16.100.205:8008      #New node
"durant"
172.16.100.205:8008> get name7
-> Redirected to slot [4675] located at 172.16.100.201:8000
"timu"
172.16.100.201:8000> get name8
-> Redirected to slot [9132] located at 172.16.100.202:8002
"park"
172.16.100.202:8002> get name9
-> Redirected to slot [13197] located at 172.16.100.206:8010     #New node
"qiaozhi"  

//You can see that several key s have been successfully migrated to the new nodes 205 and 206!

4,As new master Node addition slave node(At 172.16.100.201 Node operation)
//In order to avoid single point failure, the main and subordinate design is as follows:
204              205             206
8006 M1         8008 M2          8010 M3

8007 S3         8009 S1          8011 S2

//Add 205 @ 8009 as the slave node of 204 @ 8006
/opt/app/redis8000/src/redis-trib.rb add-node --slave --master-id c4772e933405eda022b0f7b837a67f05690c76da 172.16.100.205:8009 172.16.100.204:8006

//Add 206 @ 8011 as the slave node of 205 @ 8008
/opt/app/redis8000/src/redis-trib.rb add-node --slave --master-id 564d7877350b0a4789f18162c393a04584f9d311 172.16.100.206:8011 172.16.100.205:8008

//Add 204 @ 8007 as the slave node of 206 @ 8010
/opt/app/redis8000/src/redis-trib.rb add-node --slave --master-id 3dc917e0d7a1387caf646add2d06814cdb3560ab 172.16.100.204:8007 172.16.100.206:8010

//Check the cluster information again as follows:
#/opt/app/redis8000/src/redis-cli  -h 172.16.100.201 -p 8000  cluster nodes
11ae0bcc3aeae0cb7e40c28f407e3d2a30504989 172.16.100.202:8002@18002 master - 0 1575708808057 3 connected 8193-10922
1d7c87447dd419ac7a2260dce726af03e7965c1a 172.16.100.204:8007@18007 slave 3dc917e0d7a1387caf646add2d06814cdb3560ab 0 1575708799027 10 connected
95ccd1953fa78a1ffa599d65b72d547f8277c3b5 172.16.100.201:8001@18001 slave b87a9f751b1eb4496c2eff495d216c88c22065ac 0 1575708807000 5 connected
187eba647c002ff47674c71225c428fb8db59444 172.16.100.202:8003@18003 slave 9a02a2120d4a0f9bd8b3ae7e11ffe28d0e03d6fc 0 1575708806049 4 connected
9a02a2120d4a0f9bd8b3ae7e11ffe28d0e03d6fc 172.16.100.201:8000@18000 myself,master - 0 1575708806000 1 connected 2731-5460
c4772e933405eda022b0f7b837a67f05690c76da 172.16.100.204:8006@18006 master - 0 1575708803000 9 connected 5461-8192
564d7877350b0a4789f18162c393a04584f9d311 172.16.100.205:8008@18008 master - 0 1575708801000 11 connected 0-2730
735012e7c6f181f7e8a197fc1667ff7bc075361d 172.16.100.206:8011@18011 slave 564d7877350b0a4789f18162c393a04584f9d311 0 1575708807054 11 connected
b87a9f751b1eb4496c2eff495d216c88c22065ac 172.16.100.203:8004@18004 master - 0 1575708805047 5 connected 13654-16383
5ba06662b9b260ca2cadcf2f7692e5e0e1a91474 172.16.100.205:8009@18009 slave c4772e933405eda022b0f7b837a67f05690c76da 0 1575708804045 9 connected
3dc917e0d7a1387caf646add2d06814cdb3560ab 172.16.100.206:8010@18010 master - 0 1575708805000 10 connected 10923-13653
2c67f0832908ae6375fec57b2399a0a8f4c9e9cc 172.16.100.203:8005@18005 slave 11ae0bcc3aeae0cb7e40c28f407e3d2a30504989 0 1575708806000 6 connected

//End of migration!!!

Please communicate and point out the shortcomings.

Keywords: Linux Redis vim Ruby CentOS

Added by kyin on Tue, 10 Dec 2019 20:29:22 +0200