一、简介

    目前主流实现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. 关于CocoaPods的ruby镜像文件问题

    项目遇到第三方库更新问题 时   用到cocoaPods更换淘宝ruby镜像问题的时候  报错 后来 又在别处找了下 发现 用的是 https  如下: 后来细想  可能跟Xcode7 要求HTTPs ...

  2. [dotnet core]落地微服务特色的DevOps管道,持续集成/部署到kubernetes。

    目录 前言 目标 工具 - 最小的学习成本 方案 - 愿景 1. 持续集成 - CI 2. 持续部署 - CD 部署环境 1. 部署gitlab-runner 2. 注册gitlab-runner 搭 ...

  3. 【STM32H7教程】第9章 STM32H7重要知识点数据类型,变量和堆栈

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第9章   STM32H7重要知识点数据类型,变量和堆栈 ...

  4. asp.net core系列 49 Identity 授权(上)

    一.概述 授权是指用户能够访问资源的权限,如页面数据的查看.编辑.新增.删除.导出.下载等权限.ASP.NET Core 授权提供了多种且灵活的方式,包括:Razor pages授权约定.简单授权.R ...

  5. 微软正式发布Chromium Edge开发预览版

    目录 下载与注册 更多下载信息与订阅 导入Chrome部分数据 扩展安装 安装开发预览版是否会与Win10自带的Edge冲突? 一大早从朋友圈看到消息,微软正式发布Chromium Edge 开发预览 ...

  6. 史上最最靠谱,又双叒叒简单的基于MSXML的XML解析指南-C++

    目录 史上最最靠谱,又双叒叒简单的基于MSXML的XML解析指南 流程设计 xml信息有哪几种读取形式(xml文件或wchar) 如何选取节点,and取节点属性有哪些方法? IXMLDOMNode与I ...

  7. Python进阶:全面解读高级特性之切片!

    导读:切片系列文章连续写了三篇,本文是对它们做的汇总.为什么要把序列文章合并呢?在此说明一下,本文绝不是简单地将它们做了合并,主要是修正了一些严重的错误(如自定义序列切片的部分),还对行文结构与章节衔 ...

  8. 微信公众号开发C#系列-11、生成带参数二维码应用场景

    1.概述 我们在微信公众号开发C#系列-7.消息管理-接收事件推送章节有对扫描带参数二维码事件的处理做了讲解.本篇主要讲解通过微信公众号开发平台提供的接口生成带参数的二维码及应用场景. 微信公众号平台 ...

  9. c# 接口相同方法申明使用

    using System; namespace ConsoleApp1 { interface IInterface1 { void ft(); } interface IInterface2 { v ...

  10. MD5加密Util

    目录 (1)需要导入的包 (2)MD5Util类 (3)使用举例 (1)需要导入的包 <dependency> <groupId>org.apache.commons</ ...