docker-compose 编排方式安装redis cluster集群【redis-trib 自动安装】(一)

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

创建成功的截图:
docker-compose 编排方式安装redis cluster集群【redis-trib 自动安装】(一)_第1张图片
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,主从关系,节点槽

docker-compose 编排方式安装redis cluster集群【redis-trib 自动安装】(一)_第2张图片8.操作redis执行set操作【没有指定集群模式】:

在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

你可能感兴趣的:(docker,redis)