基于Docker-Compose搭建Redis集群模式
一、部署环境
环境: 一台Linux虚拟机、Docker、Docker-Compose
目标: Redis集群模式,三主三从
明细: Redis7001-7006
二、编写redis-cluster配置文件
redis-cluster7001.conf
# 端口(7001 ~ 7006)
port 7001
# 可以连接的ip
bind 0.0.0.0
# 密码认证
requirepass bingo
# 开启保护模式
protected-mode yes
# 启动集群模式
cluster-enabled yes
# 配置文件名称(nodes7001.conf ~ nodes7006.conf)
cluster-config-file nodes7001.conf
# 节点超时时间
cluster-node-timeout 5000
# 当前节点ip
cluster-announce-ip 192.168.163.130
# 当前节点端口(7001 ~ 7006)
cluster-announce-port 7001
# 集群之间通信的端口号(17001 ~ 17006)
cluster-announce-bus-port 17001
# 启用AOF持久化
appendonly yes
仿照上面的配置复制五份,依次命名为redis-cluster7002.conf ~ redis-cluster7006.conf,把文件中所有出现7001的地方改成对应的端口号
三、编写Docker-Compose.yml
compose-redis-cluster
version: '3'
services:
redis-node1: # 服务名
image: redis:latest # 使用的镜像
container_name: redis-node1 # docker启动的容器名
ports: # 映射的端口 7001是redis server使用,17001是集群之间节点通信使用,都必须开放映射,如果不指定17001端口映射的话,创建集群的时候节点之间不能通信,集群会创建失败
- "7001:7001"
- "17001:17001"
volumes: # 映射的容器卷
- /mydata/redis/conf/redis-cluster7001.conf:/usr/local/etc/redis/redis.conf
- /mydata/redis/data:/data
command: bash -c "redis-server /usr/local/etc/redis/redis.conf"
networks: # 指定使用网络插件名称
- redis-net
redis-node2:
image: redis:latest
container_name: redis-node2
ports:
- "7002:7002"
- "17002:17002"
volumes:
- /mydata/redis/conf/redis-cluster7002.conf:/usr/local/etc/redis/redis.conf
- /mydata/redis/data:/data
command: redis-server /usr/local/etc/redis/redis.conf
networks:
- redis-net
redis-node3:
image: redis:latest
container_name: redis-node3
ports:
- "7003:7003"
- "17003:17003"
volumes:
- /mydata/redis/conf/redis-cluster7003.conf:/usr/local/etc/redis/redis.conf
- /mydata/redis/data:/data
command: redis-server /usr/local/etc/redis/redis.conf
networks:
- redis-net
redis-node4:
image: redis:latest
container_name: redis-node4
ports:
- "7004:7004"
- "17004:17004"
volumes:
- /mydata/redis/conf/redis-cluster7004.conf:/usr/local/etc/redis/redis.conf
- /mydata/redis/data:/data
command: redis-server /usr/local/etc/redis/redis.conf
networks:
- redis-net
redis-node5:
image: redis:latest
container_name: redis-node5
ports:
- "7005:7005"
- "17005:17005"
volumes:
- /mydata/redis/conf/redis-cluster7005.conf:/usr/local/etc/redis/redis.conf
- /mydata/redis/data:/data
command: redis-server /usr/local/etc/redis/redis.conf
networks:
- redis-net
redis-node6:
image: redis:latest
container_name: redis-node6
ports:
- "7006:7006"
- "17006:17006"
volumes:
- /mydata/redis/conf/redis-cluster7006.conf:/usr/local/etc/redis/redis.conf
- /mydata/redis/data:/data
command: redis-server /usr/local/etc/redis/redis.conf
networks:
- redis-net
redis-cluster-init: # redis-cli服务,作用是在上面六个redis节点启动成功之后,执行集群创建的命令
image: redis:latest
container_name: redis-cluster-init
depends_on: # 设置依赖顺序,在上面六个节点启动成功之后启动
- redis-node1
- redis-node2
- redis-node3
- redis-node4
- redis-node5
- redis-node6
command: bash -c "redis-cli --cluster create 192.168.163.130:7001 192.168.163.130:7002 192.168.163.130:7003 192.168.163.130:7004 192.168.163.130:7005 192.168.163.130:7006 --cluster-replicas 1 --cluster-yes && exit 0" # 执行集群初始化的命令, --cluster-yes 是指定在创建集群的时候需要输入一个参数这里设置为yes也就是代表输入yes,exit0 代表该服务启动成功之后自动退出
networks:
- redis-net
restart: "no" # 因为该服务只是用来执行Redis集群初始化的命令,所以服务关闭之后不需要重启
networks:
redis-net:
四、执行yml文件,启动容器
docker-compose -f compose-redis-cluster.yml up -d
docker ps 查看容器状态
可以看到六个redis节点都已经启动成功
五、查看Redis集群信息
连接redis-node1
docker exec -it redis-node1 redis-cli -p 7001 -a bingo -c
查看集群状态
cluster info
查看节点信息
cluster nodes
查看哈希槽分配信息
cluster slots
小结
以上就是作者基于Docker-Compose搭建Redis集群的所有内容,如果文中有错误或者表述不清楚的地方欢迎指正和讨论,谢谢 ~