Docker搭建Redis集群
准备服务器
内网IP:10.0.12.14
开放端口:7001-7006, 17001-17006
准备配置文件
编写模板文件
# 端口号
port ${PORT}
# 绑定ip
bind 0.0.0.0
# redis-cli访问密码
requirepass 123456
# 访问主节点密码
masterauth 123456
# 保护模式,默认是yes,开启保护模式
protected-mode no
# 是否守护模式,docker方式不需要
daemonize no
# 是否开启AOF持久化模式
appendonly yes
# 是否开启集群模式
cluster-enabled yes
# 集群节点信息文件
# cluster-config-file nodes.conf
# 集群节点连接超时时间
cluster-node-timeout 15000
# 集群节点宿主机IP
cluster-announce-ip 10.0.12.14
# 集群节点映射端口
cluster-announce-port ${PORT}
# 集群节点总线端口
cluster-announce-bus-port 1${PORT}
生成配置文件
创建并执行下面shell脚本会自动生成配置文件。
for port in `seq 7001 7006`
do
mkdir -p ${port}/{conf,data} \
&& PORT=${port} envsubst < redis-cluster.tmpl > ${port}/conf/redis.conf
done
执行成功后会在目录下生成7001-7006的文件夹
每个文件夹中的内容如下(data目录下暂时未空):
编写docker-compose.yml
执行命令:vim docker-compose.yml
copy下面内容:
version: "3.3"
# 定义服务
services:
redis-7001: # 服务名称
image: redis # 容器镜像
container_name: redis-7001 # 容器名称
restart: always # 容器总是重启
ports: # 映射端口
- 7001:7001
- 17001:17001
volumes: # 目录挂载
- /app/redis-cluster/7001/conf/redis.conf:/usr/local/redis/redis.conf
- /app/redis-cluster/7001/data:/data
command: redis-server /usr/local/redis/redis.conf # 服务启动命令
networks: # 指定使用网络插件名称
- redis-net
redis-7002:
image: redis
container_name: redis-7002
ports:
- 7002:7002
- 17002:17002
volumes:
- /app/redis-cluster/7002/conf/redis.conf:/usr/local/redis/redis.conf
- /app/redis-cluster/7002/data:/data
command: redis-server /usr/local/redis/redis.conf
networks: # 指定使用网络插件名称
- redis-net
redis-7003:
image: redis
container_name: redis-7003
ports:
- 7003:7003
- 17003:17003
volumes:
- /app/redis-cluster/7003/conf/redis.conf:/usr/local/redis/redis.conf
- /app/redis-cluster/7003/data:/data
command: redis-server /usr/local/redis/redis.conf
networks: # 指定使用网络插件名称
- redis-net
redis-7004:
image: redis
container_name: redis-7004
ports:
- 7004:7004
- 17004:17004
volumes:
- /app/redis-cluster/7004/conf/redis.conf:/usr/local/redis/redis.conf
- /app/redis-cluster/7004/data:/data
command: redis-server /usr/local/redis/redis.conf
networks: # 指定使用网络插件名称
- redis-net
redis-7005:
image: redis
container_name: redis-7005
ports:
- 7005:7005
- 17005:17005
volumes:
- /app/redis-cluster/7005/conf/redis.conf:/usr/local/redis/redis.conf
- /app/redis-cluster/7005/data:/data
command: redis-server /usr/local/redis/redis.conf
networks: # 指定使用网络插件名称
- redis-net
redis-7006:
image: redis
container_name: redis-7006
ports:
- 7006:7006
- 17006:17006
volumes:
- /app/redis-cluster/7006/conf/redis.conf:/usr/local/redis/redis.conf
- /app/redis-cluster/7006/data:/data
command: redis-server /usr/local/redis/redis.conf
networks: # 指定使用网络插件名称
- redis-net
networks:
redis-net:
指定打包
docker-compose up -d
进入容器
# 进入其中一个redis容器内
docker exec -it redis-7001 bash
# 用redis-cli创建整个redis集群
# -a 表示连接的密码
# --cluster create 表示需要集群的redis主机和端口
# --cluster-replicas 1 其中的1表示一主一从
redis-cli -a 123456 --cluster create 10.0.12.14:7001 10.0.12.14:7002 10.0.12.14:7003 10.0.12.14:7004 10.0.12.14:7005 10.0.12.14:7006 --cluster-replicas 1
验证
连接redis
redis-cli -p 7001 -a 123456 -c
输入命令
cluster info
出现cluster_state:ok
表示集群创建成功。
License:
CC BY 4.0