• redis 集群 主从复制 哨兵模式



    目录:
    1. 集群概念
    2. 主从复制
    3. 哨兵模式 sentinel


    1  集群概念

    所谓的集群,就是通过添加服务器的数量,提供相同的服务,从而让服务器达到一个稳定、高效的状态。

    1.1 使用redis集群的必要性

    (1)单个redis存在不稳定性。当redis服务宕机了,就没有可用的服务了。

    (2)单个redis的读写能力是有限的。

    1.2  如何学习redis集群

     (1)redis集群中,每一个redis称之为一个节点。

     (2)redis集群中,有两种类型的节点:主节点(master)、从节点(slave)。

     (3)redis集群   ,是基于redis主从复制实现。

    所以,学习redis集群,就是从学习redis主从复制模型开始的

    2  主从复制

    2.1 概念

    redis主从中,仅有一个主节点(master),其余是从节点(slave)
    master 可读可写,slave 只能读

    2.2 主从实现

    安装 redis

    $ wget http://download.redis.io/releases/redis-2.8.3.tar.gz
    $ tar xzf redis-2.8.3.tar.gz
    $ cd redis-2.8.3
    $ make
    $ sudo make install
    $ redis-server   redis.conf
    View Code

     


     实现过程

    主节点端口  master 6381
    从节点端口  slave 6382,6383






    新建目录 /usr/local/redis/master-slave,复制 redis.conf 文件到该目录下并改名



    编辑reids-6381.conf ,把默认端口号修改为 6381
    编辑reids-6382.conf ,把默认端口号修改为 6382  并添加主节点IP端口  slaveof 127.0.0.1 6381
    编辑reids-6383.conf ,把默认端口号修改为 6383  并添加主节点IP端口  slaveof 127.0.0.1 6381    

    启动redis主从节点,测试主从复制结果

     1 cd /usr/local/redis/master-slave
     2 redis-server redis-6381.conf
     3 redis-server redis-6382.conf
     4 redis-server redis-6383.conf
     5 cd /root/redis-2.8.3/src
     6 redis-cli -p 6381
     7 set user:name china
     8 get user:name
     9 redis-cli -p 6382
    10 get user:name
    11 redis-cli -p 6383
    12 get user:name
    View Code

    下图演示了 slave节点 进行写入操作,验证了本文2.1节 所说的:slave 只能读取

     

    3 哨兵模式 Sentinel

    3.1为什么需要哨兵模式

    无哨兵模式的情况:当master节点宕机了,整个集群就没有可写的节点了。

    有哨兵模式的情况:当master节点宕机了,slave节点会选取其中一个slave改变为master

    3.2 哨兵的任务

    Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:

    监控(Monitoring: Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。

    提醒(Notification: 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。

    自动故障迁移(Automatic failover: 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会进行选举,将其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

    监控(Monitoring)

    (1)Sentinel可以监控任意多个Master和该Master下的Slaves。(即多个主从模式)

    (2)同一个哨兵下的、不同主从模型,彼此之间相互独立。

    (3)Sentinel会不断检查Master和Slaves是否正常。

    自动故障切换(Automatic failover)

    监控同一个Master的Sentinel会自动连接,组成一个分布式的Sentinel网络,互相通信并交换彼此关于被监视服务器的信息。下图中,三个监控s1的Sentinel,自动组成Sentinel网络结构。

    疑问:为什么要使用sentinel网络呢?

    答:当只有一个sentinel的时候,如果这个sentinel挂掉了,那么就无法实现自动故障切换了。

    在sentinel网络中,只要还有一个sentinel活着,就可以实现故障切换。

       故障切换的过程

    (1)投票(半数原则)

    当任何一个Sentinel发现被监控的Master下线时,会通知其它的Sentinel开会,投票确定该Master是否下线(半数以上,所以sentinel通常配奇数个)。

    (2)选举

    当Sentinel确定Master下线后,会在所有的Slaves中,选举一个新的节点,升级成Master节点。

    其它Slaves节点,转为该节点的从节点。

    (3)原Master重新上线

    当原Master节点重新上线后,自动转为当前Master节点的从节点。

    3.3 哨兵实现

    前提:已经存在一个正在运行的主从模式。

    另外,配置三个Sentinel实例,监控同一个Master节点。

    配置Sentinel

    新建目录 /usr/local/redis/sentinels,复制 sentinel.conf 文件到该目录下并改名

     依次编辑这3个文件,每个文件修改两处内容:

     

     依次启动 sentinel-2637*.conf

    redis-sentinel sentinel-26371.conf
    redis-sentinel sentinel-26372.conf
    redis-sentinel sentinel-26373.conf
    View Code

    测试
    master(6381)节点set成功,slave(6382,6383)节点set异常

     查找master(6381)节点进程编号,然后kill掉

    ps -ef |grep redis
    kill -9 1221
    ps -ef |grep redis
    View Code


    slave节点(6382,6383)进行set操作。

    下图表明 6382 set 成功,6383 set 异常 (如果你两个set都异常,请等二分钟,因为在你kill掉原来的master时候到现在这个时间段,哨兵还没有从原来的slave选举一个新的master)

    启动6381(原来的master,刚才被手动kill掉了),进行set操作异常。

    原来的master变成了slave。

    第一轮:master(6381),slave(6382,6383)

    .......6381挂了,哨兵从slave选举6382为新master

    .......6381启动,6381属于slave

    新一轮:master(6382),slave(6381,6383)

    哨兵模式解决了redis主从复制 当主挂掉后无法继续往缓存写入的问题

  • 相关阅读:
    django文件上传
    django验证码
    auth模块---笔记
    css笔记
    django模板系统---2
    django模板系统
    Django中间件
    前端笔记---1
    我的django笔记---1
    DNS服务器的搭建
  • 原文地址:https://www.cnblogs.com/entertain/p/13259649.html
Copyright © 2020-2023  润新知