广告
返回顶部
首页 > 资讯 > 数据库 >RedisSentinel哨兵
  • 733
分享到

RedisSentinel哨兵

RedisSentinel哨兵 2014-11-22 16:11:25 733人浏览 才女
摘要

RedisSentinel哨兵 注意 若master实例故障,sentinel会重新选主并启动自动故障切换:选择slave-priority最小的那个slave实例并将其提升为master,同时修改其它slave的配置,使其master配

RedisSentinel哨兵

RedisSentinel哨兵

注意

  • 若master实例故障,sentinel会重新选主并启动自动故障切换:选择slave-priority最小的那个slave实例并将其提升为master,同时修改其它slave的配置,使其master配置项指向新的master,当old master恢复重启后,会自动降级为new master的slave。最后,根据配置,Redis Sentinel还会将新的master地址通知给当前正在访问Redis的应用程序。
  • 要把sentinel monito配置放的靠前,否则会报错No such master with specified name.因为会用到
  • 如果我们的哨兵也使用了集群, 在编程语言中也要注意到这一块.

安装

如果是ubuntu下,Redis版本可能会比较老,需要手动安装哨兵

apt install redis-sentinel -y

一步到位

apt install redis-server -y
&& apt install redis-sentinel -y

配置哨兵

常用的哨兵配置

daemonize yes 
pidfile "/var/run/sentinel/redis-sentinel.pid"
logfile "/var/log/redis/redis-sentinel.log"
dir "/var/lib/redis"
# 线上要改为合适的IP,多个IP用空格隔开即可,
bind 0.0.0.0	
port 26379
# 注意我这里用了小写和后面的不太一样
sentinel monitor mymaster 192.168.56.100 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 120000
sentinel parallel-syncs mymaster 1

配置解读

port 26379
# 让Sentinel只工作在/tmp目录下,减少安全隐患
dir "/tmp/redis"

# 开启守护进程模式
daemonize yes

# 关闭保护模式
protected-mode no

# 格式:sentinel   
# 这里的127.0.0.1 6379代表主服务器的地址
# myMaster为起的别名,后面要用到
# 最后的一个2代表在sentinel集群中,多少个节点认为master死了,才能真正认为该master不可用
sentinel monitor myMaster 192.168.56.100 6379 2

# sentinel会向master发送心跳确认存活
# 如果master在“一定时间范围”内不回应PONG 或者是回复了一个错误消息
# 那么这个sentinel会主观地认为这个master已经不可用了
# (subjectively down, 也简称为SDOWN)。
# down-after-milliseconds 用来指定这个“一定时间范围”,单位是毫秒,默认30秒。
# 这里的配置意思是在5秒内, sentinel一直无法ping通mymaster的时候,认为mymaster是不可用的
sentinel down-after-milliseconds myMaster 5000

# failover过期时间。
# 当failover开始后,在此时间内仍然没有触发任何failover操作,当前sentinel将会认为此次failoer失败。
# 默认180秒,即3分钟。
# 1. 同一个sentinel对同一个master两次failover之间的间隔时间。   
# 2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。    
# 3.当想要取消一个正在进行的failover所需要的时间。    
#4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了。
sentinel failover-timeout myMaster 120000

# 在发生failover时,这个选项指定了最多可以有多少个slave同时对新的master进行同步。
# 这个数字越小,完成failover所需的时间就越长;
# 这个数字越大,就意味着越多的slave因为replication而不可用。
# 可以通过将这个值设为 1 来保证每次只有一个slave处于不能处理命令请求的状态。
# 这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行 同步,
# 这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越 
# 多的slave因为replication而不可用。可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。
sentinel parallel-syncs myMaster 1

# sentinel Redis的连接密码验证,myMaster是主服务名称,passWord是Redis连接密码(非必须,根据情况来)
# sentinel auth-pass  
# sentinel auth-pass myMaster password

# 发生切换之后执行的一个自定义脚本()
# sentinel notification-script  
# sentinel client-reconfig-script  
若脚本执行后返回1,那么该脚本稍后将会被再次执行,重复次数目前默认为10

若脚本执行后返回2,或者比2更高的一个返回值,脚本将不会重复执行。

如果脚本在执行过程中由于收到系统中断信号被终止了,则同返回值为1时的行为相同。

一个脚本的最大执行时间为60s,如果超过这个时间,脚本将会被一个SIGKILL信号终止,之后重新执行。

我这里准备三台虚拟机来做集群

主机说明 主机IP Redis端口 Sentinel端口
Master 192.168.56.100 6379 26379
Slave 192.168.56.101 6379 26379
Slave 192.168.56.102 6379 26379

我们的哨兵采用的也是集群的模式,单点模式的话一旦出现问题比如网络阻塞, 将无法实现redis集群的主备切换.

如果多个哨兵的话,redis的客户端可以任意连接一个哨兵来获得redis集群信息,即使有部分哨兵退出,依然可以进行主备切换.

启动哨兵

启动哨兵

# Ubuntu下使用默认安装的可以使用这个命令
service redis-sentinel start
# 或者这个
redis-sentinel /etc/redis/sentinel.conf

对比新旧哨兵配置文件

已被修改,可以看到多了几个Generated by CONFIG REWRITE由配置重写的参数

  • 主机100
# Generated by CONFIG REWRITE
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
# 指明了当前群集的从库的ip和端口,在主从切换时该值会改变
sentinel known-slave mymaster 192.168.56.102 6379
sentinel known-slave mymaster 192.168.56.101 6379
# 除了当前的哨兵还有哪些监控的哨兵
sentinel known-sentinel mymaster 192.168.56.101 26379 b8DDDc8055e57b4c11360febc7d9cfcb5542ac37
sentinel known-sentinel mymaster 192.168.56.102 26379 0b24c05f721cc0c1542f17d143449da31a0acd6a
sentinel current-epoch 0
  • 从机101
# Generated by CONFIG REWRITE
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel known-slave mymaster 192.168.56.102 6379
sentinel known-slave mymaster 192.168.56.101 6379
sentinel known-sentinel mymaster 192.168.56.102 26379 0b24c05f721cc0c1542f17d143449da31a0acd6a
sentinel known-sentinel mymaster 192.168.56.100 26379 e2f8e9e7c46df32a3Dd4e1bfa578f7c39240e385
sentinel current-epoch 0
  • 从机102
# Generated by CONFIG REWRITE
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel known-slave mymaster 192.168.56.102 6379
sentinel known-slave mymaster 192.168.56.101 6379
sentinel known-sentinel mymaster 192.168.56.100 26379 e2f8e9e7c46df32a3dd4e1bfa578f7c39240e385
sentinel known-sentinel mymaster 192.168.56.101 26379 b8dddc8055e57b4c11360febc7d9cfcb5542ac37
sentinel current-epoch 0

也可也使用Redis命令行查看哨兵的状态

redis-cli -p 端口 info Sentinel

这里主从显示的都一样就只记录一个得了

注意这里进入的不是Redis,所以不能执行Redis命令,比如set name nihao.

# 除了这样,也可也使用redis-cli -p 26379进入以后再执行info
redis-cli -p 26379 info Sentinel
# 案例
root@ubuntu1:~# redis-cli -p 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=192.168.56.100:6379,slaves=2,sentinels=3

查看Redis主从的情况

  • 主机100

可以看到当前机器为master他有两个从机slave0和slave1

root@ubuntu0:~# redis-cli info Replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.56.101,port=6379,state=online,offset=54668,lag=1
slave1:ip=192.168.56.102,port=6379,state=online,offset=54668,lag=1
master_replid:439dd06a0afd98708e953a3b86761a849763e6cc
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:54668
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:54668
  • 从机101

可以看到当前机器为slave而他的主机为192.168.56.100

root@ubuntu1:~# redis-cli info Replication
# Replication
role:slave
master_host:192.168.56.100
master_port:6379
master_link_status:up
master_last_io_seconds_aGo:0
master_sync_in_progress:0
slave_repl_offset:54239
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:439dd06a0afd98708e953a3b86761a849763e6cc
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:54239
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:523
repl_backlog_histlen:53717
  • 从机102

可以看到当前机器为slave而他的主机是192.168.56.100

root@ubuntu2:~# redis-cli info Replication
# Replication
role:slave
master_host:192.168.56.100
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:53939
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:439dd06a0afd98708e953a3b86761a849763e6cc
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:53939
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:47034
repl_backlog_histlen:6906

测试主从自动切换

手动杀死100机器上的master

root@ubuntu0:~# ps -ef | grep redis
root@ubuntu0:~# ps -ef | grep redis-server | awk "{print $2}" | xargs kill -9
root      1807     1  0 14:03 ?        00:00:01 redis-server 0.0.0.0:6379
root      1828     1  0 14:04 ?        00:00:02 redis-sentinel *:26379 [sentinel]
root      1953  1572  0 14:13 pts/0    00:00:00 grep --color=auto redis
root@ubuntu0:~# ps -ef | grep redis
root      1828     1  0 14:04 ?        00:00:02 redis-sentinel *:26379 [sentinel]
root      1957  1572  0 14:13 pts/0    00:00:00 grep --color=auto redis
  • 101的哨兵

此时我们去101机器上可以看到该Redis已成为了master

root@ubuntu1:~# redis-cli -p 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=192.168.56.101:6379,slaves=2,sentinels=3
  • 102的哨兵

此时我们去102机器上可以看到该Redis依然是slave,但是master0已经变成了101机器

root@ubuntu2:~# redis-cli -p 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=192.168.56.101:6379,slaves=2,sentinels=3
  • 同时可以看到尚且存活的Redis中的sentinel.conf文件也已经发生了改变,即100没了
# Generated by CONFIG REWRITE
sentinel config-epoch mymaster 1
sentinel leader-epoch mymaster 1
sentinel known-slave mymaster 192.168.56.102 6379
sentinel known-slave mymaster 192.168.56.100 6379
sentinel known-sentinel mymaster 192.168.56.100 26379 e2f8e9e7c46df32a3dd4e1bfa578f7c39240e385
sentinel known-sentinel mymaster 192.168.56.101 26379 b8dddc8055e57b4c11360febc7d9cfcb5542ac37
sentinel current-epoch 1
  • 查看100机器上的sentinel日志可以看到有这么一端

尤其是下面的+selected-slave slave 192.168.56.101:6379 192.168.56.101 6379 @ mymaster 192.168.56.100 6379就是告诉我们主机已切换为101机器

1828:X 04 Mar 14:13:32.911 # +sdown master mymaster 192.168.56.100 6379
1828:X 04 Mar 14:13:32.988 # +odown master mymaster 192.168.56.100 6379 #quorum 2/2 
1828:X 04 Mar 14:13:32.988 # +new-epoch 1
1828:X 04 Mar 14:13:32.988 # +try-failover master mymaster 192.168.56.100 6379
1828:X 04 Mar 14:13:32.991 # +vote-for-leader e2f8e9e7c46df32a3dd4e1bfa578f7c39240e385 1
1828:X 04 Mar 14:13:32.995 # 0b24c05f721cc0c1542f17d143449da31a0acd6a voted for e2f8e9e7c46df32a3dd4e1bfa578f7c39240e385 1
1828:X 04 Mar 14:13:33.057 # +elected-leader master mymaster 192.168.56.100 6379
1828:X 04 Mar 14:13:33.057 # +failover-state-select-slave master mymaster 192.168.56.100 6379
1828:X 04 Mar 14:13:33.158 # +selected-slave slave 192.168.56.101:6379 192.168.56.101 6379 @ mymaster 192.168.56.100 6379
1828:X 04 Mar 14:13:33.158 * +failover-state-send-slaveof-noone slave 192.168.56.101:6379 192.168.56.101 6379 @ mymaster 192.168.56.100 6379
1828:X 04 Mar 14:13:33.249 * +failover-state-wait-promotion slave 192.168.56.101:6379 192.168.56.101 6379 @ mymaster 192.168.56.100 6379
1828:X 04 Mar 14:13:33.872 # +promoted-slave slave 192.168.56.101:6379 192.168.56.101 6379 @ mymaster 192.168.56.100 6379
1828:X 04 Mar 14:13:33.872 # +failover-state-reconf-slaves master mymaster 192.168.56.100 6379
1828:X 04 Mar 14:13:33.920 # +failover-end master mymaster 192.168.56.100 6379

重启100的Redis

可以看到100的Redis已经变成了slave

root@ubuntu0:~# redis-server /etc/redis/redis.conf
root@ubuntu0:~#  redis-cli -p 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=192.168.56.101:6379,slaves=2,sentinels=3

如果想看的更仔细,可以继续以下命令查看各个机器的情况

redis-cli -p 26379 info sentinel
root@ubuntu0:~# redis-cli info Replication
tail -f /var/log/redis/redis-sentinel.log
tail -f /etc/redis/sentinel.conf

到此完事

您可能感兴趣的文档:

--结束END--

本文标题: RedisSentinel哨兵

本文链接: https://www.lsjlt.com/news/4792.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • RedisSentinel哨兵
    RedisSentinel哨兵 注意 若master实例故障,sentinel会重新选主并启动自动故障切换:选择slave-priority最小的那个slave实例并将其提升为master,同时修改其它slave的配置,使其master配...
    99+
    2014-11-22
    RedisSentinel哨兵
  • 使用Docker配置redissentinel哨兵的方法步骤
    目录1.配置主从2. 配置哨兵3.SpringBoot连接本文演示一主二从。 先说一下遇到的问题。我看网上说想配置哨兵,必须让启动redis的docker网络模式为host,否则无法...
    99+
    2022-11-13
  • redis 哨兵
    哨兵作用 哨兵(sentinel) 是一个分布式系统,是程序高可用性的一个保障。用于监视任意多个主服务器,以及这些主服务器属下的所有从服务器,当出现故障时通过投票机制选择新的master并将所有slave连接到新的master。 ...
    99+
    2014-08-22
    redis 哨兵
  • Redis哨兵sentinel
    ########哨兵sentinel    配置3个redis(1主2从),1个哨兵。步骤如下: cp redis.conf redis1.conf cp r...
    99+
    2022-10-18
  • Redis哨兵模式实现一主二从三哨兵
    目录一、redis环境:二、哨兵介绍:三、安装redis:四、使用Redis主从复制的作用:五、配置redis一主二从:六、配置redis三哨兵:一、redis环境: 环境:redis6.2.6linux虚拟机一台,co...
    99+
    2022-07-04
    Redis哨兵模式 Redis一主二从三哨兵
  • Redis 哨兵集群
    哨兵集群介绍Redis的哨兵(sentinel) 常用于管理多个 Redis 服务器,它主要会执行以下三个任务:        监控(M...
    99+
    2022-10-18
  • Redis 哨兵机制
    虽然现在使用哨兵+主从的方式比较少了,但通过理解 Redis 哨兵,我们能获得更深入的分布式的知识。 https://redis.io/topics/sentinel sentinel基本配置 sentinel的作用: 1...
    99+
    2014-07-04
    Redis 哨兵机制
  • Windows配置redis哨兵
    redis主从模式必有单点问题,所以redis的哨兵机制就是来弥补这一问题,接下来我们在Windows环境下配置一下redis的哨兵。1.下载Windows版redis地址:https://github.c...
    99+
    2022-10-18
  • 搭建redis哨兵模式
    [root@localhost ~]$ wget http://download.redis.io/releases/redis-3.2.8.tar.gz [root@localhost ~]$ tar zxvf redis-3.2.8....
    99+
    2021-09-15
    搭建redis哨兵模式
  • Redis的哨兵(sentinel)(概念)
    Redis的哨兵(sentinel)       redis的sentinel系统用于管理多个redis服务器实例(instance)。        哨兵适用于非集群结构的redis环境,比如:redis...
    99+
    2022-10-18
  • Redis哨兵模式原理
    Redis 哨兵模式原理哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行、其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redi...
    99+
    2022-10-18
  • Redis哨兵模式介绍
    哨兵简介 主机"宕机" 将宕机的 master 下线找一个 slave 作为 master通知所有的 slave 连接新的 master启动新的 master ...
    99+
    2022-11-13
  • Redis哨兵监控的使用
    目录1.简介(1)什么是哨兵(2)功能(3)启动2.运行流程(1)运行流程(2)故障迁移(failover)(3)使用建议1.简介 (1)什么是哨兵 哨兵是Redis的一种运行模式。它专注于对Redis实例(主节点、从节...
    99+
    2023-11-13
    Redis哨兵监控 Redis哨兵
  • redis中的哨兵是什么
    本篇文章给大家分享的是有关redis中的哨兵机制,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。redis高可用:如果你做主从架构部署,其实就是...
    99+
    2022-10-18
  • Redis哨兵部署(sentinel)(实验)
    首先感谢“吧喱公路”的引导,打开了我对哨兵的理解思路,再次谢谢。Redis的哨兵(sentinel)       哨兵适用于非集群结构的redis环境,比如:redis主从环境。    关于哨兵集群,我这里...
    99+
    2022-10-18
  • Redis哨兵原理是什么
    Redis哨兵原理是什么?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!本文实现环境centos7.3 redis4.0re...
    99+
    2022-10-18
  • Redis哨兵模式是什么
    这篇文章主要讲解了“Redis哨兵模式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis哨兵模式是什么”吧!哨兵模式1. 哨兵概念在一主多从结构...
    99+
    2022-10-19
  • Redis 哨兵集群的实现
    目录1、Sentinel 哨兵2、Redis 主从分离一、配置Master二、配置Slave  1、在配置文件中配置从服务  2、在服务启动后设置  3、总结3、Sentinel 哨...
    99+
    2022-11-12
  • k8s怎么部署redis哨兵
    这篇文章主要介绍“k8s怎么部署redis哨兵”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“k8s怎么部署redis哨兵”文章能帮助大家解决问题。一、准备redis镜像DockerfileFROM&...
    99+
    2023-07-02
  • Docker部署Redis哨兵模式
    本篇文章给大家分享的是有关Docker部署Redis哨兵模式,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。条件三台服务器(因为需要至少三个哨兵保证安全性)【可以在阿里云上租几个...
    99+
    2023-06-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作