docker-compose搭建redis伪集群
1、端口的安排
搭建三主三从,所以需要6个端口
server_ip=192.168.43.23(自己的主机的ip地址)
master-1:16379
master-2:16380
master-3:16381
slave-1:16389
slave-2:16390
slave-3:16391
这里虽然用到了6个端口,其实还需要占用3个集群总线的端口,就是master的端口+1000,也就是26379,26380,26381端口,需要查看端口是否被占用以及防火墙是否开启
2、创建文件及文件夹
(1)创建/docer-data/redis-cluster
我的所有的redis集群的文件都是放到该文件夹下面的,里面包含如下内容:
文件:docker-compose.yaml
文件夹:master-1、master-2、master-3、slave-1、slave-2、slave-3
其中,docker-compose.yaml是docker-compose启动redis集群的配置文件
下面的文件夹,是存放每个redis服务的资源以及生成数据或者log等
(2)文件内容
docker-compose.yaml
version: '3'
services:
master-1:
container_name: master-1
image: redis:5.0.8
command: redis-server /etc/usr/local/redis.conf
network_mode: "host"
restart: always
volumes:
- ./master-1/redis.conf:/etc/usr/local/redis.conf
- ./master-1/redis.log:/usr/local/redis/logs/redis-server.log
- ./master-1/data:/data
master-2:
container_name: master-2
command: redis-server /etc/usr/local/redis.conf
image: redis:5.0.8
network_mode: "host"
restart: always
volumes:
- ./master-2/redis.conf:/etc/usr/local/redis.conf
- ./master-2/redis.log:/usr/local/redis/logs/redis-server.log
- ./master-2/data:/data
master-3:
container_name: master-3
image: redis:5.0.8
command: redis-server /etc/usr/local/redis.conf
network_mode: "host"
restart: always
volumes:
- ./master-3/redis.conf:/etc/usr/local/redis.conf
- ./master-3/redis.log:/usr/local/redis/logs/redis-server.log
- ./master-3/data:/data
slave-1:
container_name: slave-1
image: redis:5.0.8
command: redis-server /etc/usr/local/redis.conf
network_mode: "host"
restart: always
volumes:
- ./slave-1/redis.conf:/etc/usr/local/redis.conf
- ./slave-1/redis.log:/usr/local/redis/logs/redis-server.log
- ./slave-1/data:/data
slave-2:
container_name: slave-2
image: redis:5.0.8
command: redis-server /etc/usr/local/redis.conf
network_mode: "host"
restart: always
volumes:
- ./slave-2/redis.conf:/etc/usr/local/redis.conf
- ./slave-2/redis.log:/usr/local/redis/logs/redis-server.log
- ./slave-2/data:/data
slave-3:
container_name: slave-3
image: redis:5.0.8
command: redis-server /etc/usr/local/redis.conf
network_mode: "host"
restart: always
volumes:
- ./slave-3/redis.conf:/etc/usr/local/redis.conf
- ./slave-3/redis.log:/usr/local/redis/logs/redis-server.log
- ./slave-3/data:/data
上面的配置文件注意一下几点:
1、网络模式使用host模式
2、需要在指定的宿主机创建文件,如redis.conf、redis.log,上面的volumes上面已经指定好了创建在宿主机的路径,每个redis实例都需要创建,所以需要创建6个(三主三从)
其中redis.conf的可以从其他的redis中copy一份过来,在上面只需要修改如下几项即可
port 16379 #这里填每台redis的端口号
bind 0.0.0.0 #绑定ip 0.0.0.0 指可以外网访问
cluster-enabled yes #开启集群
logfile "/usr/local/redis/logs/redis-server.log" #指定日志文件
requirepass htl123456 #密码
特别留意端口,上面的端口配置与前面端口安排是一致的
输入docker-compose up -d
如果没有意外的话6个redis实例会成功启动,尝试是否能够连接,如果不能连接需要自己查看日志,排查问题
3、构建集群
上面的步骤如果都成功了,仅仅说明是搭建了6个redis的实例,但是之间没有任何联系,下面就是如果使他们构建集群
docker exec -it master-1 redis-cli -h <server_ip> -p 16379 -a htl123456 --cluster create <server_ip>:16379 <server_ip>:16380 <server_ip>:16381 <server_ip>:16389 <server_ip>:16390 <server_ip>:16391 --cluster-replicas 1
上面的docker命令不能直接使用,需要给<server_ip>具体值,另外端口要根据自己上面安排的端口设计,以及密码。最后就是如果运行失败了,那么久看看是不是格式错误(空格啥的)
如果出现上图,那么恭喜你,搭建完成
我们可以使用下面的语句测试一下
docker exec -it master-1 redis-cli -c -p16379 -a htl123456
坑:
一直显示:waiting for the cluster to join…
开始以为是分槽需要那么多时间,后来运行了几个小时,还是这样显示
原来有redis集群总线的概念:redis集群总线端口为redis客户端端口加上10000,比如说你的redis 6379端口为客户端通讯端口,那么16379端口为集群总线端口
我搭建的redis集群中端口号是从 16379 ~ 16381为主节点端口, 16389~16391 从节点端口,这里需要将主端口+10000端口防火墙开放(我是用了阿里云的服务器,需要开放端口,如果是虚拟机可以直接关闭防火墙)
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/111205.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...