基于 docker 搭建 redis-sentinel 集群

栏目: 数据库 · 发布时间: 6年前

内容简介:Redis 集群可以在一组 redis 节点之间实现高可用性和 sharding。在集群中会有 1 个 master 和多个 slave 节点。当 master 节点失效时,应选举出一个 slave 节点作为新的 master。然而 Redis 本身(包括它的很多客户端)没有实现自动故障发现并进行主备切换的能力,需要外部的监控方案来实现自动故障恢复。Redis Sentinel 是官方推荐的高可用性解决方案。它是 Redis 集群的监控管理工具,可以提供节点监控、通知、自动故障恢复和客户端配置发现服务。do

Redis 集群可以在一组 redis 节点之间实现高可用性和 sharding。在集群中会有 1 个 master 和多个 slave 节点。当 master 节点失效时,应选举出一个 slave 节点作为新的 master。然而 Redis 本身(包括它的很多客户端)没有实现自动故障发现并进行主备切换的能力,需要外部的监控方案来实现自动故障恢复。

Redis Sentinel 是官方推荐的高可用性解决方案。它是 Redis 集群的监控管理工具,可以提供节点监控、通知、自动故障恢复和客户端配置发现服务。

2、遇到的问题

1、docker host网络

docker使用host网络时对于windows 、mac不生效(没找到解决方案),最后放弃了windows 使用centos部署集群。

2、不使用host网络的情况下sentinel 连接问题

不使用host网络的情况下连接sentinel集群时可以指定主节点端口故可以正常联通, 但在主节点故障时 sentinel 从主节点获取到的 IP 是容器内的虚拟 IP 导致集群无法正常连接。

基于  <a href='https://www.codercto.com/topics/20577.html'>docker</a>  搭建 redis-sentinel 集群

3、搭建过程

1、目录结构

基于 docker 搭建 redis-sentinel 集群
基于 docker 搭建 redis-sentinel 集群

2、sentinel 配置文件

1、sentinel1.conf

#端口号
port 26379
dir /tmp
# mymaster:自定义集群名,2:投票数量必须2个sentinel才能判断主节点是否失败
sentinel monitor mymaster <ip> <port> 2
# 指的是超过5000秒,且没有回复,则判定主节点不可达
sentinel down-after-milliseconds mymaster 5000
# 表示在故障转移的时候最多有numslaves在同步更新新的master
sentinel parallel-syncs mymaster 1
# 故障转移超时时间
sentinel failover-timeout mymaster 5000

复制代码

2、sentinel2.conf

#端口号
port 26380
dir /tmp
# mymaster:自定义集群名,2:投票数量必须2个sentinel才能判断主节点是否失败
sentinel monitor mymaster <ip> <port> 2
# 指的是超过5000秒,且没有回复,则判定主节点不可达
sentinel down-after-milliseconds mymaster 5000
# 表示在故障转移的时候最多有numslaves在同步更新新的master
sentinel parallel-syncs mymaster 1
# 故障转移超时时间
sentinel failover-timeout mymaster 5000

复制代码

3、sentinel3.conf

#端口号
port 26381
dir /tmp
# mymaster:自定义集群名,2:投票数量必须2个sentinel才能判断主节点是否失败
sentinel monitor mymaster <ip> <port> 2
# 指的是超过5000秒,且没有回复,则判定主节点不可达
sentinel down-after-milliseconds mymaster 5000
# 表示在故障转移的时候最多有numslaves在同步更新新的master
sentinel parallel-syncs mymaster 1
# 故障转移超时时间
sentinel failover-timeout mymaster 5000

复制代码

3、docker-compose.yml

version: '2'
services:
  master:
    image: redis:4.0
    restart: always
    container_name: redis-master
    #使用主机网络
    network_mode: "host"
    command: redis-server --port 16379  
   
  slave1:
    image: redis:4.0
    restart: always
    container_name: redis-slave-1
    network_mode: "host"
    # 指定端口并指定master ip 端口
    command: redis-server --port 16380 --slaveof <master ip> 16379
   
  slave2:
    image: redis:4.0
    restart: always
    container_name: redis-slave-2
    network_mode: "host"    
    command: redis-server --port 16381 --slaveof <master ip> 16379
    
  sentinel1:
    image: redis:4.0
    restart: always
    container_name: redis-sentinel-1
    network_mode: "host"
    # 指定sentinel文件位置
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    # 使用数据卷映射文件到指定sentinel位置
    volumes:
      - ./sentinel/sentinel1.conf:/usr/local/etc/redis/sentinel.conf
   
  sentinel2:
    image: redis:4.0
    restart: always
    container_name: redis-sentinel-2
    network_mode: "host"    
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
      - ./sentinel/sentinel2.conf:/usr/local/etc/redis/sentinel.conf
   
  sentinel3:
    image: redis:4.0
    restart: always
    container_name: redis-sentinel-3
    network_mode: "host"    
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
      - ./sentinel/sentinel3.conf:/usr/local/etc/redis/sentinel.conf  
    
复制代码
sentinel 正常联通

主节点从16379 切换 至16381


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算的本质

计算的本质

[英] Tom Stuart / 张伟 / 人民邮电出版社 / 2014-11 / 69.00元

《计算的本质:深入剖析程序和计算机》借助Ruby全面介绍计算理论和编程语言的设计。作者注重实用性,不仅尽量抛开复杂难懂的数学符号,而且特别选用简单快捷的编程语言Ruby,在读者熟知的背景知识下,以明晰的可工作代码阐明形式语义、自动机理论,以及通过lambda演算进行函数式编程等计算机科学知识,并为让其自行探索做足准备。 本书适合计算机科学系学生,以及熟知现代编程语言,想要系统地学习计算机科学......一起来看看 《计算的本质》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具