zoukankan      html  css  js  c++  java
  • redis sentinel 高可用(HA)方案部署,及python应用示例

    简介

    介绍 redis sentinel(哨兵)集群的部署,配置一主两从的redis集群,并通过 python 程序实例讲解通过 redis sentinel 访问集群

    什么是哨兵(Sentinel)模式

    Redis sentinel 为 Redis 集群提供了高可用解决方案,在集群出现故障的时候自动故障转移,保证集群的可用性

    功能

    • 监控:检查主从实例否是正常工作
    • 通知:当 redis 实例出现错误的时候,可以使用程序(用 api 接口)通知管理员
    • 自动故障转移:在主服务器发生故障时,哨兵开启故障转移处理,提升一台从服务器成为主服务器,其他的从服务器被重新配置使用新的主服务器,当应用程序连接时使用新的地址配置
    • 配置信息:哨兵提供了认证和服务发现,客户端连接到哨兵去获取当前redis 主服务器地址,如果发生故障转移,哨兵将会汇报新的服务器地址

    分布式系统

    哨兵是一套分布式系统,它被设计成多个哨兵进程合作运行

    • 当多个哨兵认为 master 故障的时候,集群就会认定主服务器故障
    • 即使只有一个哨兵,它也能工作,系统具有较高的健壮性

    哨兵,redis 实例,客户端在一起构成了一个大的分布式系统

    配置方法

    安装 3 台 redis 服务器,一主两从

    • 下载 redis 3.2 版本
    • 第1台修改 port: 10001
    • 第2台修改 port: 10002
    • 第3台修改 port: 10003

    运行 redis 服务

    # 首先设定第一个服务器为 master
    redis-server /path/to/server1.conf
    
    # 第二个为 slave
    redis-server /path/to/server2.conf
    
    # 第三个为 slave
    redis-server /path/to/server3.conf
    

    创建三份配置文件

    创建三份哨兵的配置文件

    # 第1个哨兵配置,端口为 10011
    port 10011
    sentinel monitor mymaster 127.0.0.1 10001 2
    sentinel down-after-milliseconds mymaster 60000
    sentinel auth-pass mymaster 1
    sentinel failover-timeout mymaster 180000
    sentinel parallel-syncs mymaster 1
    
    # 第2个哨兵配置,端口为 10012
    port 10012
    sentinel monitor mymaster 127.0.0.1 10001 2
    sentinel down-after-milliseconds mymaster 60000
    sentinel auth-pass mymaster 1
    sentinel failover-timeout mymaster 180000
    sentinel parallel-syncs mymaster 1
    
    # 第3个哨兵配置,端口为 10013
    port 10013
    sentinel monitor mymaster 127.0.0.1 10001 2
    sentinel down-after-milliseconds mymaster 60000
    sentinel auth-pass mymaster 1
    sentinel failover-timeout mymaster 180000
    sentinel parallel-syncs mymaster 1
    

    哨兵配置说明

    1. 需要制定要监控的主服务器,给每一个要监控的主服务器一个不同的名字
    2. 从服务器可以自动发现,不需要指定
    3. 哨兵可以自动更新从服务器的配置
    4. 发生故障转移,从服务器被提升为主服务器的时候,或者新的哨兵被发现的时候,配置会被自动重写

    哨兵配置格式与参数含义

    配置格式:sentinel <选项的名字> <主服务器的名字> <选项的值>

    1. down-after-milliseconds: sentinel 任务服务器已经下线的毫秒数,redis 服务器没有在给定的毫秒数之内返回sentinel的Ping命令回复, 哨兵主观认为服务器已经下线(SDOWN),此时并不会进行故障转移,当足够数量的哨兵将服务器标志为主观下线时, 服务器被标记为客观下线(ODOWN),执行故障转移
    2. parallel-syncs: 在执行故障转移时,最多可以有多少个从服务器同时从新的主服务器进行同步,数字越小,完成故障转移需要的时间越长

    运行哨兵

    redis-server /path/to/sentinel1.conf --sentinel
    
    redis-server /path/to/sentinel2.conf --sentinel
    
    redis-server /path/to/sentinel2.conf --sentinel
    

    python 访问通过哨兵访问 redis 集群

    安装 python redis 客户端

    pip install redis
    

    示例程序

    #!/usr/bin/env python
    from redis.sentinel import Sentinel
    
    # 连接哨兵服务器
    sentinel = Sentinel([('127.0.0.1', 10011),
                         ('127.0.0.1', 10012),
                         ('127.0.0.1', 10013)],
                        socket_timeout=0.1)
    
    # 获取主服务器地址
    sentinel.discover_master('mymaster')
    # 输出:('127.0.0.1', 10001)
    
    # 获取从服务器地址
    sentinel.discover_slaves('mymaster')
    # 输出:[('127.0.0.1', 10001), ('127.0.0.1', 10002), ('127.0.0.1', 10003)]
    
    # 获取带密码的主服务器进行访问
    master_pass = sentinel.master_for('mymaster', password=1, socket_timeout=0.1)
    
    # 获取不带密码的主服务器进行写入
    master = sentinel.master_for('mymaster', socket_timeout=0.1)
    
    master.set('foo', 'bar')
    
    # 获取从服务器进行读取(默认是round-roubin)
    slave = sentinel.slave_for('mymaster', socket_timeout=0.1)
    slave.get('foo')
    # 输出:bar
  • 相关阅读:
    在 VS14 上安装 Visual F# Power Tools
    关于sources.list和apt-get [转载]
    MATLAB中导入数据:importdata函数
    部分 CM11 系统 Android 平板执行植物大战僵尸 2 黑屏的解决的方法
    html5视频播放
    用GruntJS合并、压缩JS文件
    Linux/UNIX进程控制(1)
    TCP/IP协议,HTTP协议
    php 求水仙花数优化
    使用LAMP创建基于wordpress的个从博客站点
  • 原文地址:https://www.cnblogs.com/ExMan/p/10466988.html
Copyright © 2011-2022 走看看