美文网首页
redis的主从复制

redis的主从复制

作者: 任总 | 来源:发表于2018-11-17 22:01 被阅读9次

    一、配置slave节点:

    1、格式:

    redis-cli> SLAVEOF <MASTER_IP> <MASTER_PORT> 主机地址
    redis-cli> CONFIG SET masterauth <PASSWORD> 授权密码

    2、配置参数:

    *slaveof
    *masterauth

    slave-serve-stale-data yes  当主节点下线,是否使用从节点数据
    slave-read-only yes         从节点只读
    *repl-diskless-sync no     复制同步策略
    no, Disk-backed, Diskless
    
    • 新的从节点或某较长时间未能与主节点进行同步的从节点重新与主节点通信,需要做“full synchronization",此时其同步方式有两种style:
    • Disk-backend:主节点新创建快照文件于磁盘中,而后将其发送给从节点;
    • Diskless:主节占新创建快照后直接通过网络套接字文件发送给从节点;为了实现并行复制,通常需要在复制启动前延迟一个时间段;
    repl-diskless-sync-delay 5 无磁盘复制有效,主节点延迟5秒钟复制
    repl-ping-slave-period 10 主节点每隔10秒钟探测从节点一次
    
    *repl-timeout 60 探测超时60秒
    
    repl-disable-tcp-nodelay no 产生数据不集合传输,有数据就传
    repl-backlog-size 1mb  复制的后援队列长度
    
    *slave-priority 100  从节点的优先级
    复制集群中,主节点故障时,sentinel应用场景中的主节点选举时使用的优先级;数字越小优先级越高,但0表示不参与选举;
    
    min-slaves-to-write 3:主节点仅允许其能够通信的从节点数量大于等于此处的值时接受写操作;
    min-slaves-max-lag 10:从节点延迟时长超出此处指定的时长时,主节点会拒绝写入操作;
    

    二、sentinel(哨兵)监控节点:

    主要完成三个功能:监控、通知、自动故障转移
    选举:sentinel节点必须最少有三个,流言协议、投票协议
    1、配置项:
    port 26379
    sentinel monitor <master-name> <ip> <redis-port> <quorum>
    sentinel auth-pass <master-name> <password>
    
    <quorum>表示sentinel集群的quorum机制,即至少有quorum个sentinel节点同时判定主节点故障时,才认为其真的故障;
    s_down: subjectively down
    o_down: objectively down
    
    sentinel down-after-milliseconds <master-name> <milliseconds>
    监控到指定的集群的主节点异常状态持续多久方才将标记为“故障”;
    
    sentinel parallel-syncs <master-name> <numslaves>
    指在failover过程中,能够被sentinel并行配置的从节点的数量;
    
    sentinel failover-timeout <master-name> <milliseconds>
    sentinel必须在此指定的时长内完成故障转移操作,否则,将视为故障转移操作失败;
    
    sentinel notification-script <master-name> <script-path>
    通知脚本,此脚本被自动传递多个参数;
    

    2、使用格式:

    redis-cli -h SENTINEL_HOST -p SENTINEL_PORT
    redis-cli>
    SENTINEL masters
    SENTINEL slaves <MASTER_NAME>
    SENTINEL failover <MASTER_NAME>
    SENTINEL get-master-addr-by-name <MASTER_NAME>
    

    三、主从复制示例

    • 特点:
      一个Master可以有多个slave主机,支持链式复制;
      Master以非阻塞方式同步数据至slave主机;
    主节点
    #安装epel源,redis
    [root@redis-25 ~]# yum install epel-release
    [root@redis-25 ~]# yum install redis
    
    #配置redis配置文件监听地址
    [root@redis-25 ~]# vim /etc/redis.conf 
    bind 0.0.0.0
    [root@redis-25 ~]# systemctl start redis
    
    [root@redis-25 ~]# redis-cli
    127.0.0.1:6379> INFO
    NOAUTH Authentication required.
    127.0.0.1:6379> AUTH 321
    OK
    
    #获取从节点信息
    127.0.0.1:6379> INFO 
    # Replication
    role:master
    connected_slaves:1
    slave0:ip=192.168.1.24,port=6379,state=online,offset=729,lag=1  #从节点一信息
    slave1:ip=192.168.1.23,port=6379,state=online,offset=729,lag=1  #从节点二信息
    
    #配置sentinel
    [root@redis-25 ~]# vim /etc/redis-sentinel.conf 
    port 26379 #端口  
    bind 0.0.0.0  
    sentinel monitor mymaster 192.168.1.25 6379 2 #集群名称mymaster,地址端口,2是最少有两个节点通过才行
     sentinel auth-pass mymaster 321 #认证主节点密码
    sentinel down-after-milliseconds mymaster 5000#超出5秒钟就认为主节点下线
    sentinel parallel-syncs mymaster 1 #并行级别,级别越高压力越大,同步时间越短
    sentinel failover-timeout mymaster 180000 #故障转移超时时间3分钟,单位毫秒
    # sentinel notification-script <master-name> <script-path>#通知脚本
    logfile /var/log/redis/sentinel.log
    #日志文件
    
    #把日志文件拷贝到其他从节点
    [root@redis-25 ~]# scp /etc/redis-sentinel.conf 192.168.1.24:/etc/redis-sentinel.conf 
    [root@redis-25 ~]# scp /etc/redis-sentinel.conf 192.168.1.23:/etc/redis-sentinel.conf 
    
    #启动sentinel
    [root@redis-25 ~]# systemctl start redis-sentinel
    
    #查询日志,sentinel是否启动
    [root@redis-23 ~]# tail /var/log/redis/sentinel.log 
    1555:X 06 Nov 23:36:02.842 * +slave slave 192.168.1.24:6379 192.168.1.24 6379 @ mymaster 192.168.1.25 6379
    1555:X 06 Nov 23:36:02.845 * +slave slave 192.168.1.23:6379 192.168.1.23 6379 @ mymaster 192.168.1.25 6379
    1555:X 06 Nov 23:36:03.664 * +sentinel sentinel aad81444e9286ef995728ee39b0c91fc50e4cae5 192.168.1.24 26379 @ mymaster 192.168.1.25 6379
    
    #sentinel工具
    [root@redis-25 ~]# redis-cli -h 192.168.1.25 -p 26379
    
    #主节点信息
    192.168.1.25:26379> sentinel masters  
    1)  1) "name"
        2) "mymaster"
        3) "ip"
        4) "192.168.1.25"
        5) "port"
        6) "6379"
        7) "runid"
     ...............
    #查询从节点信息
    192.168.1.25:26379> sentinel slaves mymaster
    1)  1) "name"
        2) "192.168.1.24:6379"
        3) "ip"
        4) "192.168.1.24"
        5) "port"
        6) "6379"
        7) "runid"
    ..............
    2)  1) "name"
        2) "192.168.1.23:6379"
        3) "ip"
        4) "192.168.1.23"
        5) "port"
        6) "6379"
        7) "runid"
    .................
    
    #手动切换主节点
    192.168.1.25:26379> SENTINEL failover mymaster
    
    #查询切换后的主节点变成了192.168.1.23
    192.168.1.25:26379> sentinel masters
    1)  1) "name"
        2) "mymaster"
        3) "ip"
        4) "192.168.1.23"
        5) "port"
        6) "6379"
    
    
    从节点一,默认只读
    #安装epel源,redis
    [root@redis-24 ~]# yum install epel-release
    [root@redis-24 ~]# yum install redis
    
    #配置redis配置文件监听地址
    [root@redis-24 ~]# vim /etc/redis.conf 
    bind 0.0.0.0
    [root@redis-24 ~]# systemctl start redis
    
    #登录redis
    [root@redis-24 ~]# redis-cli
    
    #设置主节点ip
    127.0.0.1:6379> SLAVEOF 192.168.1.25 6379 #
    OK
    #设置授权密码
    127.0.0.1:6379> CONFIG SET masterauth 321
    OK
    #写入到配置文件中
    127.0.0.1:6379> CONFIG REWRITE
    OK
    
    #设置授权密码与主节点相同
    127.0.0.1:6379> CONFIG SET requirepass 321
    OK
    127.0.0.1:6379> AUTH 321
    OK
    #写入到配置文件中
    127.0.0.1:6379> CONFIG REWRITE
    OK
    [root@redis-24 ~]# systemctl restart redis
    
    #查询sentinel复制过来的配置文件正确
    #启动sentinel
    [root@redis-23 ~]# systemctl start redis-sentinel
    
    从节点二,默认只读
    #安装epel源,redis
    [root@redis-23 ~]# yum install epel-release
    [root@redis-23 ~]# yum install redis
    
    #配置redis配置文件监听地址
    [root@redis-23 ~]# vim /etc/redis.conf 
    .......
    bind 0.0.0.0
    # slaveof <masterip> <masterport>
    slaveof 192.168.1.25 6379  #主节点地址
    # masterauth <master-password>
    masterauth "321"   #授权密码
    ........
    
    [root@redis-23 ~]# systemctl start redis
    #设置授权密码与主节点相同
    127.0.0.1:6379> CONFIG SET requirepass 321
    OK
    127.0.0.1:6379> AUTH 321
    OK
    #写入到配置文件中
    127.0.0.1:6379> CONFIG REWRITE
    OK
    [root@redis-24 ~]# systemctl restart redis
    
    #查询sentinel复制过来的配置文件正确
    #启动sentinel
    [root@redis-23 ~]# systemctl start redis-sentinel
    

    相关文章

      网友评论

          本文标题:redis的主从复制

          本文链接:https://www.haomeiwen.com/subject/yqaifqtx.html