Windows上利用docker搭建Redis哨兵集群

本文将利用docker搭建一个三节点的Redis哨兵集群,来监管之前的Redis主从集群:
(关于Redis主从集群的搭建见我的上一篇文章

三个sentinel实例信息如下:

节点IP宿主机的映射端口
sen-1172.21.0.3127001
sen-2172.21.0.3227002
sen-3172.21.0.3327003

一、利用docker搭建redis哨兵集群(三节点)

  1. 在本机上某位置新建文件夹docker_redis/sen-1/confdocker_redis/sen-2/confdocker_redis/sen-3/conf存放三个哨兵节点的配置文件

  2. sen-1/conf目录下创建一个配置文件sentinel.conf,添加如下内容:

    port 26379
    sentinel announce-ip 172.21.0.31
    sentinel monitor mymaster 172.21.0.21 6379 2
    sentinel down-after-milliseconds mymaster 5000
    sentinel failover-timeout mymaster 60000
    dir ./
    

    说明:

    • port 26379:是当前sentinel实例的端口(是在该容器内自己的端口,而不是在宿主机上的映射端口)
    • sentinel monitor mymaster 172.21.0.21 6379 2:指定哨兵监控的集群主节点信息(从节点信息可以通过主节点获取)
      • mymaster:主节点名称,自定义,任意写
      • 172.21.0.21 6379:主节点的ip和端口
      • 2:选举master时的quorum值(因为判断客观下线需要超过半数哨兵认为已下线,之前主从集群有三个节点,因此这里quorum值为2)

    对于另外两个哨兵节点sen-2sen-3可以直接复制上面的sentinel.conf到对应的conf目录,然后修改sentinel announce-ip为自己容器的ip,如下:

    port 26379
    sentinel announce-ip 172.21.0.32
    sentinel monitor mymaster 172.21.0.21 6379 2
    sentinel down-after-milliseconds mymaster 5000
    sentinel failover-timeout mymaster 60000
    dir ./
    
    port 26379
    sentinel announce-ip 172.21.0.33
    sentinel monitor mymaster 172.21.0.21 6379 2
    sentinel down-after-milliseconds mymaster 5000
    sentinel failover-timeout mymaster 60000
    dir ./
    

    由于每个容器都可以看作独立的机器,因此端口号都可以为自己容器上的26379,这个不用改。

  3. 从redis镜像启动三个redis实例容器,并分别将本机的27001、27002、27003端口映射到每个容器的26379端口,来模拟三个不同的哨兵节点。创建时将宿主机上的配置文件夹、data、log等挂载到容器中,并且将哨兵节点也加入之前的主从集群所在的子网中

    docker run -p 27001:26379 --restart=always --name sen-1 -v D:\docker_redis\sen-1\conf:/etc/redis -v D:\docker_redis\sen-1\data:/data -v D:\docker_redis\sen-1\log:/home/redis_sentinel/log --net redis --ip 172.21.0.31 -d redis redis-sentinel /etc/redis/sentinel.conf
    
    docker run -p 27002:26379 --restart=always --name sen-2 -v D:\docker_redis\sen-2\conf:/etc/redis -v D:\docker_redis\sen-2\data:/data -v D:\docker_redis\sen-2\log:/home/redis_sentinel/log --net redis --ip 172.21.0.32 -d redis redis-sentinel /etc/redis/sentinel.conf
    
    docker run -p 27003:26379 --restart=always --name sen-3 -v D:\docker_redis\sen-3\conf:/etc/redis -v D:\docker_redis\sen-3\data:/data -v D:\docker_redis\sen-3\log:/home/redis_sentinel/log --net redis --ip 172.21.0.33 -d redis redis-sentinel /etc/redis/sentinel.conf
    

    请添加图片描述

    注意:

    • 每个容器的IP要与它们在宿主机上的配置文件中设置的IP相同

    • 将宿主机上的conf文件夹挂载到容器内,防止容器关闭后配置丢失。注意这里不要直接挂载配置文件,否则可能导致哨兵没有写入配置文件的权限, 在日志中会报WARNING: Sentinel was not able to save the new configuration on disk!!!: Device or resource busy.,因此要采用直接挂载文件夹的形式

    这样就搭建好了三节点的哨兵集群:

    请添加图片描述

    从启动日志可以看出,哨兵节点一启动就开始监视主从集群的状态了,并且也成功通过master获取到了其slave的信息,这里master和slave的IP和端口号与之前我们搭建的一主二从的主从集群完全一致。

    请添加图片描述

  4. 哨兵集群建立成功,可以执行如下命令查看

    • 进入某哨兵的终端:

      docker exec -it sen-1 bash
      

      连接哨兵:

      redis-cli -h 127.0.0.1 -p 26379
      

      查看sentinel信息:

      info sentinel
      

      请添加图片描述

二、测试

  1. 为模拟master宕机,这里手动将主节点redis-m停机

  2. 然后查看哨兵sen-1的日志
    请添加图片描述

  3. 查看新的主节点redis-s1的日志
    请添加图片描述

  4. 这时重启redis-m,模拟其已从故障中恢复
    请添加图片描述

  • 新主节点redis-s1的日志
    请添加图片描述

  • 原主节点redis-m的日志
    请添加图片描述

  • 12
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值