redis高可用之redis sentinel(哨兵)的搭建以及应用

redis的sentinel可以监控redis一个和多个redis的主从复制架构。

主要实现的功能有:

  • 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
  • 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
  • 自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。
  1. redis一主双从的IP信息

    master:127.0.0.1:7000

    slave1  :  127.0.0.1:7001

    slvae2  :  127.0.0.1:7002

  2. 环境

    CentOS 7.2

    redis 3.2.3

  3. redis配置信息:

    daemonize yes

    port 7000

    pidfile "/var/run/redis/redis-7000.pid"

    logfile "/var/log/redis/redis-7000.log"

    dbfilename "dump-7000.rdb"

    上述配置是主要更改的配置信息,其余的使用默认的配置就好了

  4. 搭建redis的一主双从

    启动redis

    /usr/bin/redis-server /etc/redis/7000.conf

    /usr/bin/redis-server /etc/redis/7001.conf

    /usr/bin/redis-server /etc/redis/7002.conf

    查看redis是否启动成功

    netstat -tunlp | egrep ‘7000|7001|7002‘

    tcp        0      0 0.0.0.0:27000           0.0.0.0:*               LISTEN      13010/redis-sentine

    tcp        0      0 127.0.0.1:7001          0.0.0.0:*               LISTEN      12952/redis-server

    tcp        0      0 127.0.0.1:7002          0.0.0.0:*               LISTEN      12958/redis-server

    搭建主从

    slave1:redis-cli -h 127.0.0.1 -p 7001 slaveof 127.0.0.1 7000

    slave2:redis-cli -h 127.0.0.1 -p 7002 slaveof 127.0.0.1 7000

    查看主从是否搭建成功

    master : redis-cli -h 127.0.0.1 -p 7000 info replication

    # Replication

    role:master

    connected_slaves:2

    slave0:ip=127.0.0.1,port=7001,state=online,offset=937723,lag=0

    slave0:ip=127.0.0.1,port=7002,state=online,offset=937723,lag=0

    测试主从是否搭建成功

    master : redis-cli -h 127.0.0.1 -p 7000 set mykey ‘hello‘

    slave1 : redis-cli -h 127.0.0.1 -p 7001 get mykey

    slave2 : redis-cli -h 127.0.0.1 -p 7002 get mykey

  5. 配置sentinel

    daemonize yes #后台运行

    port 27000

    pidfile "/var/run/redis/redis-sentinel27000.pid"

    logfile "/var/log/redis/redis-sentinel27000.log"

    sentinel monitor mymaster 127.0.0.1 7000 1

    #监控master的名字mymaster,IP地址127.0.0.1,端口7000.

    #1 表示只需要一个sentinel认为master属于下线状态就可以进行failover(故障转移),实验的时候

这个值我一直设置为2,但是我只开启了一个sentinel,所以导致我人为的下线master的时候,无论如何都不能自动的故障转移,等我更改配置为1了之后,故障转移成功了。

sentinel down-after-milliseconds mymaster 60000

#表示master在多久返回sentinel发送个master的ping命令的回复,则认为master已经下线。单位是毫秒。60000就是60秒。

sentinel failover-timeout mymaster 180000

#表示故障自动转移的超时时间。

sentinel parallel-syncs mymaster 1

#表示故障转移成功之后,多少个从服务器向新的master服务器同步数据。这个值越小,则完成故障转移所需要的时间就越长。

  1. 启动sentinel

    在2.8.0以后redis包含了sentinel的文件。

    /usr/bin/redis-server /etc/redis/redis-sentinel27000.conf --sentinel

    /usr/bin/resis-sentinel /etc/redis/redis-sentinel27000.conf

    上述的俩个命令都可以启动sentinel,并且命令效果是相同的

  2. 检测sentinel启动成功

    命令行

    netstat -tunlp | grep ‘27000‘

    redis-cli -h 127.0.0.1 -p 27000 info sentine

    # 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:7000,slaves=2,sentinels=1

    日志

    tailf /var/log/redis/redis-sentinel27000.log

  3. 自动故障转移实验

    任务下线master

    redis-cli -h 127.0.0.1 -p 7000 shutdown

    查看master的redis日志信息

    tailf /var/log/redis/redis-7000.log

    在redis日志中可以看得到下线之前redis会做一个快照,将redis的数据保存到本地的磁盘中

    查看sentinel的日志信息

    tailf /var/log/redis/redis-sentinel27000.log

在日志中我们可以看到

+sdown master mymaster 127.0.0.1 7000

#sentinel将master标记为主观下线

+odown master mymaster 127.0.0.1 7000 #quorum 1/1

#sentinel将master标记为客观下线

+new-epoch 1

+try-failover master mymaster 127.0.0.1 7000

+try-failover master mymaster 127.0.0.1 7000

+vote-for-leader cd4713bb67522a3cc34ed44d761c972f63978b97 1

#开始投票

+elected-leader master mymaster 127.0.0.1 7000

+failover-state-select-slave master mymaster 127.0.0.1 7000

+selected-slave slave 127.0.0.1:7002 127.0.0.1 7002 @ mymaster 127.0.0.1 7000

+failover-state-send-slaveof-noone slave 127.0.0.1:7002 127.0.0.1 7002 @ mymaster 127.0.0.1 7000

+failover-state-wait-promotion slave 127.0.0.1:7002 127.0.0.1 7002 @ mymaster 127.0.0.1 7000

+promoted-slave slave 127.0.0.1:7002 127.0.0.1 7002 @ mymaster 127.0.0.1 7000

+failover-state-reconf-slaves master mymaster 127.0.0.1 7000

+slave-reconf-sent slave 127.0.0.1:7001 127.0.0.1 7001 @ mymaster 127.0.0.1 7000

+slave-reconf-inprog slave 127.0.0.1:7001 127.0.0.1 7001 @ mymaster 127.0.0.1 7000

+slave-reconf-done slave 127.0.0.1:7001 127.0.0.1 7001 @ mymaster 127.0.0.1 7000

+failover-end master mymaster 127.0.0.1 7000

+switch-master mymaster 127.0.0.1 7000 127.0.0.1 7002

#设置新master服务器127.0.0.1 7002

+slave slave 127.0.0.1:7001 127.0.0.1 7001 @ mymaster 127.0.0.1 7002

+slave slave 127.0.0.1:7000 127.0.0.1 7000 @ mymaster 127.0.0.1 7002

+sdown slave 127.0.0.1:7000 127.0.0.1 7000 @ mymaster 127.0.0.1 7002

加入日志中出现上述红色字体信息则表明failover转移成功

4.验证新的主从

原slave2新master : redis-cli -h 127.0.0.1 -p 7002 info replication

# Replication

role:master

connected_slaves:1

slave0:ip=127.0.0.1,port=7001,state=online,offset=1118302,lag=1

新master : redis-cli -h 127.0.0.1 -p 7002 set testkey "test"

slave1 : redus-cli -h 127.0.0.1 -p 7001 get testkey

#查看value是否存在

5.重新拉起旧的master

/usr/bin/redis-server /etc/redis/7000.conf

查看sentinel日志

tailf /var/log/redis/redis-sentinel27000.log

-sdown slave 127.0.0.1:7000 127.0.0.1 7000 @ mymaster 127.0.0.1 7002

+fix-slave-config slave 127.0.0.1:7000 127.0.0.1 7000 @ mymaster 127.0.0.1 7002

查看集群信息

redis-cli -h 127.0.0.1 -p 7002 info replication

# Replication

role:master

connected_slaves:2

slave0:ip=127.0.0.1,port=7001,state=online,offset=1130960,lag=0

slave1:ip=127.0.0.1,port=7000,state=online,offset=1130827,lag=1

时间: 2024-10-13 11:16:44

redis高可用之redis sentinel(哨兵)的搭建以及应用的相关文章

(六) Docker 部署 Redis 高可用集群 (sentinel 哨兵模式)

参考并感谢 官方文档 https://hub.docker.com/_/redis GitHub https://github.com/antirez/redis happyJared https://blog.csdn.net/qq_28804275/article/details/80938659 下载redis镜像(不带tag标签则表示下载latest版本) docker pull redis 从github 下载最新的redis.conf,注意重要参数 # 端口 port 6379 #

实现redis高可用主从之sentinel

sentinel作用 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常. 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知. 自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务

Redis(九)高可用专栏之Sentinel模式

本文讲述Redis高可用方案中的哨兵模式--Sentinel,RedisClient中的Jedis如何使用以及使用原理. Redis主从复制 Redis Sentinel模式 Jedis中的Sentinel Redis主从复制 Redis主从复制是Sentinel模式的基石,在学习Sentinel模式前,需要理解主从复制的过程. 1.保证数据一致性的机制 Redis主从复制的含义和Mysql的主从复制一样,即利用Slave从服务器同步Master服务器数据的副本.主从复制的最为关键的点在于主从数

Redis 高可用之哨兵模式

参考   : https://mp.weixin.qq.com/s/Z-PyNgiqYrm0ZYg0r6MVeQ 一.redis高可用解决方案 redis主从 优点:1.高可靠性,主从实时备份,有效解决单节点数据丢失问题. 2.可做读写分离,从库分担读操作,缓解主库压力 缺点:主库异常,需要手动主从切换    2.redis哨兵模式 优点:1.有效解决主从模式主库异常手动主从切换的问题 缺点:1.运维复杂,哨兵选举期间,不能对外提供服务 其他解决方案优缺点,可以查看 高可用 ,本篇主要介绍哨兵解

Redis 高可用实践

Sentinel 简介 如上图所示,Redis 高可用是通过Sentinel来实现的,是Redis官方推荐的高可用性(HA)解决方案,Sentinel英文含义是哨兵,放哨的,可以理解为它是Redis集群的监控者,监控着所有的master和slave机器的健康状况.首先我们来看下它提供了哪些功能. 1.监控(Monitoring):监控所有主从机的健康状态,当主从机连接出现问题时,会自动变更有问题机器的状态.2.通知(Notification):一旦集群的节点有问题,Sentinel可以通过API

3台服务器Redis高可用哨兵模式

3台服务器Redis高可用哨兵模式 学习 redis 高可用 3台服务器Redis高可用哨兵模式 3.1 主redis配置 3.2 从redis配置 1. 介绍 2. redis程序安装 3. 哨兵模式配置 3.3 启动redis和哨兵 4. 总结 1. 介绍 Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务: 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常. 提醒(Notifi

9.Redis高可用-哨兵

9.Redis高可用-哨兵9.1 基本概念9.1.1 主从复制的问题9.1.2 高可用9.1.3 Redis Sentinel的高可用性9.2 安装和部署9.2.1 部署拓扑结构9.2.2 部署Redis数据节点9.2.3 部署Sentinel节点9.2.4 配置优化9.2.5 部署技巧9.3 API9.4 客户端连接9.4.1 Redis Sentinel的客户端9.4.2 Redis Sentinel客户端基本实现原理9.4.3 Java操作Redis Sentinel9.5 实现原理9.5

redis如何实现高可用【主从复制、哨兵机制】

原创itcats_cn 最后发布于2018-09-05 21:07:27 阅读数 5135 收藏展开实现redis高可用机制的一些方法:保证redis高可用机制需要redis主从复制.redis持久化机制.哨兵机制.keepalived等的支持. 主从复制的作用:数据备份.读写分离.分布式集群.实现高可用.宕机容错机制等. redis主从复制原理首先主从复制需要分为两个角色:master(主) 和 slave(从) ,注意:redis里面只支持一个主,不像Mysql.Nginx主从复制可以多主多

Redis 高可用 基于Sentinel + keepalived 实现

1  概述 redis作为缓存工具,如果仅仅单机,一旦挂掉,将对业务造成严重的影响,因此建议生产环境上部署redis高可用环境,本文将基于Sentinel + keepalived 实现redis的高可用. 本文主要介绍实现的步骤和配置文件,不做原理上的介绍 注意,redis的Sentinel高可用有一个很关键的点,只有master节点可以写入,其他节点都只能读,不能写,所以,vip必须配置在master节点上 三台redis ip 分别为 主节点: 192.168.70.32 备节点1:192