• redis 主从复制


    1 . redis主从复制 – 配置文件方式实现

    1.1简介 :

    主机更新后根据配置和策略,自动同步到备机的master/slave机制,Master以写为主,Slave以读为主

    1.2 具体作用

    1. 读写分离,性能扩展,降低主服务器的压力
    2. 容灾,快速恢复,主机挂掉时,从机变为主机

    在这里插入图片描述

    1.3 配置1主2从

    下面我们来配置1主2从的效果,现实中是需要3台机器的,为了方便,我们就在一台机器上来演示,通过不同的端口来区分机器,3台机器的配置

    角色端口
    master(主)6379
    slave1(从)6380
    slave2(从)6381

    1.4 配置主从

    创建案例工作目录:master-slave
    执行下面命令创建 /opt/master-slave 目录,本次所有操作,
    均在 master-slave 目录进行。

    # 方便演示,停止所有的 redis
    ps -ef | grep redis | awk -F" " '{print $2;}' | xargs kill -9 
    mkdir /opt/master-slave
    cd /opt/master-slave/
    
    • 1
    • 2
    • 3
    • 4
    1.4.1 将redis.conf复制到master-slave目录
    cp /opt/redis-6.2.1/redis.conf /opt/master-slave/
    
    • 1

    主配置

    1.1 创建master的配置文件:redis-6379.conf

    在/opt/master-slave目录创建 redis-6379.conf 文件,内容如下,注意 192.168.200.129 是这个测试
    机器的ip,大家需要替换为自己的

    
    #redis.conf是redis原配置文件,内部包含了很多默认的配置,
    #这里使用include将其引用,相当于把redis.conf内容直接贴进来了
    include /opt/master-slave/redis.conf
    # 后台启动模式
    daemonize yes
    bind 192.168.200.129
    #配置密码
    requirepass 123456
    # 本实例工作目录
    dir /opt/master-slave/
    # 本实例日志文件路径
    logfile /opt/master-slave/6379.log
    #端口
    port 6379
    #rdb文件
    dbfilename dump_6379.rdb
    # 本实例进程号文件
    pidfile /var/run/redis_6379.pid
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    1.2 创建slave1的配置文件:redis-6380.conf

    在/opt/master-slave目录创建 redis-6380.conf 文件,内容如下,和上面master的类似,多了后面2行

    include /opt/master-slave/redis.conf
    daemonize yes
    bind 192.168.200.129
    requirepass 123456
    dir /opt/master-slave/
    port 6380
    dbfilename dump_6380.rdb
    pidfile /var/run/redis_6380.pid
    logfile /opt/master-slave/6380.log
    #用来指定主机:slaveof 主机ip 端口
    slaveof 192.168.200.129 6379
    #主机的密码
    masterauth 123456
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    1.3 创建slave2的配置文件:redis-6381.conf
    include /opt/master-slave/redis.conf
    daemonize yes
    bind 192.168.200.129
    requirepass 123456
    dir /opt/master-slave/
    port 6381
    dbfilename dump_6381.rdb
    pidfile /var/run/redis_6381.pid
    logfile /opt/master-slave/6381.log
    #用来指定主机:slaveof 主机ip 端口
    slaveof 192.168.200.129 6379
    #主机的密码
    masterauth 123456
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    1.4
    启动master
    redis-server /opt/master-slave/redis-6379.conf
    
    • 1
    启动slave1
    redis-server /opt/master-slave/redis-6380.conf
    
    • 1
    启动slave2
    redis-server /opt/master-slave/redis-6381.conf;
    
    • 1

    若启动有误,大家好好检查下配置,也可以看日志,3台机器启动会在 /opt/master-slave 目录产生日 志,如下

    在这里插入图片描述

    1.5 查看主机的信息

    通过redis-cli命令连接主机,如下

    redis-cli -h 192.168.200.129 -p 6379 -a 123456
    
    • 1

    通过下面命令,查看主机信息

    info Replication
    
    • 1

    在这里插入图片描述

    1.6 查看slave1的信息

    通过下面2个命令查询从机slave1的信息

    redis-cli -h 192.168.200.129 -p 6380 -a 123456
    info Replication
    
    • 1
    • 2

    在这里插入图片描述

    1.7 同样查看slave2的信息
    redis-cli -h 192.168.200.129 -p 6381 -a 123456
    info Replication
    
    • 1
    • 2

    在这里插入图片描述

    1.8 验证主从同步效果

    在master上面执行下面2个命令

    192.168.200.129:6379> flushdb
    OK
    192.168.200.129:6379> set name ready
    OK
    192.168.200.129:6379> set age 30
    OK
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    到slave1上执行下面命令,可以看出来数据已经同步过来了

    192.168.200.129:6380> mget name age
    1) "ready"
    2) "30"
    192.168.200.129:6380>
    
    • 1
    • 2
    • 3
    • 4

    同样到slave2上也执行一下,效果如下

    192.168.200.129:6381> mget name age
    1) "ready"
    2) "30"
    192.168.200.129:6381>
    
    • 1
    • 2
    • 3
    • 4

    主从复制原理

    1. slave启动成功连接到master后,会给master发送数据同步消息(发送sync命令)
    2. master接收到slave发来的数据同步消息后,把主服务器的数据进行持久化到rdb文件,同时会收集
      接收到的用于修改数据的命令,master将传rdb文件发送给你slave,完成一次完全同步
    3. 全量复制:而slave服务在接收到master发来的rdb文件后,将其存盘并加载到内存
    4. 增量复制:master继续将收集到的修改命令依次传给slave,完成同步
    5. 但是只要重新连接master,一次完全同步(全量复制)将会被自动执行
      在这里插入图片描述

    小结 :

    l

    从挂掉后又恢复了,会继续从主同步数据么?
    会的,当从重启之后,会继续将中间缺失的数据同步过来。
    info Replication:查看主从复制信息
    上面已经演示过了,主、从上都可以执行,用来查看主从信息。

  • 相关阅读:
    解决ModuleNotFoundError: No module named ‘diffusers.models.cross_attention‘
    pytest合集(3)— 测试用例
    WAIC2023:图像内容安全黑科技助力可信AI发展
    自动驾驶坐标系与旋转矩阵的确定(位置补偿)
    西部学刊杂志西部学刊杂志社西部学刊编辑部2022年第22期目录
    从底层结构开始学习FPGA(8)----Block RAM(BRAM,块RAM)
    YOLOv8改进 | 如何在网络结构中添加注意力机制、C2f、卷积、Neck、检测头
    java基础 集合(3) Map接口、Collections工具类、集合总结
    java反射全面复习
    计算机专业毕业论文python毕业设计题目推荐基于Python实现的数据分析系统[包运行成功]
  • 原文地址:https://blog.csdn.net/weixin_43183496/article/details/134005275