docker安装redis主从哨兵集群
配置主redis
文件挂载
创建redis.conf配置文件
vi /usr/local/etc/redis/redis.conf
port 6379
always-show-logo yes
# 密码
requirepass [密码]
# 密码
masterauth [防止出问题保持一致]
创建docker-compose.yml配置文件
vi /opt/docker/redis/server/docker-compose.yml
version: '2.2'
services:
redis-server:
image: redis
container_name: redis-server
restart: always
ports:
- 6379:6379
environment:
TZ: "Asia/Shanghai"
volumes:
- ./redis.conf:/usr/local/etc/redis/redis.conf
- /data/redis:/data
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
启动redis
docker-compose up -d
配置主Sentinel
创建redis-sentinel.conf配置文件
vi /opt/docker/redis/sentinel/redis-sentinel.conf
# 哨兵运行的端口
port 26379
# 是否后台启动
daemonize no
# 定义Redis主的别名, IP, 端口,这里的2指的是需要至少2个Sentinel认为主Redis挂了才最终会采取下一步行为
sentinel monitor mymaster [主Redis的IP地址] 6379 2
# 设置连接master和slave时的密码,注意的是sentinel不能分别为master和slave设置不同的密码,因此master和slave的密码应该设置相同。
sentinel auth-pass mymaster [密码保持一致]
# 哨兵将会在gossip hello消息中使用指定的ip地址,而不是自动发现的本地地址。
sentinel announce-ip "放另一台机子的ip"
# 哨兵使用的指定端口
sentinel announce-port 26379
# 指定多少毫秒之后 主节点没有应答哨兵sentinel 此时 哨兵主观上认为主节点下线
sentinel down-after-milliseconds mymaster 30000
# 指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步,这个数字越小,完成failover所需的时间就越长
sentinel parallel-syncs mymaster 1
# 故障转移超时时间
sentinel failover-timeout mymaster 180000
# 不允许使用SENTINEL SET设置notification-script和client-reconfig-script。
sentinel deny-scripts-reconfig yes
# 配置哨兵的ID
sentinel myid 50547f34ed71fd48c197924969937e738a39975b
创建docker-compose.yml配置文件
vi /opt/docker/redis/sentinel/docker-compose.yml
version: '2.2'
services:
redis-sentinel:
image: redis
container_name: redis-sentinel
restart: always
ports:
- 26379:26379
privileged: true
volumes:
- ./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
docker-compose up -d
配置从redis
创建redis.conf配置文件
vi /opt/docker/redis/server/redis.conf
port 6379
always-show-logo yes
slaveof [主redis的IP] 6379
requirepass [密码]
masterauth [防止出问题保持一致]
创建docker-compose.yml配置文件
vi /opt/docker/redis/server/docker-compose.yml
version: '2.2'
services:
redis-server:
image: redis
container_name: redis-server
restart: always
ports:
- 6379:6379
environment:
TZ: "Asia/Shanghai"
volumes:
- ./redis.conf:/usr/local/etc/redis/redis.conf
- /data/redis:/data
command: ["redis-server", "/usr/local/etc/redis/redis.conf"]
启动redis
docker-compose up -d
配置从Sentinel
创建redis-sentinel.conf配置文件
vi /opt/docker/redis/sentinel/redis-sentinel.conf
# 哨兵运行的端口
port 26379
# 是否后台启动
daemonize no
# 定义Redis主的别名, IP, 端口,这里的2指的是需要至少2个Sentinel认为主Redis挂了才最终会采取下一步行为
sentinel monitor mymaster [主Redis的IP地址] 6379 2
# 设置连接master和slave时的密码,注意的是sentinel不能分别为master和slave设置不同的密码,因此master和slave的密码应该设置相同。
sentinel auth-pass mymaster [密码保持一致]
# 哨兵将会在gossip hello消息中使用指定的ip地址,而不是自动发现的本地地址。
sentinel announce-ip "放另一台机子的ip"
# 哨兵使用的指定端口
sentinel announce-port 26379
# 指定多少毫秒之后 主节点没有应答哨兵sentinel 此时 哨兵主观上认为主节点下线
sentinel down-after-milliseconds mymaster 30000
# 指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步,这个数字越小,完成failover所需的时间就越长
sentinel parallel-syncs mymaster 1
# 故障转移超时时间
sentinel failover-timeout mymaster 180000
# 不允许使用SENTINEL SET设置notification-script和client-reconfig-script。
sentinel deny-scripts-reconfig yes
# 配置哨兵的ID
sentinel myid 13f9ce480cb60978d4495df76ce86c46c9dd2937
创建docker-compose.yml配置文件
vi /opt/docker/redis/sentinel/docker-compose.yml
version: '2.2'
services:
redis-sentinel:
image: redis
container_name: redis-sentinel
restart: always
ports:
- 26379:26379
privileged: true
volumes:
- ./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
docker-compose up -d