Redis 高可用-哨兵

Redis 哨兵

为了保证redis最大程度上能够使用高可用,redis提供了主从同步+Sentinel哨兵机制

  • 主从同步

    slaveof host port 
    # 或者在配置文件中进行配置
    

    redis主从只有一个master,一般和哨兵机制一起使用

  • Sentinel哨兵机制

    • redis安装后,会自带sentinel哨兵程序–sentinel.conf,是一个运行在特殊模式下的Redis服务器;

      bind 127.0.0.1  #  哨兵运行的IP地址
      port 26380  # 哨兵运行的端口号
      daemonize yes # 以后台守护进程的方式运行
      logfile /var/log/redis-sentinel.log
      sentinel monitor mymaster 127.0.0.1 6380 2
      # mymaster:sentinel监护的redis主从群别名
      # 127.0.0.1 6380:主从中任意一台机器的地址
      # 2:有两台以上的sentinel认为某一台redis宕机之后,才会进行故障转移
      sentinel down-after-milliseconds mymaster 30000
      sentinel parallel-syncs mymaster 1
      sentinel failover-timeout mymaster 180000
      

      启动方式:
      redis-sentinel sentinel.conf
      或者
      redis-server /path/to/sentinel.conf --sentinel

    • Redis Sentinel 是一个分布式系统,可以在架构中运行多个sentinel进程;

    • sentinel进程之间使用gossip protocols通信,接收主服务器是否下线的消息

    • agreement protocols,决定是否执行自动故障转移,以及选择哪个服务器作为新的主服务器

    • Monitoring(监控):
      哨兵会持续检查master或者slave是否在正常工作心跳机制

    • Notification(提醒):
      当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。

    • 自动故障迁移(Automatic failover):
      当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

  • 注意事项

    • 至少三个以上的sentinel
    • sentinel要分散运行在不同的机器上
  • Python使用

# redis 哨兵
REDIS_SENTINELS = [
    ('127.0.0.1', '26380'),
    ('127.0.0.1', '26381'),
    ('127.0.0.1', '26382'),
]
REDIS_SENTINEL_SERVICE_NAME = 'mymaster'

from redis.sentinel import Sentinel
_sentinel = Sentinel(REDIS_SENTINELS)
redis_master = _sentinel.master_for(REDIS_SENTINEL_SERVICE_NAME)
redis_slave = _sentinel.slave_for(REDIS_SENTINEL_SERVICE_NAME)
# 读数据,master读不到去slave读
try:
    real_code = redis_master.get(key)
except ConnectionError as e:
    real_code = redis_slave.get(key)

# 写数据,只能在master里写
try:
    current_app.redis_master.delete(key)
except ConnectionError as e:
    logger.error(e)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值