热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Redis集群系列之RedisSentinel(哨兵模式)搭建

RedisSentinel(哨兵模式)搭建Redis哨兵模式是基于Redis主从方案实现的前提概要Redis高可以用有三种常用配置方式:1.Redis自带主从配置,

Redis Sentinel (哨兵模式) 搭建

Redis哨兵模式是基于Redis主从方案实现的

前提概要

  • Redis高可以用有三种常用配置方式:

    1. Redis自带主从配置,可以直接实现,多机器为从,只读,master可写

      • 主节点Master可读、可写.

      • 从节点Slave只读。(read-only)

      主从模型可以提高读的能力,在一定程度上缓解了写的能力。因为能写仍然只有Master节点一个,
      可以将读的操作全部移交到从节点上,变相提高了写能力

    2. Redis Sentinel

      主从配置是存在缺陷的,因为从机器或主机器是会出现宕机的,此时某个节点将无法访问,这时候业务某一部分将会引发无法访问甚至影响业务访问,损失巨大。
      而哨兵模式正是为了解决这一问题而生的。

  • 说明

Redis Sentinel 属于主从备份的范畴,主从数据同步使用的是redis自带的主从配置,不同的是sentinel是在此基础上加入的故障检测和转移,防止Redis单点故障。

友情提示: 哨兵模式是redis一个架构模式,但业务使用该架构是需要业务代码端实现的,不能直接连接redis,而是链接redis的哨兵端口
哨兵检查redis节点并返回正确的哨兵连接的Redis节点链接配置,有业务端根据链接创建Redis进程池或TCP握手进程。

Redis主从复制是直接通过tcp进行数据交流的,不是像mysql的文件复制。

最终的目标

  • 架构图

Redis Sentinel 最终搭建目标架构图

实现功能点
  • Setinel 集群
  • Redis 主从复制
  • Sentinel 集群实现 Redis 高可用(故障自动转移)
redis sentinel 配置
  • redis sentinel 节点1:redis-sentinel-26379.conf

    • 新建 redis-sentinel-26379.conf

    可从 /urs/redis/redis-sentinel.conf 复制到 /urs/redis/config/redis-sentinel.conf
    在config 目录下执行 cp ../redis-sentinel.conf ./redis-sentinel-26379.conf

    • 修改配置 redis-sentinel-26379.conf:

      port 26379
      daemonize yes
      pidfile /var/run/redis-sentinel-26379.pid
      logfile "redis-sentinel-26379.log"
      # 监控节点,且超过2个sentinel 任务故障,方可执行故障转移
      sentinel monitor mymaster 127.0.0.1 7000 2
      # 如果节点在 30000毫秒内未回应,就认为故障
      sentinel down-after-milliseconds mymaster 30000
      # 如果故障转移后,同时进行主从复制数为 1
      sentinel parallel-syncs mymaster 1
      # 故障转移的超时时间
      sentinel failover-timeout mymaster 180000
      sentinel deny-scripts-reconfig yes
      
  • redis sentinel 节点2:redis-sentinel-26380.conf

    • 创建 touch redis-sentinel-26380.conf

    • 修改配置 redis-sentinel-26380.conf:

      port 26380
      daemonize yes
      pidfile /var/run/redis-sentinel-26380.pid
      logfile "redis-sentinel-26380.log"
      
      # 监控节点,且超过2个sentinel 任务故障,方可执行故障转移
      sentinel monitor mymaster 127.0.0.1 7000 2
      # 如果节点在 30000毫秒内未回应,就认为故障
      sentinel down-after-milliseconds mymaster 30000
      # 如果故障转移后,同时进行主从复制数为 1
      sentinel parallel-syncs mymaster 1
      # 故障转移的超时时间
      sentinel failover-timeout mymaster 180000
      sentinel deny-scripts-reconfig yes
      
  • redis sentinel 节点3:redis-sentinel-26381.conf

    • 创建 touch redis-sentinel-26381.conf

      port 26381
      daemonize yes
      pidfile /var/run/redis-sentinel-26381.pid
      logfile "redis-sentinel-26381.log"
      
      # 监控节点,且超过2个sentinel 任务故障,方可执行故障转移
      sentinel monitor mymaster 127.0.0.1 7000 2
      # 如果节点在 30000毫秒内未回应,就认为故障
      sentinel down-after-milliseconds mymaster 30000
      # 如果故障转移后,同时进行主从复制数为 1
      sentinel parallel-syncs mymaster 1
      # 故障转移的超时时间
      sentinel failover-timeout mymaster 180000
      sentinel deny-scripts-reconfig yes
      
启动 redis sentinel
  • 启动命令:

    
    ./src/redis-sentinel ./config/redis-sentinel-26379.conf
    ./src/redis-sentinel ./config/redis-sentinel-26380.conf
    ./src/redis-sentinel ./config/redis-sentinel-26381.conf
    
      或
    
    redis-sentinel redis-sentinel-26379.conf
    redis-sentinel redis-sentinel-26380.conf
    redis-sentinel redis-sentinel-26381.conf
    
  • 验证:ps -ef | grep redis-sentinel

  • ./src/redis-cli -p 26379 info sentinel

至此 Redis 主从和 Redis Sentinel 已经搭建完成了。接下来验证故障转移。

故障转移演示

laravel5.5以上配置使用哨兵模式


//配置文件`config/database.php`
 \'redis\' => [
    \'client\' => \'predis\',	//指示redis客户端使用的是predis组件

    \'default\' => [
        \'tcp://127.0.0.1:26379\',
        \'tcp://127.0.0.1:26381\',
        \'tcp://127.0.0.1:26382\',    //这3个都是sentinel节点的地址
        \'options\' => [
            \'replication\' => \'sentinel\',
            \'service\'     => env(\'REDIS_SENTINEL_SERVICE\', \'mymaster\'),    //sentinel
            \'parameters\'  => [
                \'password\' => env(\'REDIS_PASSWORD\', null),    //redis的密码,没有时写null
                \'database\' => 0,
            ],
        ],
    ],
 ],

编写命令并使用

php artisan test


$redis = new \Illuminate\Support\Facades\Redis();

    while (true) {
        sleep(1);
        try {
            $redis::set($key=\'test_sentinel:\' . time(), 1);
            echo $redis::get($key);
        } catch (Exception $e) {
            echo $e->getMessage();
        }
        echo "\n";
    }


推荐阅读
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文介绍了在使用Laravel和sqlsrv连接到SQL Server 2016时,如何在插入查询中使用输出子句,并返回所需的值。同时讨论了使用CreatedOn字段返回最近创建的行的解决方法以及使用Eloquent模型创建后,值正确插入数据库但没有返回uniqueidentifier字段的问题。最后给出了一个示例代码。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • 依赖注入_php 依赖注入容器
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了php依赖注入容器相关的知识,希望对你有一定的参考价值。原文: http://blog.csdn.net/r ... [详细]
  • 使用雄辩的模型,您只需通过调用即可更新数据$model-update($data);但不幸的是,这并没有更新关系.如果您还想更新关系,则需要手动分配每个值并调用push()然后: ... [详细]
  • 开发笔记:laravel 同数据表字段比较查询和状态不正规排序
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了laravel同数据表字段比较查询和状态不正规排序相关的知识,希望对你有一定的参考价值。今天写群 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了未找到类'MaddHatterLaravelFullcalendarServiceProvider'相关的知识,希望对你 ... [详细]
  • 温馨提示:本信息由【金聪采编】搜集整理发布,版权归原作者及发布者所有,您如有异议请举报或者版权申诉。前言本文主要给大家介绍的是关于Lara ... [详细]
  • Hello,Ihavethiscode: ... [详细]
author-avatar
嘟嘟酱
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有