• redis主从哨兵模式


    接触redis已经有了两个年头,虽然对业务上的使用已经很熟悉,但是对于redis高性能高可用方面的了解还不够深入,所以逐步开始学习reids搭建主从和集群。
    今天开始介绍的是最简单的主从搭建,废话不多说,开始了~
    首先讲一下主从的架构,和mysql的主从一样,redis的主从也是从节点同步主节点的数据。我们介绍的这个主从是一主多从的架构,即是一个主节点,多个从节点,一般我们至少需要两个从节点来实现,因为一般的数据库对读的压力比较大,所以从节点会需要的多。主节点负责写入,然后从节点负责读出,读写分离。多个从节点也会分担读的压力。

        我们接下来会在一台机器上启动多个三个redis实例,一主两从。
        redis-server --port 6379  启动master
        redis-server --port 6380 --slaveof 127.0.0.1 6379 启动从一
        redis-server --port 6381 --slaveof 127.0.0.1 6379 启动从二
        这样我们的主从服务器就搭建好了,我们可以测试试试。
        我们可以在master中写入数据,和读取数据,但是在从slave只能读,不能写。而且我们能够看到主节点写入的数据在从几点都可以读取到,这就是主从想要达到的效果。
        
    
        但是如果master宕机了怎么办呢?这就造成了数据没法写入,造成了数据的丢失,这就需要有一个slave站出来,承担写入的责任,也就是它要升为master,相对其他的slave也必须以它为主,来同步数据。这个我们可以通过人工来实现,但是在真是的业务场景中,我们不能可能实时去监控master,一旦master挂掉,人工的处理防方式速度慢,很大可能造成数据的丢失。这就用到了“哨兵”。
        Redis Sentinel是一个分布式架构,包含若干个Sentinel节点和Redis数据节点,每个Sentinel节点会对数据节点和其余Sentinel节点进行监控,当发现节点不可达时,会对节点做下线标识。如果被标识的是主节点,他还会选择和其他Sentinel节点进行“协商”,当大多数的Sentinel节点都认为主节点不可达时,他们会选举出一个Sentinel节点来完成自动故障转移工作,同时将这个变化通知给Redis应用方。整个过程完全自动,不需要人工介入,所以可以很好解决Redis的高可用问题。
        下面这张图很好的描述了这种监控的关系,这张图是从网上找的,太懒了,不像想画了:
    

        其实每个sentinel是有互相监控的,并不是只监控其他的数据节点。
        redis-sentinel.conf文件一般存在redis安装目标录下,由于我们需要在同一台机器部署多个,所以我们需要使用不同的端口。redis-sentinel的端口默认是26379,很好记,redis的默认端口6379+20000。以此类推我们启动三个redis-sentinel的端口分别是26379、26380、26381。这个我们需要在redis-sentinel.conf中修改。以下是配置文件:
    

    // Sentinel节点的端口
    port 26379
    dir /var/redis/data/
    logfile "26379.log"

    // 当前Sentinel节点监控 127.0.0.1:6379 这个主节点
    // 2代表判断主节点失败至少需要2个Sentinel节点节点同意
    // mymaster是主节点的别名
    sentinel monitor mymaster 127.0.0.1 6379 2

    //每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,如果超过30000毫秒且没有回复,则判定不可达
    sentinel down-after-milliseconds mymaster 30000

    //当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1
    sentinel parallel-syncs mymaster 1

    //故障转移超时时间为180000毫秒
    sentinel failover-timeout mymaster 180000

        我们这样命名sentinel-26379.conf、sentinel-26380.conf、sentinel-26381.conf
        接下来启动:
        redis-sentinel sentinel-26379.conf、redis-sentinel sentinel-26380.conf、redis-sentinel sentinel-26381.conf
        这样哨兵就可以正常工作啦~当我们把master的进程kill掉的时候会发现,会有slave变成了master,多么神奇~
  • 相关阅读:
    ERROR Invalid input of type: 'bool'. Convert to a bytes, string, int or float first.
    python2中正则通过全部中文字符
    查询正在执行的SQL
    dataguard 备库删除已应用过的过期归档
    linux lrzsz上传下载
    /u01/app/11.2.0.4/grid/perl/bin/perl -I/u01/app/11.2.0.4/grid/perl/lib -I/u01/app/11.2.0.4/grid/crs/install /u01/app/11.2.0.4/grid/crs/install/rootcrs.pl execution failed
    重启网卡提示Bringing up interface eth0 Device eth0 does not seem to be present,delaying initialization [FAILED]
    rhel 7 RAC安装执行root.sh遭遇ohasd failed to start,Failed to start the Clusterware. Last 20 lines of the alert log follow
    Error in invoking target 'agent nmhs' of makefile...MK_EMAGENT_NMECTL修正
    oracle 11g RAC由非归档修改成归档
  • 原文地址:https://www.cnblogs.com/liujiaq/p/8605677.html
Copyright © 2020-2023  润新知