前往顾页
以后地位: 主页 > 收集编程 > Ajax实例教程 >

Redis Sentinel集群摆设实现教程

时候:2017-06-21 12:27来源:知行网www.zhixing123.cn 编辑:麦田守望者

甚么是Redis Sentinel

Redis Sentinel是用来实现Redis高可用的一套处理计划。Redis Sentinel由两个部分构成:由一个或多个Sentinel实例构成Sentinel体系;由一个主Redis办事器(Master Redis)和多个从Redis办事器(Slave Redis)构成主从备份的Redis体系。

Sentinel体系本身是一个漫衍式的体系,它的感化是监督Redis办事器,在Master Redis下线时,主动将某个Slave Redis晋升为新的主理事器。Redis体系由Master Redis措置客户端的号令请求,Slave Redis作为主理事器的备份而存在。

Redis Sentinel首要感化

  • 监控(Monitoring):Sentinel 会不竭地查抄你的主理事器和从办事器是不是运作一般。
  • 提示(Notification):当被监控的某个Redis办事器呈现问题时, Sentinel可以经由过程API向办理员或其他利用法度发送告诉。
  • 主动毛病迁徙(Automatic failover):当一个主理事器不克不及一般事情时, Sentinel会开端一次主动毛病迁徙操纵,它会将见效主理事器的此中一个从办事器进级为新的主理事器,并让见效主理事器的其他从办事器改成复制新的主理事器;当客户端试图连接见效的主理事器时,集群也会向客户端前往新主理事器的地点,使得集群可利用新主理事器代替见效办事器。

Redis Sentinel体系架构图

架构

架构

Sentinel的道理其实不复杂:

  • 启动N个Sentinel实例,这些Sentinel实例会去监控你指定的Redis Master/Slaves。
  • 当Redis Master节点挂失掉队,Sentinel实例经由过程ping检测失败发明这类环境就以为该节点进入 SDOWN状况,也就是检测的Sentinel实例客观地(Subjectively)以为该Redis Master节点挂失落。
  • 当必然命目(Quorum参数设定的Sentinel实例都以为该Master挂失落的环境下,该节点将转换进入ODOWN状况,也就是客观地(Objectively)挂失落的状况。
  • 接上去Sentinel实例之间建议推举,挑选此中一个Sentinel实例建议failover过程:从Slave当挑选一台作为新的Master,让别的Slave从头的Master复制数据,并经由过程Pub/Sub公布事件。
  • 利用者客户端从肆意Sentinel实例获得Redis建设信息,并监听(可选)Sentinel发出的事件: SDOWN, ODOWN和failover等,并做呼应主从切换,Sentinel还扮演了办事发明的角色。
  • Sentinel的Leader推举采取的是Raft和谈。

构建Redis Sentinel集群

Redis Sentinel环境筹办

Redis Sentinel

 

一个一主多从的Redis体系中,可利用多个Sentinel进行监控任务以包管体系充足妥当。此时,不但Sentinel会同时监控主数据库和从数据库,Sentinel之间也会相互监控。在这里,建议年夜家Sentinel起码摆设三个,并且利用奇数个Sentinel。

装置Redis和Sentinel

在三台办事器上别离装置Redis和Sentinel。需求重视的是,如果要给Redis设置暗码,需求在三个Redis的建设文件中设置不异的暗码。

装置的Redis版本必须在2.8版本以上。

$ apt-get install redis-server redis-sentinel

建设Redis和Sentinel

建设Redis

三台Redis主机建设近似,只是初度建设时角色不合。这里以主机dev-master-01为例,别的两台按实际环境点窜就好了。

Redis默许会绑定到127.0.0.1,这里要在多台机器间通信,我们将它绑定到主机IP上。

$ vim /etc/redis/redis.conf
bind 192.168.2.210

如果要给Redis设置暗码,需求在三个Redis的建设文件中设置不异的暗码。

$ vim /etc/redis/redis.conf
requirepass "000000"

设置主从复制

在两个Slave Redis的建设文件中声明所附属的主数据库。

$ vim /etc/redis/redis.conf
slaveof 192.168.2.210 6379

这里需求重视一点:当一个Master建设需求暗码才气连接时,客户端和Slave在连接时都需求供应暗码。Master经由过程requirepass设置本身的暗码,不供应暗码无法连接到这个Master。Slave经由过程masterauth来设置拜候Master时的暗码。

Sentinel可以切换主从数据库,主数据库可能会变成从数据库,所以三台机器上都需求同时设置requirepassmasterauth建设项。

$ vim /etc/redis/redis.conf
requirepass "000000"
masterauth "000000"

建设Sentinel

redis-sentinel软件包中默许包含了一个名为sentinel.conf的文件,默许在/etc/redis/sentinel.conf。这里以主机dev-master-01为例,别的两台建设近似,按实际环境点窜就好了。

运行一个Sentinel所需的起码建设以下所示:

$ vim /etc/redis/sentinel.conf

daemonize yes
port 26379
bind 192.168.2.210
sentinel monitor redis-master 192.168.2.210 6379 2
sentinel down-after-milliseconds redis-master 5000
sentinel failover-timeout redis-master 180000
sentinel parallel-syncs redis-master 2
sentinel auth-pass redis-master 000000
sentinel notification-script redis-master /etc/redis/notify.sh
sentinel client-reconfig-script redis-master /etc/redis/failover.sh
logfile /var/log/redis/redis-sentinel.log

以上建设项申明:

  • daemonize yes

今背景过程形式运行。

  • port 26379

Sentinel实例之间的通信端口,该端标语默许为26379。

  • bind 192.168.2.210

Sentinel默许会绑定到127.0.0.1,这里要在多台机器间通信,我们将它绑定到主机IP上。

  • sentinel monitor redis-master 192.168.2.210 6379 2

Sentinel去监督一个名为redis-master的主理事器,这个主理事器的IP地点为192.168.2.210 ,端标语为6379。将这个主理事器判定为见效起码需求2个Sentinel同意,一般设置为N/2+1(N为Sentinel总数)。只需同意Sentinel的数量不达标,主动毛病迁徙就不会履行。

不过要重视,不管你设置要多少个Sentinel同意才气判定一个办事器见效, 一个Sentinel都需求获得体系中多数Sentinel的支撑,才气建议一次主动毛病迁徙,并预留一个给定的建设纪元。(configuration Epoch ,一个建设纪元就是一个新主理事器建设的版本号)。

  • sentinel down-after-milliseconds redis-master 5000

down-after-milliseconds选项指定了Sentinel以为办事器已断线所需的毫秒数。如果办事器在给定的毫秒数以内,没有前往Sentinel发送的PING号令的答复,或前往一个错误,那么Sentinel将这个办事器标识表记标帜为客观下线(subjectively down,简称SDOWN)。

不过只需一个Sentinel将办事器标识表记标帜为客观下线其实不必然会引发办事器的主动毛病迁徙,只需在充足数量的Sentinel都将一个办事器标识表记标帜为客观下线以后,办事器才会被标识表记标帜为客观下线(objectively down,简称ODOWN), 这时候主动毛病迁徙才会履行。将办事器标识表记标帜为客观下线所需的Sentinel数量由对主理事器的建设(sentinel monitor参数)决定。

  • sentinel failover-timeout redis-master 180000

如果在多少毫秒内没有把宕失落的那台Master规复,那Sentinel以为这是一次实在的宕机。鄙人一次拔取时解除该宕失落的Master作为可用的节点,然后等候必然的设定值的毫秒数后再来探测该节点是不是规复,如果规复就把它作为一台Slave插手Sentinel监测节点群,并鄙人一次切换时为他分派一个”拔取号”。

  • sentinel parallel-syncs redis-master 2

parallel-syncs选项指定了在履行毛病转移时,最多可以有多少个从办事器同时对新的主理事器进行同步。这个数字越小,完成毛病转移所需的时候就越长。

如果从办事器被设置为许可利用过期数据集(slave-serve-stale-data选项), 那么你可能不希望所有从办事器都在同一时候向新的主理事器发送同步请求。因为固然复制过程的绝年夜部分步调都不会梗阻从办事器,但从办事器在载入主理事器发来的RDB文件时,仍然会造成从办事器在一段时候内不克不及措置号令请求。

如果全数从办事器一路对新的主理事器进行同步,那么便可能会造成所有从办事器在短时候内全数不成用的环境呈现。你可以经由过程将这个值设为1来包管每次只需一个从办事器处于不克不及措置号令请求的状况。

  • sentinel auth-pass redis-master 000000

当Master设置了暗码时,Sentinel连接Master和Slave时需求经由过程设置参数auth-pass建设呼应暗码。

  • sentinel notification-script redis-master /etc/redis/notify.sh

指定Sentinel检测到该监控的Redis实例failover时调用的报警脚本。脚本被许可履行的最年夜时候为60秒,超越这个时候脚本会被kill。该建设项可选,但线上体系建议建设。这里的告诉脚本简朴的记录一下failover事件。

# 建立告诉脚本
$ vim /etc/redis/notify.sh

#! /bin/bash

echo "master failovered at `date`" > /var/log/redis/redis_issues.log
# 给脚本增加履行权限
$ chmod +x /etc/redis/notify.sh
  • sentinel client-reconfig-script redis-master /etc/redis/failover.sh

指定Sentinel failover以后重修设客户端时履行的脚本,该建设项可选,但线上体系建议建设。

  • logfile /var/log/redis/redis-sentinel.log

日记文件地点地位,默许在/var/log/redis/redis-sentinel.log。

运行Sentinel

建设完Redis和Sentinel以后,按依次启动各个角色。启动依次以下:Master->Slave->Sentinel,要确保遵循这个依次顺次启动。

  • 启动Redis
$ systemctl start redis
  • 启动Sentinel

运行Sentinel有两种体例:

固然Redis Sentinel有伶仃的软件装置包,但实际上它只是一个运行在特别形式下的Redis实例。以后Redis Stable版已自带了redis-sentinel这个东西。你可以在启动一个浅显Redis实例时经由过程给定--sentinel选项来启动Redis Sentinel。

第一种:用伶仃的可履行文件redis-sentinel

$ redis-sentinel /etc/redis/sentinel.conf

第二种:利用redis-server的—sentinel选项

$ redis-server /etc/redis/sentinel.conf --sentinel

以上两种体例,都必须指定一个Sentinel的建设文件sentinel.conf。需求确保建设文件是可写的,因为Sentinel会往建设文件里增加很多信息作为状况持久化,这是为了重启等环境下可以精确地规复 Sentinel的状况。

当建设文件无法写入时,Sentinel会启动失败。Sentinel默许监听26379端口,所以运行前必须肯定该端口没有被别的过程占用。

我们这里用redis-sentinel体例来启动:

$ systemctl start redis-sentinel
  • 测试Sentinel

启动成功后可以经由过程redis客户端东西检察以后Sentinel的信息,终端输入:

$ redis-cli -p 26379 -h 192.168.2.210 INFO Sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:2
sentinel_scripts_queue_length:1
master0:name=redis-master,status=ok,address=192.168.2.210:6379,slaves=2,sentinels=1

Sentinel启动后会输入近似的日记:

$ tail -f /var/log/redis/redis-sentinel.log

6207:X 06 Jun 10:40:05.904 # Sentinel runid is 2b2446b24a2bd01b9f54a6b2ca4f945a3480dd7e
6207:X 06 Jun 10:40:05.904 # +monitor master redis-master 192.168.2.210 6379 quorum 2
6207:X 06 Jun 10:40:05.910 * +slave slave 192.168.2.211:6379 192.168.2.211 6379 @ redis-master 192.168.2.210 6379
6207:X 06 Jun 10:40:05.915 * +slave slave 192.168.2.212:6379 192.168.2.212 6379 @ redis-master 192.168.2.210 6379
6207:X 06 Jun 12:01:33.098 * +sentinel sentinel 192.168.2.211:26379 192.168.2.211 26379 @ redis-master 192.168.2.210 6379
6207:X 06 Jun 12:02:07.922 * +sentinel sentinel 192.168.2.212:26379 192.168.2.212 26379 @ redis-master 192.168.2.210 637968.2.212:6379 192.168.2.212 6379 @ redis-master 192.168.2.210 6379
输入的成果表示开端监控redis-master集群,并输入集群的根基信息。+slave+sentinel别离代表成功发明了从数据库和其他Sentinel。

  • 检察sentinel.conf

从头翻开sentinel.conf文件,发明Sentinel主动天生了一些信息,记录了监控过程中的状况转变。

$ cat /etc/redis/sentinel.conf
# Generated by CONFIG REWRITE
maxclients 4064
sentinel leader-epoch redis-master 0
sentinel known-slave redis-master 192.168.2.212 6379
sentinel known-slave redis-master 192.168.2.211 6379
sentinel current-epoch 0
  • 检察Sentinel监控的主从办事器

列出所有被监督的主理事器,和这些主理事器的以后状况。

$ redis-cli  -p 26379 -h 192.168.2.210
192.168.2.210:26379> sentinel master redis-master
 1) "name"
 2) "redis-master"
 3) "ip"
 4) "192.168.2.210"
 5) "port"
 6) "6379"
 7) "runid"
 8) "02d88a6105ce3277745c1fc65b695887f165f302"
 9) "flags"
10) "master"
11) "pending-commands"
12) "0"
13) "last-ping-sent"
14) "0"
15) "last-ok-ping-reply"
16) "1096"
17) "last-ping-reply"
18) "1096"
19) "down-after-milliseconds"
20) "5000"
21) "info-refresh"
22) "4732"
23) "role-reported"
24) "master"
25) "role-reported-time"
26) "667578"
27) "config-epoch"
28) "0"
29) "num-slaves"
30) "2"
31) "num-other-sentinels"
32) "0"
33) "quorum"
34) "2"
35) "failover-timeout"
36) "180000"
37) "parallel-syncs"
38) "2"
39) "notification-script"
40) "/etc/redis/notify.sh"

顶一下
(0)
0%
踩一下
(0)
0%
------分开线----------------------------
标签(Tag):
------分开线----------------------------
颁发评论
请自发遵循互联网相关的政策法规,严禁公布色情、暴力、革命的谈吐。
评价:
神色:
考证码:点击我更换图片
猜你感兴趣