一、简介

    目前主流实现web网站及数据库服务高可用软件包括:keepalived、heartbeat、corosync,cman;高可用简称HA;

    官方站点:https://www.keepalived.org/

  1、keepalived主要功能

    对RealServer进行健康状态检查,支持3层、4层、7层协议进行健康检查;并支持VRRP冗余协议,所以keepalived两个功能是监控检查,VRRP冗余协议;

  2、keepalived的作用

    检查web服务器的状态,如果有一台web服务器/mysql服务器宕机或故障,keepalived将故障节点从系统中剔除,当故障恢复的时候自动加入服务器集群中,非常智能化,只需要手动修复坏的节点即可。

  3、keepalived的layer3、4、7层分别是IP层、传输层、应用层的实现原理如下:

    1)、layer3:keepalived定期向集群中服务器发送ICMP的包,如果发现哪台ping不通,便报告这台服务器失效,并将其剔除集群;(判断标准为IP是否有效)

    2)、layer4:主要以TCP端口(也可以是udp)状态来决定服务器工作是否正常,如web服务器的80端口如果没有工作,则将其剔除集群(判断标准为端口)

    3)、layer7:应用层,keepalived将根据用户的设定,检查服务器程序的运行是否正常,如果不是设定值,则将其剔除集群(判断标准为程序是否正常)

二、keepalived VRRP原理

  1、学习keepalived,必须了解VRRP协议的原理,因为keepalived是VRRP的完美实现,那什么是VRRP那?VRRP(虚拟路由冗余协议)最早是为了解决网关的点单故障的路由协议,在主机上如何选定到达目的的下一跳路由,这个问题通常解决方案是,动态路由协议RIP,OSPF;再有就是静态路由协议,主机中实现动态路由协议非常不实际,管理,开销,维护等诸多问题,因此通常是配置静态路由协议,但是路由器或网管就经常出现单点,VRRP就是解决此静态路由单点问题,VRRP通过竞选协议来动态交给LAN中的虚拟路由器中的某台VRRP路由器。

  2、VRRP虚拟路由器集群中,由多台物理机组成,但是并不是同时工作,而是由master负载路由工作,其他都是backup,master也不是一成不变,VRRP会让每个VRRP路由参与竞选最终优先的就是master。

  3、master的特权是拥有虚拟路由器的IP地址,即VIP,负责转发给网关地址的包和响应ARP请求。

  4、VRRP通过竞选来实现虚拟路由器的功能,所有协议报文都是通过IP多播包(多播地址224.0.0.18)发送的,虚拟路由器有VRID(0~255)和一组IP地址组成,对外表现为一个mac地址,所以一组虚拟路由器集群中,不管谁是master,对外都是一个相同mac和VIP,客户端没有感知。

  5、master的VRRP路由器会一直发送VRRP广播包,backup不会抢占master,除非优先级(priority)更高,当master不可用时(backup收不到广播包),多台backup中优先级最高的这台会抢占master,抢占是非常快速的,并且VRRP包还使用了加密协议进行传输。

  6、keepalived基于VRRP将两台主机当做路由器,组成虚拟路由器集群,master高的主机产生VIP,该VIP负责转发用户发起的IP包或请求

三、keepalive架构模型

  一个父进程两个子进程

    为了确保健壮及稳定性,守护进程被分为3个不同的进程,父进程负责fork和监控子进程,因此父进程也称为watchdog,凉饿子进程,一个负责VRRP,另一个负责健康检查,每个进程都有自己的I/O多路复用器,这样可以优化VRRP调度抖动,因为VRRP比健康检查更重要,两个子进程开启本地套接字Unix Domain Socket,当keepalive启动后,父进程通过unix domain socket每隔5s发送一个hello消息给子进程,如果父进程无法发送消息给子进程,将认为子进程出现问题,于是重启子进程。watchdog这种设计的两个好处是,第一父进程发送给远程子进程的hello数据包是通过I/O多路复用程序完成的,这样他就可以在子调度框架中检测死循环,第二是使用sysV信号检测dead children。

  架构图:

    解释:

      userspace  用户空间

      kernelspace 内核空间

      checker组件:负责RS健康状态检查,并在LVS拓扑中移除、添加,支持layer3/4/7的协议检查,该组件使用独立的子进程负责,但被父进程监控。这个组件就是实现健康检查(TCP\HTTP\SSL\MISC......)

      VRRP stack:提供director的故障转移功能从而实现director的高可用,该组件可独立提供功能,无需LVS支持,也是独立的子进程负责,父进程监控,vrrp stact就是vrrp的实现,比如vrrp协议调用。

      system call组件:提供抓取自定义脚本的功能,该组件在使用时,将临时产生一个子进程来执行任务,支持系统调用机制,做出管理操作。

      IPVS wrapper组件:负责将配置文件中IPVS相关规则发送到内核的IPVS模块,就是生产ipvs规则的。

      netlink reflector:用来设定,监控vrrp的vip地址,负责交互,VRRP借助于netlink健康网络,实现网络功能配置。

      schedule-I/O Multiplexer:并发控制。

      memory mngt:内存管理。

      control plane configuration file parser:配置文件,分析的主控工具。

      watch dog:可以理解为高可用监视器。

四、keepalived配置文件

  vim /etc/keepalived/keepalived.conf

 ! Configuration File for keepalived 

 global_defs {          #全局部分定义邮件报警系统
notification_email {    #定义邮件发送目标
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc  #定义邮件发送人
smtp_server 192.168.200.1                   #指定smtp服务器地址
smtp_connect_timeout 30                    #指定smtp连接超时时间
router_id LVS_DEVEL                       #表示keepalived服务器的字符串,局域网内是唯一的高可用需要使用它标识节点
vrrp_skip_check_adv_addr                   #默认是不跳过检查,检查收到的VRRP通过中的所有地址可能会比较耗时,设置此命令的意思是,如果通告于接收的上一个通过来自相同的master路由器,则不执行检查,也就是跳过检查。
vrrp_strict                           #严格嬦VRRP协议,阻止keepalived启动有几种情况,1没有vip,2单播邻居,3在VRRP版本2中有ipv6地址
vrrp_garp_interval 0                      #在一个接口发送的两个arp之间的延迟,可以是毫米级
vrrp_gna_interval
}
19#定义VRRP实例,一个配置文件可以有多例,不同主机之间互为主备,实例名称应该一致。
vrrp_instance VI_1 {            
state MASTER         #定义角色状态,是master/backup                     
interface eth0        #定义网卡
virtual_router_id 51     #定义虚拟路由标识VRID,主备应该相同
priority 100          #定义优先级
advert_int 1          #心跳时间1s
authentication {        #认证方式一个实例中必须完全一致
auth_type PASS      
auth_pass 1111 #最多8个字符
}
virtual_ipaddress {      #设置VIP,主备相同,可以使用dev选项来指定接口,如果需要ifconfig查看,需要在ip地址后加上label,可以是多个VIP
192.168.200.16
192.168.200.17
192.168.200.18
}
}
#定义虚拟服务部分
virtual_server 192.168.200.100 { #虚拟服务器地址和端口空格隔开地址为VIP
delay_loop 6               #健康检查间隔
lb_algo rr                #定义负载均衡算法,这里是rr
lb_kind NAT               #定义lvs模型
persistence_timeout 50        #持久会话保持时长
protocol TCP              #监控服务的协议类型 real_server 192.168.201.100 {    #定义rs部分,地址端口
weight 1                #lvs权重
SSL_GET {               #监控检查的方式,常见的有HTTP_GET/SSL_GET/TCP_CHECK/MISC_CHECK
url {                
path /             #指定ssl——get健康检查路径
digest ff20ad2481f97b1754ef3e12ecd3a9cc
}                 #健康状态需要状态码,可以是status_code,digest,digest+status_code
url {              #digest值用keepalived的genhash命令生产,一般使用status_code
path /mrtg/
digest 9b3a0c85a887a256d6939da88aabd8cd
}
connect_timeout 3      #3s五响应就超时,就判断为realserver不健康,需要重新连接
nb_get_retry 3        #标识重试3次,防误伤
delay_before_retry 3    #重试间隔3s
}                  #总共12s才能判断故障节点,可以改小点
}
} virtual_server 10.10.10.2 {      #定义所有rs宕机时,有哪台服务器提供服务
delay_loop 6                #一般在keepalived给一个web页面,提示维护等。
lb_algo rr
lb_kind NAT
persistence_timeout
protocol TCP sorry_server 192.168.200.200 real_server 192.168.200.2 {
weight
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout
nb_get_retry
delay_before_retry
}
} real_server 192.168.200.3 {
weight
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334c
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334c
}
connect_timeout
nb_get_retry
delay_before_retry
}
}
} virtual_server 10.10.10.3 {
delay_loop
lb_algo rr
lb_kind NAT
persistence_timeout
protocol TCP real_server 192.168.200.4 {
weight
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout
nb_get_retry
delay_before_retry
}
} real_server 192.168.200.5 {
weight
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout
nb_get_retry
delay_before_retry
}
}
}

     

转载请注明出处:https://www.cnblogs.com/zhangxingeng/p/10595058.html

高可用实现KeepAlived原理简介的更多相关文章

  1. centos7.4安装高可用(haproxy+keepalived实现)kubernetes1.6.0集群(开启TLS认证)

    目录 目录 前言 集群详情 环境说明 安装前准备 提醒 一.创建TLS证书和秘钥 安装CFSSL 创建 CA (Certificate Authority) 创建 CA 配置文件 创建 CA 证书签名 ...

  2. 深入解析 SQL Server 高可用镜像实现原理

    作者:郭忆 本文由 网易云 发布. SQL Server 是 windows 平台 .NET 架构下标配数据库解决方案,与 Oracle.MySQL 共同构成了 DB-Engines Ranking ...

  3. 深入解析SQL Server高可用镜像实现原理

    本文来自网易云社区 SQL Server 是windows平台.NET架构下标配数据库解决方案,与Oracle.MySQL共同构成了DB-Engines Ranking的第一阵营,在国内外企业市场中有 ...

  4. 17.Linux高可用之Keepalived

    1.什么是高可用,为什么要设计高可用? 两台机器启动着相同的业务系统,当有一台机器宕机,另外一台服务器能快速的接管,对于访问的用户是无感知的. 减少系统不能提供服务的时间. 2.高可用使用什么工具来实 ...

  5. 高可用软件Keepalived

    关于高可用软件Keepalived的使用及配置请参见:http://www.voidcn.com/blog/9124573/article/p-5990263.html

  6. 高可用之KeepAlived(2):keepalived+lvs

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  7. Redis从出门到高可用--Redis复制原理与优化

    Redis从出门到高可用–Redis复制原理与优化 单机有什么问题? 1.单机故障; 2.单机容量有瓶颈 3.单机有QPS瓶颈 主从复制:主机数据更新后根据配置和策略,自动同步到备机的master/s ...

  8. RabbitMQ和Kafka的高可用集群原理

    前言 小伙伴们,通过前边文章的阅读,相信大家已经对RocketMQ的基本原理有了一个比较深入的了解,那么大家对当前比较常用的RabbitMQ和Kafka是不是也有兴趣了解一些呢,了解的多一些也不是坏事 ...

  9. Redis高可用之主从复制原理演进分析

    Redis高可用之主从复制原理演进分析 在很久之前写过一篇 Redis 主从复制原理的简略分析,基本是一个笔记类文章. 一.什么是主从复制 1.1 什么是主从复制 主从复制,从名字可以看出,至少需要 ...

随机推荐

  1. MIP技术进展月报第2期: 数据绑定,异步脚本加速

    一. 功能更新 1. mip-bind 上线,实现复杂交互 MIP bind 双向绑定机制和组件上线,提供双向绑定的特性:能够允许页面实现数据驱动功能,开发者可以在任意场景修改数据,并驱动页面元素变动 ...

  2. Logistic回归二分类Winner or Losser----台大李宏毅机器学习作业二(HW2)

    一.作业说明 给定训练集spam_train.csv,要求根据每个ID各种属性值来判断该ID对应角色是Winner还是Losser(0.1分类). 训练集介绍: (1)CSV文件,大小为4000行X5 ...

  3. 彻底理解浏览器的缓存机制(http缓存机制)

    一.概述 浏览器的缓存机制也就是我们说的HTTP缓存机制,其机制是根据HTTP报文的缓存标识进行的,所以在分析浏览器缓存机制之前,我们先使用图文简单介绍一下HTTP报文,HTTP报文分为两种: 同步s ...

  4. python中线程和进程(二)

    目录 线程同步 Event Lock RLock Condition Barrier semaphore GIL 线程同步 线程同步,即线程之间协同工作,一个线程访问某些数据时,其他线程不能访问这些数 ...

  5. 解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法

    目录 解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 安装 vs 2019 professional/enterprise版本 在vs的设置里,勾选 ...

  6. 干货|一个案例学会Spring Security 中使用 JWT

    在前后端分离的项目中,登录策略也有不少,不过 JWT 算是目前比较流行的一种解决方案了,本文就和大家来分享一下如何将 Spring Security 和 JWT 结合在一起使用,进而实现前后端分离时的 ...

  7. Java进阶篇设计模式之五-----外观模式和装饰器模式

    前言 在上一篇中我们学习了结构型模式的适配器模式和桥接模式.本篇则来学习下结构型模式的外观模式和装饰器模式. 外观模式 简介 外观模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这 ...

  8. javascript入门篇(五)

    将日期转换为数字 全局方法 Number() 可将日期转换为数字 d = new Date(); Number(d)          // 返回 1404568027739 日期方法 getTime ...

  9. c#根据路径(url)下载图片

    方法一:根据路径下载图片 1 /// <summary> /// 图片另存为 /// </summary> /// <param name="url" ...

  10. JavaScript 原型的深入指南

    摘要: 理解prototype. 原文:JavaScript 原型的深入指南 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 不学会怎么处理对象,你在 JavaScript 道路就就走 ...