redis集群一般有6个,三主三从,这里就是采取这种模式。
docker-compose文件
#Compose目前有三个版本分别为Version 1,Version 2,Version 3,Compose区分Version 1和Version 2(Compose 1.6.0+,Docker Engine 1.10.0+)。Version 2支持更多的指令。Version 1将来会被弃用。
version: "2"
services:
# 服务名称
redis-7000:
# 服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像。
image: redis:latest
# 创建的容器名称
container_name: redis-7000
# 自启动
restart: always
# container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。
privileged: true
# 为容器设置环境变量:
environment:
- TZ=Asia/Shanghai
# 端口映射,格式为宿主机端口:容器内部端口
ports:
- "7000:7000"
- "17000:17000"
# 注意:这里记得打开集群总线端口,规则为offset 10000 - "17000:17000",容器内部就是通过17000这个端口进行连接的
# 挂载数据卷,用于宿主机和容器共享文件,格式为宿主机目录:容器内部目录
volumes:
- ./redis/7000/data:/data
- ./redis/7000/conf/redis.conf:/usr/local/etc/redis/redis.conf
# 覆盖容器启动后默认执行的命令。
command: redis-server /usr/local/etc/redis/redis.conf
redis-7001:
# 服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像。
image: redis:latest
# 创建的容器名称
container_name: redis-7001
# 自启动
restart: always
# container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。
privileged: true
# 为容器设置环境变量:
environment:
- TZ=Asia/Shanghai
# 端口映射,格式为宿主机端口:容器内部端口
ports:
- "7001:7001"
- "17001:17001"
# 注意:这里记得打开集群总线端口,规则为offset 10000 - "17000:17000"
# 挂载数据卷,用于宿主机和容器共享文件,格式为宿主机目录:容器内部目录
volumes:
- ./redis/7001/data:/data
- ./redis/7001/conf/redis.conf:/usr/local/etc/redis/redis.conf
# 覆盖容器启动后默认执行的命令。
command: redis-server /usr/local/etc/redis/redis.conf
redis-7002:
# 服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像。
image: redis:latest
# 创建的容器名称
container_name: redis-7002
# 自启动
restart: always
# container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。
privileged: true
# 为容器设置环境变量:
environment:
- TZ=Asia/Shanghai
# 端口映射,格式为宿主机端口:容器内部端口
ports:
- "7002:7002"
- "17002:17002"
# 注意:这里记得打开集群总线端口,规则为offset 10000 - "17000:17000"
# 挂载数据卷,用于宿主机和容器共享文件,格式为宿主机目录:容器内部目录
volumes:
- ./redis/7002/data:/data
- ./redis/7002/conf/redis.conf:/usr/local/etc/redis/redis.conf
# 覆盖容器启动后默认执行的命令。
command: redis-server /usr/local/etc/redis/redis.conf
redis-7003:
# 服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像。
image: redis:latest
# 创建的容器名称
container_name: redis-7003
# 自启动
restart: always
# container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。
privileged: true
# 为容器设置环境变量:
environment:
- TZ=Asia/Shanghai
# 端口映射,格式为宿主机端口:容器内部端口
ports:
- "7003:7003"
- "17003:17003"
# 注意:这里记得打开集群总线端口,规则为offset 10000 - "17000:17000"
# 挂载数据卷,用于宿主机和容器共享文件,格式为宿主机目录:容器内部目录
volumes:
- ./redis/7003/data:/data
- ./redis/7003/conf/redis.conf:/usr/local/etc/redis/redis.conf
# 覆盖容器启动后默认执行的命令。
command: redis-server /usr/local/etc/redis/redis.conf
redis-7004:
# 服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像。
image: redis:latest
# 创建的容器名称
container_name: redis-7004
# 自启动
restart: always
# container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。
privileged: true
# 为容器设置环境变量:
environment:
- TZ=Asia/Shanghai
# 端口映射,格式为宿主机端口:容器内部端口
ports:
- "7004:7004"
- "17004:17004"
# 注意:这里记得打开集群总线端口,规则为offset 10000 - "17000:17000"
# 挂载数据卷,用于宿主机和容器共享文件,格式为宿主机目录:容器内部目录
volumes:
- ./redis/7004/data:/data
- ./redis/7004/conf/redis.conf:/usr/local/etc/redis/redis.conf
# 覆盖容器启动后默认执行的命令。
command: redis-server /usr/local/etc/redis/redis.conf
redis-7005:
# 服务的镜像名称或镜像ID。如果镜像在本地不存在,Compose将会尝试拉取镜像。
image: redis:latest
# 创建的容器名称
container_name: redis-7005
# 自启动
restart: always
# container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。
privileged: true
# 为容器设置环境变量:
environment:
- TZ=Asia/Shanghai
# 端口映射,格式为宿主机端口:容器内部端口
ports:
- "7005:7005"
- "17005:17005"
# 注意:这里记得打开集群总线端口,规则为offset 10000 - "17000:17000"
# 挂载数据卷,用于宿主机和容器共享文件,格式为宿主机目录:容器内部目录
volumes:
- ./redis/7005/data:/data
- ./redis/7005/conf/redis.conf:/usr/local/etc/redis/redis.conf
# 覆盖容器启动后默认执行的命令。
command: redis-server /usr/local/etc/redis/redis.conf
需要修改的地方主要是容器的名字,容器的两个端口(第二个端口一定要比第一个端口大10000,代表总线,比如7000端口下面必须写一个17000),挂载目录,其他保持一致即可。
挂载目录:
data目录为空,同时docker-compose.yml文件与redis目录同级。
conf目录下有一个redis.conf文件:
内容如下:
以下展现的是redis-7000容器的配置文件。
#取消绑定ip,把 bind 127.0.0.1 注释
#bind 127.0.0.1
#修改保护模式为no,可以让非本机ip不加密码访问
protected-mode no
#修改为对应端口号
port 7000
#修改redis为后台启动
daemonize no
#更改数据存储目录,方便管理
#dir /usr/local/myredis/rediscluster/node7000
#开启集群,取消注释
cluster-enabled yes
#取消注释并修改为对应名称
cluster-config-file nodes.conf
#集群超时参数,取消注释
cluster-node-timeout 15000
#修改为数据同步,改为aof备份
appendonly yes
#当主机和从机都down掉时,其它主节点是否可以写操作,no 可以,yes 不行,默认为yes。根据需求配置
#当主机和从机都down掉时并设置为no时,该主机所在槽位数据不可写。可能会造成数据丢失情况
# 以下三个配置参数静态设定节点的运行参数, 包括对外IP, 普通Redis命令端口和集群桥接端口
# Redis Cluster 不支持NATted环境和IP地址或TCP端口被重映射(remapped)的环境。
# Docker使用一种名叫port mapping的技术, 运行于Docker容器内的程序实际对外使用的端口和监听的端口可不相同. 为了让Docker 兼容Redis Cluster, 需要使用Docker的host network模式。
#为了使Redis集群在这样的环境中工作,静态每个节点都知道需要其公共地址的配置
cluster-announce-ip 192.168.73.133
# 客户端连接端口
cluster-announce-port 7000
# 总线端口为普通端口port+10000,所谓Cluster bus, 即使用一种二进制协议(binary protocol)进行集群内点对点(node-to-node)通讯, 包括节点失效检测, 配置更新, 故障转移(failover)认证等
cluster-announce-bus-port 17000
cluster-announce-ip 192.168.73.133 后面的ip地址改为实际的IP地址。
cluster-announce-port 7000 这个容器的端口
cluster-announce-bus-port 17000 这个容器的总线
port 7000
后面的五个容器也是修改这四个地方,比如redis-7001配置文件是这样的:
#取消绑定ip,把 bind 127.0.0.1 注释
#bind 127.0.0.1
#修改保护模式为no,可以让非本机ip不加密码访问
protected-mode no
#修改为对应端口号
port 7001
#修改redis为后台启动
daemonize no
#更改数据存储目录,方便管理
#dir /usr/local/myredis/rediscluster/node7000
#开启集群,取消注释
cluster-enabled yes
#取消注释并修改为对应名称
cluster-config-file nodes.conf
#集群超时参数,取消注释
cluster-node-timeout 15000
#修改为数据同步,改为aof备份
appendonly yes
#当主机和从机都down掉时,其它主节点是否可以写操作,no 可以,yes 不行,默认为yes。根据需求配置
#当主机和从机都down掉时并设置为no时,该主机所在槽位数据不可写。可能会造成数据丢失情况
# 以下三个配置参数静态设定节点的运行参数, 包括对外IP, 普通Redis命令端口和集群桥接端口
# Redis Cluster 不支持NATted环境和IP地址或TCP端口被重映射(remapped)的环境。
# Docker使用一种名叫port mapping的技术, 运行于Docker容器内的程序实际对外使用的端口和监听的端口可不相同. 为了让Docker 兼容Redis Cluster, 需要使用Docker的host network模式。
#为了使Redis集群在这样的环境中工作,静态每个节点都知道需要其公共地址的配置
cluster-announce-ip 192.168.73.133
# 客户端连接端口
cluster-announce-port 7001
# 总线端口为普通端口port+10000,所谓Cluster bus, 即使用一种二进制协议(binary protocol)进行集群内点对点(node-to-node)通讯, 包括节点失效检测, 配置更新, 故障转移(failover)认证等
cluster-announce-bus-port 17001
开始部署
进入docker-compose.yml文件所在的目录:
创建容器
执行:docker-compose up -d
创建集群:
执行:docker exec -it redis-7000 /bin/bash 进入容器。
执行:redis-cli --cluster create --cluster-replicas 1 192.168.73.133:7000 192.168.73.133:7001 192.168.73.133:7002 192.168.73.133:7003 192.168.73.133:7004 192.168.73.133:7005
开启集群。
这里的--cluster-replicas 1 的1代表一主一从,前面三个为主后面三个为从,这里的ip地址和端口根据上面的conf文件自行修改。
到这里输入yes,等待片刻即可。
至此集群搭建成功。
此时只需测试在7000上的创建的键值会不会同步到其他任意一个redis上即可验证。