#!/bin/bash
#This is keepalived bashshell.
#MASTER/BACKUP
yum install -y openssl openssl-devel keepalived
vim /etc/keepalived/keepalived.conf
sed -i 's/MASTER/BACKUP/g' /etc/keepalived/keepalived.conf
sed -i 's/eth0/ens33/g' /etc/keepalived/keepalived.conf
sed -i 's/priority 100/priority 80/' /etc/keepalived/keepalived.conf
sudo systemctl start keepalived
sudo systemctl enable keepalived #!/bin/bash while true
do
if [ `ip a show eth0 |grep 10.0.0.3|wc -l` -ne ]
then
echo "keepalived is error!"
else
echo "keepalived is OK !"
fi
done

Keepalived  官网地址:https://www.keepalived.org/manpage.html

源码二进制包地址:https://www.keepalived.org/software/

keepalived-2.0.18.tar.gz:https://www.keepalived.org/software/keepalived-2.0.18.tar.gz

Keepalived for Linux - Version 2.0.18 - July 26, 2019 - MD5SUM:={9d1dc77a0e4c628daf9fe453701b54be}

官网文档阅读:https://www.keepalived.org/doc/

什么是Keepalived?

Keepalived是用C语言编写的路由软件。该项目的主要目标是为Linux系统和基于Linux的基础结构提供负载均衡和高可用性的简单而强大的功能。

负载平衡框架依赖于提供第4层负载平衡的著名且广泛使用的Linux虚拟服务器(IPVS)内核模块。

Keepalived实现了一组检查器,以根据其运行状况动态,自适应地维护和管理负载平衡的服务器池。另一方面,VRRP实现了高可用性 协议。

VRRP是路由器故障转移的基础砖。

此外,Keepalived还实现了一组VRRP有限状态机的挂钩,从而提供了低级和高速协议交互。为了提供最快的网络故障检测,Keepalived实施BFD协议。

VRRP状态转换可以考虑BFD提示来驱动快速状态转换。Keepalived框架可以独立使用,也可以一起使用以提供弹性基础架构。

Keepalived是免费软件;您可以根据自由软件基金会发布的GNU通用公共许可证的条款重新分发和/或修改它;许可的版本2,或(由您选择)任何更高的版本。

介绍

负载平衡是一种在实际服务器群集之间分配IP流量的方法,可提供一个或多个高可用性虚拟服务。

在设计负载平衡拓扑时,重要的是要考虑负载平衡器本身以及其背后的真实服务器的可用性。

Keepalived提供了用于负载平衡和高可用性的框架。负载平衡框架依赖于广为人知的Linux虚拟服务器(IPVS)内核模块,该模块提供第4层负载平衡。

Keepalived实施一组运行状况检查器,以根据其运行状况动态,自适应地维护和管理负载平衡的服务器池。虚拟冗余路由协议(VRRP)实现了高可用性。

VRRP是路由器故障转移的基础砖。此外,keepalived还实现了一组VRRP有限状态机的挂钩,从而提供了低级和高速协议交互。

每个Keepalived框架可以独立使用,也可以一起使用以提供弹性基础架构。

在这种情况下,负载均衡器也可以称为导向器或LVS路由器。

简而言之,Keepalived提供两个主要功能:

  • LVS系统的运行状况检查
  • VRRPv2堆栈的实施以处理负载均衡器故障转移

软件设计

Keepalived用纯ANSI/ISO C编写。
该软件围绕提供实时网络设计的中央I/O多路复用器进行连接。主要设计重点是在所有元素之间提供同质的模块化。
这就是创建核心库以删除代码重复的原因。目的是产生安全可靠的代码,以确保生产的鲁棒性和稳定性。

为了确保健壮性和稳定性,守护程序分为三个不同的进程:

一个简约的父进程,负责分叉子进程的监视。
两个子进程,一个负责VRRP框架,另一个负责健康检查。

每个子进程都有自己的调度I/O多路复用器,由于VRRP调度比运行状况检查程序更明智/更关键,因此可以优化VRRP调度抖动。
这种拆分设计最大程度地减少了对外部库的使用状况进行健康检查的可能性,并最大程度地减少了直到主线程并使其空闲的自身操作,从而避免了由自身引起的故障。

父进程监视框架称为看门狗,其设计是每个子进程打开一个接受unix域套接字,然后在守护程序引导时,父进程连接到那些unix域套接字并向子进程发送定期(5s)的hello数据包。
如果父级无法将hello数据包发送到远程连接的Unix域套接字,则只需重启子级进程即可。

这种看门狗设计具有2个好处,首先,通过I / O复用器调度程序完成从父进程发送到远程连接的子进程的hello数据包,从而可以检测子调度程序框架中的死循环。
第二个好处是通过使用sysV信号检测死亡的孩子而带来的。运行时,您将在进程列表中看到:

PID 111 Keepalived <-- Parent process monitoring children
112 \_ Keepalived <-- VRRP child
113 \_ Keepalived <-- Healthchecking child

内核组件
Keepalived使用四个Linux内核组件:

1.LVS框架:使用getsockopt和setsockopt调用来获取和设置套接字上的选项。
2.Netfilter框架:支持NAT和伪装的IPVS代码。
3.Netlink接口:设置和删除网络接口上的VRRP虚拟IP。
4.组播:将VRRP通告发送到保留的VRRP MULTICAST组(224.0.0.18)。

原子元素

控制平面
通过文件keepalived.conf完成Keepalived配置。
编译器设计用于解析。解析器与关键字树层次结构配合使用,以将每个配置关键字与特定处理程序进行映射。
中央多级递归函数读取配置文件并遍历关键字树。解析期间,配置文件被转换为内部存储器表示。

调度程序-I/O多路复用器
所有事件都安排在同一过程中。Keepalived是一个单一的过程。
Keepalived是一种网络路由软件,对I/O如此封闭。这里使用的设计是一个中央选择(...),负责安排所有内部任务。
不使用POSIX线程库。该框架提供了针对网络目的而优化的自己的线程抽象。

内存管理
该框架提供对某些通用内存管理功能的访问,例如分配,重新分配,发布等。
此框架可以在两种模式下使用:normal_mode和debug_mode。使用debug_mode时,它提供了一种强大的方法来消除和跟踪内存泄漏。
此低级环境通过跟踪内存的分配和释放来提供缓冲区运行不足保护。所有使用的缓冲区都是固定长度的,以防止最终出现缓冲区溢出。

核心组件
该框架定义了所有代码中都使用的一些通用和全局库。
这些库是:html解析,链接列表,计时器,向量,字符串格式,缓冲区转储,网络实用程序,守护程序管理,pid处理,低级TCP layer4。
此处的目标是将代码分解为最大,以限制尽可能多的代码重复以增加模块化。

看门狗
该框架提供子进程监控(VRRP和运行状况检查)。
每个孩子都接受与其自己的看门狗unix域套接字的连接。
父进程将“ hello”消息发送到此子unix域套接字。Hello消息在父端使用I/O复用器发送,并在子端使用I/O复用器接受/处理。
如果父级检测到管道损坏,则它使用sysV信号测试子级是否仍然存在并重新启动它。

跳棋
这是Keepalived的主要功能之一。检查人员负责realserver的运行状况检查。
一个检查器测试realserver是否还活着,该测试以二进制决定结束:从/向LVS拓扑中删除或添加realserver。
内部检查器设计是实时网络软件,它使用完全多线程的FSM设计(有限状态机)。该检查器堆栈根据第4层到第5/7层测试结果提供LVS拓扑操作。它在由父进程监视的独立进程中运行。

VRRP协议栈
另一个最重要的Keepalived功能。VRRP(虚拟路由器冗余协议:RFC2338)专注于导演接管,它为路由器备份提供了低级设计。
它实现了完整的IETF RFC2338标准,并为LVS和防火墙设计提供了一些规定和扩展。它实现了vrrp_sync_group扩展,该扩展可确保协议接管后的持久路由路径。
它使用MD5-96位密码提供来实现IPSEC-AH,以确保协议广告交换的安全。有关VRRP的更多信息,请阅读RFC。重要事项:VRRP代码无需LVS支持即可使用,它是为独立使用而设计的。
它在由父进程监视的独立进程中运行。

系统调用
该框架提供了启动额外系统脚本的功能。它主要用于MISC检查器。在VRRP框架中,它提供了在协议状态转换期间启动额外脚本的功能。系统调用完成到一个分叉的过程中,以不影响全局调度计时器。

Netlink反射器
与IPVS包装器相同。Keepalived具有其自己的网络接口表示形式。IP地址和接口标志是通过内核Netlink通道设置和监视的。Netlink消息传递子系统用于设置VRRP VIP。
另一方面,Netlink内核消息传递广播功能用于将与接口相关的任何事件反映到我们的用户空间Keepalived内部数据表示中。
因此,任何其他用户空间(其他程序)的网络链接操作都会通过网络链接内核广播(RTMGRP_LINK和RTMGRP_IPV4_IFADDR)反映到我们的Keepalived数据表示中。

SMTP
SMTP协议用于管理通知。它使用多线程FSM设计实现IETF RFC821。发送有关健康检查程序活动和VRRP协议状态转换的管理通知。SMTP是常用的,可以与任何其他通知子系统(例如GSM-SMS,寻呼机等)接口。

IPVS包装器
该框架用于将规则发送到内核IPVS代码。它提供了Keepalived内部数据表示和IPVS rule_user表示之间的转换。它使用IPVS libipvs保持与IPVS代码的通用集成。

IPVS
由LinuxVirtualServer.org开源项目的Wensong提供的Linux内核代码。IPVS(IP虚拟服务器)在Linux内核内部实现了传输层负载平衡,也称为第4层交换。

网通
Alexey Kuznetov提供的Linux Kernel代码具有非常好的高级路由框架和子系统功能。Netlink用于在内核和用户空间进程之间传输信息。
它由一个用于用户空间进程的基于套接字的标准接口和一个用于内核模块的内部内核API组成。

系统日志
所有keepalived守护程序通知消息都是使用syslog服务记录的。

健康检查框架
每个健康检查都注册到全局调度框架。这些运行状况检查工作程序线程实现以下类型的运行状况检查:

TCP_CHECK
在第4层工作。为了确保此检查,我们使用TCP Vanilla检查,该检查使用无阻塞/超时的TCP连接。如果远程服务器未回复此请求(超时),则测试错误,并且该服务器已从服务器池中删除。
HTTP_GET
在第5层工作。对指定的URL执行HTTP GET。然后,使用MD5算法对HTTP GET结果进行求和。如果该总和与期望值不匹配,则测试是错误的,并将服务器从服务器池中删除。
该模块对同一服务实现多URL获取检查。如果您使用的服务器托管多个应用程序服务器,则此功能很有用。此功能使您能够检查应用程序服务器是否正常运行。
MD5摘要是使用genhash实用程序(包含在keepalived软件包中)生成的。
SSL_GET
与HTTP_GET相同,但使用到远程Web服务器的SSL连接。
MISC_CHECK
通过此检查,可以将用户定义的脚本作为运行状况检查器运行。结果必须为0或1。脚本在目录框上运行,这是测试内部应用程序的理想方法。
可以使用完整路径(即/path_to_script/script.sh)调用可以在不带参数的情况下运行的脚本。需要参数的变量需要用双引号引起来(即“ /path_to_script/script.sh arg 1 ... arg n”)
Keepalived的目标是定义一个易于扩展的通用框架,以添加新的Checkers模块。如果您对现有或新检查器的开发感兴趣,请查看源代码中的keepalived / check目录:

https://github.com/acassen/keepalived/tree/master/keepalived/check

故障转移(VRRP)框架
Keepalived实施VRRP协议进行导演故障转移。在已实现的VRRP堆栈中,VRRP数据包分派器负责为每个VRRP实例解复用特定的I/O。

根据RFC2338,VRRP定义为:

“VRRP specifies an election protocol that dynamically assigns
responsibility for a virtual router to one of the VRRP routers on a LAN.
The VRRP router controlling the IP address(es) associated with a virtual
router is called the Master, and forwards packets sent to these IP
addresses. The election process provides dynamic fail over in the
forwarding responsibility should the Master become unavailable. This allows
any of the virtual router IP addresses on the LAN to be used as the default
first hop router by end-hosts. The advantage gained from using VRRP is a
higher availability default path without requiring configuration of dynamic
routing or router discovery protocols on every end-host.” [rfc2338]

注意

该框架是独立于LVS的,因此您可以将其用于LVS Director故障转移,即使是其他需要Hot-Standby协议的Linux路由器也是如此。由于设计和健壮性的原因,此框架已完全集成在Keepalived守护程序中。

该框架提供的主要功能是:

故障转移:基于VRRP VIP漫游集的原始VRRP协议。
VRRP实例同步:我们可以指定2个VRRP实例之间的状态监视,也称为VRRP同步组。它保证2个VRRP实例保持相同状态。同步的实例相互监视。
不错的后备
广告包完整性:使用IPSEC-AH ICV。
系统调用:在VRRP状态转换期间,可以调用外部脚本/程序。

关于将VRRP与虚拟MAC地址一起使用的说明
为了减少对接管的影响,某些网络环境将要求使用带有VMAC地址的VRRP。为了实现该目标,Keepalived VRRP框架通过调用配置文件中的“ use_vmac”关键字来实现VMAC支持。

在内部,Keepalived代码将启动虚拟接口,每个接口专用于特定的virtual_router。Keepalived使用Linux内核macvlan驱动程序来定义这些接口。然后必须使用通过macvlan支持编译的内核。

此外,我们可以提到VRRP VMAC仅适用于包含以下补丁的内核:

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=729e72a10930ef765c11a5a35031ba47f18221c4

默认情况下,MACVLAN接口处于VEPA模式,该模式会过滤掉接收到的MAC源地址与MACVLAN接口的地址匹配的数据包。将MACVLAN接口设置为私有模式将不会基于源MAC地址进行过滤。

或者,您可以指定“ vmac_xmit_base”,这将导致VRRP消息在基础接口上发送和接收,而ARP将从VMAC接口发生。

您可能还需要调整物理接口,以解决众所周知的ARP问题。如果遇到问题,请尝试以下配置:

1.全局配置:

net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 1
net.ipv4.conf.all.arp_filter = 0

2.物理接口配置

对于运行VRRP实例的物理以太网接口,请使用:

net.ipv4.conf.eth0.arp_filter = 1

3.VMAC接口
考虑以下VRRP配置:

vrrp_instance instance1 {
state BACKUP
interface eth0
virtual_router_id 250
use_vmac
vmac_xmit_base # Transmit VRRP adverts over physical interface
priority 150
advert_int 1
virtual_ipaddress {
10.0.0.254
}
}

该use_vmac关键字将驱动器的keepalived代码来创建一个名为macvlan接口vrrp.250(默认内部范例VRRP {} virtual_router_id,您只需提供一个参数“use_vmac”关键字,如覆盖此命名:use_vmac vrrp250)。

然后,您需要使用以下命令配置接口:

net.ipv4.conf.vrrp.250.arp_filter = 0
net.ipv4.conf.vrrp.250.accept_local = 1(对于地址所有者,这是必需的)
net.ipv4.conf.vrrp.250.rp_filter = 0

您可以创建notify_master脚本为您自动执行此配置步骤:

vrrp_instance instance1 {
state BACKUP
interface eth0
virtual_router_id 250
use_vmac
priority 150
advert_int 1
virtual_ipaddress {
10.0.0.254
}
notify_master "/usr/local/bin/vmac_tweak.sh vrrp.250"
}

centso 7 Keepalived 配置脚本的更多相关文章

  1. Keepalived 配置实例

    Keepalived 是一款轻量级HA集群应用,它的设计初衷是为了做LVS集群的HA,即探测LVS健康情况,从而进行主备切换,不仅如此,还能够探测LVS代理的后端主机的健康状况,动态修改LVS转发规则 ...

  2. Keepalived 配置和使用

    keepalived主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现.keepalived主要目的在于,其自身启动一个服务,能够实现 ...

  3. LVS结合keepalived配置测试

     LVS/DR + keepalived配置 注意:前面虽然我们已经配置过一些操作,但是下面我们使用keepaliave操作和之前的操作是有些冲突的,所以若是之前配置过DR,请首先做如下操作:   三 ...

  4. 使用Keepalived配置主从热备实现Nginx高可用(HA)

    Keepalived 简要介绍 Keepalived 是一种高性能的服务器高可用或热备解决方案,Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 web 前端服务 ...

  5. 集群相关、用keepalived配置高可用集群

    1.集群相关 2.keepalived相关 3.用keepalived配置高可用集群 安装:yum install keepalived -y   高可用,主要是针对于服务器硬件或服务器上的应用服务而 ...

  6. centos LB负载均衡集群 三种模式区别 LVS/NAT 配置 LVS/DR 配置 LVS/DR + keepalived配置 nginx ip_hash 实现长连接 LVS是四层LB 注意down掉网卡的方法 nginx效率没有LVS高 ipvsadm命令集 测试LVS方法 第三十三节课

    centos   LB负载均衡集群 三种模式区别 LVS/NAT 配置  LVS/DR 配置  LVS/DR + keepalived配置  nginx ip_hash 实现长连接  LVS是四层LB ...

  7. keepalived 配置需要注意的问题

    keepalived 配置过程中遇到了一些问题,做个记录: 1.selinux的影响:keepalived配置了vrrp_script脚本总是无效      注:脚本返回值0代表成功,1或其他非0值代 ...

  8. keepalived配置

    keepalived配置 之前已经安装完成,接下来我们配置keepalived. 假设我的ip地址如下: server1:192.168.0.150 server2:192.168.0.157 vip ...

  9. Linux centosVMware 集群介绍、keepalived介绍、用keepalived配置高可用集群

    一.集群介绍 根据功能划分为两大类:高可用和负载均衡 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 实现高可用的开源软件有:heartbeat. ...

随机推荐

  1. 仿flash运动框架

    github地址: [https://github.com/linxd5/pictureShow] PS: 新建一个github项目很简单,只要new一个repo,后面按照提示做就可以了~ 项目思路: ...

  2. extentreports 测试报告引用extend.js/css失败

    测试工程引用extentreports 生成的测试报告,因为报告中的js和css网络不通,所以页面乱码 解决思路: 下载需要的js.css放到测试工程的static目录下 下载extentreport ...

  3. Java:面向对象(继承,方法的重写(overide),super,object类及object类中方法的重写,父子类代码块执行顺序)

    继承: 1.继承是对某一匹类的抽象,从而实现对现实世界更好的建模. 2.提高代码的复用性. 3.extends(扩展),子类是父类的扩展. 4.子类继承父类可以得到父类的全部属性和方法.(除了父类的构 ...

  4. python基础知识(列表详解)

    列表(list) 列表中可以存入整数.实数.布尔值.字符串.序列.对象 可变序列 列表  []  元素间隔用   ,号分隔 列表的创建和删除 使用赋值运算符直接创建列表 listname = [元素1 ...

  5. Python爬虫学习==>第十一章:分析Ajax请求-抓取今日头条信息

    学习目的: 解决AJAX请求的爬虫,网页解析库的学习,MongoDB的简单应用 正式步骤 Step1:流程分析 抓取单页内容:利用requests请求目标站点,得到单个页面的html代码,返回结果: ...

  6. 【VS开发】CTime和CTimeSpan使用

    此文就用一个程序表示,相信只要是学过C语言的都能看得懂的. [html] view plain copy print? // CTimeTest.cpp : Defines the entry poi ...

  7. 【DSP开发】解读TI的KeyStone II云技术应用

    最近,德州仪器(TI)公司推出6款最新KeyStone II多核SoC,助力云应用.TI公司多核DSP中国市场开发经理蒋亚坚先生向媒体讲解了这6款KeyStone II新产品的特点与目标应用.     ...

  8. filter方法常用过滤条件

    #encoding: utf-8 from sqlalchemy import create_engine,Column,Integer,String,Float,func,and_,or_ from ...

  9. JDBC基本操作

    前言:什么是JDBC 维基百科的简介: Java 数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提 ...

  10. 【转贴】龙芯内核发展策略 已经支持k8s

    龙芯内核发展策略 时间:2019-06-27 15:48  来源:未知   作者:龙芯中科   点击:1002次 http://www.loongson.cn/m/view.php?aid=1118 ...