redis trib安装redis cluster集群构建流程:
1.准备节点(docker-compose 编排构建redis主从节点)
2.使用redis-trib.rb安装 (自动执行节点握手,自动操作节点主从配置,自动给主节点分配槽)
1.安装前准备
[root@localhost ~]# mkdir -p /usr/local/docker-compose-redis-trib
[root@localhost ~]# cd /usr/local/docker-compose-redis-trib
将准备文件全部上传到docker-compose-redis-trib目录下
地址:https://github.com/Yinjinshui/docker-compose-redis-trib
2.构建redis镜像
[root@localhost docker-compose-redis-cluster]# docker build -t rediscluster .
[root@localhost docker-compose-redis-cluster]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
rediscluster latest 2124d2e5475b 16 hours ago 392MB
3.执行docker-compose编排
[root@localhost docker-compose-redis-trib]# docker-compose up -d
Creating network "dockercomposeredistrib_redis-master" with driver "bridge"
Creating network "dockercomposeredistrib_redis-slave" with driver "bridge"
Creating redis-master1 ... done
Creating redis-master2 ...
Creating redis-salve2 ...
Creating redis-master3 ...
Creating redis-slave3 ...
Creating redis-master1 ...
4.查看构建的容器
[root@localhost docker-compose-redis-trib]# docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------
redis-master1 /bin/bash redis.sh Up 0.0.0.0:16391->16391/tcp, 0.0.0.0:6391->6391/tcp
redis-master2 /bin/bash redis.sh Up 0.0.0.0:16392->16392/tcp, 0.0.0.0:6392->6392/tcp
redis-master3 /bin/bash redis.sh Up 0.0.0.0:16393->16393/tcp, 0.0.0.0:6393->6393/tcp
redis-salve2 /bin/bash redis.sh Up 0.0.0.0:16395->16395/tcp, 0.0.0.0:6395->6395/tcp
redis-slave1 /bin/bash redis.sh Up 0.0.0.0:16394->16394/tcp, 0.0.0.0:6394->6394/tcp
redis-slave3 /bin/bash redis.sh Up 0.0.0.0:16396->16396/tcp, 0.0.0.0:6396->6396/tcp
5.使用redis-trib.rb创建redis 集群
使用 redis-trib.rb create 命令完成节点握手和槽分配过程
–replicas 参数指定集群中每个主节点配备几个从节点,这里设置为1,redis-trib.rb 会尽可能保证主从节点不分配在同一机器下,因此会重新排序节点列表顺序。节点列表顺序用于确定主从角色,先主节点之后是从节点。创建过程中首先会给出主从节点角色分配的计划,并且会生成报告
[root@localhost docker-compose-redis-trib]# docker exec -it redis-master1 bash
#使用redis-trib.rb 执行redis cluster 集群创建
[root@d554041398ff config]# redis-trib.rb create --help
bash: /usr/bin/redis-trib.rb: Permission denied
[root@d554041398ff config]# chmod +x /usr/bin/redis-trib.rb
#执行集群的创建
[root@d554041398ff config]# redis-trib.rb create --replicas 1 192.168.11.43:6391 192.168.11.43:6392 192.168.11.43:6393 192.168.11.43:6394 192.168.11.43:6395 192.168.11.43:6396
创建成功的截图:
6.CLUSTER nodes:列出集群当前已知的所有节点(node)的相关信息
此时节点与节点之间已经完成握手,同时也配置好主从关系,以及分配好槽
[root@d554041398ff config]# redis-cli -p 6391
127.0.0.1:6391> cluster nodes
4a976d5a8f1e34c5e8dacd8224871789a5d9b0c9 172.50.0.1:6395@16395 slave 77f4ee9ef778cc81835c6bcc1ed8b25e588dcc29 0 1576046723992 5 connected
77f4ee9ef778cc81835c6bcc1ed8b25e588dcc29 172.50.0.1:6392@16392 master - 0 1576046721976 2 connected 5461-10922
6e85fbc645400da58e5123f93614c8887d750f8c 172.50.0.1:6394@16394 slave 1de2e2b3fb2f2b1bbc7d511af512a8a85e1538ba 0 1576046722000 4 connected
1de2e2b3fb2f2b1bbc7d511af512a8a85e1538ba 172.50.0.2:6391@16391 myself,master - 0 1576046721000 1 connected 0-5460
aa3af2700627e8513c274c3f0370bc0b0afee304 172.50.0.1:6393@16393 master - 0 1576046721000 3 connected 10923-16383
602bd5a198e5abd29da5a92197e2099690430a9a 172.50.0.1:6396@16396 slave aa3af2700627e8513c274c3f0370bc0b0afee304 0 1576046722985 6 connected
7.进入/var/lib/redis查看配置文件或用于唯一标识集群内一个节点ID
生成的文件是:nodes-6379.conf
该文件存储了节点握手信息。以及节点唯一标识Id,主从关系,节点槽
在redis-master1 6391 执行set操作
127.0.0.1:6391> set name 111
(error) MOVED 5798 172.50.0.1:6392--》提示该key需要存储到5798的槽中
127.0.0.1:6391> get name
(error) MOVED 5798 172.50.0.1:6392
127.0.0.1:6391>
【提示该key需要到6392的节点执行操作】
在redis-master2 6392 执行set操作
127.0.0.1:6392> set name 111
OK
127.0.0.1:6392> get name
"111"
【name信息只有在6392的节点才能操作】
set,get操作都得到指定的槽中操作,不然key无法执行set,get操作
【说明:数据插入一定要到到对应的槽区执行数据插入的操作】
9.集群模式下获取数据:
[root@d8b6958531ad redis]# redis-cli -c -h 192.168.11.43 -p 6391 set name 123456
OK
[root@d8b6958531ad redis]# redis-cli -c -h 192.168.11.43 -p 6391 get name
"123456"
[root@d8b6958531ad redis]# rredis-cli -c -h 192.168.11.43 -p 6391 set nameof 1111
OK
[root@d8b6958531ad redis]# redis-cli -c -h 192.168.11.43 -p 6391 get nameof
"1111"
【注意:集群模式下的操作无需指定到对应的槽节点执行数据操作】
10.redis-trib.rb 的命令
命令说明:
redis-trib.rb help
Usage: redis-trib
#创建集群
create host1:port1 ... hostN:portN
--replicas #带上该参数表示是否有从,arg表示从的数量
#检查集群
check host:port
#查看集群信息
info host:port
#修复集群
fix host:port
--timeout
#在线迁移slot
reshard host:port #个是必传参数,用来从一个节点获取整个集群信息,相当于获取集群信息的入口
--from #需要从哪些源节点上迁移slot,可从多个源节点完成迁移,以逗号隔开,传递的是节点的node id,还可以直接传递--from all,这样源节点就是集群的所有节点,不传递该参数的话,则会在迁移过程中提示用户输入
--to #slot需要迁移的目的节点的node id,目的节点只能填写一个,不传递该参数的话,则会在迁移过程中提示用户输入。
--slots #需要迁移的slot数量,不传递该参数的话,则会在迁移过程中提示用户输入。
--yes #设置该参数,可以在打印执行reshard计划的时候,提示用户输入yes确认后再执行reshard
--timeout #设置migrate命令的超时时间。
--pipeline #定义cluster getkeysinslot命令一次取出的key数量,不传的话使用默认值为10。
#平衡集群节点slot数量
rebalance host:port
--weight
--auto-weights
--use-empty-masters
--timeout
--simulate
--pipeline
--threshold
#将新节点加入集群
add-node new_host:new_port existing_host:existing_port
--slave
--master-id
#从集群中删除节点
del-node host:port node_id
#设置集群节点间心跳连接的超时时间
set-timeout host:port milliseconds
#在集群全部节点上执行命令
call host:port command arg arg .. arg
#将外部redis数据导入集群
import host:port
--from
--copy
--replace