Redis进阶:Redis的哨兵模式搭建

哨兵机制介绍

单机版的Redis存在性能瓶颈,Redis通过提高主从复制实现读写分离,提高了了Redis的可用性,另一方便也能实现数据在多个Redis直接的备份。

上一篇文章我们通过配置Redis的主从复制机制来提高了Redis的可用性,但是一旦主节点出现问题,就需要运维手工切换主从服务节点,即增加了人工成本,且容易出错,而且无法自动化切换,Redis的哨兵机制就能实现自动的主从切换,以及实现对Redis服务的切换,那就让我们来感受下哨兵机制的强大吧。

准备条件

搭建主从服务

这一步在上篇文章以及详细介绍了,这里就简答提一下,细节具体可以翻看上一篇。

# 启动Redis 主从复制集群机制
[root@localhost redis-5.0.7]# src/redis-server redis6379.conf
[root@localhost redis-5.0.7]# src/redis-server redis6380.conf
[root@localhost redis-5.0.7]# src/redis-server redis6381.conf

查看主从复制集群

127.0.0.1:6379> INFO replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=14,lag=0
slave1:ip=127.0.0.1,port=6381,state=online,offset=14,lag=0
master_replid:7af61d3aee64d388592c3dabb16cd9b4a2158d7e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14

可以看到,我们的主从服务(一主二从)已经搭建完毕。

准备哨兵配置文件

我们下载的Redis.tar.gz 解压后里面是有一个senitel.conf配置文件的,我们复制一个然后进行配置修改。

# 复制配置文件
[root@localhost redis-5.0.7]# cp sentinel.conf sentinel26379conf # 修改sentinel26379conf配置文件
bind 0.0.0.0
port 26379
daemonize yes
pidfile /var/run/redis-sentinel26379.pid
logfile "/usr/local/redis/logs/sentinel-26379.log"
dir /tmp
# 哨兵 监控 主节点名称 IP地址 端口 判断失效的哨兵个数
sentinel monitor mymaster 127.0.0.1 6379 2
# 配置主服务的密码(如果主节点设置密码这块必须要进行配置)
sentinel auth-pass mymaster enjoyitlife
sentinel down-after-milliseconds mymaster 1000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 5000

将配置文件sentinel26379.conf 在复制两份,sentinel26380、sentinel26381.conf。这两个配置文件 值需要修改里的端口号就可以。

# sentinel26380 配置文件内容 26381配置文件就不在赘述了。
bind 0.0.0.0
port 26380
daemonize yes
pidfile /var/run/redis-sentinel26380.pid
logfile "/usr/local/redis/logs/sentinel-26380.log"
dir /tmp
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 1000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 5000
sentinel auth-pass mymaster enjoyitlife

运行哨兵

运行哨兵

# 开启三个哨兵监控主节点
[root@localhost redis-5.0.7]# src/redis-sentinel sentinel26379.conf
[root@localhost redis-5.0.7]# src/redis-sentinel sentinel26380.conf
[root@localhost redis-5.0.7]# src/redis-sentinel sentinel26381.conf

也可以通过 redis-server /path/to/sentinel.conf --sentinel 运行哨兵。

查看哨兵状态

# 通过 ps指令
[root@localhost redis-5.0.7]# ps -ef | grep redis
root 7929 1 0 07:49 ? 00:00:01 src/redis-server 0.0.0.0:6379
root 7933 7772 0 07:49 pts/5 00:00:00 src/redis-cli -p 6379 -a enjoyitlife
root 7935 1 0 07:50 ? 00:00:01 src/redis-server 127.0.0.1:6380
root 7941 1 0 07:50 ? 00:00:01 src/redis-server 127.0.0.1:6381
root 7949 1 0 08:00 ? 00:00:00 src/redis-sentinel 0.0.0.0:26379 [sentinel]
root 7954 1 0 08:00 ? 00:00:00 src/redis-sentinel 0.0.0.0:26380 [sentinel]
root 7959 1 0 08:00 ? 00:00:00 src/redis-sentinel 0.0.0.0:26381 [sentinel]
root 7978 7686 0 08:01 pts/4 00:00:00 grep --color=auto redis # 通过客户端 哨兵机制本质也是Redis服务的一种模式 可以通过客户端指令
[root@localhost ~]# cd /opt/software/redis/redis-5.0.7
[root@localhost redis-5.0.7]# src/redis-cli -p 26379
127.0.0.1:26379> INFO sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3

可以看到至此,我们的哨兵机制已经正确搭建完毕,当前有三个哨兵,一主多从,3个服务节点。

哨兵机制验证

我们关闭主节点,然后等待1S后再进行查看。

# 关闭主节点
127.0.0.1:6379> SHUTDOWN
# 在从节点6380上进行查看
127.0.0.1:6380> INFO replication
# Replication
role:master
connected_slaves:0
master_replid:a83e3a8610f2a01691fd859143a4a7dc897b5916
master_replid2:7af61d3aee64d388592c3dabb16cd9b4a2158d7e
master_repl_offset:78278
second_repl_offset:69478
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:78278

可以看到现在的6380节点已经有从节点升级为了主节点。我们再次启动6379节点。

# 启动6379端口节点
[root@localhost redis-5.0.7]# src/redis-server redis6379.conf
[root@localhost redis-5.0.7]# src/redis-cli -p 6379 -a enjoyitlife
# 查看集群信息
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6380
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:107428
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:a83e3a8610f2a01691fd859143a4a7dc897b5916
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:107428

此时即使6379端口节点恢复正常了,但是它已经失去了主节点的身份,目前降级为了从节点了。下面就哨兵机制的原理在进行说明下。

哨兵机制相关原理

主要功能

  • 监控 检查主从服务节点是否服务正常
  • 提醒 当被监控的节点出现问题时,哨兵机制可以发送通知
  • 自动故障转移 主节点不可以用时,自动进行节点升级和故障转移。
  • 提供配置 作为客户端的配置提供者。

故障转移流程

  • 每个Sentinel每秒钟向主节点、从节点、其他sentinel实例发送PING命令。
  • 如果一个Sentinel发现主服务节点不可用,会将主节点标记为主观下线,并通知其他Sentinel实例向主节点发送消息。
  • 如果有足够数量的Sentinel实例,满足配置文件中需要的个数sentinel monitor mymaster 127.0.0.1 6379 2 这里配置的是2,那就将主服务标记为客观下线。
  • Sentinel通过选举机制选举出一个Lead Sentinel,负责本次故障转移。
  • Sentinle选择一个从服务节点,向其发送SALVE NO ONE 命令,使其升级为主节点。
  • 通过发布与订阅功能, 将更新后的配置传播给所有其他 Sentinel , 其他 Sentinel 对它们自己的配置进行更新。
  • 向从服务器发送 [SLAVEOF] 命令,让他们的主服务节点更新为上一步新主节点。
  • 当所有从服务器都已经开始复制新的主服务器时, 复制本次故障转移的Sentinel 终止这次故障迁移操作。

注意要点

  • Sentinel会在运行中自动的修改配置文件并进行持久化,主要涉及主从配置点。
  • 每一次故障转移Sentinel都会用过选举机制选举从本次故障转移的领头Sentinel,从而有领头的Sentinel来负责故障转移过程。
  • Sentinel之间通过订阅发布来进行消息传输。
  • Sentinel机制很大程度依赖计算机时间,如果计算机出现故障,或者进程被阻塞,Sentinel可能也会出现故障,从而进入TLTL保护模式,进入TILT模式后,哨兵就不会在起作用。如果在30S内恢复正常,就会退出TITL模式。

以上就是Redis哨兵模式操作的相关介绍了,更多其他指令可以参考官网,Redis官网,谢谢阅读,希望对你有所帮助。

Redis进阶:Redis的哨兵模式搭建的更多相关文章

  1. 【运维技术】redis(一主两从三哨兵模式搭建)记录

    redis(一主两从三哨兵模式搭建)记录 目的: 让看看这篇文章的的人能够知道:软件架构.软件的安装.配置.基本运维的操作.高可用测试.也包含我自己,能够节省对应的时间. 软件架构: 生产环境使用三台 ...

  2. Linux基于Docker的Redis主从复制、哨兵模式搭建

    本教程基于CentOS7,开始本教程前,请确保您的Linux系统已安装Docker. 1.使用docker下载redis镜像 docker pull redis 安装完成后,使用docker imag ...

  3. Redis高可用之哨兵模式Sentinel配置与启动(五)

    0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...

  4. Redis实战——redis主从备份和哨兵模式实践

    借鉴:http://redis.majunwei.com/topics/sentinel.html     https://blog.csdn.net/u011784767/article/detai ...

  5. Redis主从原理及哨兵模式

    1.Redis主从搭建 主从的搭建很简单,主节点设置连接密码,从节点的配置上主节点的ip和端口,以及密码,一般从节点我们都设置只读模式. 主节点配置: 主节点密码: requirepass xxx 从 ...

  6. Redis 高可用之哨兵模式

    参考   : https://mp.weixin.qq.com/s/Z-PyNgiqYrm0ZYg0r6MVeQ 一.redis高可用解决方案 redis主从 优点:1.高可靠性,主从实时备份,有效解 ...

  7. Redis进阶:Redis的主从复制机制

    Redis进阶:Redis的主从复制机制 主从复制机制介绍 单机版的Redis存在性能瓶颈,Redis通过提高主从复制实现读写分离,提高了了Redis的可用性,另一方便也能实现数据在多个Redis直接 ...

  8. Spark进阶之路-Standalone模式搭建

    Spark进阶之路-Standalone模式搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Spark的集群的准备环境 1>.master节点信息(s101) 2&g ...

  9. Redis进阶:Redis的持久化机制

    Redis进阶:Redis的持久化机制 Redis的持久化机制目前包括RBD和AOF两种方式. RDB持久化 RDB持久化方式是在指定的时间间隔对数据进行快照存储.过期的键值不会被存储到快照中.如果恢 ...

随机推荐

  1. ios获取系统当前日期并以一定格式显示

    NSDate *date=[NSDate date]; NSDateFormatter *dateformatter=[[NSDateFormatter alloc] init]; [dateform ...

  2. python接口自动化五(参数关联)

    前言 我们用自动化发帖之后,要想接着对这篇帖子操作,那就需要用参数关联了,发帖之后会有一个帖子的id,获取到这个id,继续操作传这个帖子id就可以了 (博客园的登录机制已经变了,不能用账号和密码登录了 ...

  3. 【NOIP2016普及组复赛】魔法阵

    题目 分析 设xd-xc为i,那么xb-xa=2i, 又因为xb-xa<(xc-xb)/3, 那么c>6i+b. 于是,先枚举i, 再分别枚举xa和xd, 根据之间的关系,用前缀和求出每一 ...

  4. vue-router的hash模式和history模式,

    hash模式背后的原理是onhashchange事件,可以在window对象上监听这个事件: window.onhashchange = function(event){ console.log(ev ...

  5. CDOJ 1146 A - 秋实大哥与连锁快餐店 最小生成树 Prim算法 稠密图

    题目链接 A - 秋实大哥与连锁快餐店 Time Limit:3000MS     Memory Limit:65535KB     64bit IO Format:%lld & %llu S ...

  6. 微信浏览器video播放视频踩坑

    video属性介绍 iOS的属性 playsinline On iPhone, video playsinline elements will now be allowed to play inlin ...

  7. (48)LINUX应用编程和网络编程之三Linux获取系统信息

    3.3.1.关于时间的概念 3.3.1.1.GMT时间 (1)GMT是格林尼治时间,也就是格林尼治地区的当地之间. (2)GMT时间的意义?[用格林尼治的当地时间作为全球国际时间],用以描述全球性的事 ...

  8. 利用 clipboardData 在网页中实现截屏粘贴的功能

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  9. js控制手机保持亮屏的库,解决h5移动端,自动息屏问题

    一些说明:我用Laya(ts)开发小游戏,有需要保持手机屏幕常亮的需求(非必须的),然后作为小白的我就在网上找到了这个库,大概了解下,应该是通过播放空视频的原理来保持手机屏幕常亮,然后就放到项目中试了 ...

  10. sqli-labs(28a)

    0X01构造闭合 爆字段数 /?id=') order by 1%23 ?id=') order by 5%23 偷看一下源码 就只过滤了union select 闭合') 那我们来尝试一下 0X02 ...