Redis5.0.8 08 redis集群工具创建集群

手动搭建集群便于理解集群创建的流程和细节,不过手动搭建集群需要很多步骤,当集群节点众多时,必然会加大搭建集群的复杂度和运维成本,因此官方提供了 redis-trib.rb 的工具,方便我们快速搭建集群。

Redis Cluster 在5.0之后取消了ruby脚本 redis-trib.rb的支持(手动命令行添加集群的方式不变),集合到redis-cli里,避免了再安装ruby的相关环境。直接使用redis-clit的参数--cluster 来取代。

环境还是用前面的环境:
192.168.189.14 redis01 主节点6380 从节点6381
192.168.189.15 redis02 主节点6380 从节点6381
192.168.189.16 redis03 主节点6380 从节点6381

先清除原来 手动创建的集群数据:(3台服务器都要清除)

pkill redis
rm -rf /data/redis_cluster/redis_6380/*
rm -rf /data/redis_cluster/redis_6381/*
一、启动redis 群集(3台服务器都要操作)

/root/redis_shell.sh start 6380
/root/redis_shell.sh start 6381
###/root/redis_shell.sh 是redis一个管理脚本,主要用来启动、停止、登录、重启、查看日志等。

二、工具部署(192.168.189.14上面操作)

创建命令
redis-cli --cluster create 192.168.189.14:6380 192.168.189.15:6380 192.168.189.16:6380
192.168.189.14:6381 192.168.189.15:6381 192.168.189.16:6381
--cluster-replicas 1
这条命令,代替了手动操作,
手动节点发现:cluster meet 192.168.189.15 6380
手动分配槽位:redis-cli -h 192.168.189.14 -p 6380 cluster addslots {0..5461}

手动创建复制集:
redis-cli -h 192.168.189.14 -p 6381 cluster replicate 58c2ec39dccc3e4c9b8b9628d8d6729b8f3879b2

Redis Cluster最低要求是3个主节点
--cluster-replicas 1 ## 1就表示每一个主节点有1个从节点

主节点写在前面,从节点写在主从节点后面。





早期版本的 redis-trib.rb 在这一步的时候就会出现,创建出来的主从复制集不标准。
登录集群,查看状态。





如果要发现,创建的主从复制不标准,需要手工调整。

比如说:192.168.189.16 6381 要调整复制关系到 189.14 6380

在192.168.189.16上面操作:
redis-cli -h 192.168.189.16 -p 6381 cluster replicate 0b362e34bbbf0827de9a32aa932f2aa1d7b67877

或者登录到需要调整复制关系的 从节点( 6381)命令模式

cluster replicate 0b362e34bbbf0827de9a32aa932f2aa1d7b67877 ##(要调整为的主节点的编号)

++++++++++++++++++++++++++
redis-cli --cluster help
Cluster Manager Commands:

create host1:port1 ... hostN:portN #创建集群

 --cluster-replicas <arg> #从节点个数
check host:port #检查集群
 --cluster-search-multiple-owners #检查是否有槽同时被分配给了多个节点
info host:port #查看集群状态
fix host:port #修复集群
 --cluster-search-multiple-owners #修复槽的重复分配问题
reshard host:port #指定集群的任意一节点进行迁移slot,重新分slots
 --cluster-from <arg> #需要从哪些源节点上迁移slot,可从多个源节点完成迁移,以逗号隔开,传递的是节点的node id,还可以直接传递--from all,这样源节点就是集群的所有节点,不传递该参数的话,则会在迁移过程中提示用户输入

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

 --cluster-slots <arg> #需要迁移的slot数量,不传递该参数的话,则会在迁移过程中提示用户输入。
--cluster-yes #指定迁移时的确认输入
--cluster-timeout <arg> #设置migrate命令的超时时间

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

--cluster-replace #是否直接replace到目标节点

rebalance host:port #指定集群的任意一节点进行平衡集群节点slot数量

--cluster-weight <node1=w1...nodeN=wN> #指定集群节点的权重

--cluster-use-empty-masters #设置可以让没有分配slot的主节点参与,默认不允许

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

 --cluster-simulate #模拟rebalance操作,不会真正执行迁移操作

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

--cluster-threshold <arg> #迁移的slot阈值超过threshold,执行rebalance操作

--cluster-replace #是否直接replace到目标节点

 add-node new_host:new_port existing_host:existing_port #添加节点,到指定的集群,默认添加主节点

 --cluster-slave #新节点作为从节点,默认随机一个主节点

 --cluster-master-id <arg> #给新节点指定主节点

del-node host:port node_id #删除给定的一个节点,成功后关闭该节点服

call host:port command arg arg .. arg #在集群的所有节点执行相关命令
set-timeout host:port milliseconds #设置cluster-node-timeout

import host:port #将外部redis数据导入集群
 --cluster-from <arg> #将指定实例的数据导入到集群
 --cluster-copy #migrate时指定copy

 --cluster-replace #migrate时指定replace