Redis3.0版本之后,有了集群的功能,提供了比以前版本的哨兵模式更高的性能与可用性,可是集群的水平扩展却比较麻烦,接下来介绍下Redis高可用集群如何作水平扩展,在原集群的6个节点的基础上新增2个节点,由原来的3主3从变成4主4从,原先的3主3从部署详见Redis系列(二):Redis高可用集群,以下图:html
① 将redis-5.0.2文件夹拷贝到新的主机192.168.160.154上去,(1)scp -r /usr/local/redis-5.0.2 root@192.168.160.154:/usr/local/ 进去到192.168.160.154主机 (2)cd /usr/localnode
② 新启动2个redis实例,而后检查是否启动成功 (1)/usr/local/redis-5.0.2/bin/redis-server /usr/local/redis-5.0.2/redis-cluster/700*/redis.conf (2)ps -ef | grep redis 查看是否启动成功redis
③ 查看redis集群的命令帮助 (1)cd /usr/local/redis-5.0.2 (2)bin/redis-cli --cluster help性能
create:建立一个集群host1:port1 ... hostN:portN call:能够执行redis命令 add-node:将一个节点添加到集群里,第一个参数为新节点的ip:port,第二个参数为集群中任意一个已经存在的节点的ip:port del-node:移除一个节点 reshard:从新分片 check:检查集群状态
④ 使用add-node命令新增一个主节点192.168.160.154:7001(master),前面的ip:port为新增节点,后面的ip:port为集群中已存在节点(1)/usr/local/redis-5.0.2/bin/redis-cli --cluster add-node 192.168.160.154:7001 192.168.160.146:7001spa
⑤(1)链接任意一个客户端便可:./redis-cli -c -h -p (-a访问服务端密码,-c表示集群模式,指定ip地址和端口号)如:/usr/local/redis-5.0.2/bin/redis-cli -c -h 192.168.160.146 -p 700* (2)进行验证: cluster info(查看集群信息)、cluster nodes(查看节点列表)3d
⑥ 使用redis-cli命令为192.168.160.154:7001分配slots槽位,找到集群中的任意一个主节点,对其进行从新分片工做。(1)/usr/local/redis-5.0.2/bin/redis-cli --cluster reshard 192.168.160.146:7001code
How many slots do you want to move (from 1 to 16384)? 4000 (ps:须要多少个槽移动到新的节点上,本身设置,好比4000个hash槽) What is the receiving node ID? 44b0bd6cf056af7dbbfa0dd9497def1cfc21eb6d (ps:把这4000个hash槽移动到哪一个节点上去,须要指定节点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:all (ps:输入all为从全部主节点中分别抽取相应的槽数指定到新节点中,抽取的总槽数为4000个;或者输入原节点ID而后输入done,意思将输入的节点ID,抽取的总槽数为4000个) Do you want to proceed with the proposed reshard plan (yes/no)? yes (ps:输入yes确认开始执行分片任务)
⑦ 查看下最新的集群状态server
⑧ 添加从节点192.168.160.154:7002到集群中去并查看集群状态htm
(1)/usr/local/redis-5.0.2/bin/redis-cli --cluster add-node 192.168.160.154:7002 192.168.160.146:7001blog
(2)cluster nodes
(3)如上图所示,仍是一个master节点,没有被分配任何的hash槽。咱们须要执行replicate命令来指定当前节点(从节点)的主节点id为哪一个,首先须要链接新加的192.168.160.154:7002节点的客户端,而后使用集群命令进行操做,把当前的192.168.160.154:7002(slave)节点指定到一个主节点下(这里使用以前建立的192.168.160.154:7001主节点)
(3-1)/usr/local/redis-5.0.2/bin/redis-cli -c -h 192.168.160.154 -p 7002
(3-2)cluster replicate 44b0bd6cf056af7dbbfa0dd9497def1cfc21eb6d #后面这串id为192.168.160.154:7001的节点id
(3-2)cluster nodes
目的还原成原始集群,以下图:
① 删除192.168.160.154:7002从节点,用del-node删除从节点192.168.160.154:7002,指定删除节点ip和端口,以及节点id(192.168.160.154:7002节点id)
(1)/usr/local/redis-5.0.2/bin/redis-cli --cluster del-node 192.168.160.154:7002 564963541c243365cbb20aed69e98048d21d68fd
(2)cluster nodes
② 删除192.168.160.154:7001主节点,这个步骤相对麻烦一些,由于主节点的里面是有分配了slots槽位,因此必须先把192.168.160.154:7001里的slots槽位放入到其余的可用主节点中去,而后再进行移除节点操做,否则会出现数据丢失问题(目前只能把master的数据迁移到一个节点上,暂时作不了平均分配功能)
(1)/usr/local/redis-5.0.2/bin/redis-cli --cluster reshard 192.168.160.154:7001
How many slots do you want to move (from 1 to 16384)? 4000 (ps:须要多少个槽移动到新的节点上,本身设置,好比4000个hash槽) What is the receiving node ID? e7f80ba80749904838b6d779a0646e7f22313624 (ps:把这4000个hash槽移动到哪一个节点上去,须要指定节点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:44b0bd6cf056af7dbbfa0dd9497def1cfc21eb6d Source node 1:done (ps:输入all为从全部主节点中分别抽取相应的槽数指定到新节点中,抽取的总槽数为4000个;或者输入原节点ID而后输入done,意思将输入的节点ID,抽取的总槽数为4000个) Do you want to proceed with the proposed reshard plan (yes/no)? yes (ps:输入yes确认开始执行分片任务)
(2)cluster nodes 已经成功的把192.168.160.154:7001主节点的数据迁移到192.168.160.146:7001上去了
(3)最后咱们直接使用del-node命令删除192.168.160.154:7001主节点便可
(4)最后执行cluster nodes