成都网站建设设计

将想法与焦点和您一起共享

Redis4.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

迁移结束!!!

不足之处,请多多交流指出。


文章标题:Redis4.0.9版本集群扩容
当前网址:http://chengdu.cdxwcx.cn/article/cgsiee.html