zoukankan      html  css  js  c++  java
  • redis的主从复制,哨兵值守

    环境:

    主服务器:192.168.10.10    Centos 7  redis-5.0.4 

    从服务器:192.168.10.129  Centos 7  redis-5.0.4 

    从服务器:192.168.10.130  Centos 7  redis-5.0.4 

    关于如何安装redis不再本文讨论范围内,不过您可以参考https://www.cnblogs.com/caesar-id/p/10846541.html

    1、自定义192.168.10.10主服务器配置文件

    [root@localhost ~]# vim /etc/myredis.conf
    bind 192.168.10.10   // 绑定本机IP地址
    port 9000            // redis端口号
    daemonize yes        // 设置后台启动
    pidfile /var/log/redis/myredis.pid  // 指定redis进程文件位置,为了方便我就放在了日志文件中,大家自行定义。
    loglevel notice   // 设置日志等级
    logfile /var/log/redis/myredis.log  // 设置日志文件
    dbfilename dump.rdb
    dir /opt/redis-5.0.4/data/myredis  // redis数据库文件路径
    protected-mode no   // 为了方便这里关闭了安全模式,实际中应开启次选项

     注意:这里的路径必须存在,redis没有智能到帮你把路径都创建好的,所以你需要自己创建上面所需要的文件路径。

    2、创建配置文件中对应的目录

    [root@localhost ~]# mkdir -p /var/log/redis  // redis的日志文件存放路径
    [root@localhost ~]# mkdir -p /opt/redis-5.0.4/data/myredis  // 创建redis的数据库存储目录

    到此主服务器的配置已经算是初步完成。下面配置从服务器

    3、自定义从服务器192.168.10.129配置文件

    [root@localhost ~]# vim /etc/myredis.conf
    bind 192.168.10.129   // 绑定本机IP地址
    port 9001            // 为了和主服务器区分这里使用9001
    daemonize yes        // 设置后台启动
    pidfile /var/log/redis/myredis.pid  // 指定redis进程文件位置,为了方便我就放在了日志文件中,大家自行定义。
    loglevel notice   // 设置日志等级
    logfile /var/log/redis/myredis.log  // 设置日志文件
    dbfilename dump.rdb
    dir /opt/redis-5.0.4/data/myredis  // redis数据库文件路径
    protected-mode no   // 为了方便这里关闭了安全模式,实际中应开启次选项
    slaveof 192.168.10.10 9000  // 主服务器的IP和端口

     4、同样创建配置文件中对应的路径

    [root@localhost ~]# mkdir -p /var/log/redis  // redis的日志文件存放路径
    [root@localhost ~]# mkdir -p /opt/redis-5.0.4/data/myredis  // 创建redis的数据库存储目录

    此时从服务器192.168.10.129配置初步完成,下面配置从服务器192.168.10.30。

    5、 自定义从服务器192.168.10.129配置文件

    [root@localhost ~]# vim /etc/myredis.conf
    bind 192.168.10.130   // 绑定本机IP地址
    port 9002             // 为了区分这里使用9002
    daemonize yes         // 设置后台启动
    pidfile /var/log/redis/myredis.pid  // 指定redis进程文件位置,为了方便我就放在了日志文件中,大家自行定义。
    loglevel notice   // 设置日志等级
    logfile /var/log/redis/myredis.log  // 设置日志文件
    dbfilename dump.rdb
    dir /opt/redis-5.0.4/data/myredis  // redis数据库文件路径
    protected-mode no   // 为了方便这里关闭了安全模式,实际中应开启次选项
    slaveof 192.168.10.10 9000  // 主服务器的IP和端口

     6、创建配置文件中对应的路径

    [root@localhost ~]# mkdir -p /var/log/redis  // redis的日志文件存放路径
    [root@localhost ~]# mkdir -p /opt/redis-5.0.4/data/myredis  // 创建redis的数据库存储目录

    好了主从关系到此算是配置完成,下面我们进行验证配置是否正确。

    7、验证主从配置

    7.1开启192.168.10.10主服务器的redis

    [root@localhost ~]# redis-server /etc/myredis.conf 
    [root@localhost ~]# ps -ef | grep redis

    如果你看到上图说明我们的主服务器192.168.10.10中的redis已经运行起来了。

    7.2开启192.168.10.129从服务器的redis

    [root@localhost ~]# redis-server /etc/myredis.conf 
    [root@localhost ~]# ps -ef | grep redis

    非常幸运的跑起来了。

    7.3开启192.168.10.130从服务器的redis

    [root@localhost ~]# redis-server /etc/myredis.conf 
    [root@localhost ~]# ps -ef | grep redis

    一切都很顺利。

    7.4登陆192.168.10.10主服务器查看主从关系

    [root@localhost ~]# redis-cli -p 9000 -h 192.168.10.10

    希望你也能看到和上面一样的信息。

    7.5登陆192.168.10.129从服务器查看主从关系

    [root@localhost ~]# redis-cli -p 9001 -h 192.168.10.129

    7.6登陆192.168.10.130从服务器查看主从关系

    [root@localhost ~]# redis-cli -p 9001 -h 192.168.10.129

    7.7在主服务器添加一个键查看是否会同步到从服务器

     上面虽然是实现了主从复制的功能,但是如果我们的主服务器突然挂了呢?我们知道从服务器是只读的,没有写入的权限。我们来看下杀掉主进程会变成什么样子。

    8、删掉主服务器192.168.10.10的redis

     9、查看从服务器状态

     上面的结果我确信并不是我们想要的,我们想要的是主服务器在突发情况下down后,有一台从服务器能够代替主服务器继续工作。


    这里有两种解决方案:

    • 我们手动指定一台从服务器为主服务器。
    • 通过哨兵实现自动在从服务器中选举出一个主服务器。

    1、手动指定192.168.10.129为主服务器(关闭服务器的从服务器的角色)

    [root@localhost ~]# redis-cli -p 9001 -h 192.168.10.129
    192.168.10.129:9001> slaveof no one  // 关闭从服务器角色

    1.1、在192.168.10.130从服务器中指定主服务器是192.168.10.129

    [root@localhost ~]# redis-cli -p 9002 -h 192.168.10.130
    192.168.10.130:9002> slaveof no one  // 关闭从服务器角色
    192.168.10.130:9002> slaveof 192.168.10.129 9001  // 指定主服务器是192.168.10.129

    1.2、最终查看配置如下

     

    也许你会认为这种方式很low并且不智能,我也认为你说的是对的。

    在进行下面哨兵选举前,请先把192.168.10.10,192.168.10.129和192.168.10.130的配置文件调整为初始状态。因为上面已经指定了192.168.10.129为主服务器,

    192.168.10.130是192.168.10.129的从服务器,192.168.10.10是一台单独的主服务器,你也可以把192.168.10.10调整为192.168.10.129的从服务器。不过这样你就会和我下面做的不太一样了。但无论怎样,调整好配置文件,重新启动主/从服务器的redis在进行下面的操作。


    2、通过哨兵选举,在从服务器中选择一个从服务器作为主服务器。

    2.1先停止所有主、从服务器的redis

    [root@localhost ~]# pkill -9 redis

     ·2.2在主服务器192.168.10.10中添加哨兵的配置文件

    [root@localhost ~]# vim /etc/myredis-sentinel.conf
    bind 192.168.10.10   // 绑定本机地址
    port 9500            // 哨兵端口
    dir "/opt/redis-5.0.4/data/myredis-sentinel"  // 哨兵工作目录
    logfile "/var/log/redis/mysentinel.log"       // 哨兵日志文件位置
    daemonize yes      // 开启守护进程
    protected-mode no  // 关闭安全模式
    sentinel monitor myredis 192.168.10.10 9000 2 // myredis是主节点的别名,后面是主节点的IP地址及主节点redis的端口号,数字2表示判断主节点是否down需要最少2个哨兵进行确认
    sentinel down-after-milliseconds myredis 30000 // 每个哨兵会定期发送ping确认主节点是否可以连接,如果在3000毫秒没有回复,就认为主节点不可达。
    sentinel parallel-syncs myredis 1 // 当多个哨兵都认为主节点不可达时,主节点哨兵会做故障转移。并选出一个新的主节点。这个数字越小故障转移就越慢,但如果越大会导致多个从节点同时向新主机节点复制数据,导致数据不可用。
    sentinel failover-timeout myredis 180000 // 故障转移超时时间。

    2.3创建哨兵的工作目录

    [root@localhost ~]# mkdir -p /opt/redis-5.0.4/data/myredis-sentinel

    2.4添加从服务器192.168.10.129的哨兵配置文件

    [root@localhost ~]# vim /etc/myredis-sentinel.con
    bind 192.168.10.129  // 绑定本机地址
    port 9501            // 哨兵的端口号
    dir "/opt/redis-5.0.4/data/myredis-sentinel"  // 哨兵工作目录
    logfile "/var/log/redis/mysentinel.log"       // 哨兵日志目录
    daemonize yes      // 开启守护进程    
    protected-mode no  // 关闭安全模式
    sentinel monitor myredis 192.168.10.10 9000 2 // myredis是主节点的别名,后面是主节点的IP地址及主节点redis的端口号,数字2表示判断主节点是否down需要最少2个哨兵进行确认
    sentinel down-after-milliseconds myredis 30000 // 每个哨兵会定期发送ping确认主节点是否可以连接,如果在3000毫秒没有回复,就认为主节点不可达。
    sentinel parallel-syncs myredis 1 // 当多个哨兵都认为主节点不可达时,主节点哨兵会做故障转移。并选出一个新的主节点。这个数字越小故障转移就越慢,但如果越大会导致多个从节点同时向新主机节点复制数据,导致数据不可用。
    sentinel failover-timeout myredis 180000 // 故障转移超时时间。

     2.5创建哨兵的工作目录

    [root@localhost ~]# mkdir -p /opt/redis-5.0.4/data/myredis-sentinel

     2.6添加从服务器192.168.10.130的哨兵配置文件

    [root@localhost ~]# vim /etc/myredis-sentinel.conf
    bind 192.168.10.130  // 绑定本机地址
    port 9502            // 哨兵端口号
    dir "/opt/redis-5.0.4/data/myredis-sentinel"  // 哨兵工作目录
    logfile "/var/log/redis/mysentinel.log"       // 哨兵日志目录
    daemonize yes       // 开启守护进程
    protected-mode no   // 关闭安全模式
    sentinel monitor myredis 192.168.10.10 9000 2   // myredis是主节点的别名,后面是主节点的IP地址及主节点redis的端口号,数字2表示判断主节点是否down需要最少2个哨兵进行确认
    sentinel down-after-milliseconds myredis 30000 // 每个哨兵会定期发送ping确认主节点是否可以连接,如果在3000毫秒没有回复,就认为主节点不可达。
    sentinel parallel-syncs myredis 1 // 当多个哨兵都认为主节点不可达时,主节点哨兵会做故障转移。并选出一个新的主节点。这个数字越小故障转移就越慢,但如果越大会导致多个从节点同时向新主机节点复制数据,导致数据不可用。
    sentinel failover-timeout myredis 180000 // 故障转移超时时间。

     2.7创建哨兵的工作目录

    [root@localhost ~]# mkdir -p /opt/redis-5.0.4/data/myredis-sentinel

    2.8开启主/从服务器的redis服务

    [root@localhost ~]# redis-server /etc/myredis.conf

     

     2.9查看主从关系

     由上图可知,redis的主从关系正常。

    2.10.1开启主/从哨兵服务

    [root@localhost ~]# redis-sentinel /etc/myredis-sentinel.conf

     2.10.2查看哨兵当前状态

    [root@localhost ~]# redis-cli -p 9500 -h 192.168.10.10 info sentinel   // 查看主服务器的哨兵(在主服务器192.168.10.10)
    [root@localhost ~]# redis-cli -p 9501 -h 192.168.10.129 info sentinel  // 查看从服务器的哨兵(在从服务器192.168.10.129)
    [root@localhost ~]# redis-cli -p 9502 -h 192.168.10.130 info sentinel  // 查看从服务器的哨兵(在从服务器192.168.10.130)

     2.10.3杀掉主服务器192.168.10.10的redis服务,查看哨兵是否会在从服务器中选举出一台主服务器。

    [root@localhost ~]# ps -ef | grep redis  // 查看redis的进程号
    [root@localhost ~]# kill -9 6483  // 根据redis的进程id杀掉它

     杀掉主服务器后查看两个从服务器的状态

     发现两台从服务器都已经检测到主服务器192.168.10.10的redis已经无法连接,我们稍等片刻,在来看看我们的哨兵是否尽职尽责,为我们自动选举出一台主服务器。

     好了哨兵值守就演示到这里吧。

  • 相关阅读:
    移动端日期段选择,不可选过去日期,可传入不可选日期,返回数组
    移动端的silder,未封装,基于zepto的touch模块,有参照修改过touch的bug
    ajax
    简单的cookie读写封装
    自己写的,然后配合zepto+iscroll的上拉加载
    达到
    迷茫
    (转)PropertyGrid相关
    (转)使用NuGet管理项目库
    (转)DDD方面两个开宗明义的文章
  • 原文地址:https://www.cnblogs.com/caesar-id/p/10849284.html
Copyright © 2011-2022 走看看