redis优化系列(八)自动搭建Redis Cluster集群

该系列博文之上一篇:传送门 走你


上篇文章说了怎么样来手动搭建Redis集群,由此可见步骤繁琐且麻烦,而且 生产环境中是不会来这样手动搭建集群的。本篇文章我们使用redis-trib.rb工具来自动搭建Redis集群。


一、redis-trib.rb工具的简单介绍

redis-trib.rb 是采用 Ruby 实现的 Redis 集群管理工具。内部通过 Cluster 相关命令帮我们简化集群创建、检查、槽迁移和均衡等常见运维操作,使用之前需要安装 Ruby 依赖环境。redis-trib.rb工具是redis源码中自带的一个工具,redis-trib.rb工具在上篇博文中的素材当中我已经提供了,相关扩展我在Dockerfile(上篇博文中提供的素材中的Dockerfile文件)文件当中已经写了指令,查看下理解意思就可以了。


启动好6个或者N个节点之后,使用 redis-trib.rb create 命令完成节点握手和槽分配过程。


redis-trib.rb create --replicas 1  119.3.220.26:6391  119.3.220.26:6392  119.3.220.26:6393 119.3.220.26:6394 119.3.220.26:6395 119.3.220.26:6396


--replicas 参数指定集群中每个主节点配备几个从节点,这里设置为1,redis-trib.rb 会尽可能保证主从节点不分配在同一机器下,因此会重新排序节点列表顺序。节点列表顺序用于确定主从角色,先是主节点然后是从节点。创建过程中首先会给出主从节点角色分配的计划,并且会生成报告。


注意:redis-trib.rb最好是下载对应版本的。


二、使用redis-trib.rb工具搭建redis集群

2.1、承接上篇博文,先强制删除上篇博文中生成的redis集群容器,然后重新搭建。如果自己的环境没有这一步可自行忽略该步骤。

docker rm -f $(docker ps -aq)


2.2、使用docker-compose重新编排redis节点容器

cd /usr/docker/redis/   #进入编排文件所在的目录,根据自身情况修改

docker-compose -p redis-cluster up -d  #使用编排文件创建6个redis节点容器

r1.png


2.3、随便进入刚刚创建好的6个redis节点中的任意一台(这里进入redis-master1这台redis节点容器里面)

docker exec -it redis-master1 bash  #进入redis-master1这个节点容器里面

由于上篇的疏忽,忘了给redis-trib.rb文件赋予执行权限,这里给赋予执行权限
chmod +x /usr/bin/redis-trib.rb


2.4、使用redis-trib.rb create命令创建redis集群

redis-trib.rb create --replicas 1  119.3.220.26:6391  119.3.220.26:6392  119.3.220.26:6393 119.3.220.26:6394 119.3.220.26:6395 119.3.220.26:6396  

注意:记得把ip换成自己的

r2.png

然后会看到如下截图的信息:

r3.png

由上图可以看到端口号为:6391、6392、6393的是主节点 6394、6395、6396是从节点。而上面的M代表主节点,也就是Master,而S代表从节点也就是Slave。


而类似于4a7c8b623e3a7bb34835380b3149a9b69e28c8b1之类的一大长串的字符串是每一台redis节点的node_id。


而且由上图也可以看出,我们这里是6台redis节点,redis-trib.rb工具会自动给我们按照顺序将前三台(6391、6392、6393)作为主节点,后三台(6394、6395、6396)作为从节点。并且会自动将6394作为6391的从节点,6395做为6392的从节点,6396做为6393的从节点,也就是说会自动把主从关系给配置好。


再次声明:搭建Redis Cluster集群至少需要6台节点,也就是6台服务器。


2.5、输入yes等待配置完成

截图如下:

r4.png


2.6、验证主从是否自动搭建成功

进入6个Redis节点容器中的任意一台,比如说进入一台redis从节点,我这里进入redis-slave3这台从节点里面

docker exec -it redis-slave3 bash   #进入redis-slave3这台从redis节点容器里面

redis-cli -p 6396  #打开redis客户端  

cluster nodes  #查看节点信息

示例截图如下:

r5.png

由上图可见,我们的redis集群已经自动搭建成功啦。。


对比上篇博文的手动搭建redis集群,这里自动搭建就省事很多了。。就是一条命令的事。。


2.7、模拟说明一下redis cluster自动故障转移处理(这里就不对应一一截图了,用文字描述了)

①、停止3台master节点的redis容器中的任意一台容器,这里我选择停止redis-master1这台主redis节点容器(这里只能选择停止master节点,因为只有挂掉master节点的redis cluster才会做自动故障转移处理,反之 从节点不会,但是一个master节点可以挂多个slave节点)

docker stop redis-master1  #让redis-master1这台主redis节点容器停止掉


②、进入剩余5台redis节点容器中的任意一台,这里我选择进入redis-slave1这台从redis节点容器

docker exec -it redis-slave1 bash  #进入redis-slave1这台从redis节点容器里面

redis-cli -p 6394 
cluster nodes #查看redis集群节点信息,会发现redis-master1这台节点已经显示挂掉了,而其余的5台redis节点以及角色都发生了变化,有可能6394这台从redis节点已经被自动变成了主redis节点,这就是redis cluster集群的自动故障转移处理机制


③、再次重新启动redis-master1这台redis节点容器

docker start redis-master1  #启动redis-master1这台redis节点容器

#然后再次在6394这台redis节点中再次使用 cluster nodes 命令查看redis集群节点信息,会发现之前redis-master1这台redis节点容器的角色是master,此时已经变成了slave,至于变成了那个master下的slave,可以根据cluster nodes显示的节点信息来查看



搭建集群的注意事项:保证节点的数量


三、redis-trib.rb工具的其它常用命令

使用 redis-trib.rb help 命令查看redis-trib.rb工具的使用帮助说明

r6.png

#创建集群

create host1:port1 ... hostN:portN  

       --replicas <arg>  #带上该参数表示是否有从,arg表示从的数量


#检查集群的一些状态

check  host:port


#查看集群信息

info   host:port


#修复集群

fix host:port

    --timeout <arg>


#在线迁移slot(迁移数据或数据槽) 

reshardhost:port #个是必传参数,用来从一个节点获取整个集群信息,相当于获取集群信息的入口


    --from <arg>  #需要从哪些源节点上迁移slot,可从多个源节点完成迁移,以逗号隔开,传递的是节点的node id,还可以直接传递--from all,这样源节点就是集群的所有节点,不传递该参数的话,则会在迁移过程中提示用户输入。

    

    --to <arg>    #slot需要迁移的目的节点的node id,目的节点只能填写一个,不传递该参数的话,则会在迁移过程中提示用户输入。


    --slots <arg> #需要迁移的slot数量,不传递该参数的话,则会在迁移过程中提示用户输入。


    --yes  #设置该参数,可以在打印执行reshard计划的时候,提示用户输入yes确认后再执行reshard。

    

    --timeout <arg>  #设置migrate命令的超时时间。


    --pipeline <arg> #定义cluster getkeysinslot命令一次取出的key数量,不传的话使用默认值为10。


#平衡集群节点slot数量 

rebalance  host:port

    --weight <arg>

    --auto-weights

    --use-empty-masters

    --timeout <arg>

    --simulate 不会真正迁移,测试用的

    --pipeline <arg> 一次迁移多少分数据

    --threshold <arg>


#将新节点加入集群 

add-node new_host:new_port existing_host:existing_port

    --slave

    --master-id <arg>


#从集群中删除节点

del-node   host:port node_id


#设置集群节点间心跳连接的超时时间

set-timeout  host:port milliseconds


#在集群全部节点上执行命令

call  host:port command arg arg .. arg


#将外部redis数据导入集群

import  host:port

    --from <arg>

    --copy

    --replace



声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

精彩评论

全部回复12人评论7,777人参与