热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一步一步搭建Redis+Keepalived主从高可用之原理(一)

开心一笑【鱼说:“我时时刻刻把眼睁开是为了在你身边不舍离开。”水说:“我终日流淌不知疲倦是为了围绕你,好好把你抱紧。”锅说:“都他妈快熟了还这么多废话。”】提出问题如何一步一步利用

开心一笑

【鱼说:“我时时刻刻把眼睁开是为了在你身边不舍离开。”
水说:“我终日流淌不知疲倦是为了围绕你,好好把你抱紧。”
锅说:“都他妈快熟了还这么多废话。” 】

提出问题

《一步一步搭建Redis + Keepalived主从高可用之原理(一)》

如何一步一步利用Redis-Keepalived实现缓存服务热备方案???

解决问题

1.0 keepalived是什么

keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。

1.1 Keepalived的原理介绍

什么是Keepalived呢?keepalived观其名可知,保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生,那说到keepalived时不得不说的一个协议就是VRRP协议,可以说这个协议就是keepalived实现的基础,那么首先我们来看看VRRP协议.

1.2 VRRP协议

VRRP协议

学过网络的朋友都知道,网络在设计的时候必须考虑到冗余容灾,包括线路冗余,设备冗余等,防止网络存在单点故障,那在路由器或三层交换机处实现冗余就显得尤为重要,在网络里面有个协议就是来做这事的,这个协议就是VRRP协议,Keepalived就是巧用VRRP协议来实现高可用性(HA)的
VRRP协议有一篇文章写的非常好,大家可以直接看这里(记得认真看看哦,后面基本都已这个为基础的了)

帖子地址:http://bbs.ywlm.net/thread-790-1-1.html

只需要把服务器当作路由器即可!
在《VRRP协议》里讲到了虚拟路由器的ID也就是VRID在这里比较重要
keepalived完全遵守VRRP协议,包括竞选机制等等

1.3 Keepalived原理

keepalived也是模块化设计,不同模块复责不同的功能,下面是keepalived的组件

core check vrrp libipfwc libipvs-2.4 libipvs-2.6

  • core:是keepalived的核心,复责主进程的启动和维护,全局配置文件的加载解析等
  • check:负责healthchecker(健康检查),包括了各种健康检查方式,以及对应的配置的解析包括LVS的配置解析
  • vrrp:VRRPD子进程,VRRPD子进程就是来实现VRRP协议的
  • libipfwc:iptables(ipchains)库,配置LVS会用到
  • libipvs*:配置LVS会用到
    注意,keepalived和LVS完全是两码事,只不过他们各负其责相互配合而已

《一步一步搭建Redis + Keepalived主从高可用之原理(一)》 原理图片

1.4 Redis使用keeplived热备设计思路

当 Master 与 Slave 均运作正常时, Master负责服务,Slave负责Standby;
当 Master 挂掉,Slave 正常时, Slave接管服务,有写权限,同时关闭主从复制功能;
当 Master 恢复正常,则从Slave同步数据,同步数据之后关闭主从复制功能,恢复Master身份,同时Slave等待Master同步数据完成之后,恢复Slave身份。
然后依次循环。

1.5 keepalived的配置文件

参考资料:https://my.oschina.net/ydsakyclguozi/blog/515200

keepalived配置文件keepalived.conf , 里面主要包括以下几个配置区域,分别是:

  • global_defs、

主要是配置故障发生时的通知对象以及机器标识

global_defs {
notification_email {
ay@ay.com
al@ay.com
...
}
notification_email_from alert@ay.com
smtp_server smtp.ay.com
smtp_connect_timeout 30
enable_traps
router_id host163
}

notification_email 故障发生时给谁发邮件通知。

notification_email_from 通知邮件从哪个地址发出。

smpt_server 通知邮件的smtp地址。

smtp_connect_timeout 连接smtp服务器的超时时间。

enable_traps 开启SNMP陷阱(Simple Network Management Protocol)。

router_id 标识本节点的字条串,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到。

  • static_ipaddress、static_routes、

static_ipaddress和static_routes区域配置的是是本节点的IP和路由信息。如果你的机器上已经配置了IP和路由,那么这两个区域可以不用配置。其实,一般情况下你的机器都会有IP地址和路由信息的,因此没必要再在这两个区域配置。

static_ipaddress {
10.210.214.163/24 brd 10.210.214.255 dev eth0
...
}
static_routes {
10.0.0.0/8 via 10.210.214.1 dev eth0
...
}

  • vrrp_script:用来做健康检查,当时检查失败时会将vrrp_instance的priority减少相应的值。
  • vrrp_instance

vrrp_instance用来定义对外提供服务的VIP区域及其相关属性。

vrrp_rsync_group用来定义vrrp_intance组,使得这个组内成员动作一致。举个例子来说明一下其功能:

global_defs {
router_id redis130
}
vrrp_script chk_redis {
script "/etc/keepalived/scripts/redis_check.sh" ###监控脚本
interval 2 ###监控时间
}
vrrp_script chk_redis {
script "/etc/keepalived/scripts/redis_check.sh" ###监控脚本
interval 2 ###监控时间
weight -10
}
vrrp_instance VI_1 {
state MASTER ###设置为MASTER
interface eth0 ###监控网卡
nopreempt
virtual_router_id 51
priority 101 ###权重值
authentication {
auth_type PASS ###加密
auth_pass 1111 ###密码
}
track_script {
chk_redis ###执行上面定义的chk_redis
}
virtual_ipaddress {
192.168.184.131 ###VIP
}
notify_master /etc/keepalived/scripts/redis_master.sh
notify_backup /etc/keepalived/scripts/redis_backup.sh
notify_fault /etc/keepalived/scripts/redis_fault.sh
notify_stop /etc/keepalived/scripts/redis_stop.sh
}

notify_master/backup/fault :分别表示切换为主/备/出错时所执行的脚本。

notify :表示任何一状态切换时都会调用该脚本,并且该脚本在以上三个脚本执行完成之后进行调用,keepalived会自动传递三个参数($1 = “GROUP”|”INSTANCE”,$2 = name of group or instance,$3 = target state of transition(MASTER/BACKUP/FAULT))。

state :可以是MASTER或BACKUP,不过当其他节点keepalived启动时会将priority比较大的节点选举为MASTER,因此该项其实没有实质用途。

interface :节点固有IP(非VIP)的网卡,用来发VRRP包。

virtual_router_id :取值在0-255之间,用来区分多个instance的VRRP组播。

nopreempt :允许一个priority比较低的节点作为master,即使有priority更高的节点启动。

  • virtual_server

《一步一步搭建Redis + Keepalived主从高可用之原理(一)》 热备设计思路

(注:也可以设置排抢占IP模式,即在主设备配置加上:nopreempt,这样宕掉的Master恢复后,保持Slave身份,不恢复Master身份)。

1.6 在keepalived+redis的使用过程中有四种情况
  • 1 一种是keepalived挂了,同时redis也挂了,这样的话直接VIP飘走之后,是不需要进行redis数据同步的,因为redis挂了,你也无法去master上同步,不过会损失已经写在master上却还没同步到slave上面的这部分数据。
  • 2 另一种是keepalived挂了,redis没挂,这时候VIP飘走后,redis的master/slave还是老的对应关系,如果不变化的话会把数 据写入redis slave中,从而不会同步到master上去,这就要借助监控脚本反转redis的master/slave关系。这时候就要预留一点时间进行数据同 步,然后反转master/slave。
  • 3 还有一种是keepalived没挂,redis挂了,这时候根据监控脚本会检测到redis挂了,并且降低keepalived master的优先级,同样会导致VIP飘走,情况和第二种一样,也是需要进行数据同步,然后反转当前redis的master/slave关系的。
  • 4 随后一种是keepalived没挂,redis也没挂,大吉大利啊,什么都不用操作。
    本文的实验环境四种情况都适合,第一种是不需要同步数据的,脚本会默认去同步数据,但是其实是不会成功的。脚本主要是用来处理第二和第三种情况的。

读书感悟

来自惠特曼《草叶集》

  • 哪里有土,哪里有水,哪里就长着草。
  • 因寒冷而打颤的人,最能体会到阳光的温暖。经历了人生烦恼的人,最懂得生命的可贵。
  • 我坐着,观望世界上所有的忧患,所有的压迫和耻辱….看着,听着,一声不响。
  • 我无论生活在哪里,遇到任何意外都要保持自我平衡,面对黑夜,风暴,饥饿,嘲弄,事故,挫败,都要像树木和动物那样坚韧。
  • 我听见了谈话者的谈话,关于始与终的谈话,可是我不谈论始与终。
  • 无需与你交谈,我只需在一人独坐时,或是独自在夜间醒来时,想着你。 我会等待,从不怀疑会再次与你相遇。
    我要专心。不错过你。

其他

如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎转载,点赞,顶,欢迎留下宝贵的意见,多谢支持!


推荐阅读
  • 三小时掌握计算机网络基础(通俗易懂)
    目录1.网络层次划分2.OSI七层网络模型3.IP地址4.子网掩码及网络划分5.ARPRARP协议6.路由选择协议7.TCPIP协议8.UDP协议 9.DNS协议 ... [详细]
  • ! Configuration File for keepalivedglobal_defs {   notification_email {     ... [详细]
  • 2016年8月29日当初想的太简单~~~哎写在前面从3月份开始各大互联网类、游戏类、软件类等公司开始招暑期实习,9月份正式招聘,面临众多的工作选择和技术方向,我们不免有些眼花缭乱啊 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 开发笔记:计网局域网:NAT 是如何工作的?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 配置IPv4静态路由实现企业网内不同网段用户互访
    本文介绍了通过配置IPv4静态路由实现企业网内不同网段用户互访的方法。首先需要配置接口的链路层协议参数和IP地址,使相邻节点网络层可达。然后按照静态路由组网图的操作步骤,配置静态路由。这样任意两台主机之间都能够互通。 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
  • python oj刷题网站_中小学计算机竞赛去哪里刷题?橙旭园OJ系统上线啦!
    原标题:中小学计算机竞赛去哪里刷题?橙旭园OJ系统上线啦!相信许多人在学习完编程之后都会茫然,感觉自己无所不能࿰ ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
  • [我们是谁?] ... [详细]
  • 一、MVCMVC模式,即软件可以分成三个部分Model、View、Controller。视图(View):用户界面。控制器(Controller):业务逻辑模型(Model):数据 ... [详细]
  • OSI七层模型、TCP/IP五层模型
    OSI网络互连的七层框架:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层;应用层OSI参考模型中最靠近用户的一层,是为计算机用户提供应用接口,为用户直接提供各种网 ... [详细]
author-avatar
D大龙
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有