• Redis的哨兵机制


    1.准备3台服务器,一台master ,两台 slave

      Master    192.168.146.128

      Slave      192.168.146.129

      slave         192.168.146.130

    2.哨兵机制需要先实现Redis的主从复制

    Redis的主从复制的实现详细参考:https://www.cnblogs.com/Amywangqing/p/12897247.html

    3.到redis的安装目录下有一个runtest-sentinel配置文件将配置文件拷贝到/usr/local/redis目录下

    cp sentinel.conf  /usr/local/redis
    

      

    4.在/usr/local/redis目录下创建sentinel文件,用于存放日志的

    mkdir sentinel
    

      

    5.修改sentinel.conf文件

    protected-mode no
    #定的主机地址
    #bind 127.0.0.1 192.168.146.128
    #默认号,可以修改
    port 26379
    #后台启动
    daemonize yes
    #进程pid
    pidfile /var/run/redis-sentinel.pid
    #用于存放日志的
    logfile /usr/local/redis/sentinel/redis-sentinel.log
    #工作目录
    dir /usr/local/redis/sentinel/
    #告诉sentinel去监听地址为ip:port的一个master,这里的master-name可以自定义,quorum是一个数字,指明当有多少个sentinel认为一个master失效时,master才算真正失效,得票数多少后成为主机。
    sentinel monitor mymaster 192.168.146.128 6379 2 

    设置连接master的密码,这里的密码是我们设置那台为master的redis连接密码 sentinel auth-pass mymaster 123456 这个配置项指定了需要多少失效时间,单位是毫秒,默认为30秒
    sentinel down-after-milliseconds mymaster 30000
    sentinel parallel-syncs mymaster 1
    sentinel failover-timeout mymaster 180000

    保存sentinel.conf配置文件

    注意:

    配置哨兵,在sentinel.conf文件中填入内容(可以配置多个):

    #说明:最后一个数字1,表示主机挂掉后slave投票看让谁接替成为主机,得票数多少后成为主机。
    sentinel monitor 被监控主机名字(自己起名字) ip地址 port 2
    sentinel monitor 被监控主机名字(自己起名字) ip地址 port 2
    sentinel monitor mymaster129 192.168.146.129 6379 2 
    sentinel monitor mymaster130 192.168.146.130 6379 2 


      

    6.sentinel启动(注意:redis必须启动着

    redis-sentinel sentinel.conf
    

    通过ps aux | grep redis查看

    [root@localhost redis]# ps aux | grep redis
    root      3576  0.1  1.0 158044 10992 ?        Ssl  Apr21   0:49 ./bin/redis-server 192.168.146.128:6379
    root      9739  0.3  0.7 152408  7912 ?        Ssl  05:52   0:00 redis-sentinel 127.0.0.1:26379 [sentinel]
    root      9754  0.0  0.0 103248   828 pts/0    S+   05:53   0:00 grep redis
    [root@localhost redis]#
    

      root      9739  0.3  0.7 152408  7912 ?        Ssl  05:52   0:00 redis-sentinel 127.0.0.1:26379 [sentinel]  这表示启动成功  端口号为26379

    另外两台Slave  192.168.146.129     slave    192.168.146.130和上面一样配置

    6.修改sentinel.conf配置文件都一样,不改变

    #保护模式关闭
    protected-mode no
    #默认号,可以修改
    port 26379
    #后台启动
    daemonize yes
    #进程pid
    pidfile /var/run/redis-sentinel.pid
    #用于存放日志的
    logfile /usr/local/redis/sentinel/redis-sentinel.log
    #工作目录
    dir /usr/local/redis/sentinel/
    #告诉sentinel去监听地址为ip:port的一个master,这里的master-name可以自定义,quorum是一个数字,指明当有多少个sentinel认为一个master失效时,master才算真正失效
    sentinel monitor mymaster 192.168.146.128 6379 2
    
    设置连接master的密码,这里的密码是我们设置那台为master的redis连接密码
    sentinel auth-pass mymaster 123456
    
    这个配置项指定了需要多少失效时间,单位是毫秒,默认为30秒
    sentinel down-after-milliseconds mymaster 30000
    
    
    sentinel parallel-syncs mymaster 1
    
    sentinel failover-timeout mymaster 180000
    

      

    注意:这里我们可以sentinel.conf复制到另外两台)

    使用以下命令可以传输到另外两台机器上

    [root@localhost redis]# scp sentinel.conf root@192.168.146.129:/usr/local/redis
    The authenticity of host '192.168.146.129 (192.168.146.129)' can't be established.
    RSA key fingerprint is 4c:23:85:d4:6d:13:3f:e5:8c:a0:ee:49:77:d8:c6:25.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.146.129' (RSA) to the list of known hosts.
    root@192.168.146.129's password: 
    sentinel.conf                                           100% 9860     9.6KB/s   00:00    
    [root@localhost redis]# scp sentinel.conf root@192.168.146.130:/usr/local/redis
    root@192.168.146.130's password: 
    sentinel.conf                                           100% 9860     9.6KB/s   00:00    
    [root@localhost redis]#
    

      

    7.分别启动

    redis-sentinel sentinel.conf  

    通过ps aux | grep redis查看192.168.146.129

    [root@localhost redis]# redis-sentinel sentinel.conf
    [root@localhost redis]# ps aux | grep redis
    root      2849  0.1  0.7 154972  7936 ?        Ssl  06:27   0:00 ./bin/redis-server 192.168.146.129:6379
    root      2857  0.0  0.7 152408  7832 ?        Ssl  06:27   0:00 redis-sentinel 127.0.0.1:26379 [sentinel]
    root      2862  0.0  0.0 103248   828 pts/0    S+   06:27   0:00 grep redis
    [root@localhost redis]#
    

      

    通过ps aux | grep redis查看192.168.146.130

    [root@localhost redis]# redis-sentinel sentinel.conf
    [root@localhost redis]# ps aux | grep redis
    root      2809  0.2  0.7 154972  7944 ?        Ssl  06:29   0:00 ./bin/redis-server 192.168.146.130:6379
    root      2828  0.3  0.7 152408  7832 ?        Ssl  06:30   0:00 redis-sentinel 127.0.0.1:26379 [sentinel]
    root      2833  0.0  0.0 103248   832 pts/0    S+   06:30   0:00 grep redis
    [root@localhost redis]#
    

      

    启动完成之后

    8.我们进入marter 192.168.146.128主机的usr/local/redis/sentinel目录里

    cd /usr/local/redis/sentinel 

    使用命令动态的查看redis-sentinel.log日志

    tail -f redis-sentinel.log
    

      

    -rw-r--r--. 1 root root 1031 Apr 22 07:54 redis-sentinel.log
    [root@localhost sentinel]# tail -f redis-sentinel.log 
    11353:X 22 Apr 2020 07:54:48.634 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    11353:X 22 Apr 2020 07:54:48.634 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=11353, just started
    11353:X 22 Apr 2020 07:54:48.634 # Configuration loaded
    11354:X 22 Apr 2020 07:54:48.817 * Increased maximum number of open files to 10032 (it was originally set to 1024).
    11354:X 22 Apr 2020 07:54:48.819 * Running mode=sentinel, port=26379.
    11354:X 22 Apr 2020 07:54:48.819 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
    11354:X 22 Apr 2020 07:54:48.822 # Sentinel ID is abff04b29da5863e0c5777e0a81f1751cf4fa59b
    11354:X 22 Apr 2020 07:54:48.823 # +monitor master mymaster 192.168.146.128 6379 quorum 2
    11354:X 22 Apr 2020 07:54:48.825 * +slave slave 192.168.146.129:6379 192.168.146.129 6379 @ mymaster 192.168.146.128 6379
    11354:X 22 Apr 2020 07:54:48.828 * +slave slave 192.168.146.130:6379 192.168.146.130 6379 @ mymaster 192.168.146.128 6379
    11354:X 22 Apr 2020 07:55:30.733 * +sentinel sentinel 01f3cdaf9e31ceaeeab4e3e1a680f96e2076e28e 192.168.146.129 26379 @ mymaster 192.168.146.128 6379
    11354:X 22 Apr 2020 07:55:47.798 * +sentinel sentinel 89c26e09ca7e1c39641ed2958ce8b0396880a8f1 192.168.146.130 26379 @ mymaster 192.168.146.128 6379
    

      

    这里11354:X 22 Apr 2020 07:55:30.733 * +sentinel sentinel 01f3cdaf9e31ceaeeab4e3e1a680f96e2076e28e 192.168.146.129 26379 @ mymaster 192.168.146.128 6379

    11354:X 22 Apr 2020 07:55:47.798 * +sentinel sentinel 89c26e09ca7e1c39641ed2958ce8b0396880a8f1 192.168.146.130 26379 @ mymaster 192.168.146.128 6379可以看出

    slave 192.168.146.129:6379和slave 192.168.146.130:6379是从机           mymaster 192.168.146.128 6379主机

    9.我们可以通过redis客户端查看192.168.146.128

    [root@localhost redis]# ./bin/redis-cli -h 192.168.146.128 -p 6379 -a 123456
    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
    192.168.146.128:6379>  info replication
    # Replication
    role:master
    connected_slaves:2
    slave0:ip=192.168.146.129,port=6379,state=online,offset=75866,lag=1
    slave1:ip=192.168.146.130,port=6379,state=online,offset=75866,lag=1
    master_replid:430791dbf5fe96222e992151226171f3b53fec6b
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:75866
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:4198
    repl_backlog_histlen:71669
    192.168.146.128:6379>
    

      

    我们可以通过redis客户端查看192.168.146.129

    [root@localhost redis]# ./bin/redis-cli -h 192.168.146.129 -p 6379 -a 123456
    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
    192.168.146.129:6379> info replication
    # Replication
    role:slave
    master_host:192.168.146.128
    master_port:6379
    master_link_status:up
    master_last_io_seconds_ago:1
    master_sync_in_progress:0
    slave_repl_offset:95148
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    master_replid:430791dbf5fe96222e992151226171f3b53fec6b
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:95148
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:4198
    repl_backlog_histlen:90951
    192.168.146.129:6379>
    

      

    我们可以通过redis客户端查看192.168.146.130

    [root@localhost redis]#  ./bin/redis-cli -h 192.168.146.130 -p 6379 -a 123456
    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
    192.168.146.130:6379> info replication
    # Replication
    role:slave
    master_host:192.168.146.128
    master_port:6379
    master_link_status:up
    master_last_io_seconds_ago:0
    master_sync_in_progress:0
    slave_repl_offset:100264
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    master_replid:430791dbf5fe96222e992151226171f3b53fec6b
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:100264
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:13438
    repl_backlog_histlen:86827
    192.168.146.130:6379>
    

      

    10.故障转移

     

    当我们关闭master192.168.146.128主节点时

    [root@localhost redis]# ps aux | grep redis
    root      3576  0.1  0.9 158044  9832 ?        Ssl  Apr21   0:57 ./bin/redis-server 192.168.146.128:6379
    root      9739  0.3  0.7 152408  7944 ?        Ssl  05:52   0:11 redis-sentinel 127.0.0.1:26379 [sentinel]
    root     10274  0.0  0.0 100936   616 pts/0    S+   06:36   0:00 tail -f redis-sentinel.log
    root     10467  0.0  0.0 103248   832 pts/1    S+   06:51   0:00 grep redis
    [root@localhost redis]# kill -9 3576
    

      

    通过ps aux | grep redis查看已经关闭了

    [root@localhost redis]# ps aux | grep redis
    root      9739  0.3  0.7 152408  7944 ?        Ssl  05:52   0:11 redis-sentinel 127.0.0.1:26379 [sentinel]
    root     10274  0.0  0.0 100936   616 pts/0    S+   06:36   0:00 tail -f redis-sentinel.log
    root     10479  0.0  0.0 103248   832 pts/1    S+   06:52   0:00 grep redis
    [root@localhost redis]#
    

      

    redis-sentinel.log日志添加了

    #关闭了master mymaster 192.168.146.128
    11354:X 22 Apr 2020 07:58:46.891 # +sdown master mymaster 192.168.146.128 6379
    #当前配置版本被更新
    11354:X 22 Apr 2020 07:58:46.921 # +new-epoch 1
    #进行投票选举slave服务器
    11354:X 22 Apr 2020 07:58:46.928 # +vote-for-leader 89c26e09ca7e1c39641ed2958ce8b0396880a8f1 1
    #投票后有两个sentinel发现master不能用
    11354:X 22 Apr 2020 07:58:46.969 # +odown master mymaster 192.168.146.128 6379 #quorum 3/2
    #下一次故障转移延迟
    11354:X 22 Apr 2020 07:58:46.969 # Next failover delay: I will not start a failover before Wed Apr 22 08:04:47 2020
    #更新192.168.146.130和192.168.146.128配置
    11354:X 22 Apr 2020 07:58:47.341 # +config-update-from sentinel 89c26e09ca7e1c39641ed2958ce8b0396880a8f1 192.168.146.130 26379 @ mymaster 192.168.146.128 6379
    # master地址发生改变从192.168.146.128变成了192.168.146.129
    11354:X 22 Apr 2020 07:58:47.341 # +switch-master mymaster 192.168.146.128 6379 192.168.146.129 6379
    11354:X 22 Apr 2020 07:58:47.342 * +slave slave 192.168.146.130:6379 192.168.146.130 6379 @ mymaster 192.168.146.129 6379
    11354:X 22 Apr 2020 07:58:47.342 * +slave slave 192.168.146.128:6379 192.168.146.128 6379 @ mymaster 192.168.146.129 6379
    11354:X 22 Apr 2020 07:59:17.344 # +sdown slave 192.168.146.128:6379 192.168.146.128 6379 @ mymaster 192.168.146.129 6379
    

      

    我们可以通过redis客户端查看192.168.146.129,192.168.146.129变成了master

    [root@localhost redis]# ./bin/redis-cli -h 192.168.146.129 -p 6379 -a 123456
    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
    192.168.146.129:6379> info replication
    # Replication
    role:master
    connected_slaves:1
    slave0:ip=192.168.146.130,port=6379,state=online,offset=303685,lag=0
    master_replid:f736d355a36ee407bb054b1bee8c6dee61027c1b
    master_replid2:a26f2d758033d818e95eb76156e90a0ecef85395
    master_repl_offset:303830
    second_repl_offset:37896
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:303830
    192.168.146.129:6379>
    

      

    我们可以通过redis客户端查看192.168.146.130还是slave,它的mmaster变成了192.168.146.129了

    [root@localhost redis]# ./bin/redis-cli -h 192.168.146.130 -p 6379 -a 123456
    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
    192.168.146.130:6379> info replication
    # Replication
    role:slave
    master_host:192.168.146.129
    master_port:6379
    master_link_status:up
    master_last_io_seconds_ago:0
    master_sync_in_progress:0
    slave_repl_offset:337100
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    master_replid:f736d355a36ee407bb054b1bee8c6dee61027c1b
    master_replid2:a26f2d758033d818e95eb76156e90a0ecef85395
    master_repl_offset:337100
    second_repl_offset:37896
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:29
    repl_backlog_histlen:337072
    192.168.146.130:6379>
    

      

    我们可以从新启动192.168.146.128,这时它变成了slave,它的master变成了192.168.146.129了

    [root@localhost redis]# ./bin/redis-server ./redis.conf 
    11710:C 22 Apr 2020 08:24:38.791 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    11710:C 22 Apr 2020 08:24:38.792 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=11710, just started
    11710:C 22 Apr 2020 08:24:38.792 # Configuration loaded
    [root@localhost redis]# ./bin/redis-cli -h 192.168.146.128 -p 6379 -a 123456
    Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
    192.168.146.128:6379> info replication
    # Replication
    role:slave
    master_host:192.168.146.129
    master_port:6379
    master_link_status:down
    master_last_io_seconds_ago:-1
    master_sync_in_progress:0
    slave_repl_offset:1
    master_link_down_since_seconds:1587569109
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    master_replid:ea5fb876e06cd5a0f1f124471e6d8458e2e32bdb
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:0
    second_repl_offset:-1
    repl_backlog_active:0
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:0
    repl_backlog_histlen:0
    192.168.146.128:6379>
    

      

    这样哨兵机制就搭建完成了



  • 相关阅读:
    Activity详解
    Log和LogCat的使用
    Android Studio项目目录结构
    Android系统架构
    [SCOI2016]美味
    [SCOI2016]背单词
    [SCOI2016]幸运数字
    [BZOJ4170]极光
    [JSOI2016]扭动的回文串
    [SCOI2016]萌萌哒
  • 原文地址:https://www.cnblogs.com/Amywangqing/p/12897321.html
Copyright © 2020-2023  润新知