Skip to content

Latest commit

 

History

History
91 lines (70 loc) · 3.98 KB

index.md

File metadata and controls

91 lines (70 loc) · 3.98 KB
title created_at tag toc displayed_on_home
[Redis] sentinel
2021-03-20 02:30:23 -0700
cache
redis
replication
high availability
sentinel
ops
true
true

在上一篇博客Replication1中我们构建了一个简单的主从复制架构的redis服务,利用Replication我们可以让redis提供读写分离、提供读取能力、数据备份等功能,也支持slave从鼓掌中恢复。但是如果master出现了故障,那么整Replication都会处于一个不可用的状态。这显然无法满足高可用的目标。而整个目标需要借助sentinel2来实现。

sentinel概述:

  1. 监控:sentinel是一个分布式系统,多个实例利用gossip协议协同工作。sentinel监控master和slave实例,同时sentinel实例之间也互相监控。
  2. 通知: 当某一个实例出现问题时,sentinel可以通过API通知系统管理员。
  3. 自动故障转移:如果被监控的master出现问题,sentinel可以启动一个自动故障转移的过程,sentinel实例之间选举出来一个slave提升为master,然后配置其他slave的配置使其成为新的master的slave,并且通知client使用新的连接地址。
  4. 配置提供者:client不再之间连接到master或者slave,而是连接到sentinel,由sentinel提供redis的master和slave的地址。

1 搭建环境 {#install}

运行sentinel有两种方式:

  1. redis-sentinel /path/to/sentinel.conf;
  2. redis-server /path/to/sentinel.conf --sentinel;

两种方式完全一样的(通常redis-sentinel文件是redis-server的一个符号连接,redis-server启动时会做如下检查): {{}} /* Returns 1 if there is --sentinel among the arguments or if

  • argv[0] contains "redis-sentinel". */ int checkForSentinelMode(int argc, char **argv) { int j; if (strstr(argv[0],"redis-sentinel") != NULL) return 1; for (j = 1; j < argc; j++) if (!strcmp(argv[j],"--sentinel")) return 1; return 0; } {{}}

redis-server默认的6379端口号不同的是,redis-sentinel默认运行在26379端口。

这里使用docker-compose -f redis.yml up -d启动一个主从复制的环境,一个master、两个slave和三个sentinel。 {{}}

{{}}

{{}}

启动后进入到其中的一个sentinel中docker exec -it sentinel_sentinel1.test_1 redis-cli -p 26379: {{}}

2 运行原理 {#theory}

3 详细配置 {#config}

{{}}

配置监控的master、ip、port和ODOWN的人数,并起一个名字

sentinel monitor

sentinel monitor master1 master.test 6379 2

master密码

sentinel auth-pass

判定SDOWN的时间间隔

sentinel down-after-milliseconds

sentinel down-after-milliseconds master1 30000

sentinel failover-timeout

sentinel failover-timeout master1 180000

sentinel parallel-syncs

sentinel parallel-syncs master1 1

protected-mode no

端口号

port 26379

以daemon方式运行时会写入一个/var/run/redis-sentinel.pid文件

daemonize no

自定义pid文件路径

pidfile /var/run/redis-sentinel.pid

日志文件地址,默认/dev/null

logfile ""

NAT网络环境中配置的IP和Port

sentinel announce-ip 1.2.3.4 sentinel announce-port 26379

其中主机名代替IP

SENTINEL resolve-hostnames yes SENTINEL announce-hostnames no {{}}

4 参考 {#reference}

Footnotes

  1. https://linianhui.github.io/redis/replication

  2. https://redis.io/topics/sentinel