zoukankan      html  css  js  c++  java
  • Redis 主从复制

    主从复制介绍

    在分布式系统中为了解决单点问题,通常会把数据复制多个副本到其他机器,满足故障恢复和负载均衡等求.
    Redis 也是如此,提供了复制功能.
    复制功能是高可用 Redis 的基础,后面的哨兵和集群都是在复制的基础上实现高可用的.
    
    每个从节点只能有一个主节点,主节点可以有多个从节点.
    

    11. Redis(主从)(Master-Replicaset 主,副本集)

    11.1 主-副本集原理

    副本库通过slaveof 192.168.0.51 6379命令,连接主库,并发送SYNC给主库。
    主库收到SYNC后,会立即触发BGSAVE,后台保存RDB,发送给副本库。
    副本库接收后会应用RDB快照。
    主库会陆续将中间产生的新的操作,保存并发送给副本库。
    到此,我们主复制集就正常工作了。
    在此以后,主库只要发生新的操作,都会以命令转播的形式自动发送给副本库。
    所有复制相关信息,从info信息中都可以查到,即使重启任何节点,他的主从关系依然都在。
    如果发生主从关系断开时,从库数据没有任何损坏,在下次重连之后,从库发送PSYNC给主库。
    主库只会将从库缺失部分的数据同步给从库用,达到快速恢复主从的目的。
    

    11.2 主从数据一致性保证 (面试)

    min-slaves-to-write 1   #最小的从库写入数量,意思是主库录入一条数据后,必须要保证有1台从库复制成功,才会返回OK,也就是主从复制成功。
    min-slaves-max-lag 3  #单位为秒。如果从库的延时超过3秒,主库直接宣告数据同步失败。
    

    11.3 主库是否要开启持久化 (面试)

    如果不开,有可能在主库进行重启操作时,造成所有主从数据丢失。
    提示:
    如果主从环境中的主库没有开启持久化又发生宕机,千万不要立即启动主库,否则主库生成的空的RDB(快照)也会同步到从库。
    导致数据被彻底清空。
    

    配置复制的方式有三种

    1.在配置文件中加入 slaveof {masterHost} {masterPort} 随 redis 启动生效.
    2.在 redis-server 启动命令后加入—slaveof {masterHost} {masterPort}生效.
    3.直接使用命令:slaveof {masterHost} {masterPort}生效.
    

    12. Redis主从复制搭建

    (1)环境准备
    准备两台或以上的redis实例(当前环境为单机多实例)
    
    [root@redis-01 ~]# mkdir /data/638{0..2}
    
    配置文件示例:
    cat >> /data/6380/redis.conf <<EOF
    port 6380
    daemonize yes
    pidfile /data/6380/redis.pid
    loglevel notice
    logfile "/data/6380/redis.log"
    dbfilename dump.rdb
    dir /data/6380
    requirepass 123
    masterauth 123           #主库认证信息
    EOF
    
    cat >>   /data/6381/redis.conf <<EOF
    port 6381
    daemonize yes
    pidfile /data/6381/redis.pid
    loglevel notice
    logfile "/data/6381/redis.log"
    dbfilename dump.rdb
    dir /data/6381
    requirepass 123
    masterauth 123
    EOF
    
    cat >>   /data/6382/redis.conf <<EOF
    port 6382
    daemonize yes
    pidfile /data/6382/redis.pid
    loglevel notice
    logfile "/data/6382/redis.log"
    dbfilename dump.rdb
    dir /data/6382
    requirepass 123
    masterauth 123
    EOF
    
    启动:
    redis-server /data/6380/redis.conf
    redis-server /data/6381/redis.conf
    redis-server /data/6382/redis.conf
    
    查看进程:
    [root@redis-01 ~]# ps -ef | grep redis | grep -v grep
    root       6787      1  0 11:01 ?        00:00:00 redis-server *:6380
    root       6791      1  0 11:01 ?        00:00:00 redis-server *:6381
    root       6795      1  0 11:01 ?        00:00:00 redis-server *:6382
    
    主节点:6380
    从节点:6381、6382
    
    (2)开启主从(6381、6382上操作)
    [root@redis-01 ~]# redis-cli -p 6381 -a 123 SLAVEOF 127.0.0.1 6380
    OK
    [root@redis-01 ~]# redis-cli -p 6382 -a 123 SLAVEOF 127.0.0.1 6380
    OK
    
    (3)查询主从状态
    主状态查询:
    [root@redis-01 ~]# redis-cli -p 6380 -a 123 info replication
    # Replication
    role:master  #角色:主
    connected_slaves:2  #连接的从库的数量
    slave0:ip=127.0.0.1,port=6381,state=online,offset=113,lag=1
    slave1:ip=127.0.0.1,port=6382,state=online,offset=113,lag=0
    master_repl_offset:113
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:2
    repl_backlog_histlen:112
    redis-cli -p 6381 -a 123 info replication
    redis-cli -p 6382 -a 123 info replication
    
    从状态查询:
    [root@redis-01 ~]# redis-cli -p 6381 -a 123 info replication
    # Replication
    role:slave  #角色为从
    master_host:127.0.0.1
    master_port:6380
    master_link_status:up
    master_last_io_seconds_ago:10
    master_sync_in_progress:0
    slave_repl_offset:883
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    master_repl_offset:0
    repl_backlog_active:0
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:0
    repl_backlog_histlen:0
    
    [root@redis-01 ~]# redis-cli -p 6382 -a 123 info replication
    # Replication
    role:slave
    master_host:127.0.0.1
    master_port:6380
    master_link_status:up
    master_last_io_seconds_ago:5
    master_sync_in_progress:0
    slave_repl_offset:953
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    master_repl_offset:0
    repl_backlog_active:0
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:0
    repl_backlog_histlen:0
    
  • 相关阅读:
    Java实现 蓝桥杯 算法提高 小X的购物计划
    Java实现 蓝桥杯 算法提高 小X的购物计划
    Java实现 第十一届 蓝桥杯 (高职专科组)省内模拟赛
    Java实现 第十一届 蓝桥杯 (高职专科组)省内模拟赛
    Java实现 第十一届 蓝桥杯 (高职专科组)省内模拟赛
    Java 第十一届 蓝桥杯 省模拟赛 小明的城堡
    Java 第十一届 蓝桥杯 省模拟赛 小明的城堡
    Java 第十一届 蓝桥杯 省模拟赛 小明的城堡
    129. Sum Root to Leaf Numbers
    117. Populating Next Right Pointers in Each Node II
  • 原文地址:https://www.cnblogs.com/xiets/p/13154200.html
Copyright © 2011-2022 走看看