• Redis主从复制,哨兵和Cluster集群


    主从复制: 主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份(和同步),以及对于读操作的负载均衡和简单的故障恢复。

    缺陷:故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制。

    哨兵: 在主从复制的基础上,哨兵实现了自动化的故障恢复。(主挂了,找一个从成为新的主,哨兵节点进行监控)

    缺陷:写操作无法负载均衡;存储能力受到单机的限制。

    Cluster集群: 通过集群,Redis解决了写操作无法负载均衡,以及存储能力受到单机限制的问题,实现了较为完善的高可用方案。(6台起步,成双成对,3主3从)

    redis主从复制

    主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。

    默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

    主从复制的作用

    1.数据冗余: 主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
    2.故障恢复: 当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
    3.负载均衡: 在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
    4.高可用基石: 除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

    主从复制流程

    (1)若启动一个slave机器进程,则它会向Master机器发送一个sync command命令,请求同步连接。

    (2)无论是第一次连接还是重新连接,Master机器都会启动一个后台进程,将数据快照保存到数据文件中(执行rdb操作),同时Master还会记录修改数据的所有命令并缓存在数据文件中.

    (3)后台进程完成缓存操作之后,Master机器就会向slave机器发送数据文件,slave端机器将数据文件保存到硬盘上,然后将其加载到内存中,接着Master机器就会将修改数据的所有操作一并发送给slave端机器。若slave出现故障导致宕机,则恢复正常后会自动重新连接。

    (4)Master机器收到slave端机器的连接后,将其完整的数据文件发送给slave端机器,如果Mater同时收到多个slave发来的同步请求,则Master会在后台启动一个进程以保存数据文件,然后将其发送给所有的slave端机器,确保所有的slave端机器都正常。

    redis一主二从的部署 

    masterredis-5.0.720.0.0.70
    slave1redis-5.0.720.0.0.71
    slave2redis-5.0.720.0.0.72

    实验具体步骤 

    步骤一:修改master节点的配置文件 

    vim /etc/redis/6379.conf 
     bind 0.0.0.0                      #70行,修改监听地址为0.0.0.0(生产环境中,尤其是多网卡最好填写物理网卡的IP)
     daemonize yes                     #137行,开启守护进程,后台启动 
     logfile /var/log/redis_6379.log   #172行,指定日志文件存放目录
     dir /var/lib/redis/6379           #264行,指定工作目录
     appendonly yes                    #700行,开启AOF持久化功能

    /etc/init.d/redis_6379 restart     #重启redis服务

    步骤二:修改slave节点的配置文件 

    #修改slave1的配置文件
    vim /etc/redis/6379.conf 
     bind 0.0.0.0                        #70行,修改监听地址为0.0.0.0(生产环境中需要填写物理网卡的IP)
     daemonize yes                       #137行,开启守护进程,后台启动
     logfile /var/log/redis_6379.log     #172行,指定日志文件目录
     dir /var/lib/redis/6379             #264行,指定工作目录
     replicaof 192.168.73.105 6379       #288行,指定要同步的Master节点的IP和端口
     appendonly yes                      #700行,修改为yes,开启AOF持久化功能

    #将配置文件传给slave2
    scp /etc/redis/6379.conf 20.0.0.72:/etc/redis/

    /etc/init.d/redis_6379 restart  #重启redis
    netstat -natp | grep redis      #查看主从服务器是否已建立连接

    实验测试 

    Redis哨兵模式

    主从切换技术的方法是:当服务器宕机后,需要手动一台从机切换为主机,这需要人工干预,不仅费时费力而且还会造成一段时间内服务不可用。为了解决主从复制的缺点,就有了哨兵机制。

     哨兵的核心功能

    :在主从复制的基础上,哨兵引入了主节点的自动故障转移。

     哨兵模式的组成:

    哨兵节点: 哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的redis节点,不存储数据。

    数据节点: 主节点和从节点都是数据节点。

    哨兵模式的作用 

    • 监控: 哨兵会不断地检查主节点和从节点是否运作正常。
    • 自动故障转移: 当主节点不能正常工作时,哨兵会开始自动故障转移操,它会将失效主节点的其中一个从节点升级为新的主节点,并让其它从节点改为复制新的主节点。
    • 通知(提醒): 哨兵可以将故障转移的结果发送给客户端。
    • 此外:哨兵节点也可以是单独独立在其他的主机上,并不需要一定安装redis主从复制的节点服务器上 

    故障转移机制

    1、由哨兵节点定期监控发现主节点是否出现了故障

    每个哨兵节点每隔1秒会问主节点、从节点及其它哨兵节点发送一次ping命令做一次心检测。如果主节点在一定时间范围内不回复或者是回复一个错误消息,那么这个哨兵就会认为这个主节点主观下线了(单方面的)。当超过半数哨兵节点认为该主节点主观下线了,这样就客观下线了。

    2、当主节点出现故障,此时哨兵节点会通过Raft算法(选举算法)实现选举机制共同选举出一个哨兵节点为leader,来负责处理主节点的故障转移和通知。所以整个运行哨兵的集群的数量不得少于3个节点。

    3、由leader哨兵节点执行故障转移,过程如下:

    将某一个从节点升级为新的主节点,让其它从节点指向新的主节点;
    若原主节点恢复也变成从节点,并指向新的主节点;
    通知客户端主节点已经更换。

    需要特别注意的是,客观下线是主节点才有的概念;如果从节点和哨兵节点发生故障,被哨兵主观下线后,不会再有后续的客观下线和故障转移操作

    哨兵模式中主节点的选拔 

    1.过滤掉不健康的(己下线的),没有回复哨兵ping响应的从节点。

    2.选择配置文件中从节点优先级配置最高的。(replica-priority,默认值为100)

    3.选择复制偏移量最大,也就是复制最完整的从节点。

    哨兵的启动依赖于主从模式,所以须把主从模式安装好的情况下再去做哨兵模式。

    redis哨兵模式的部署

    主从    redis的版本号    IP地址    哨兵点
    master    redis-5.0.7    20.0.0.70    Sentinel 1
    slave1    redis-5.0.7    20.0.0.71   Sentinel 2
    slave2    redis-5.0.7    20.0.0.72    Sentinel 3

    步骤一:修改哨兵节点的配置文件

    vim /opt/redis-5.0.7/sentinel.conf
    ......
    protected-mode no                #17行,取消注释,关闭保护模式
    port 26379                       #21行,Redis哨兵默认的监听端口
    daemonize yes                    #26行,指定sentinel为后台启动
    logfile "/var/log/sentinel.log"  #36行,指定日志文件存放路径
    dir "/var/lib/redis/6379"        #65行,指定数据库存放路径
    sentinel monitor mymaster 20.0.0.70 6379 2  #84行,修改
    #指定该哨兵节点监控20.0.0.70:6379这个主节点,该主节点的名称是mymaster。
    #最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移

    sentinel down-after-milliseconds mymaster 3000  #113行,判定服务器down掉的时间周期,默认30000毫秒(30秒)
    sentinel failover-timeout mymaster 180000  #146行,同一个sentinel对同一个master两次failover之间的间隔时间(180秒)

    #传给两外2个哨兵节点
    scp /opt/redis-5.0.7/sentinel.conf  20.0.0.71:/opt/redis-5.0.7/
    scp /opt/redis-5.0.7/sentinel.conf  20.0.0.72.107:/opt/redis-5.0.7/

    步骤二:启动 哨兵模式,查看其监控状态

    #启动三台哨兵
    cd /opt/redis-5.0.7/
    redis-sentinel sentinel.conf &
     
    #在哨兵节点查看监控状态
    [root@localhost ~]# redis-cli -p 26379 info Sentinel

    实验测试 

    #在Master 上查看redis-server进程号:
    [root@localhost ~]# ps -ef | grep redis

    #杀死 Master 节点上redis-server的进程号
    [root@localhost ~]# kill -9 pid号      #Master节点上redis-server的进程号
    [root@localhost ~]# netstat -natp | grep redis

    [root@localhost redis-5.0.7]# tail -f /var/log/sentinel.log
     
     
    #新master进行键值对的创建
    [root@localhost redis-5.0.7]# redis-cli 
    127.0.0.1:6379> set newname lisi
    OK
    127.0.0.1:6379> get newname
    "lisi"
    127.0.0.1:6379> 

  • 相关阅读:
    数据湖iceberg-day01-概念,特点,存储格式以及各种表中的演化,数据类型
    爬虫案例:建设库JS逆向
    centerOS下docker 搭建IotDB集群
    第4集丨ObjectScript JSON 中 数据类型应用
    7-3 数列循环右移
    长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析、生物量估算与趋势分析等领域中的应用
    闲聊vue版本差异和开发中不太容易注意的点(基础篇)
    智慧公厕领先品牌:卫生、智能、环保
    [软考]信息安全工程师-第6章 认证技术原理与应用 课件知识点整理
    JAVA-POI && easyEXCEL
  • 原文地址:https://blog.csdn.net/abc13245821907/article/details/134551483