• 【redis】主从复制


    redis之主从复制

     

    一、redis主从同步

    原理:
    1. 从服务器向主服务器发送 SYNC 命令。
    2. 接到 SYNC 命令的主服务器会调用BGSAVE 命令,创建一个 RDB 文件,并使用缓冲区记录接下来执行的所有写命令。
    3. 当主服务器执行完 BGSAVE 命令时,它会向从服务器发送 RDB 文件,而从服务器则会接收并载入这个文件。
    4. 主服务器将缓冲区储存的所有写命令发送给从服务器执行。


    -------------
    1、在开启主从复制的时候,使用的是RDB方式的,同步主从数据的
    2、同步开始之后,通过主库命令传播的方式,主动的复制方式实现
    3、2.8以后实现PSYNC的机制,实现断线重连

    1、环境准备

    主库:6380的redis(master)
    从库1:6381的redis(slave)
    从库2:6382的redis(slave)

    主库redis.conf配置

    复制代码
    port 6380     # 端口
    daemonize yes   # 在后台运行
    pidfile /data/6380/redis.pid   # 进程id
    loglevel notice
    logfile "/data/6380/redis.log"   # 日志文件,需自己创建
    dbfilename dump.rdb      # 持久化存储
    dir /data/6380                
    protected-mode no
    复制代码

    从库1redis.conf配置

    复制代码
    port 6381      
    daemonize yes
    pidfile /data/6381/redis.pid
    loglevel notice
    logfile "/data/6381/redis.log"
    dbfilename dump.rdb
    dir /data/6381
    protected-mode no
    slaveof   192.168.61.129  6380   # 指定主库的ip和端口
    复制代码

    从库2redis.conf配置

    复制代码
    port 6382
    daemonize yes
    pidfile /data/6382/redis.pid
    loglevel notice
    logfile "/data/6382/redis.log"
    dbfilename dump.rdb
    dir /data/6382
    protected-mode no
    slaveof   192.168.61.129  6380
    复制代码

    注意:

    如果主库中设置了密码,那么我们在从库的配置文件中就需要添加主库的密码

    masterauth root   # 指定主库的密码

    2、启动redis服务端

    redis-server /data/6380/redis.conf 
    redis-server /data/6381/redis.conf 
    redis-server /data/6382/redis.conf 

    3、登录数据库查看主从关系

    主库【6380】:

    复制代码
    [root@szx /data/6380 21:46:33]#redis-cli -p 6380 -h 192.168.61.129
    192.168.61.129:6380> info  replication
    # Replication
    role:master
    connected_slaves:2    # 有两个从库连接
    slave0:ip=192.168.61.129,port=6381,state=online,offset=2100,lag=0
    slave1:ip=192.168.61.129,port=6382,state=online,offset=2100,lag=0
    master_replid:a70b4cc777e7f27efef1d2463f4d78d556a0162b
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:2100
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:2100
    复制代码

    从库1【6381】:

    复制代码
    [root@szx /data/6381 21:50:27]#redis-cli -p 6381 -h 192.168.61.129
    192.168.61.129:6381> info  replication
    # Replication
    role:slave    # 从库
    master_host:192.168.61.129  # 主库ip
    master_port:6380      # 主库端口
    master_link_status:up    # 连接主库正常
    master_last_io_seconds_ago:4
    master_sync_in_progress:0
    slave_repl_offset:2226
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    master_replid:a70b4cc777e7f27efef1d2463f4d78d556a0162b
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:2226
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:2226
    复制代码

    从库2【6382】:

    复制代码
    [root@szx /data/6382 21:50:27]#redis-cli -p 6382 -h 192.168.61.129
    127.0.0.1:6382> info replication
    # Replication
    role:slave
    master_host:192.168.61.129
    master_port:6380
    master_link_status:up
    master_last_io_seconds_ago:3
    master_sync_in_progress:0
    slave_repl_offset:2366
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    master_replid:a70b4cc777e7f27efef1d2463f4d78d556a0162b
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:2366
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:43
    repl_backlog_histlen:2324
    复制代码

    4、查看主从复制效果

    主库写入数据

    192.168.61.129:6380> SET name "alex"
    OK
    192.168.61.129:6380> mset name "wusir" age 88 
    OK

    从库1查看key

    192.168.61.129:6381> get name 
    "alex"
    192.168.61.129:6381> mget name age 
    1) "wusir"
    2) "88"

    从库2查看key

    127.0.0.1:6382> get name 
    "alex"
    127.0.0.1:6382> mget name age 
    1) "wusir"
    2) "88"

    二、主从复制故障恢复

    复制代码
    从库挂了无所谓
    主库挂了得立即恢复主库,或者将从库切换为主库,继续工作
    
        -.实验步骤
        1.分别启动 6380  6381 6382 三个数据库实例,建立好主从关系
        
        2.杀死6380主库,此时6381 6382 群龙无首
        
        3.选择让6381为新的主库,就要去除6381的从的身份
        redis-cli -p 6381 slaveof  no one 
        #查看此时6381的身份
        redis-cli -p 6381 info replication
    
        4.此时将6382的主人改为6381
        redis-cli -p 6382 slaveof 192.168.61.129 6381
    复制代码
  • 相关阅读:
    Typora Writings
    Xcode7.3 beta 新功能
    最美应用API接口分析
    'Project Name' was compiled with optimization
    web前端开发与iOS终端开发的异同[转]
    2015-12-19_16_30_15
    Xcode搭建Python编译环境
    jsPach.qq.com
    Q&AApple’s Craig Federighi talks open source Swift, Objective-C and the next 20 years of development
    .NET Core项目与传统vs项目的细微不同
  • 原文地址:https://www.cnblogs.com/youxiu123/p/11493137.html
Copyright © 2020-2023  润新知