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

 

posted @ 2022-05-30 15:48  满Sir  阅读(532)  评论(0编辑  收藏  举报