【亚洲城手机客户端下载】Sentinel高可用架构,哨兵原理及实践

原标题:深远学习Redis高可用框架结构:哨兵原理及实施

本篇文章版权归微博和小编杨刚本人共同持有,转发和爬虫请评释原作系列地址

本篇文章版权归搜狐和小编李铁本身共同持有,转发和爬虫请注明原来的作品体系地址

Redis Sentinel高可用架构

Redis如今高可用的架构十分多,比如keepalived+redis,redis
cluster,twemproxy,codis,这几个架构各有上下,后天一时不说那么些架构,昨日注重说说redis
sentinel高可用架构。

它的机要功效有以下几点

  • 每每地监察和控制redis是或不是依据预期卓绝地运营;
  • 万一发现有些redis节点运维出现意况,能够公告其它四个经过(例如它的客户端);
  • 可见实行机动切换。当八个master节点不可用时,能够大选出master的五个slave(即使有跨越叁个slave的话)中的二个来作为新的master,别的的slave节点会将它所追随的master的地方改为被升级为master的slave的新鸿基土地资金财产方。

关于更进一步详实的配置以及介绍引进看完以下文章,作者在那边就不多说了,直接开始展览搭建:

【亚洲城手机客户端下载】Sentinel高可用架构,哨兵原理及实践。redis sentinel的框架结构如下图:

亚洲城手机客户端下载 1

 

本来Redis-Sentinel推荐应用三个可能一个以上节点,至于怎么那样做看完本身上边给的文章链接。

环境介绍:

Redis Sentinel5台服务器:

10.36.30.203
10.36.30.204
10.37.124.202
10.37.124.203
10.37.124.204

那边并非以为浪费,那样做是为着越发安全便捷的监察和控制redis,切redis
Sentinel能够开始展览复用,也等于足以监督八个Redis实例,所以服务器不存在浪费。

Redis 服务器2台,1主1从:

10.69.25.173  master
10.69.30.170 slave

5台Sentinel的布局文件内容如下:

亚洲城手机客户端下载 2

port 26379
dir "/data/redis/sentinel/26379"
daemonize yes
logfile "/data/redis/sentinel/26379/sentinel.log"

# 6379
sentinel monitor master-6379 10.69.25.173 6379 1
sentinel down-after-milliseconds master-6379 15000
sentinel parallel-syncs master-6379 1
sentinel failover-timeout master-6379 180000
sentinel client-reconfig-script master-6379 /sh/redis/notify.py

亚洲城手机客户端下载 3

里头sentinel client-reconfig-script master-6379
/sh/redis/notify.py是在主导切换现在发送告警邮件。别的参数的意义参考我给的作品链接。相关目录自个儿成立好。
notify.py脚本内容如下,5台服务器下边都亟待存在,因为您不理解哪个节点会被公投为leader(网上还未曾人关系切换发送告警邮件难题):

亚洲城手机客户端下载 4

亚洲城手机客户端下载 5

#!/usr/bin/python
#coding:utf8

import sys
import time
import smtplib
import logging
from email.mime.text import MIMEText
from email.message import Message
from email.header import Header


alarm_mail =['xxxxxx@163.com']

def main():

    failover_time=time.strftime("%Y-%m-%d %H:%M:%S")

    logging.basicConfig(level=logging.DEBUG,
                format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                datefmt='%Y-%m-%d %H:%M:%S',
                filename='/sh/redis/failover.log',
                filemode='a')

    console = logging.StreamHandler()
    console.setLevel(logging.INFO)
    formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
    console.setFormatter(formatter)
    logging.getLogger('').addHandler(console)

    mail_host='xxxxx'
    mail_port=25
    mail_user='xxxxxxx'
    mail_pass='xxxxxxxx'
    mail_send_from = 'xxxxxxx'

    def send_mail(to_list,sub,content):
        me=mail_send_from
        msg = MIMEText(content, _subtype='html', _charset='utf-8')
        msg['Subject'] = Header(sub,'utf-8')
        msg['From'] = Header(me,'utf-8')
        msg['To'] = ";".join(to_list)
        try:
            smtp = smtplib.SMTP()
            smtp.connect(mail_host,mail_port)
            smtp.login(mail_user,mail_pass)
            smtp.sendmail(me,to_list, msg.as_string())
            smtp.close()
            return True
        except Exception as error:
            logging.error("邮件发送失败: %s" % (error))
            return False

    try:
        master_name = sys.argv[1]
        role = sys.argv[2]
        from_ip = sys.argv[4]
        from_port = sys.argv[5]
        to_ip = sys.argv[6]
        to_port = sys.argv[7]
    except Exception as error:
        logging.error('从 Sentinel 获取参数错误: %s ' % (error))
        sys.exit(1)

    sub='redis %s faiover' % (master_name)
    nodify_message = "%s %s is failover end. sentinel find redis master %s:%s is down. failover to slave %s:%s" % (failover_time,master_name,from_ip,from_port,to_ip,to_port)

    if role == 'leader':
        logging.info(nodify_message)
        send_mail(alarm_mail,sub,nodify_message)

if __name__ == "__main__":
    main()

亚洲城手机客户端下载 6

10.69.25.173  master

10.69.30.170  slave

温馨安装完毕redis,并且搭建好复制关系。

 

方今独家在5台Sentinel服务器下面运行Sentinel,有2种方法运行。哪二种本身看前边文章。

redis-sentinel sentinel.conf

启航之后无论找一台服务器查看日志,输出如下提醒:

[18219] 12 Dec 09:56:47.161 # Sentinel runid is f3086fc39145cb3d832785899699050d2c7f3b08
[18219] 12 Dec 09:56:47.161 # +monitor master master-6379 10.69.25.173 6379 quorum 1
[18219] 12 Dec 09:56:47.183 * +slave slave 10.69.30.170:6379 10.69.30.170 6379 @ master-6379 10.69.25.173 6379

此地的+slave就意味着找到了一个从库。

再看看别的sentinel服务器的日记:

亚洲城手机客户端下载 7

[1480] 12 Dec 09:58:37.250 # Sentinel runid is 812f9f8b860dcc73d4b587e3bdf85df13808a3cd
[1480] 12 Dec 09:58:37.250 # +monitor master master-6379 10.69.25.173 6379 quorum 1
[1480] 12 Dec 09:58:38.252 * +slave slave 10.69.30.170:6379 10.69.30.170 6379 @ master-6379 10.69.25.173 6379
[1480] 12 Dec 09:58:38.304 * +sentinel sentinel 10.36.30.204:26379 10.36.30.204 26379 @ master-6379 10.69.25.173 6379
[1480] 12 Dec 09:58:38.388 * +sentinel sentinel 10.37.124.202:26379 10.37.124.202 26379 @ master-6379 10.69.25.173 6379
[1480] 12 Dec 09:58:38.461 * +sentinel sentinel 10.37.124.203:26379 10.37.124.203 26379 @ master-6379 10.69.25.173 6379
[1480] 12 Dec 09:58:39.423 * +sentinel sentinel 10.37.124.204:26379 10.37.124.204 26379 @ master-6379 10.69.25.173 6379

亚洲城手机客户端下载 8

+sentinel表示发现了别的的sentinel服务器。今后全方位集群就已经工作了。

先是进入sentinel查看以往的主节点是哪台服务器(随便哪台sentinel都得以):

redis-cli -p 26379

亚洲城手机客户端下载 9

127.0.0.1:26379> info Sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
master0:name=master-6379,status=ok,address=10.69.25.173:6379,slaves=1,sentinels=5
127.0.0.1:26379> 

亚洲城手机客户端下载 10

能够看来今后的主库是10.69.25.173:6379。现在我们把那台服务器的redis进度kill掉,查看是还是不是会开始展览切换:

pkill -9 redis

重新翻开,发现主库已经是原来的从库了。
并且还会吸收接纳告警邮件,内容如下:

亚洲城手机客户端下载 11

亚洲城手机客户端下载 12

127.0.0.1:26379> info Sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
master0:name=master-6379,status=ok,address=10.69.30.170:6379,slaves=1,sentinels=5
127.0.0.1:26379> 

亚洲城手机客户端下载 13

一如既往的,倘使把刚刚kill掉的reids重新开动,又会把启动的redis设置为10.69.30.170的从库。

亚洲城手机客户端下载 14

[1480] 12 Dec 10:01:48.921 # +new-epoch 1
[1480] 12 Dec 10:01:48.933 # +vote-for-leader 92517289efcb4ae695eff3e064fde7f4e0e43a1f 1
[1480] 12 Dec 10:01:48.955 # +sdown master master-6379 10.69.25.173 6379
[1480] 12 Dec 10:01:48.955 # +odown master master-6379 10.69.25.173 6379 #quorum 1/1
[1480] 12 Dec 10:01:48.955 # Next failover delay: I will not start a failover before Sat Dec 12 10:07:49 2015
[1480] 12 Dec 10:01:50.067 # +config-update-from sentinel 10.37.124.203:26379 10.37.124.203 26379 @ master-6379 10.69.25.173 6379
[1480] 12 Dec 10:01:50.067 # +switch-master master-6379 10.69.25.173 6379 10.69.30.170 6379
[1480] 12 Dec 10:01:50.067 * +slave slave 10.69.25.173:6379 10.69.25.173 6379 @ master-6379 10.69.30.170 6379
[1480] 12 Dec 10:02:05.109 # +sdown slave 10.69.25.173:6379 10.69.25.173 6379 @ master-6379 10.69.30.170 6379
[1480] 12 Dec 10:03:19.241 # -sdown slave 10.69.25.173:6379 10.69.25.173 6379 @ master-6379 10.69.30.170 6379
[1480] 12 Dec 10:03:29.219 * +convert-to-slave slave 10.69.25.173:6379 10.69.25.173 6379 @ master-6379 10.69.30.170 6379

亚洲城手机客户端下载 15

那么客户端怎么样知道主从开始展览切换了呢,要是是java那么有jedis客户端比较便于,倘若是php,python语言呢,大家得以本人开始展览判定。当然还有此外一种方法正是接纳dns,修改dns解析。
小编那边用python简单写了二个daemon,不会php,哎。

亚洲城手机客户端下载 16 View Code

如上正是简单的测试了,更加多的测试交给我们了。

总结:

Redis
Sentinel实现高可用依旧相比可信赖的,前面线上也打算选用。须求留意的是Redis
Sentinel节点推荐2个以上。相比较keepalived+redis完成高可用更可靠,且keepalived+redis还不能够管住七个实例,那一点是相比辛劳的。

 

参考资料:

 

作者:Atlas

出处:Atlas的博客

你的支撑是对博主最大的鼓励,多谢您的认真阅读。本文版权归小编全数,欢迎转发,但请保留该注解。

集群方案 三主三从 

集群方案 三主三从

在上篇文章《深远学习 Redis 高可用的内核:主从复制》中曾涉嫌,Redis
主从复制的功能有数据热备、负载均衡、故障恢复生机等;但主从复制存在的二个题材是故障复苏无法自动化。

前面有篇作品,讲到了redis主从复制,读写分离。不过留下的标题是当主服务器挂了,大家就无法向客户端提供任何劳动了啊,那样的方案,就不能够称为高可用方案。下面,提供一种Redis集群高可用方案,迟钝之处,欢迎指正和补充。

事先有篇文章,讲到了redis主从复制,读写分离。但是留下的题材是当主服务器挂了,大家就不能够向客户端提供别的服务了呀,那样的方案,就不可能称为高可用方案。上边,提供一种Redis集群高可用方案,愚蠢之处,欢迎指正和互补。

亚洲城手机客户端下载 17

Redis为我们提供了哨兵,它就像是五个为我们的Redis服务站岗的人,当主服务器爆发至极时,他会由此投票的主意,将从服务节点升为主服务节点。当我们处理好主节点故障同仁一视启时,原来挂掉的主节点,作为新的主节点的子节点。

Redis为大家提供了哨兵,它就像是贰个为大家的Redis服务站岗的人,当主服务器发生卓殊时,他会经过投票的点子,将从服务节点升为主服务节点。当大家处理好主节点故障仁同一视启时,原来挂掉的主节点,作为新的主节点的子节点。

正文将要介绍的哨兵,它根据 Redis
主从复制,重要意义正是赶尽杀绝主节点故障苏醒的自动化问题,进一步升高系统的高可用性。

为了在本机测试,首先自身在6379,6380,6381节点上开启多个redis服务,6379做为master节点,6380和6381看作其从劳动节点。关于主旨的安顿假诺有疑问的话请看笔者的那篇小说。

为了在本机测试,首先笔者在6379,6380,6381节点上开启四个redis服务,6379做为master节点,6380和6381当做其从劳动节点。关于基本的布局假设有疑难的话请看笔者的那篇作品

小说将率先介绍哨兵的功力和架构;然后讲述哨兵系统的布署方法,以及由此客户端访问哨兵系统的办法;然后简短表明哨兵达成的基本原理;最终交给关于哨兵实践的局地建议。(注:小说内容基于
Redis 3.0 版本)

上边你须求再将redis文件夹机器内容复制出一份,作者将其文件夹命名为Sentinel.

上边你须要再将redis文件夹机器内容复制出一份,小编将其文件夹命名为Sentinel.

哨兵的效能和架构

亚洲城手机客户端下载 18

亚洲城手机客户端下载 19

哨兵的效劳

笔者们将其配备文件最终,扩张如下配置消息。配置音信配置了哨兵端口5000,我们的redis客户端,比如C#的stackservice,stackExechange,能够从哨兵中读取当前集群景况,约等于说主挂后,我们客户端都得以拿到到新闻,并且从新的劳务节点及端口中展开键值的操作。其余配置文件说到,主服务节点为6379,并且多少个哨兵时,获得哨兵们的投票为1票时就觉得主节点失联,可切换从节点为主。

大家将其安顿文件最终,增添如下配置音讯。配置新闻配置了哨兵端口5000,我们的redis客户端,比如C#的stackservice,stackExechange,能够从哨兵中读取当前集群景况,约等于说主挂后,大家客户端都得以获得到新闻,并且从新的劳务节点及端口中实行键值的操作。其它配置文件说到,主服务节点为6379,并且四个哨兵时,获得哨兵们的投票为1票时就以为主节点失联,可切换从节点为主。

在介绍哨兵在此之前,首先从宏观角度回想一下
Redis 完毕高可用相关的技艺。

down-after-milliseconds 指明尝试多少皮秒无反射,哨兵认为其失联。

down-after-milliseconds 指明尝试多少皮秒无反射,哨兵认为其失联。

它们包含:持久化、复制、哨兵和集群,其利害攸关意义和平解决决的题材是:

parallel-sync指明当故障发生时,允许某些许个从节点,同时从新的主节点同步数据。这一个布局意义在于,你这些值设置的越小,全部从节点同步时间也就越久,比如如下配置,每一趟只好同步二个,从节点更多,自然也就越久。那么这些值设置的大,或造成哪些影响,那取决大家的安顿文件,大家得以陈设在从一道主节点时,以旧的数额提须求客户端,在一块完结后,提供新数据,那样不会造成从节点同步时期不可用的景色。而只是,在共同完成后,供给删除旧的数据,加载新的数量,在那短暂的之间,还是会有从节点不可用的情形时有爆发。

parallel-sync指明当故障产生时,允许有多少个从节点,同时从新的主节点同步数据。那一个布局意义在于,你这一个值设置的越小,全数从节点同步时间也就越久,比如如下配置,每一趟只好同步3个,从节点越来越多,自然也就越久。那么那几个值设置的大,或导致如何影响,那有赖于大家的布局文件,我们得以配备在从一块主节点时,以旧的数据提要求客户端,在一起到位后,提供新数据,那样不会导致从节点同步时期不可用的场合。而只是,在一块儿到位后,须要删除旧的数额,加载新的数额,在那短短的里边,依旧会有从节点不可用的景观爆发。

  • 持久化:持久化是最简便易行的高可用方法(有时照旧不被归为高可用的招数),首要意义是数据备份,即将数据存款和储蓄在硬盘,保险数据不会因经过退出而不见。
  • 复制:复制是高可用 Redis
    的底蕴,哨兵和集群都以在复制基础上实现高可用的。
    复制首要完结了数据的多机备份,以及对此读操作的负载均衡和简易的故障复苏。缺陷:故障复苏不能够自动化;写操作不可能负荷均衡;存款和储蓄能力受到单机的范围。
  • 哨兵:在复制的根底上,哨兵实现了自动化的故障恢复生机。缺陷:写操作不可能负荷均衡;存款和储蓄能力受到单机的限制。
  • 集群:通过集群,Redis
    化解了写操作不或者负荷均衡,以及存储能力受到单机限制的标题,实现了比较完善的高可用方案。
port 5000
sentinel monitor mymaster 127.0.0.1 6379 1 
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000 
sentinel parallel-syncs mymaster 1
port 5000sentinel monitor mymaster 127.0.0.1 6379 1 sentinel down-after-milliseconds mymaster 5000sentinel failover-timeout mymaster 60000 sentinel parallel-syncs mymaster 1

下边说回哨兵,Redis Sentinel,即 Redis 哨兵,在 Redis 2.8
版本开端引入。哨兵的中坚功用是主节点的电动故障转移。

上面就到了我们运行sentinel(哨兵)的时候了!

上边就到了大家运维sentinel的时候了!

上面是 Redis
官方文书档案对于哨兵功用的描述:

一律切换成Sentinel文件夹目录下,执行命令

同等切换成Sentinel文件夹目录下,执行命令

  • 监督检查(Monitoring):哨兵会频频地检讨主节点和从节点是不是运作如常。
  • 机动故障转移(Automatic
    failover):当主节点不能平时干活时,哨兵会开端自行故障转移操作,它会将失效主节点的里边2个从节点升级为新的主节点,并让任何从节点改为复制新的主节点。
  • 安插提供者(Configurationprovider):客户端在开首化时,通过连接哨兵来赢伏贴前
    Redis 服务的主节点地址。
  • 通报(Notification):哨兵能够将故障转移的结果发送给客户端。

亚洲城手机客户端下载 20

亚洲城手机客户端下载 21

里头,监察和控制和自行故障转移效果,使得哨兵能够及时发现主节点故障并完结更换;而铺排提供者和公告功能,则须求在与客户端的并行中才能展现。

那样一来,哨兵”观看站”运转了。

那样一来,哨兵”阅览站”运营了。

此间对“客户端”一词在本文的用法做贰个认证:在前方的篇章中,只要经过 API 访问 Redis
服务器,都会称作客户端,包含 redis-cli、Java 客户端 Jedis 等。

率先我们展示下健康意况,主从的复制以及读写情形。

首先大家突显下正规情状,主从的复制以及读写景况。

为了便利区分表达,本文中的客户端并不包罗redis-cli,而是比 redis-cli 特别扑朔迷离。

亚洲城手机客户端下载 22

亚洲城手机客户端下载 23

redis-cli 使用的是 Redis
提供的底层接口,而客户端则对那个接口、功效举行了包装,以便丰富利用哨兵的布局提供者和通知效率。

上海教室主节点写入新键。下图在三个从节点读取数据。

上航海用体育地方主节点写入新键。下图在多个从节点读取数据。

哨兵的架构

亚洲城手机客户端下载 24

亚洲城手机客户端下载 25

独立的哨兵架构图如下所示:

亚洲城手机客户端下载 26

亚洲城手机客户端下载 27

亚洲城手机客户端下载 28

接下去,大家看一下主节点挂掉之后,会时有发生什么。小编将主节点服务关闭。

接下去,我们看一下主节点挂掉之后,会生出什么。小编将主节点服务关闭。

它由两某些构成,哨兵节点和数目节点:

亚洲城手机客户端下载 29

亚洲城手机客户端下载 30

  • 哨兵节点:哨兵系统由四个或多少个哨兵节点组成,哨兵节点是特殊的 Redis
    节点,不存款和储蓄数据。
  • 数据节点:主节点和从节点都以数据节点。

作者们事先的只读从节点,以往曾经升为可写的主节点了!

我们此前的只读从节点,现在已经升为可写的主节点了!

哨兵系统的陈设方法

理所当然,想要做到高可用,哨兵也应该多少个节点,有关越多哨兵命令,配置及其规律,下回分解。

理所当然,想要做到高可用,哨兵也应该五个节点,有关越来越多哨兵命令,配置及其规律,下回分解。

这一片段将配置1个粗略的哨兵系统,包蕴 三个主节点、2 个从节点和 3 个哨兵节点。

 

若是本人的一定量分享对你有点低援助,欢迎点击下方郎窑红关心,小编将随处分享,共同升高

方便起见:抱有那个节点都布置在一台机器上(局域网
IP:192.168.92.128),使用端口号区分;节点的配备尽或许简化。

 

布署主从节点

假若自己的有数分享对您有点低援助,欢迎点击下方浅豆沙色关切,小编将不断分享,共同提高

哨兵系统中的主从节点,与日常的主干节点配置是一模一样的,并不要求做其他附加安排。

上边分别是主节点(port=6379)和 1个从节点(port=6380/6381)的布局文件,配置都比较简单,不再详述。

#redis-6379.conf

port6379

daemonizeyes

logfile”6379 .log”

dbfilename” dump-6379.rdb”

#redis-6380.conf

port6380

daemonizeyes

logfile”6380 .log”

dbfilename” dump-6380.rdb”

slaveof192 .168.92.1286379

#redis-6381.conf

port6381

daemonizeyes

logfile”6381 .log”

dbfilename” dump-6381.rdb”

slaveof192 .168.92.1286379

配备完结后,依次运行主节点和从节点:

redis-serverredis-6379.conf

redis-serverredis-6380.conf

redis-serverredis-6381.conf

节点运行后,连接主节点查看主从状态是还是不是正规,如下图所示:

亚洲城手机客户端下载 31

配备哨兵节点