redis哨兵模式没有切换主机_Redis哨兵(Sentinel)模式

Redis哨兵(Sentinel)模式

f5cd4eaaf14bd7772ab36aa533ed54e6.png
在这里插入图片描述

一、主从复制高可用

当我们使用主从复制出现的问题

  • 手动故障转移
  • 写能力和存储能力受限
  • 主从复制 -master 宕机故障处理970d4d665639c711a8f50ed35ce08684.png

主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。


~哨兵模式概述

哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。

哨兵主要有两个作用

  • 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。

  • 当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。

然而一个哨兵进程对Redis服务器进行监控,可能会出现问题,为此,我们可以使用多个哨兵进行监控。各个哨兵之间还会进行监控,这样就形成了多哨兵模式。

故障切换(failover)的过程。假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线。当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线。这样对于客户端而言,一切都是透明的。

二、架构说明

bf6d8c0f30fd82bf9c6c27f84244f6e4.png
在这里插入图片描述
  1. 多个sentinel 发现并确认master有问题。
  2. 选举出一个sentinel作为领导
  3. 选出一个slave作为master
  4. 通知其余的slave成为新的master的slave
  5. 通知客户端主从变化
  6. 等待老的master复活成新的master的slave

三、安装配置

e9a8ad8c4df51b05357108904ee33005.png
在这里插入图片描述
  1. 配置主从节点
  • 主节点
启动命令:redis-server redis-7000.conf

配置

port 7000
daemonize yes
pidfile /var/run/redis-7000.pid
logfile "7000.log"
dir "/opt/soft/redis/data/"
  • Redis从节点
redis-server redis-7001.conf
redis-server redis-7002.conf

slave-1:

port 7002
daemonize yes
pidfile /var/run/redis-7002.pid
logfile "7002.log"
dir "/opt/soft/redis/data/"
slaveof 127.0.0.1 7000

slave-2:

port 7001
daemonize yes
pidfile /var/run/redis-7001.pid
logfile "7001.log"
dir "/opt/soft/redis/data/"
slaveof 127.0.0.1 7000


  1. 配置开启sentinel监控主节点
  • sentine 主要配置  编辑 sentinel.conf
port ${port}
dir "/opt/soft/redis/data/"
logfile "${port}.log"
// 配置监听的主服务器,这里sentinel monitor代表监控,mymaster代表服务器的名称,可以自定义,192.168.11.128代表监控的主服务器,6379代表端口,2代表只有两个或两个以上的哨兵认为主服务器不可用的时候,才会进行failover操作。
sentinel monitor mymaster 127.0.0.1 7000 2   
sentinel down-after-millseseconds mymaster 30000 //判断主节点时间
sentinel parallel-syncs mymaster 1    
sentinel failover-timeout mymaster 180000

启动

redis-sentinel sentinel.conf

可以使用 ps -ef|grep redis-sentinel 命令查看进程、9fe7aaa5fe695d6c059414efa473306f.png


四、实现原理

  • 故障转移     --- java实现
/**
 * 测试Redis哨兵模式
 * @author liu
 */
public class TestSentinels {
    @SuppressWarnings("resource")
    @Test
    public void testSentinel() {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(10);
        jedisPoolConfig.setMaxIdle(5);
        jedisPoolConfig.setMinIdle(5);
        // 哨兵信息
        Set sentinels = new HashSet<>(Arrays.asList("127.0.0.1:26379","1127.0.0.1:26379","127.0.0.1:26379"));// 创建连接池
        JedisSentinelPool pool = new JedisSentinelPool("mymaster", sentinels,jedisPoolConfig,"123456");// 获取客户端
        Jedis jedis = pool.getResource();// 执行两个命令
        jedis.set("mykey", "myvalue");
        String value = jedis.get("mykey");
        System.out.println(value);
    }
}

如果我们把主服务器停掉,在经过一段时间的报错后,redis集群会恢复

  • 主观下线和客观下线

    • 主观下线:当前sentintel节点认为某个redis节点不可用。

    • 客观下线:所有sentinel节点认为某个redis节点不可用。

  • 三个定时任务

  1. 每10秒每个sentinel对master 和 slave执行info

     - 发现slave节点
    - 确认主从关系
  2. 每2秒每个sentinel通过master节点对channel交换信息(发布订阅)

     - 通过_sentinel_:hello频道交互
    - 交互对节点的“看法”和自身信息
  3. 每1秒每个sentinel 对其他sentinel和redis执行ping

  • 领导者选举

    • 只需要一个sentinel节点完成故障转移

    • 通过sentinel is - master -down -by-addr 命令都希望成为领导者

        -1. 每个主观下线都Sentitle 节点向其他Sentinel节点发送命令,要求将它设置为领导者

      -2. 收到命令对Sentinel节点如果没有同一通过其他Sentinel节点发送的命令,那么就将同一该请求,否则拒绝

      -3. 如果该Sentinel节点发现直接的票数已经超过Sentinel集合半数且超过quorum,那么它将成为领导者

      -4. 如果此过程由多个Sentinel节点成为领导者,那么将来等待一段时间重新进行选举
beb6b9ef207a064e4f651fb19341f9bd.png
在这里插入图片描述
  • 故障转移(Sentinel领导者节点完成)

    • 1.从slave节点中选出一个 “合适点”节点作为master节点
    • 2.对上面对slave节点执行slaveof no one 命令让其成为master节点。
    • 3.向剩余的slave节点发送命令,让它们成为新的maater节点的slave节点,复制规避和parallel-syncs参数有关
    • 4.更新对原来master节点配置为slave,并保持着对其 “关注”,当其恢复后命令他去复制新对master节点
  • 选择 “合适的” slave节点

    • 1.选择slave-priority(slave节点优先级)最高对slave节点,如果存在返回,不存在继续
    • 2.选择复制偏移量最大的slave节点,复制最完整,存在返回,不存在继续
    • 3.选择runId最小的slave节点

五、需要说明的问题

  • 尽可能在不同物理机上和同一个网络部署Redis sentinel的所有节点
  • Redis sentinel中的sentinel节点个数应该大于等于3且最好是奇数。(节点数多可以保证高可用)
  • Redis sentinel中的数据节点和普通数据节点没有区别。每个sentinel节点在本质上还是一个Redis实例,只不过和Redis数据节点不同的是,其主要作用是监控Redis数据节点
  • 客户端初始化时连接的是sentinel节点集合,不再是具体的Redis节点,但sentinel只是配置中心不是代理。

个人博客:http://blog.yanxiaolong.cn/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533392.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql rpm 安装6_linux6.5 RPM方式安装 mysql5.6

步骤一、检查下linux是不是已经安装了MySQL# rpm -qa|grep mysqlmysql-libs-5.1.71-1.el6.x86_64# rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64 //卸载# find / -name mysql//有mysql文件夹的话&#xff0c;把mysql的文件夹删掉步骤二、下载需要的安装包&#xff0c;下载地…

php mysql 索引_MySQL索引

mysql 如何创建索引&#xff1f;1.添加PRIMARY KEY(主键索引)mysql>ALTER TABLE table_name ADD PRIMARY KEY ( column )2.添加UNIQUE(唯一索引)mysql>ALTER TABLE table_name ADD UNIQUE (column)3.添加INDEX(普通索引)mysql>ALTER TABLE table_name ADD INDEX index…

linux ftp mysql_linux下ftp和ftps以及ftp基于mysql虚拟用户认证服务器的搭建

命令连接&#xff0c;控制连接&#xff1a;21/tcp数据连接: 主动模式,运行在20/tcp端口 和 被动模式,运行在随机端口数据传输模式(自动模式)&#xff1a;有二进制(mp3,jpg等)和文本(html)两种传输模式ftp服务器端程序&#xff1a;wu-ftpd&#xff1a;vsftpd pureftpd Filezilla…

阿里云rds for mysql平台介绍_阿里云RDS for MySQL 快速入门——笔记

1初始化配置1.1设置白名单创建RDS实例后&#xff0c;需要设置RDS实例的白名单&#xff0c;以允许外部设备访问该RDS实例。默认的白名单只包含默认IP地址127.0.0.1&#xff0c;表示任何设备均无法访问该RDS实例。设置白名单包括两种操作&#xff1a;设置IP白名单&#xff1a;添加…

mysql数据库下载压缩包_mysql 8.0.22 zip压缩包版(免安装)下载、安装配置步骤详解...

大家好&#xff0c;今天我在学习 MySQL 8.0.22安装及配置遇到了一些问题&#xff0c;特地将我整个安装过程分享出来希望可以帮助不会安装的小伙伴&#x1f61c;。参考链接第一步 MySQL的下载进入MySQL官网下载&#xff0c;按下图所示步骤操作&#xff0c;耐心等待下载完成就可以…

mysql 5.5 主从同步问题_MySQL 5.5 主从复制异步、半同步以及注意事项详解

大纲一、前言二、Mysql 基础知识三、Mysql 复制(Replication)四、Mysql 复制(Replication)类型五、Mysql 主从复制基本步骤六、Mysql 主从复制(异步)七、Mysql 主从复制(半同步)八、Mysql 复制工具九、Mysql 复制注意事项十、Mysql 复制过滤一、前言从这一篇博客开始我们就来学…

开源内容管理系统 php mysql_十大免费PHP+MySql平台内容管理系统推荐

最近&#xff0c;朋友要建站让我帮着推荐个好的CMS(内容管理系统)&#xff0c;个人认为其实选择哪个CMS并不重要&#xff0c;除了对搜索引擎的亲好外&#xff0c;个人的使用操作习惯和对所选CMS系统的熟悉程度有很大关系。这里为需要建站但又徘徊的朋友介绍10个免费PHPMySql平台…

mysql导入xml 工具下载_XML导入Mysql工具下载|XmlToMysql 最新版v2.1 下载_当游网

XmlToMysql是一款十分不错的XML导入Mysql工具&#xff0c;它可以帮助用户们将XML中的数据快速的导入到MySQL数据库中&#xff0c;可以直接跳过解析环节&#xff0c;因此可以有效的提升程序员传输数据的效率&#xff0c;让程序员可以拥有更多的时间去处理其他环节的事宜。所以喜…

mysql忽略表名大小写_Mysql 表名忽略大小写-连接字符集随笔记录

1.参数说明&#xff1a;lower_case_table_names0表名存储为给定的大小和比较是区分大小写的lower_case_table_names 1表名存储在磁盘是小写的&#xff0c;但是比较的时候是不区分大小写lower_case_table_names2表名存储为给定的大小写但是比较的时候是小写的unix,linux下lower_…

mysql与orancl_清晰讲解SQL语句中的外连接,通用于Mysql和Oracle,全是干货哦

清晰讲解SQL语句中的外连接&#xff0c;通用于Mysql和Oracle&#xff0c;全是干货哦直入主题&#xff1a;我们做一个操作&#xff0c;将员工SCOTT的部门去掉&#xff0c;再次通过内连接查看数据&#xff0c;看看会产生什么现象&#xff1f;使用内连接&#xff0c;查询数据问题&…

.net mysql查询数据库连接_asp.net连接查询SQL数据库并把结果显示在网页上(2种方法)...

在ASP.NET中&#xff0c;使用C#连接SQL数据库&#xff0c;并使用SQL语句查询&#xff0c;以前从来没有接触过C#&#xff0c;最近用到了&#xff0c;摸索了两天终于运行起来了&#xff0c;Mark一下&#xff0c;不喜勿喷有两种方法&#xff1a;(说的是第一种方法不安全&#xff0…

mysql异常恢复工具_[MySQL异常恢复]mysql ibd文件恢复

在mysql中由于某种原因保存有ibd文件&#xff0c;但是表已经被删除或者frm文件损坏亦或者ibdata文件损坏/丢失等。本文模拟在这种情况下&#xff0c;通过mysql自身技术即可完成ibd文件恢复.测试环境mysql版本mysql> select version();-----------| version() |-----------| …

ddl是什么意思网络语_DDL(数据定义语言)

DDL&#xff0c;是对数据库内部的对象进行创建&#xff0c;删除&#xff0c;修改等的操作语言。它和DML语言最大的区别是DML只是对表内部数据的操作&#xff0c;而不涉及到表的定义&#xff0c;结构的修改&#xff0c;更不会涉及到其它对象。1.连接数据库:注:1.mysql代表客户端…

jsp mysql优点_asp、php、asp.net、jsp的介绍和各自的优缺点

现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台&#xff0c;它的语法和Visual BASIC类似&#xff0c;可以像SSI(Server Side Include)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用&#xff0c;但…

测试网络的带宽指令_单机千万级MQTT服务器测试报告

目标&#xff1a;测试创建1000万客户端连接到Coolpy7 MQTT服务器端&#xff0c;服务器操作系统 Linux(任意一款发行版服务器版本)。分别在两台硬件一样的服务器&#xff0c;其中一台用于服务器端运行&#xff0c;另一台用于创建千万客户端连接客户端机器。在硬件一致的情况下请…

python邮箱爆破_Python在线爆破邮箱账号密码测试代码(亲测可用)

dic 字典格式如下(mail.txt) :usernamegmail.com:passwordusernamegmail.com:passwordusernamegmail.com:password以此类推&#xff0c;切记保存成utf-8编码格式。放置在当前脚本目录&#xff0c;也可自己定义修改。支持ssl https /imap协议。# version 3.4.0# codingUTF-8# ti…

查看redis aof内存_Redis持久化问题定位与优化技巧

今天主要分享继Redis持久化方式RDB、AOF之后的一些常用的Redis问题定位于优化方式。这里主要CPU、内存、磁盘在三个维度去分析问题&#xff01;Fork操作当Redis做RDB或AOF重写时&#xff0c;一个必不可少的操作就是执行fork操作创建子进程&#xff0c;对于大多数操作系统来说fo…

mysql新增阵列df_DF学Mysql(三)——索引操作

概要&#xff1a;数据库对象索引其实与书的目录非常相似&#xff0c;主要是为了提高从表中检索数据的速度。由于数据存储在数据库表中&#xff0c;所以索引是创建在数据库表对象上的&#xff0c;由表中的一个字段或多个字段生成的键组成&#xff0c;这些键存储在数据结构(B-树或…

python本地浏览器注入js_PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例...

概要应同学邀请&#xff0c;演示如何使用 PyQt5 内嵌浏览器浏览网页&#xff0c;并注入 Javascript 脚本实现自动化操作。下面测试的是一个廉价机票预订网站(http://www.flyscoot.com/)&#xff0c;关键点如下使用 QWebEngineView 加载网页&#xff0c;并显示进度。在默认配置(…

python装好了怎么启动车_【填空题】Python安装好后,可以直接在CMD命令行下输入( )命令, 可启动交互式编程,提示窗口如下:...

倾斜岩层的产状要素是用岩层层面的()。A.倾角B.走向C.范围D.倾向E.表面积采用深层搅拌法进行地基加固处理&#xff0c;其适用条件为()。A.砂砾石松软地基B.松散砂地基C.黏土软弱地基根据《建筑工程建筑面积计算规则》&#xff0c;下列关于建筑物雨篷结构的建筑面积计算&#xf…