docker-compose 搭建redis 哨兵模式集群
一、概要
本次搭建redis集群采用docker进行构建,采用哨兵模式防止集群宕机
典型的哨兵架构图如下所示:
它由两部分组成:
- 哨兵节点:哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的Redis节点,不存储数据。
- 数据节点:主节点和从节点都是数据节点。
二、创建redis及sentinel目录
创建redis目录: mkdir -pv /usr/local/docker/aic-cloud-docker/redis-cluster/Docker/redis/
创建sentinel目录:mksir -pv /usr/local/docker/aic-cloud-docker/redis-cluster/Docker/sentinel/
三、创建redis服务
1、进入redis目录
cd /usr/local/docker/aic-cloud-docker/redis-cluster/Docker/redis/
2、创建docker-compose文件
touch docker-compose.yml
3、编辑docker-compose文件
vi docker-compose.yml
4、将下面的信息粘贴到docker-compose.yml中,并保存
version: '3.1' services: master: image: redis:5.0.7 container_name: redis-master restart: always ports: - 6377:6377 command: redis-server --port 6377 --requirepass "redis" --appendonly yes environment: TZ: Asia/Shanghai #network_mode: "host" slave1: image: redis:5.0.7 container_name: redis-slave-1 restart: always ports: - 6380:6380 command: redis-server --slaveof 192.168.3.128 6377 --port 6380 --requirepass "redis" --masterauth "redis" --appendonly yes environment: TZ: Asia/Shanghai #network_mode: "host" slave2: image: redis:5.0.7 container_name: redis-slave-2 restart: always ports: - 6381:6381 command: redis-server --slaveof 192.168.3.128 6377 --port 6381 --requirepass "redis" --masterauth "redis" --appendonly yes environment: TZ: Asia/Shanghai #network_mode: "host"
5、启动redis集群
docker-compose up -d
6、查看集群是否启动成功
docker ps
如果启动出现如下图标识启动成功
四、创建sentinel服务
1、进入sentinel目录
cd /usr/local/docker/aic-cloud-docker/redis-cluster/Docker/sentinel/
2、创建docker-compose文件
touch docker-compose.yml
3、编辑docker-compose文件
vi docker-compose.yml
4、将下面的信息粘贴到docker-compose.yml中,并保存
version: '3.1' services: sentinel1: image: redis container_name: redis-sentinel-1 ports: - 26379:26379 command: redis-sentinel /usr/local/docker/aic-cloud-docker/redis-cluster/Docker/sentinel/sentinel.conf restart: always #network_mode: "host" volumes: - ./sentinel1.conf:/usr/local/docker/aic-cloud-docker/redis-cluster/Docker/sentinel/sentinel.conf sentinel2: image: redis container_name: redis-sentinel-2 ports: - 26380:26379 command: redis-sentinel /usr/local/docker/aic-cloud-docker/redis-cluster/Docker/sentinel/sentinel.conf restart: always #network_mode: "host" volumes: - ./sentinel2.conf:/usr/local/docker/aic-cloud-docker/redis-cluster/Docker/sentinel/sentinel.conf sentinel3: image: redis container_name: redis-sentinel-3 ports: - 26381:26379 command: redis-sentinel /usr/local/docker/aic-cloud-docker/redis-cluster/Docker/sentinel/sentinel.conf restart: always #network_mode: "host" volumes: - ./sentinel3.conf:/usr/local/docker/aic-cloud-docker/redis-cluster/Docker/sentinel/sentinel.conf
5、创建sentinel.conf文件
touch /usr/local/docker/aic-cloud-docker/redis-cluster/Docker/sentinel/sentinel.conf
6、编辑sentinel.conf文件
vi sentinel.conf
7、将下面的信息粘贴到sentinel.conf中,并保存
port 26379 dir /tmp sentinel monitor mymaster 192.168.3.128 6377 2 # 指定多少毫秒之后 主节点没有应答哨兵sentinel 此时 哨兵主观上认为主节点下线 默认30秒 sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 # 故障转移的超时时间 failover-timeout 可以用在以下这些方面: #1. 同一个sentinel对同一个master两次failover之间的间隔时间。 #2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。 #3.当想要取消一个正在进行的failover所需要的时间。 #4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了 # 默认三分钟 sentinel failover-timeout mymaster 180000 sentinel deny-scripts-reconfig yes
8、将刚刚创建的sentinel.conf在创建3份,一模一样就可以了
cp sentinel.conf sentinel1.conf
cp sentinel.conf sentinel2.conf
cp sentinel.conf sentinel3.conf
9、启动sentinel服务
docker-compose up -d
10、查看集群是否启动成功
docker ps
如果启动出现如下图标识启动成功
五、查看进入哨兵节点,查看是否有主节点
1、进入运行中的sentinel容器
docker exec -it b1eb09f2700a bash
2、连接到redis中
redis-cli -p 26379
3、输入如下命令“sentinel master mymaster”查看集群是否成功,如果出现下面信息表示集群搭建成功
六、创建启动脚本
cd /usr/local/docker/aic-cloud-docker/
touch redis-cluster-start.sh
vi redis-cluster-start.sh
将以下脚本复制到redis-cluster-start.sh
#!/bin/sh cd /usr/local/docker/aic-cloud-docker/redis-cluster/Docker/redis/ docker-compose up -d sleep 15s echo "wait 15 second" cd ../sentinel/ docker-compose up -d
七、启动
./redis-cluster-start.sh