zoukankan      html  css  js  c++  java
  • centos7-配置redis主从以及配置哨兵模式

    因单机运行redis出现故障导致业务中断及数据丢失。故需要配置redis主从库甚至哨兵模式保障redis的高可用性
    主从及哨兵模式配置说明

    服务器名称及模式 IP地址
    redis-master:6379 10.10.10.10
    redis-slave:6379 10.10.10.11
    redis-slave:6379 10.10.10.12
    redis-sentinel:26379 10.10.10.10
    redis-sentinel:26379 10.10.10.11
    redis-sentinel:26379 10.10.10.12

    配置从库

    • 准备工作
      在三台服务器上分别安装redis单机版,并配置启动项

    • 配置从库(10.10.10.11 / 10.10.10.12)

    vim /opt/redis/conf/redis.conf
    ## 新增配置项
    
    replicaof 10.10.10.10 6379
    

    如果希望从库持续为只读,可以添加配置项'replica-read-only yes'

    • 重启服务(10.10.10.11 / 10.10.10.12)
    systemctl restart redis.service
    

    检测办法

    • 打开三个命令窗口,分别连接三台redis
    /opt/redis/bin/redis-cli -h 10.10.10.10 -p 6379 -a password
    /opt/redis/bin/redis-cli -h 10.10.10.11 -p 6379 -a password
    /opt/redis/bin/redis-cli -h 10.10.10.12 -p 6379 -a password
    
    • 先通过KEYS *检测确认所有库中数据都为空
    10.10.10.10:6379> KEYS *
    (empty list or set)
    
    10.10.10.11:6379> KEYS *
    (empty list or set)
    
    10.10.10.12:6379> KEYS *
    (empty list or set)
    
    • 在主节点上写入一个key值,并查询
    10.10.10.10:6379> set a 1
    OK
    10.10.10.10:6379> KEYS *
    1) "a"
    10.10.10.10:6379> get a
    "1"
    
    • 从库节点上进行查询所有key值以及查询key值'a'
    10.10.10.11:6379> KEYS *
    1) "a"
    10.10.10.11:6379> get a
    "1"
    
    10.10.10.12:6379> KEYS *
    1) "a"
    10.10.10.12:6379> get a
    "1"
    
    • redis主从库创建成功

    仅配置redis的主从库,当redis-master故障期,不会自动切换主从关系,所以需要配置哨兵模式(sentinel)对其主从关系进行管理。
    Redis的Sentinel最小配置是一主一从。建议配置三台(sentinel),如需扩展,需按照奇数进行扩增

    • 添加(sentinel)配置参数(三台服务器配置一致)
    cat << EOF > /opt/redis/conf/sentinel.conf
    port 26379
    daemonize yes
    pidfile /var/run/redis/redis-sentinel.pid
    logfile /data/redis/logs/sentinel.log
    dir /data/redis/data/
    sentinel monitor mymaster 10.10.10.10 6379 2
    sentinel auth-pass mymaster password
    #哨兵检测确认主节点下线 默认30秒
    sentinel down-after-milliseconds mymaster 30000
    #指定了在发生主备切换时,最多可以有多少个slave同时对新的master进行同步,
    sentinel parallel-syncs mymaster 1
    #故障转移的超时时间
    sentinel failover-timeout mymaster 180000
    #默认情况下,SENTINEL SET将无法更改通知脚本
    sentinel deny-scripts-reconfig yes
    EOF
    
    chown -R redis:redis /data/redis /opt/redis /var/run/redis
    
    • 全部启动Sentinel

    启动顺序 master -> slave 1/2 -> sentinel 1/2/3

    sudo -u redis /opt/redis/bin/redis-sentinel /opt/redis/conf/sentinel.conf
    
    • 查看运行状态
    /opt/redis/bin/redis-cli -p 26379
    
    # 查看主库状态
    > sentinel master mymaster
    
    # 查看从库状态
    > sentinel slaves mymaster
    
    # 查看其它sentinel状态
    > sentinel sentinels mymaster
    
    • 测试主从切换
    # 主节点关闭redis
    systemctl stop redis
    
    # 等待30秒,通过从库查看master机器状态
    /opt/redis/bin/redis-cli -h 10.10.10.12 -p 6379 -a password info |grep master_host
    master_host:10.10.10.11
    

    在通过启动原主服务,关闭被提升为master的从库服务,查看是否有新的master机器被提升。


    使用系统systemctl管理redis启动关闭以及异常关闭重启

    • 创建启动文件
    cat << EOF > /usr/lib/systemd/system/redis-sentinel.service
    [Unit]
    Description=redis-sentinel
    After=network.target
    
    [Service]
    Type=forking
    User=redis
    ExecStart=/opt/redis/bin/redis-sentinel /opt/redis/conf/sentinel.conf
    Restart=on-failure
    RestartSec=10s
    KillMode=control-group
    LimitNOFILE=65536
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
    systemctl daemon-reload
    
    • 启动并设置开机启动
    systemctl start redis-sentinel.service
    systemctl enable redis-sentinel.service
    
  • 相关阅读:
    使用PHP建立GIF
    无数据库的详细域名查询程序PHP版
    用PHP实现通过Web执行C/C 程序
    判断一数是否在一已知数组中的函数
    如何将本地项目上传到码云
    IIS服务器,IIS日志文件占用C盘空间,C盘空间不足 常见问题
    谈谈个人能力的系统性
    毕业后5年决定命运
    个人取得工资、薪金所得应当如何缴纳个人所得税
    Chart 控件 for vs2008的安装
  • 原文地址:https://www.cnblogs.com/taoyuxuan/p/11889009.html
Copyright © 2011-2022 走看看