“为学日益,为道日损。
损之又损,以至于无为。
无为而无不为。
取天下常以无事,及其有事,不足以取天下。”1
使用docker-compose方式安装redis-sentinel模式集群
简单说明一下何为哨兵模式?
有两个角色:哨兵节点和存储节点,一般简易各为3个为宜。
Sentinel(哨兵)节点是用于监控redis存储节点中master状态的工具,是Redis的高可用性解决方案,sentinel哨兵模式已经被集成在redis2.4之后的版本中。sentinel是redis高可用的解决方案,sentinel系统可以监视一个或者多个redis master服务,以及这些master服务的所有从服务;当某个master服务下线时,自动将该master下的某个从服务升级为master服务替代已下线的master服务继续处理请求。
sentinel可以让redis实现主从复制,当一个集群中的master失效之后,sentinel可以选举出一个新的master用于自动接替master的工作,集群中的其他redis服务器自动指向新的master同步数据。一般建议sentinel采取奇数台,防止某一台sentinel无法连接到master导致误切换。
哨兵节点配置
文件目录
1 | - sentinel |
2 | - data1 |
3 | - data2 |
4 | - data3 |
5 | - docker-compose.yml |
6 | - sentinel.conf |
7 | - sentinel2.conf |
8 | - sentinel3.conf |
docker-compose.yml
1 | version: '2' |
2 | services: |
3 | sentinel1: |
4 | image: redis ## 镜像 |
5 | container_name: redis-sentinel-1 |
6 | command: redis-sentinel /usr/local/etc/redis/sentinel.conf |
7 | ports: |
8 | - "26379:26379" |
9 | restart: always ## 容器随宿主机重启 |
10 | volumes: |
11 | - "/marvel/local/docker/sentinel/sentinel.conf:/usr/local/etc/redis/sentinel.conf" ## 挂载配置文件 |
12 | - "/marvel/local/docker/sentinel/data1:/data" ## 挂载数据存储路径 |
13 | sentinel2: |
14 | image: redis ## 镜像 |
15 | container_name: redis-sentinel-2 ## 容器名称 |
16 | ports: |
17 | - "26380:26379" |
18 | restart: always |
19 | command: redis-sentinel /usr/local/etc/redis/sentinel.conf |
20 | volumes: |
21 | - "/marvel/local/docker/sentinel/sentinel2.conf:/usr/local/etc/redis/sentinel.conf" |
22 | - "/marvel/local/docker/sentinel/data2:/data" |
23 | sentinel3: |
24 | image: redis ## 镜像 |
25 | container_name: redis-sentinel-3 |
26 | ports: |
27 | - "26381:26379" |
28 | restart: always |
29 | command: redis-sentinel /usr/local/etc/redis/sentinel.conf |
30 | volumes: |
31 | - "/marvel/local/docker/sentinel/sentinel3.conf:/usr/local/etc/redis/sentinel.conf" |
32 | - "/marvel/local/docker/sentinel/data3:/data" |
33 | networks: |
34 | default: |
35 | external: |
36 | name: redis_sentinel-master-ddsh ## 配置网络 |
sentinel.conf
1 | port 26379 |
2 | dir "/tmp" |
3 | sentinel deny-scripts-reconfig yes |
4 | sentinel monitor mymaster-ddsh xxx.xxx.xxx.xxx 6379 2 |
5 | sentinel failover-timeout mymaster-ddsh 10000 |
6 | sentinel auth-pass mymaster-ddsh redispasswordXXXX |
sentinel2.conf
1 | port 26379 |
2 | dir "/tmp" |
3 | sentinel deny-scripts-reconfig yes |
4 | sentinel monitor mymaster-ddsh xxx.xxx.xxx.xxx 6379 2 |
5 | sentinel failover-timeout mymaster-ddsh 10000 |
6 | sentinel auth-pass mymaster-ddsh redispasswordXXXX |
sentinel3.conf
1 | port 26379 |
2 | dir "/tmp" |
3 | sentinel deny-scripts-reconfig yes |
4 | sentinel monitor mymaster-ddsh xxx.xxx.xxx.xxx 6379 2 |
5 | sentinel failover-timeout mymaster-ddsh 10000 |
6 | sentinel auth-pass mymaster-ddsh redispasswordXXXX |
存储节点配置
docker-compose.yml
1 | version: '2' |
2 | services: |
3 | master: |
4 | image: redis ## 镜像 |
5 | container_name: redis-master |
6 | command: redis-server --requirepass 'PASSWORDXXX' |
7 | ports: |
8 | - "6379:6379" |
9 | restart: always |
10 | networks: |
11 | - redis_sentinel-master-ddsh |
12 | slave1: |
13 | image: redis ## 镜像 |
14 | container_name: redis-slave-1 |
15 | ports: |
16 | - "6380:6379" ## 暴露端口 |
17 | restart: always |
18 | command: redis-server --slaveof redis-master 6379 --requirepass 'PASSWORDXXX' --masterauth 'PASSWORDXXX' |
19 | depends_on: |
20 | - master |
21 | networks: |
22 | - redis_sentinel-master-ddsh |
23 | slave2: |
24 | image: redis ## 镜像 |
25 | container_name: redis-slave-2 |
26 | ports: |
27 | - "6381:6379" ## 暴露端口 |
28 | restart: always |
29 | command: redis-server --slaveof redis-master 6379 --requirepass 'PASSWORDXXX' --masterauth 'PASSWORDXXX' |
30 | depends_on: |
31 | - master |
32 | networks: |
33 | - redis_sentinel-master-ddsh |
34 | networks: |
35 | redis_sentinel-master-ddsh: |
启动顺讯
先启动存储节点,再启动哨兵节点。
第一次:
cd到各自相应目录,执行docker-compose up -d -d表示后台启动卸载,执行docker-compose down其他时候,执行docker start|restart|stop 容器id来进行启动、重启、停止。
详细代码,见相应Github仓库
1 :老子《道德经》第四十八章,老子故里,中国鹿邑。