Redis 4.0.9 版本集羣擴容

一、實驗環境

1、系統版本: Centos 7.6   x86_64 
2、Redis版本 4.0.9 
3、集羣IP信息
172.16.100.201  172.16.100.202  172.16.100.203
4、準備加入集羣的IP信息
172.16.100.204  172.16.100.205  172.16.100.206
5、目的
將Redis集羣的3主3從,擴容爲6主6從,204、205、206 三個新節點各新增1主1從!

二、安裝配置Redis集羣

1、在3臺服務器上安裝redis,每臺2個實例,如下:
172.16.100.201  8000 8001
172.16.100.202  8002 8003
172.16.100.203  8004 8005
開始安裝
#tar xf redis-4.0.9.tar.gz
#cd redis-4.0.9
#make
#mv redis-4.0.9  /opt/app/redis8000
2、提供配置文件
#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、修改系統參數
#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

關閉大頁面
#echo never > /sys/kernel/mm/transparent_hugepage/enabled

使配置生效
#sysctl  -p

啓動:
/opt/app/redis8000/src/redis-server /opt/app/redis8000/redis.conf 

以上是201服務器8000節點配置的例子,202和203服務器2個節點配置,參考上面即可,注意監聽ip地址和端口、路徑名稱需要作出相應的修改。

三、創建Redis 4.0.9 集羣(在201服務器操作即可)

1、安裝軟件包
#yum install ruby rubygems -y
#gem install redis -v 3.3.5
2、創建集羣
#/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、查看集羣IP信息
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

將線上對應3主3從Redis集羣slot的dump.rdb拷貝到對應節點,並啓動,目的是讓實驗環境Redis集羣有數據,或者自己造一些數據,此步驟省略!爲了演示效果,我
這裏手動set幾個key,如下:
172.16.100.201:8000> set name1 jodan
…………
172.16.100.201:8000> set name10 kawayi
…………

四、將新節點加入集羣並遷移slot(在172.16.100.201服務器操作)

注:在204、205、206各啓動2個redis實例,端口如下分配:
204  master 8006  slave  8007
205  master 8008  slave  8009
206  master 8010  slave  8011

1、配置啓動新服務器Redis(一共3臺服務器6個redis實例),配置方法參考步驟二,這裏不再贅述。

2、將3個master節點加入集羣
原集羣詳細信息:  3主3從
# /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

將172.16.100.204:8006 加入集羣,
/opt/app/redis8000/src/redis-trib.rb add-node 172.16.100.204:8006 172.16.100.201:8000

將172.16.100.205:8008 加入集羣
/opt/app/redis8000/src/redis-trib.rb add-node 172.16.100.205:8008 172.16.100.201:8000

將172.16.100.206:8010 加入集羣
/opt/app/redis8000/src/redis-trib.rb add-node 172.16.100.206:8010 172.16.100.201:8000

查看加入3個master節點之後的集羣信息:
#/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
可以看到新加入集羣的節點是沒有slot的,所以下面就需要將其他3個master節點的部分slot遷移過去。

3、開始slot自動遷移
#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
#################   花費時間長短根據遷移數據量大小
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
#################

結束之後,再次查看集羣信息:
# /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

可以看出新加入集羣的3個master節點已經有slot了。

查看前面手動加的key是否成功遷移到了新master節點,如下:
172.16.100.201:8000> get name1
-> Redirected to slot [12933] located at 172.16.100.206:8010    #新節點
"jodan"
172.16.100.206:8010> get name2
-> Redirected to slot [742] located at 172.16.100.205:8008      #新節點
"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    #新節點
"james"
172.16.100.206:8010> get name6
-> Redirected to slot [610] located at 172.16.100.205:8008      #新節點
"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     #新節點
"qiaozhi"  

可以看到有幾個key已經成功遷移到了新節點205和206!

4、爲新master節點添加slave節點(在172.16.100.201節點操作)
爲了避免單點故障,設計主從如下:
204              205             206
8006 M1         8008 M2          8010 M3

8007 S3         8009 S1          8011 S2

將205@8009這個節點加爲 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

將206@8011這個節點加爲 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

將204@8007這個節點加爲 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

再次查看集羣信息如下:
#/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

遷移結束!!!

不足之處,請多多交流指出。

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