• Redis进阶:Redis的主从复制机制


    Redis进阶:Redis的主从复制机制

    主从复制机制介绍

    单机版的Redis存在性能瓶颈,Redis通过提高主从复制实现读写分离,提高了了Redis的可用性,另一方便也能实现数据在多个Redis直接的备份。

    配置一主多从

    准备配置文件

    本文示例是在同一台机器上启动3个Redis实例。实现一主多从,多个IP地址方式也一样,只需求修改配置文件的maste的ip地址和端口就行,这里就不在赘述了。

    # 复制配置文件Redis6379.conf 
    [root@localhost redis-5.0.7]# cp redis6379.conf redis6380.conf
    [root@localhost redis-5.0.7]# cp redis6379.conf redis6381.conf
    

    至此我们准备了3个配置文件,供后面使用。

    修改配置文件

    修改主配置文件

    # 修改Redis6379配置文件 
    [root@localhost redis-5.0.7]# vi redis6379.conf 
    # 修改如下部分增加密码验证
    # requirepass foobared
    requirepass enjoyitlife
    

    修改从服务配置文件。

    # 修改redis6380.conf配置文件
    [root@localhost redis-5.0.7]# vi redis6380.conf 
    # 修改端口
    port 6380
    # 修改日志文件
    logfile "redis6380.log"
    # 修改pidfile
    pidfile /var/run/redis_6380.pid
    # 配置主服务的地址和端口 关键配置
    replicaof 127.0.0.1 6379
    #主开启密码验证时 从服务器也需要配置验证密码
    masterauth enjoyitlife
    

    redis6381.conf 也要按照上面的配置配置一遍。将上面的6380修改为6381即可。

    启动服务

    # 启动主服务 和 从服务
    [root@localhost redis-5.0.7]# src/redis-server redis6379.conf  
    [root@localhost redis-5.0.7]# src/redis-server redis6380.conf 
    [root@localhost redis-5.0.7]# src/redis-server redis6381.conf 
    
    # 查看进程
    [root@localhost redis-5.0.7]# ps -ef | grep redis
    root       7684      1  0 10:55 ?        00:00:07 srcredis-server 127.0.0.1:6379
    root       7689      1  0 10:55 ?        00:00:07 srcredis-server 127.0.0.1:6380
    root       7762      1  0 11:41 ?        00:00:00 srcredis-server 127.0.0.1:6381
    root       7767   7721  0 11:44 pts/2    00:00:00 grep --color=auto redis
    

    此时,我们的Redis主从复制服务已经搭建完成,6379为主服务,6380、6381为从服务。这里需要注意是,从服务只支持读操作,只有主服务节点才支持写、更新、删除操作。

    这是通过配置的方式,还有一种方式是直接在从节点客户端输入指令:replicaof 127.0.0.1 6379 ,这种方式也可以实现主从复制,但是这种方式服务Redis重启后就会失效。

    另外之前的Redis的主从复制指令是通过slaveof ,现在已经替换为replicaof ,主要是因为slave有奴隶的意思,Redis的开发者们觉得不大友好,所以用replicaof 来替换了原来的指令。建议以后直接使用replicaof指令。

    功能验证

    可以通过info relication指令,查看主从配置信息。

    # 功能验证 连接主服务客户端 输入如下指令
    127.0.0.1:6379> info replication
    # Replication
    role:master
    connected_slaves:2 # 可以看到当前已经上线了2个从服务节点
    slave0:ip=127.0.0.1,port=6380,state=online,offset=126,lag=1
    slave1:ip=127.0.0.1,port=6381,state=online,offset=126,lag=1
    master_replid:76d6f75c4b5a59baf39473dc3f94352bebc9158f
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:126
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:126
    
    # 在从节点 输入指令
    127.0.0.1:6380> info replication
    # Replication
    role:slave
    master_host:127.0.0.1
    master_port:6379
    master_link_status:up
    master_last_io_seconds_ago:3
    master_sync_in_progress:0
    slave_repl_offset:1204
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    master_replid:76d6f75c4b5a59baf39473dc3f94352bebc9158f
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:1204
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:1204
    

    在主服务节点 设置一个属性,然后在从节点进行查询。

    # 主节点设置属性
    127.0.0.1:6379> set name "hello Redis Replication"
    OK
    
    #从节点 获取属性
    127.0.0.1:6380> get name
    "hello Redis Replication"
    127.0.0.1:6381> get name
    "hello Redis Replication"
    

    主从复制关键点

    • Redis使用异步复制,主节点和从节点是异步地处理的数据流的同步。
    • 一个主服务可以有N个从节点。
    • 从节点可以继续有从节点,形成复制链。
    • Redis的复制在主节点是非阻塞的,可以在同步的同时处理其他请求。
    • 复制在从节点也是非阻塞的,但如果是初次同步大数据量时,从节点会有一个窗口期,此时会阻塞从节点的对其他请求的处理。
    • 如果主节点没开启持久化,一旦主节点重启,从节点和主节点都会丢失数据。所以建议主节点和从节点都启用持久化,同时要配置实例防止重置后自动重启。

    Redis主从复制工作流程

    1. 从节点连接上主节点。通PING指令访问主节点。
    2. 主从节点通过PSYNC指令发送旧的replicationID和偏移量。
    3. 主节点通过该方式发送从节点需要的增量数据。如果从节点没有历史记录的replicationID和偏移量,就会进行一个全量同步。

    全量复制流程:

    1. 主节点服务启动,开启持久化,产生RDB文件。
    2. 主节点接受客户端的操作指令,并进行缓冲数据。
    3. 主节点保存完成数据时, 主节点将数据集文件传输给从节点。
    4. 从节点将保存接受到的数据集文件在磁盘上,然后加载文件到内存。实现主从复制。

    主从复制有一定的窗口期,可以通过下面的参数进行配置:

    min-replicas-to-write 复制到写<number of replicas>
    min-replicas-max-lag 最小复制最大延迟<number of seconds>
    

    主从复制的数据过期问题

    • 从节点不会主动触发过期的Key的删除工作,而是在主节点进行删除过期数据,然后在同步到从节点上。
    • 在执行Lua脚本时,不会执行任何Key的过期操作。这可以防止 key 在脚本中间过期,保证将相同的脚本发送到从节点 ,从而在使主从节点的数据集保持一致。

    故障转移

    当主节点在出现故障后,此时就需要提升从节点升级为主节点,这时就需要手动切换,而且存在较大的风险,同时还要改一堆的程序配置,Redis提供了哨兵机制进行自动故障转移,下期我们在具体介绍。

    以上就是Redis中主从复制操作的相关介绍了,更多其他指令可以参考官网,Redis官网,谢谢阅读,希望对你有所帮助。

  • 相关阅读:
    忘记IBM服务器的登录IP
    分层思想
    防火墙的发展历史
    存储相关
    HCIE_交换篇_ARP欺骗
    堡垒机与网闸
    防止ARP欺骗
    信息安全等级保护
    DPM如何创建存储池?
    Lync2013的会话
  • 原文地址:https://www.cnblogs.com/enjoyitlife/p/11978522.html
Copyright © 2020-2023  润新知