“在代码的世界里,每一行都是进步的足迹,每一次挑战都是成长的机遇。”

Docker 构建一主多从的dockerfile和redis配置文件

docker-compose.yml文件

version: '3'
services:
redis-sentinel-1:
image: redis
container_name: redis-sentinel-1
restart: always
# 为了规避Docker中端口映射可能带来的问题
# 这里选择使用host网络
network_mode: host
volumes:
- "/usr/local/redis/redis-sentinel.conf:/usr/local/etc/redis/redis-sentinel.conf"
# 指定时区,保证容器内时间正确
environment:
TZ: "Asia/Shanghai"
command: ["redis-sentinel", "/usr/local/etc/redis/redis-sentinel.conf"]
redis-sentinel-2:
image: redis
container_name: redis-sentinel-2
restart: always
# 为了规避Docker中端口映射可能带来的问题
# # 这里选择使用host网络
network_mode: host
volumes:
- "/usr/local/redis/redis-sentinel1.conf:/usr/local/etc/redis/redis-sentinel.conf"
# # 指定时区,保证容器内时间正确
environment:
TZ: "Asia/Shanghai"
command: ["redis-sentinel", "/usr/local/etc/redis/redis-sentinel.conf"]
#
redis-server-master:
image: redis
container_name: redis-server-master
restart: always
# 为了规避Docker中端口映射可能带来的问题
# 这里选择使用host网络
network_mode: host
environment:
TZ: "Asia/Shanghai"
volumes:
# 映射配置文件和数据目录
- /usr/local/redis/redis-master.conf:/usr/local/etc/redis/redis.conf
- /usr/local/redis/master/data/:/data
command: [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
redis-server-slave:
image: redis
container_name: redis-server-slave
restart: always
# 为了规避Docker中端口映射可能带来的问题
# # 这里选择使用host网络
network_mode: host
environment:
TZ: "Asia/Shanghai"
volumes:
# # 映射配置文件和数据目录
- /usr/local/redis/redis-slave1.conf:/usr/local/etc/redis/redis.conf
- /usr/local/redis/slave/data/:/data
command: [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
#


redis-master.conf文件:
bind 0.0.0.0
# 启用保护模式
# 即在没有使用bind指令绑定具体地址时
# 或在没有设定密码时
# Redis将拒绝来自外部的连接
# protected-mode yes

# 监听端口
port 6379

# 启动时不打印logo
# 这个不重要,想看logo就打开它
always-show-logo no

# 设定密码认证
requirepass password111

# 禁用KEYS命令
# 一方面 KEYS * 命令可以列出所有的键,会影响数据安全
# 另一方面 KEYS 命令会阻塞数据库,在数据库中存储了大量数据时,该命令会消耗很长时间
# 期间对Redis的访问也会被阻塞,而当锁释放的一瞬间,大量请求涌入Redis,会造成Redis直接崩溃
rename-command KEYS ""

# 此外还应禁止 FLUSHALL 和 FLUSHDB 命令
# 这两个命令会清空数据,并且不会失败


bind 0.0.0.0
#
# # 哨兵的端口号
# # 因为各个哨兵节点会运行在单独的Docker容器中
# # 所以无需担心端口重复使用
# # 如果需要在单机
port 26379
#
# # 设定密码认证
# requirepass password111
#
# # 配置哨兵的监控参数
# # 格式:sentinel monitor <master-name> <ip> <redis-port> <quorum>
# # master-name是为这个被监控的master起的名字
# # ip是被监控的master的IP或主机名。因为Docker容器之间可以使用容器名访问,所以这里写master节点的容器名
# # redis-port是被监控节点所监听的端口号
# # quorom设定了当几个哨兵判定这个节点失效后,才认为这个节点真的失效了
sentinel monitor mymaster 192.168.1.102 6379 2
#
# # 连接主节点的密码
# # 格式:sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster password111
#
# # master在连续多长时间无法响应PING指令后,就会主观判定节点下线,默认是30秒
# # 格式:sentinel down-after-milliseconds <master-name> <milliseconds>
sentinel down-after-milliseconds mymaster 30000

redis-sentinel1.conf配置文件
#bind 0.0.0.0
#
# # 哨兵的端口号
# # 因为各个哨兵节点会运行在单独的Docker容器中
# # 所以无需担心端口重复使用
# # 如果需要在单机
port 26380
#
# # 设定密码认证
# requirepass password111
#
# # 配置哨兵的监控参数
# # 格式:sentinel monitor <master-name> <ip> <redis-port> <quorum>
# # master-name是为这个被监控的master起的名字
# # ip是被监控的master的IP或主机名。因为Docker容器之间可以使用容器名访问,所以这里写master节点的容器名
# # redis-port是被监控节点所监听的端口号
# # quorom设定了当几个哨兵判定这个节点失效后,才认为这个节点真的失效了
sentinel monitor mymaster 192.168.1.102 6379 2
#
# # 连接主节点的密码
# # 格式:sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster password111
#
# # master在连续多长时间无法响应PING指令后,就会主观判定节点下线,默认是30秒
# # 格式:sentinel down-after-milliseconds <master-name> <milliseconds>
sentinel down-after-milliseconds mymaster 30000


redis-slave1.conf配置文件
# bind 127.0.0.1

# 启用保护模式
# 即在没有使用bind指令绑定具体地址时
# 或在没有设定密码时
# Redis将拒绝来自外部的连接
# protected-mode yes

# 监听端口
port 6380

# 启动时不打印logo
# 这个不重要,想看logo就打开它
always-show-logo no

# 设定密码认证
requirepass password111

# 禁用KEYS命令
# 一方面 KEYS * 命令可以列出所有的键,会影响数据安全
# 另一方面 KEYS 命令会阻塞数据库,在数据库中存储了大量数据时,该命令会消耗很长时间
# 期间对Redis的访问也会被阻塞,而当锁释放的一瞬间,大量请求涌入Redis,会造成Redis直接崩溃
rename-command KEYS ""

# 此外还应禁止 FLUSHALL 和 FLUSHDB 命令
# 这两个命令会清空数据,并且不会失败

# 配置master节点信息
# 格式:
#slaveof <masterip> <masterport>
# 此处masterip所指定的redis-server-master是运行master节点的容器名
# Docker容器间可以使用容器名代替实际的IP地址来通信
slaveof 127.0.0.1 6379

# 设定连接主节点所使用的密码(改成自己的密码)
masterauth password111



Write your comment Here