• 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
    
  • 相关阅读:
    git保存用户名密码的方式
    解决HP电脑播放视频,暂停后再次播放,前几秒钟会没有声音
    我们本想通过网络了解广袤的世界,而不是陷入推荐的漩涡
    cnblogs回来了
    mysql commit和事务
    服务器重启crontab服务
    linux多个命令行执行
    quick bi 配置即席查询sql 参数
    python 不定长参数
    python 和 mysql 的时间格式化
  • 原文地址:https://www.cnblogs.com/xiets/p/13154200.html
Copyright © 2020-2023  润新知