前言
目前互联网上主流高可用方案软件有keepalived
、heartbeat
,其中heartbeat
是比较早期用来实现高可用软件的,而keepalived
是目前轻量级,并且管理方便、易使用的高可用解决方案。
1.1 Keeplived高可用的功能
Keepalived
是一个类似于工作在layer3, 4 & 7交换机制的软件,Keepalived
软件有两种功能,分别是健康检查、VRRP冗余协议,keepalived
是模块化设计,不同模块负责不同的功能。
1.2 Keeplived常见模块
Core
:是keepalived的核心,它负责主进程的启动和维护,全局配置文件的加载解析等;
check
:负责keepalived健康检查,包括了各种健康检查方式,以及对应的配置的解析包括LVS的配置解析;
VRRP
:VRRPD子进程,VRRPD子进程就是来实现VRRP协议;
1.3 Keeplived的作用
Keepalived的作用是检测web服务器的状态,如果有一台web服务器、Mysql服务器宕机,或工作出现故障,Keepalived将检测到后,会将有故障的web服务器或者Mysql服务器从系统中移除,当服务器工作正常后Keepalived自动将web、Mysql服务器加入到服务器群中。
这样的好处在于不需要人工的干涉,keepalived会将这些工作自动完成,人工需要做的,只是修复出现故障的WEB或MYSQL服务器。
前面说到在keepalived的功能时说到,Keepalived
是一个类似于工作在layer3, 4 & 7交换机制的软件。
下面说下在3,4,7层的原理
1.4 Keeplived在3,4,7层的实现原理
- 传输层:keepalived使用Layer3的方式工作时,keepalived会定期向服务器群的服务器发送一个ICMP的数据包(如果发现某台服务的IP地址无法ping通时),keepalived便会报告这台服务器失效,并将它从服务器集群中移除。(Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。)
- 网络层:Layer4主要以TCP端口的状态来决定服务器工作正常与否。如WEB服务器的服务端口一般是80,如果keepalived检测到80端口没有启动,则keepalived会将这台服务器从服务器群中移除。
- 应用层:Layer7工作在应用层,keepalived将根据用户设定检测服务器程序的运行是否正常,通过这个方式进行判定,如果与用户的设定不相符,则keepalived会将服务器从服务器群中移除。
keepalived的三个模块中,VRRP的模块是比较重要的,它的全称是Virtual Router Redundancy Protocol
,也就是虚拟路由器冗余协议。一起来看下它的原理。
二. Keepalived VRRP的原理
2.1 VRRP原理一
- VRRP由IETF提出,目的是为了解决局域网中配置默认网关的单点失效问题。
- VRRP广泛应用在边缘网络(用户使用的网络)中,它的设计目标是支持特定情况下IP数据流量失败转移不会引起混乱,允许主机使用单路由器,以及及时在实际第一跳路由器使用失败的情形下仍能够维护路由器间的连通性。
在现实的网络环境中,两台需要通信的主机大多数情况下并没有直接的物理连接。对于这样的情况,它们之间路由怎样选择?主机如何选定到达目的主机的下一跳路由,这个问题通常的解决方法有二种:
使用动态路由协议RIP、OSPF;
在主机上配置静态路由.
然而在主机上配置路态路由是非常不切实际的,因为管理、维护成本以及是否支持等诸多问题。配置静态路由就变得十分流行,但路由器(或者说默认网关default gateway)却经常成为单点,VRRP的目的就是为了解决静态路由单点故障问题。VRRP通过一竞选(election)协议来动态的将路由任务交给LAN中虚拟路由器中的某台VRRP路由器。
2.1 VRRP原理二
- 通过VRRP技术可以将两台物理主机当成路由器,两台物理机主机组成一个虚拟路由集群,Master高的主机产生VIP,该VIP负责转发用户发起的IP包或者负责处理用户的请求,Nginx+Keepalived组合,用户的请求直接访问keepalived VIP地址,然后访问Master相应服务和端口。
- 在VRRP虚拟路由器集群中,由多台物理的路由器组成,但是这多台的物理路由器并不能同时工作,而是由一台称为MASTER路由器负责路由工作,其它的都是BACKUP,MASTER并非一成不变,VRRP会让每个VRRP路由器参与竞选,最终获胜的就是MASTER。
- MASTER拥有一些特权,例如拥有虚拟路由器的IP地址或者成为VIP,拥有特权的MASTER要负责转发发送给网关地址的包和响应ARP请求。
- VRRP通过竞选协议来实现虚拟路由器的功能,所有的协议报文都是通过IP组播(multicast)包(组播地址 224.0.0.18)形式发送的。虚拟路由器由VRID(范围0-255)和一组IP地址组成,对外表现为一个周知的MAC地址。所以在一组虚拟路由器集群中,不管谁是MASTER,对外都是相同的MAC和VIP。客户端主机并不需要因为MASTER的改变而修改自己的路由配置。
- 作为MASTER的VRRP路由器会一直发送VRRP组播包(VRRP Advertisement message),BACKUP不会抢占MASTER,除非它的优先级(Priority)更高。当MASTER不可用时(BACKUP收不到组播包时), 多台BACKUP中优先级最高的这台会抢占为MASTER。这种抢占是非常快速的,以保证服务的连续性。由于安全性考虑VRRP包使用了加密协议进行,基于VRRP技术,可以实现IP地址漂移,是一种容错协议,广泛应用于企业生产环境中。
三. 部署keepalived服务
在部署服务之前还需要将虚拟机恢复至初始化后开始操作
IP | 服务器系统 | 服务 |
---|---|---|
192.168.28.166 | Centos7.9 | Keepalived |
有两种方式安装keepalived服务,一种是通过yum命令安装,另外一种是编译安装keepalived。
两种方式都进行演示。
3.1 编译安装Keeplived服务
3.1.1 在官网上下载压缩包
keepalived官网地址—点击这里
wget -c https://www.keepalived.org/software/keepalived-1.2.0.tar.gz -P /usr/src/
若遇到证书过期的情况,可以加上--no-check-certificate
wget -c https://www.keepalived.org/software/keepalived-1.2.0.tar.gz -P /usr/src/ --no-check-certificate
3.1.2 将压缩包解压
[root@localhost ~]# cd /usr/src/
[root@localhost src]# tar xf keepalived-1.2.0.tar.gz
[root@localhost src]# cd keepalived-1.2.0/
[root@localhost keepalived-1.2.0]# ls
AUTHOR configure COPYING INSTALL keepalived.spec.in README
bin configure.in doc install-sh lib TODO
ChangeLog CONTRIBUTORS genhash keepalived Makefile.in VERSION
接下来需要安装编译时所需要的软件包:gcc gcc-c++ make cmake openssl openssl-devel popt-devel等。
3.1.3 下载所需编译软件包
yum install -y gcc gcc-c++ make cmake openssl openssl-devel popt-devel
下载好之后就可以开始预编译,以及编译安装了
3.1.4 编译并安装
./configure --prefix=/usr/local/keepalived/ --with-kernel_dir=/usr/src/kernels/3.10.0-514.el7.x86_64/
make -j4 && make -j4 install
编译之后可以用echo $?进行判断上一条命令执行是否正确。
3.1.5 复制keepalived文件到对应的目录
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir -p /etc/keepalived
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
3.1.6 启动服务
keepalived
一般情况下WEB服务或者MySQL服务的机器上都需要部署keepalived,作为一个服务器集群可用来做替换,实现高可用的方案;因此还需要在配置文件中添加相关的内容,具体业务具体内容。
3.2 yum安装Keepalived
yum安装的方式就比较快捷且容易
3.2.1 安装keepalived
yum install keepalived.x86_64 -y
3.2.2 修改配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
#全局定义块
global_defs {
notification_email {
#指定keepalived在发生切换时需要发送email到的对象,一行一个;
acassen@firewall.loc
}
#指定发件人
notification_email_from Alexandre.Cassen@firewall.loc
#指定smtp服务器地址
smtp_server 127.0.0.1
#指定smtp连接超时时间
smtp_connect_timeout 30
#运行keepalived机器的名称
router_id LVS_DEVEL
}
#VRRP实例定义块
vrrp_instance VI_1 {
#设置主机状态,MASTER|BACKUP
state MASTER
#对外提供服务的网络接口,要与本地的通信的接口一致
interface ens32
#VRID标记 ,路由ID,可通过tcpdump命令查看
virtual_router_id 51
#优先级,高优先级竞选为master
priority 100
#健康检查间隔,默认1秒
advert_int 5
#设置认证
authentication {
#认证方式
auth_type PASS
#认证密码
auth_pass 1111
}
#设置vip
virtual_ipaddress {
#IP段与本地的路由一致
192.168.28.188
}
}
3.2.3 启动服务
systemctl start keepalived.service
[root@localhost ~]# ps -ef|grep keepalived
root 9318 1 0 17:06 ? 00:00:00 /usr/sbin/keepalived -D
root 9319 9318 0 17:06 ? 00:00:00 /usr/sbin/keepalived -D
root 9320 9318 0 17:06 ? 00:00:00 /usr/sbin/keepalived -D
root 9360 5025 0 17:07 pts/0 00:00:00 grep --color=auto keepalived
生产环境使用Keepalived正常运行,共启动3个进程,一个是父进程,负责监控其子进程,一个是VRRP子进程,另外一个是Checkers子进程。
总结
keepalived的概念会比较多,需要先将其消化并且知道如何部署,下一篇将结合keepalived与nginx一起使用,让keepalived服务能够基于设定的服务实现高可用的方案。如觉得内容还行的,可以点赞支持一下!