1. keepalived简介
1.1 keepalived是什么?
Keepalived 软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。
Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。
所以,Keepalived 一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。
keepalived官网
1.2 keepalived的重要功能
keepalived 有三个重要的功能,分别是:
管理LVS负载均衡软件
实现LVS集群节点的健康检查
作为系统网络服务的高可用性(failover)
1.3 keepalived高可用故障转移的原理
Keepalived 高可用服务之间的故障切换转移,是通过 VRRP (Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)来实现的。
在 Keepalived 服务正常工作时,主 Master 节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备 Backup 节点自己还活看,当主 Master 节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master 节点的心跳了,于是调用自身的接管程序,接管主 Master 节点的 IP 资源及服务。而当主 Master 节点恢复时,备 Backup 节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。
那么,什么是VRRP呢?
VRRP ,全 称 Virtual Router Redundancy Protocol ,中文名为虚拟路由冗余协议 ,VRRP的出现就是为了解决静态踣甶的单点故障问题,VRRP是通过一种竞选机制来将路由的任务交给某台VRRP路由器的。
1.4 keepalived原理
如上图,keepalived主要是模块是VRRP Stack和Cheackers,实现HA集群中失败切换(Failover)功能。
Keepalived通过VRRP功能能再结合LVS负载均 衡软件即可部署一个高性能的负载均衡集群系统。Cheackers主要实现可 实现对服务器运行状态检测和故障隔离。,其中ipvs和realserver健康状态检 查通过配置文件配置就可以实现,而其他服务高可用则需要通过自己编写脚本,然后配置keepalived调用来实现。
Keepalived运行有3个守护进程。父进程主要负责读取配置文件初始化 、监控2个子进程等;然后两个子进程,一个负责VRRP,另一个负责 Cheackers健康检查。其中父进程监控模块为WacthDog,工作实现:每个子进程打开一个接受unix域套接字,父进程连接到那些unix域套接字并向子 进程发送周期性(5s)hello包。
上图是Keepalived的功能体系结构,大致分两层:用户空间(user space) 和内核空间(kernel space)。 内核空间:主要包括IPVS(IP虚拟服务器,用于实现网络服务的负载均衡) 和NETLINK(提供高级路由及其他相关的网络功能)两个部份。
VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议) 可以认为是实现路由器高可用的协议,简单的说,当一个路由器故障时可以 由另一个备份路由器继续提供相同的服务。 VRRP根据优先级来确定虚拟路由器中每台路由器的角色(Master路由 器或Backup路由器)。VRRP优先级的取值范围为0到255(数值越大表明 优先级越高),可配置的范围是1到254,优先级0为系统保留给路由器放弃 Master位置时候使用,255则是系统保留给IP地址拥有者使用。优先级越高 ,则越有可能成为Master路由器。当两台优先级相同的路由器同时竞争 Master时,比较接口IP地址大小。接口地址大者当选为Master。
VRRP用 IP多播的方式(默认多播地址(224.0_0.18))实现高可用对之间通信。
工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的开源。备节点可以有多个,通过优先级竞选,但一般 Keepalived系统运维工作中都是一对。
VRRP使用了加密协议加密数据,但Keepalived官方目前还是推荐用明文的方式配置认证类型和密码。
Keepalived高可用是通过 VRRP 进行通信的, VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。
在 Keepalived 服务之间,只有作为主的服务器会一直发送 VRRP 广播包,告诉备它还活着,此时备不会枪占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快可以小于1秒
Keepalived的应用场景
在网络层、数据链路层,运行着4个重要的协议:互联网协议IP、互联网控制报文协议 ICMP、地址转换协议ARP以及反向地址转换协议RARP。Keepalived在网络层采用的最常见的工作方式是通过ICMP协议向服务器集群中的那个节点发送一个ICMP数据包(类 似于ping实现的功能),如果某个节点没有返回响应数据包,那么认为此节点发生了故 障,Keepalived将报告次节点失效,并从服务器集群中剔除故障节点。 在传输层,提供了两个主要的协议:传输控制协议TCP和用户数据协议UDP。传输控制 协议TCP可以提供可靠的数据传输服务、Ip地址和端口代表TCP的一个连接端。要获得 TCP服务,需要在发送机的一个端口上和接收机的一个端口上建立连接,而Keepalived 在传输层就是利用TCP协议的端口连接和扫描技术来判断集群点是否正常的。比如,对于常见的WEB服务默认的80端口、SSH服务默认的22端口等,Keepalived一旦在传输 层探测到这些端口没有响应数据返回,就认为这些端口发生异常,然后强制将此端口对应得节点从服务器集群组中移除。 在应用层,可运行FTP、TELNET、HTTP、DNS等各种不同类型的高层协议, Keepalived的运行方式也更加全面化和复杂化,用户可以通过自定义Keepalived的工作方式;例如:用户可以通过编写程序来运行keepalived。而keepalived将根据用户的设 定检测各种程序或服务是否运行正常,如果Keepalived的检测结果与用户设定不一致时 ,Keepalived将把对应的服务从服务器中移除。
2. keepalived实现nginx负载均衡机高可用
环境说明:
系统信息 | 主机名 | IP |
---|---|---|
rhel7.4 | master | 192.168.116.145 |
rhel7.4 | slave | 192.168.116.181 |
本次高可用虚拟IP(VIP)地址暂定为 192.168.116.250
2.1 主备安装
主:
//永久关闭firewall和selinex
[root@yeqixian ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@yeqixian ~]# systemctl stop firewalld
[root@yeqixian ~]# vi /etc/selinux/config
SELINUX=disabled
[root@yeqixian ~]# reboot
//配置yum源
[root@yeqixian ~]# cd /etc/yum.repos.d/
[root@yeqixian yum.repos.d]# ls
CentOS-Base.repo CentOS-Media.repo
CentOS-CR.repo CentOS-Sources.repo
CentOS-Debuginfo.repo CentOS-Vault.repo
CentOS-fasttrack.repo
[root@yeqixian yum.repos.d]# mv CentO