• redis 之 redis主从复制


    Redis集群中的数据库复制是通过主从同步来实现的

    主节点(Master)把数据分发给从节点(Slave)

    主从同步的好处在于高可用,Redis节点有冗余设计

    主从复制的原理:
    1. 从服务器向主服务器发送 SYNC 命令。
    2. 接到 SYNC 命令的主服务器会调用BGSAVE 命令,创建一个 RDB 文件,并使用缓冲区记录接下来执行的所有写命令。
    3. 当主服务器执行完 BGSAVE 命令时,它会向从服务器发送 RDB 文件,而从服务器则会接收并载入这个文件。
    4. 主服务器将缓冲区储存的所有写命令发送给从服务器执行。
    -------------
    1、在开启主从复制的时候,使用的是RDB方式的,同步主从数据的
    2、同步开始之后,通过主库命令传播的方式,主动的复制方式实现
    3、2.8以后实现PSYNC的机制,实现断线重连

    .实现一主两从的redis主从同步

    1.环境准备

    首先两台服务器都已经编译安装好redis了(由于开的是虚拟机开不了那么多,所有将一个从库部署在主库同个服务器上,注意生产中主从不会在同一台服务器的)

    ip:192.168.1.209

    一台服务器上做一主一从的redis配置

    ip:192.168.1.208

    一台服务器上做一个从redis配置

    2.主库从库配置

    (1)192.168.1.209 主库配置

    首先创建一个主库端口6379的redis配置文件

    配置文件redis-6379.conf 内容为:

    # 声明端口
    port 6379
    # 表示后台启动
    daemonize yes
    # 将pid文件放到某目录下
    pidfile /data/6379/redis.pid
    # 日志级别和日志目录
    loglevel notice
    logfile "/data/6379/redis.log"
    # 持久化相关
    # dir /data/6379
    # 安全模式
    protected-mode no

    # 密码设置,redis一般不要密码

    # requirepass hsz

    配置完成后,创建一个这个redis的数据存放目录(数据包括日志,pid)

    # mkdir /data/6379/

    启动redis服务

    # redis-server redis-6379.conf

    # 查看是否有进程

    下截图说明程序已经启动:

    进入redis

    # redis-cli -p 6379

    (2)192.168.1.209 从库配置

    首先创建一个主库端口6380的redis配置文件

    配置文件redis-6380.conf 内容为:

    port 6380
    
    daemonize yes
    
    pidfile /data/6380/redis.pid
    
    loglevel notice
    
    logfile "/data/6380/redis.log"
    
    dbfilename dump.rdb
    
    dir /data/6380
    
    protected-mode no

    配置完成后,创建一个这个redis的数据存放目录(数据包括日志,pid)

    # mkdir /data/6380/

    启动redis服务

    # redis-server redis-6380.conf

    # 查看是否有进程

    下截图说明程序已经启动:

    进入redis

    # redis-cli -p 6380

    因为是从库在配置文件上加一台配置:

    #     主库ip      主库端口

    slaveof 192.168.1.209 6379

    添加后重启数据库

    kill -9 从库进程号

    redis-server /opt/redis_conf/redis-6379.conf

    (3)192.168.1.208 从库配置

    (2)192.168.1.209 从库配置配置相同,就端口不一样

    直到进入redis中:

    # ps aux|grep redis

    #redis-cli -p 6381

     

    因为是从库在配置文件上加一台配置:

    #     主库ip      主库端口

    slaveof 192.168.1.209 6379

    添加后重启数据库

    pkill redis

    redis-server /opt/redis_conf/redis-6381.conf

    3.查看主从数据库状态

    # 主服务上运行

    redis-cli -p 6379 info

    redis-cli -p 6381 info replication

    以下截图分别为两台服务器的ip,端口,状态等

    # 从服务器上运行

    # 下面端口为从数据库自己的端口

    # redis-cli -p 6380 info replication

    截图参数分别表示:role为角色,redis主库ip,主库端口,已经连接主库状态

    4.验证从库只读

    数据写不进去,如下图

    主库写入数据验证从库是同步验证

    从库数据查询,可以查到数据

     

    5.手动进行主从复制故障切换

    现在将主库关闭,一主两从现在只有两个主库,都写入不了

    这样的话,redis就写入不了

    所有这时候需要将一个从库升级为主库(一般是自动升级,但是我们现在来学习手动设置一个)

    将一个从库取消从库身份,这时候从库变为主库

    127.0.0.1:6381> slaveof no one

    127.0.0.1:6381> info replication

     

    但是呢,别的从库不知道,此库变为主库,所以需要将另外一个从库认定这个库为主库,才能进行主从复制的功能

    127.0.0.1:6380> slaveof no one

    127.0.0.1:6380> slaveof 192.168.1.208 6381

    查看主库与从库状态:

    127.0.0.1:6380> info replication

    在从库查看来看,已经有新的主库了,而且连接状态正常,下面是主库的信息

    这样的修改只能实现临时主从状态,如果要将永久设置需要将配置文件中的主从修改为现在的主库的ip的端口

    原来的主库作为从库操作

    指定现在从库的信息,在数据库设置只是临时的

    127.0.0.1:6379> slaveof 192.168.1.208 6381

    127.0.0.1:6379> info replication

    如果这时候将主库关闭,再起来,从库不会识别,所有这时候我们就引出一个哨兵模式,可以解决主库挂掉,数据还能正常存储的问题解决==>请见redis-sentinel主从复制高可用

  • 相关阅读:
    C#分部类和分部方法的使用
    C# 关于线程锁lock的使用方法
    Halcon标定流程及注意事项
    C#如何将ListView中的数据导出到Excel中
    Application.DoEvents()的作用
    (C#)使用队列(Queue)解决简单的并发问题
    C#的委托 VS C++的指针
    转载——卷积神经网络(CNN)基础入门介绍
    Linux启动详细过程(开机启动顺序)
    Nginx https 证书配置
  • 原文地址:https://www.cnblogs.com/hszstudypy/p/11561447.html
Copyright © 2020-2023  润新知