王珂 49186456@qq.com 2019/07/09
简介
本文介绍如何使用Docker搭建Redis主从集群,并且通过哨兵监控集群状态,当主发生故障时,自动从备中选举出新的主。
我们将搭建一个1主2从的Redis集群,通过3个哨兵进行监控。
准备
环境准备
- 一台linux服务器,IP:192.168.1.117,安装CentOS7
- CentOS7上安装好Docker
创建redis容器
创建redis容器目录
我们将使用Docker创建3个Redis容器:redis-01,redis-02,redis-03。redis-01容器的目录结构如下,redis-02,redis-03与之相同。
假设我们在 /opt/redis/redis-5.0.4目录下创建了redis-01目录
redis-01/
/conf
/data
conf 目录存放redis配置文件redis.conf
data 目前存放redis数据(dump或appendonly.aof)
最后,我们创建的目录如下:
准备redis配置文件
我们将每个redis容器的配置文件都放在了其容器目录的conf目录下。
redis-01容器的配置文件
redis-01/conf/redis.conf进行如下修改:
- 注释掉IP绑定 #bind 127.0.0.1
- 端口设置为 port 6379
- pidfile 为 pidfile /var/run/redis_6379.pid
redis-02容器的配置文件
redis-02/conf/redis.conf进行如下修改:
- 注释掉IP绑定 #bind 127.0.0.1
- 端口设置为 port 6380
- pidfile 为 pidfile /var/run/redis_6380.pid
- 设置主服务器 replicaof 192.168.1.117 6379
redis-03容器的配置文件
redis-03/conf/redis.conf进行如下修改:
- 注释掉IP绑定 #bind 127.0.0.1
- 端口设置为 port 6381
- pidfile 为 pidfile /var/run/redis_6381.pid
- 设置主服务器 replicaof 192.168.1.117 6379
生成redis容器
redis-01容器
docker run -p 6379:6379 -v /opt/redis/redis-5.0.4/redis-01/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /opt/redis/redis-5.0.4/redis-01/data:/data -d --name redis-01 --restart=always --network=host --privileged=true redis:5.0.4 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
redis-02容器
docker run -p 6380:6380 -v /opt/redis/redis-5.0.4/redis-02/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /opt/redis/redis-5.0.4/redis-02/data:/data -d --name redis-02 --restart=always --network=host --privileged=true redis:5.0.4 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
redis-03容器
docker run -p 6381:6381 -v /opt/redis/redis-5.0.4/redis-03/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /opt/redis/redis-5.0.4/redis-03/data:/data -d --name redis-03 --restart=always --network=host --privileged=true redis:5.0.4 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
创建哨兵容器
创建哨兵容器目录
还将再创建3个哨兵容器sentinel-01,sentinel-02,sentine-03。sentinel-01哨兵容器的目录结构如下,sentinel-02, sentinel-03与之相同。
假设我们在 /opt/redis/redis-5.0.4目录下创建了sentinel-01目录
sentinel-01/
/conf
conf 目录存放sentinel的配置文件
修改哨兵配置文件
sentinel-01/conf/sentinel.conf进行如下修改:
- 注释掉IP绑定 #bind 127.0.0.1
- 注释掉保护模式 #protected-mode no
- 端口修改为 26379
sentinel-02/conf/sentinel.conf进行如下修改:
- 注释掉IP绑定 #bind 127.0.0.1
- 注释掉保护模式 #protected-mode no
- 端口修改为 26380
sentinel-03/conf/sentinel.conf进行如下修改:
- 注释掉IP绑定 #bind 127.0.0.1
- 注释掉保护模式 #protected-mode no
- 端口修改为 26381
生成哨兵容器
sentinel-01容器
docker run -it --name sentinel-01 -p 26379:26379 -v /opt/redis/redis-5.0.4/sentinel-01/conf/sentinel.conf:/usr/local/etc/redis/sentinel.conf -d --restart=always --network=host --privileged redis:5.0.4 redis-sentinel /usr/local/etc/redis/sentinel.conf
sentinel-02容器
docker run -it --name sentinel-02 -p 26380:26380 -v /opt/redis/redis-5.0.4/sentinel-02/conf/sentinel.conf:/usr/local/etc/redis/sentinel.conf -d --restart=always --network=host --privileged redis:5.0.4 redis-sentinel /usr/local/etc/redis/sentinel.conf
sentinel-03容器
docker run -it --name sentinel-03 -p 26381:26381 -v /opt/redis/redis-5.0.4/sentinel-03/conf/sentinel.conf:/usr/local/etc/redis/sentinel.conf -d --restart=always --network=host --privileged redis:5.0.4 redis-sentinel /usr/local/etc/redis/sentinel.conf
结果
Docker 容器
最终的docker容器如下
Docker容器状态
redis-01
redis-02
redis-03