文章目录
一、KeepAlived
背景 :我们之前都是一个调度器来调度多台web后端服务器,但是调度器也有不能工作的时候,若调度机坏了,所有的web服务器都不能访问,这就要求 调度器也要备份。因此就引出了高可用的集群KeepAlived,也就是有多个调度器(有主有备),利用keepalived保证web服务通过正常的调度器工作。所有调度器同时宕机的可能性是很小的。
目的 : 保证当个别节点宕机时,整个网络可以不间断地运行
1、KeepAlived的定义
keepalived是 集群管理中保证集群高可用的一个服务软件(防止单点故障),它能够保证当个别节点宕机时,整个网络可以不间断地运行,所以,Keepalived一方面具有 配置管理LVS 的功能,同时还具有 对LVS下的节点进行健康检查 的功能,另一方面也可 实现系统网络服务的高可用。
- 高可用(High Avalilability,HA),其实两种不同的含义:广义上来讲,是指整个系统的高可用性,狭义上来讲就是主机的冗余和接管。
- Keepalived起初是为LVS设计的,由于Keepalived可以实现对集群节点的状态检测,而IPVS可以实现负载均衡功能。 Keepalived借助于第三方模块IPVS就可以很方便的搭建一套负载均衡系统。 误区:由于Keepalived可以和IPVS一起工作,所以普遍认为Keepalived是一个负载均衡软件,这种理解是错误的。
2、KeepAlived的工作原理
keepalived是以VRRP协议为基础实现的
- VRRP(Virtual Router Redundancy Protocol),即虚拟路由冗余协议。VRRP是一种 主备模式 的协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个虚拟路由器组,这个组里面有 一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到VRRP包时就认为master宕掉了,这时就会根据VRRP的优先级来选举一个backup当master。通过VRRP可以在网络发生故障时透明的进行设备切换而不影响主机之间的数据通信,可保证路由器的高可用。
- 在一个虚拟的路由器中,只有处于Master角色的路由器会一直发送VRRP数据包,处于BACKUP角色的路由器只会接受Master角色发送过来的报文信息。
3、Keepalived高可用故障切换转移原理
在 Keepalived服务正常工作时,主 Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活看,当主 Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的 IP资源及服务。当主 Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。
4、Keepalived运行机制
- Keepalived工作在TCP/IP参考模型的三层:网络层,四层:传输层,五层:应用层。
(1)网络层
在网络层的四个协议(互联网络IP协议,互联网络可控制报文协议ICMP,地址转换协议ARP,反向地址转换协议RARP)。Keepalived在网络层采用最常见的工作方式是 通过ICMP协议向服务器集群中的每一个节点发送一个ICMP的数据包,类似于ping的功能。 如果某个节点没有返回响应数据包,那么认为该节点发生了故障,Keepalived将报告这个节点失效,并从服务器集群中的节点剔除。
(2)传输层
提供了两个主要的协议:传输控制协议TCP和用户数据协议UDP。传输控制协议TCP可以提供可靠的数据输出服务,IP地址和端口代表TCP的一个连接端,要获得TCP服务,需要在发送机的一个端口和接收机的一个端口上建立连接。,而Keepalived在传输层利用了TCP协议的端口连接和扫描技术来判断集群节点是否正常,比如对web服务器常见的80端口,keepalived一旦在传输层探测到这些端口信号没有数据响应和数据返回,就认为这些端口发生异常,然后强制这些端口所对应的节点从服务器集群中剔除掉。
(3)应用层
可以运行FTP,TELNEL,SMTP,DNS等各种不同类型的高层协议,Keepalived的运行方式也更加全面化和复杂化。用户可以通过自定义Keepalived工作方式,例如可以通过编写程序或者编写脚本来运行Keepalived,而Keepalived将根据用户设定的参数来检测各种程序或者服务是否运行正常,当Keepalived的检测结果和用户设定的不一致时,Keepalived将把对应的服务器从服务器集群中剔除。
5、面试中Keepalived的工作原理的文字表述
Keepalived高可用对之间是通过VRRP通信的,因此,我们从VRRP开始了解起:
1) VRRP,全称 Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议,VRRP的出现是为了解决静态路由的单点故障。
2) VRRP是通过一种竟选协议机制来将路由任务交给某台 VRRP路由器的。
3) VRRP用 IP多播的方式(默认多播地址(224.0_0.18))实现高可用对之间通信。
4) 工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的开源。备节点可以有多个,通过优先级竞选,但一般 Keepalived系统运维工作中都是一对。
5) VRRP使用了加密协议加密数据,但Keepalived官方目前还是推荐用明文的方式配置认证类型和密码。
介绍完 VRRP,接下来我再介绍一下 Keepalived服务的工作原理:
1)Keepalived高可用对之间是通过 VRRP进行通信的, VRRP是遑过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。
2)在 Keepalived服务对之间,只有作为主的服务器会一直发送 VRRP广播包,告诉备它还活着,此时备不会枪占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快可以小于1秒。
二、 LVS+KeepAlived+Httpd
实验环境:
开一台虚拟机 server4(ip:172.25.7.4),用来做高可用,配置好yum源。
在 主:server1 (ip:172.25.7.1)、备:server4(ip:172.25.7.4),源码编译keepalived (相同步骤)
1、解压安装包 :tar zxf keepalived-2.0.6.tar.gz
2、进入解压目录:keepalived-2.0.6 ,安装依赖性(缺什么装什么)
yum install openssl-devel -y
yum install gcc -y
3、编译 ./configure --prefix=/usr/local/keepalived --with-init=systemd
- . /configure --help:
可以看到 --with-init=(upstart|systemd|SYSV|SUSE|openrc)specify init type,systemd为rhel7版本,SYSV为rhel6版本
核心:Use IPVS Framework 为Yes,编译成功
4、安装 :make && make install
5、进入/usr/local/keepalived目录,设置软链接
cd /usr/local/keepalived/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
6、安装邮件软件: yum install mailx -y 目的:看是否发生报错信息
Master(server1)上,配置keepalived
7、确认ldirectord(监控后端web集群的服务)是 关闭 的,因为keepalived也有健康检查。
8、 删除VIP ip addr del 172.25.7.100/24 dev eth0,因为keepalived会自己加上
9、清除server1上的LVS策略:ipvasdm -C
10、编辑server1(主节点)的keepalived配置文件 :vim /usr/local/keepalived/etc/keepalived/keepalived.conf
# 全局配置
global_defs {
notification_email {
root@localhost
##节点宕机给本机发送邮件-->本机的root用户(安装mail软件,看是否发送邮件)
}
notification_email_from keepalived@localhost
##发送人名称
smtp_server 127.0.0.1
##发送服务器(本机)
smtp_connect_timeout 30
##指定smtp连接超时时间
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
##运行keepalived机器的一个标识!
#vrrp_strict
##注释掉,不然会有问题
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
##主节点(MASTER )
interface eth0
##说明:主和备用的必须一致
virtual_router_id 58
##(51+7)优先级,越大越优先启动
priority 100
##说明:备用的必须小于100
advert_int 1
##检查间隔
authentication {
auth_type PASS
##认证方式(密码认证)
auth_pass 1111
##认证的密码
}
virtual_ipaddress {
172.25.7.100
##虚拟VIP-->不用手动创建(可以创建多个,对应不同的服务)
}
}
# 虚拟服务的相关配置-->理解成IPVS表规则
virtual_server 172.25.7.100 80 {
delay_loop 5
##当rs报错时,尝试多少次之后才邮件告知
lb_algo rr
##轮询 ,负载均衡的算法(10种)
lb_kind DR
##DR模式,默认时NAT模式
#persistence_timeout 50
##注释(保持连接的时间)
protocol TCP
real_server 172.25.7.2 80 {
TCP_CHECK {
weight 1
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 172.25.7.3 80 {
TCP_CHECK {
weight 1
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
11、 将server1(主节点)编辑好的keepalived配置文件keepalived.conf 发送到server4(备节点)。
==编辑备节点(server4)的配置文件 ==
##修改这两个选项
state BACKUP
priority 50
12、配置后端服务器
在server2上:
ip addr add 172.25.7.100/24 dev eth0
arptables -A INPUT -d 172.25.7.100 -j DROP
arptables -A OUTPUT -s 172.25.7.100 -j mangle --mangle-ip-s 172.25.7.2
在server3上:
ip addr add 172.25.7.100/24 dev eth0
arptables -A INPUT -d 172.25.7.100 -j DROP
arptables -A OUTPUT -s 172.25.7.100 -j mangle --mangle-ip-s 172.25.7.3
13、在 server1和server4 上,开启keepalived服务 systemctl start keepalived
14、开启服务后,在server4(备服务器BACKUP)上,自动添加了策略:ipvsadm -l 。
开启服务后,在server1(主服务器MASTER)上,自动添加了策略:ipvsadm -l 和VIP。
- 虚拟IP只匹配到主服务器上(谁是就匹配到谁)
测试
模拟后端web服务器server2宕机
此时,客户端访问的资源都来自于后端web服务器server3
在server1LVS调度机上,可以看到将宕机的server2踢出,只保留了server3
且server1上,会收到报错的提示邮件
模拟LVS调度机MASTER:server1宕机,
此时,server4(BACKUP)随时监控MASTER(server1),一旦发现宕机,立马接替server1的所有资源和VIP。
三、LVS+KeepAlived+Vsftpd
环境 :
主机名 | ip | 服务名 |
---|---|---|
server1 | 172.25.70.1 | MASTER |
server2 | 172.25.70.2 | 后端服务器1 |
server3 | 172.25.70.3 | 后端服务器2 |
server4 | 172.25.70.4 | BACKUP |
1、在 MASTER(server1)和BACKUP(server4) 上,进行以下:
1)解压及源码安装
tar zxf keepalived-2.0.6.tar.gz
cd keepalived-2.0.6
# 安装依赖性软件
yum install gcc -y
./configure --prefix=/usr/local/keepalived --with-init=systemd
yum install openssl-devel -y
./configure --prefix=/usr/local/keepalived --with-init=systemd
## 核心:Use IPVS Framework为Yes
make && make install
2)设置软链接
cd /usr/local/keepalived/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
3)安装邮件软件
yum install mailx -y
4)安装LVS策略工具
yum install ipvsadm -y
2、配置MASTER的keepalived服务
1)IPVS规则的清理 ipvsadm -C
2)配置文件参数
vim /usr/local/keepalived/etc/keepalived/keepalived.conf
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 172.25.70.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.70.200
}
}
virtual_server 172.25.70.200 21 {
delay_loop 6
lb_algo rr
lb_kind DR
#persistence_timeout 50
protocol TCP
real_server 172.25.70.2 21 {
TCP_CHECK{
weight 1
connect_port 21
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 172.25.70.3 21 {
TCP_CHECK{
weight 1
connect_port 21
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
3、配置BACKUP的keepalived服务,更改2个参数:
4、在 server2和server3 上,配置Vsftpd服务并开启服务:
1)添加虚拟ip
ip addr add 172.25.70.200/32 dev eth0
2)解决不论询问题
yum install -y arptables
arptables -A INPUT -d 172.25.70.200 -j DROP
arptables -A OUTPUT -s 172.25.70.200 -j mangle --mangle-ip-s 172.25.70.2
5)配置后端服务
yum install vsftpd -y
systemctl start vsftpd
6)开启keepalived
systemctl start arptables
server2中:
server3中:
开启服务后,自动添加VIP到MASTER
若是MASTER宕机,则BACKUP接替所有MASTER的资源和VIP。
客户端测试:
将 persistence_timeout 50参数注释 ,实验现象是:客户端无法连接,但是前端控制器可以统计次数,是轮换的!