0%

使用docker-compose方式安装redis-sentinel模式集群

“为学日益,为道日损。
损之又损,以至于无为。
无为而无不为。
取天下常以无事,及其有事,不足以取天下。”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 :老子《道德经》第四十八章,老子故里,中国鹿邑。