接上一篇博客,LVS的健康检查。
上一篇实现了故障排除,就是后端服务器的险情排查了
如果LVS调度器宕机了,整个集群可就坏了
此时出现了keepalived高可用!!!!
可以添加lvs的备用机,如何监控呢?
引入:我们今天要讲解的keepalived
一、关于keepalived
1、keepalived的基本概念
Keepalived是Linux下的一个轻量级别的高可用解决方案
高可用(High Avalilability,HA),其实两种不同的含义:广义上来讲,是指整个系统的高可用性,狭义上来讲就是主机的
冗余和接管。
具体步骤:主服务器和备份机上都运行High Availability监控程序,主机传送给备份机诸如“I am alive”这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并继续提供服务;当备份管理器又 从主管理器收到“I am alive”这样的信息时,它就释放服务IP地址,这样的主管理器就开始再次进行集群管理的工作了。为在主服务器失效的情况下系统能正常工作,在主、备份机之间实现负载集群系统配置信息的同步与备份,保持二者系统的基本一致。
Keepalived起初是为LVS设计的,专门用来监控集群系统中的各个服务的节点的状态
它根据TCP/IP参考模型的第三,第四,第五层交换机制检测每个服务器的节点状态
如果某个服务器出现异常,或者工作出现故障,keepalived将检测到,并将出现故障的服务器节点从集群系统中剔除
这些工作都只自动完成的,不需要人为干预,需要人工完成的只是修复出现故障的服务节点
也就是可以使用keepalived可以实现调度器的转换
后来keepalived又加入了VRRP的功能
VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议出现的目的是
解决静态路由出现单点故障的问题,通过VRRP可以实现网络不间断稳定运行
因此keepalived的功能:具有服务器状态检测和故障隔离的功能,另外一方面也具有HA cluster功能
2、什么是VRRP协议?
在现实的网络环境中,主机之间的通信都是通过配置静态路由或者默认网关来完成的
而主机之间的路由器一旦发生故障,通信就会失败,因此在这种通信模式中,路由器就成了一个单点瓶颈
为了解决这个问题就引入了VRRP协议
它是一种主备模式的协议,通过VRRP可以在网络发生故障时透明的进行设备切换而不影响主机之间的数据通信
其中涉及两个概念:物理路由器和虚拟路由器
3、VRRP的工作原理
VRRP可以将两台或者多台物理路由器虚拟成一个虚拟路由,这个虚拟路由通过虚拟IP(一个或者多个)对外提供服务
而在虚拟路由器内部十多个物理路由器协同工作,同一时间只有一台物理路由器对外提供服务
这台物理路由设备称为主备路由器,他拥有对外虚拟IP,提供各种网络功能
而其它的物理路由器不拥有对外虚拟的IP,也不提供对外网络功能,仅仅接收master的VRRP状态通高信息
这些路由器统被称为BACKUP的角色,当主路由失败时,处于BACKUP角色的备份路由器将重新进行选举
产生一个新的主路由器进入MASTER角色,继续对外提供服务,整个切换对于用户来说是透明的
每个虚拟路由器都有一个唯一的标识号,成为VRID,一个VRID与一组IP地址构成一个虚拟路由器
在VRRP协议中,所有的报文都是通过IP多播放式发送的
而在一个虚拟的路由器中,只有处于Master角色的路由器会一直发送VRRP数据包
处于BACKUP角色的路由器只会接受Master角色发送过来的报文信息
用来监控Master的运行状态,一般不会发生BACKUP抢占的情况
除非它的优先级更高,而当Master不可用时,BACKUP也就无法受到Master发过来的信息
于是就认定Master出现故障,接着多台BACKUP就会进行选举,优先级最高的BACKUP将成为新的Master
这种选举角色的切换非常快。因而保证了服务的持续可用性
4、keepalived对服务器运行状态和故障隔离的工作原理
keepalived作为一个高性能集群软件,它能实现对集群中服务器运行状态的监控以及故障隔离
下面介绍对服务器运行状态和故障隔离的工作原理
Keepalived工作在TCP/IP参考模型的三层,四层,五层,也就是分别为:网络层,传输层,应用层
根据TCP,IP参数模型隔层所能实现的功能,Keepalived运行机制如下
(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将把对应的服务器从服务器集群中剔除
Keepalived起初是为LVS设计的,由于Keepalived可以实现对集群节点的状态检测,而IPVS可以实现负载均衡功能
因此,Keepalived借助于第三方模块IPVS就可以很方便的搭建一套负载均衡系统
在这里有个误区就是由于Keepalived可以和IPVS一起工作,所以普遍就认为Keepalived是一个负载均衡软件,这种理解是错误的
二、实验
注意:做实验之前一定要事先关闭selinux和firewalld !
https://www.keepalived.org/download.html 进行下载相关的安装包
主机信息 主机的功能(服务)
server1(172.25.58.1) master(主调度器)
server4(172.25.58.4) backup(备调度器)
server2(172.25.58.2) 真正的web服务器1
server3(172.25.58.3) 真正的web服务器2
真机172.25.58.250 客户端,用来测试
1、源码编译安装:
说明:主备的配置一样,即server1和新开的server4是一样的配置。
#(1)说明:第三方的包-->源码安装
# 最好进入一个目录!
tar -zxf keepalived-2.0.6.tar.gz
cd keepalived-2.0.6
#(2)安装依赖的软件
yum install gcc openssl-devel -y
#(3)编译-->6|7的区别
./configure --prefix=/usr/local/keepalived --with-init=systemd
#核心:Use IPVS Framework是否是Yes
#(4)安装
make && make install
#(5)进入对应的目录-->设置软链接
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 -y mail #看是否发生报错信息!
# 说明:用的也是高可用的包!
2、 对配置文件进行配置
安装之前做一些清理工作
(1)、先删除调度节点(server1,server4)上的vip,因为keepalived会自己加上
ip addr del 172.25.58.100/24 dev eth0
(2)、配置文件参数的说明!
keepalived只有一个配置文件keepalived.conf,安装后可以通过"man keepalived.conf"来查看说明,里面主要包括以下几个配置区域,分别是global_defs、vrrp_script、vrrp_rsync_group、vrrp_instance 、virtual_server和 real_server等:
1、global_defs区域为全局配置,主要配置realserver发生故障时的通知对象和组播地址等;
2、vrrp_script是用来配置本机服务(如nginx)健康状态检查脚本的,当检查的服务发生故障时,可以配置降低优先级,配置调用则在vrrp_instance中的track_script段;
3、vrrp_instance用来定义一个VRRP实例,多主模型可以定义多个VRRP实例;其中virtual_ipaddress区域配置对外提供服务的VIP,而本机故障通知则需要在vrrp_instance区域的notify_fault配置脚本中实现,如果vrrp_script检查服务引起的MASTER切换为BACKUP,则在notify_backup脚本定义通知,同时可以在脚本重启或停止该服务(注意,如果重启服务正常,优先级会相应增加,在抢占模式下,会重新变为MASTER);
4、virtual_server区域则主要配置VIP和ipvs规则的,virtual_server中的real_server区域配置realserver康健状态检查的;
5、vrrp_rsync_group用来定义vrrp_intance组,两个vrrp_instance同属于一个vrrp_rsync_group,那么其中一个vrrp_instance发生故障切换时,另一个vrrp_instance也会跟着切换(即使这个instance没有发生故障);这在LVS NAT中VIP、DIP各一个实例用
/usr/local/keepalived/etc/keepalived/keepalived.conf
这就是刚开始的安装路径,里边仅有的一个配置文件。
MASTER进行配置:
全局配置
global_defs {
notification_email {
#(1)节点宕机了给谁发送邮件!-->本机的root用户(安装mail软件,看是否发送邮件)
root@localhost
}
#(2)发送人的名称
notification_email_from keeplived@loclhost
#(3)发送的服务器-->本机
smtp_server 172.0.0.1
#(4)指定smtp连接超时时间
smtp_connect_timeout 30
router_id LVS_DEVEL
#(5)运行keepalived机器的一个标识!
vrrp_skip_check_adv_addr
#(6)必须注释
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
#(1)主节点的标识
state MASTER #BACKUP(备用的标识)
interface eth0
#(2)说明:主和备用的必须一致
virtual_router_id 51
#(3)优先级,越大越优先启动
priority 100 #说明:备用的必须小于100
advert_int 1 # 检查间隔
authentication {
auth_type PASS #认证方式(密码认证)
auth_pass 1111 #认证的密码
}
#(4)虚拟VIP-->不用手动创建(可以创建多个,对应不同的服务)
virtual_ipaddress {
172.25.2.100
}
}
# 虚拟服务的相关配置-->理解成IPVS表规则
virtual_server 172.25.2.100 80 {
delay_loop 6 # 当rs报错时候,尝试多少次之后才会发送邮件告知!
lb_algo rr # 负载均衡的算法(10种)
lb_kind DR # 默认时NAT模式(这里选择DR)
#persistence_timeout 50 #注释(保持连接的时间)
protocol TCP
real_server 172.25.2.201 80 {
TCP_CHECK {
connect_port 80
weight 1
connect_timeout 3
}
}
real_server 172.25.2.202 80 {
TCP_CHECK {
connect_port 80
weight 1
connect_timeout 3
}
}
}
对BACK_UP进行配置:
备用只修改state(类型)和proprity(优先级)
3、后端服务器的配置
ip addr add 172.25.58.100/24 dev eth0
arptables -A INPUT -d 172.25.58.100 -j DROP
arptables -A OUTPUT -s 172.25.58.100 -j mangle --mangle-ip-s 172.25.58.1
注意:要配置VIP,因为后端服务器和前端控制器是想对独立的
重启之后的现象-->主
5)测试
在物理机上访问:curl 172.25.0.100
可以看到轮询
在server1上查看日志:
vim /var/log/messages
Dec 8 16:44:15 server1 Keepalived_vrrp[7656]: (VI_1) Entering MASTER STATE
Dec 8 16:44:15 server1 Keepalived_vrrp[7656]: (VI_1) setting VIPs.
在server4上查看日志:
vim /var/log/messages
Dec 8 16:50:26 server4 Keepalived_vrrp[1090]: (VI_1) removing VIPs.
Dec 8 16:50:26 server4 Keepalived_vrrp[1090]: (VI_1) Entering BACKUP STATE (init)
关闭一台rs的http服务,再次在物理机上访问(可能稍有延迟),也不会报错
ipvsadm策略里也会把down掉的那台rs自动剔除
#vim /var/log/messages 可以看到,server2在down掉后,调度器会检测三次,三次都失败就会剔除
#也就是配置文件中delay_loop 3的作用
mail可以看到会有邮件告知哪台的down了 #(没有mail命令的话,yum install -y mailx)
#测试VIP漂移
down掉server(主节点)的keepalived服务
可以看到VIP会自动去掉,然后会漂移到server4上
服务正常访问,看日志可以看到VIP和主备切换的信息
server1再次开启keepalived,会自动接管VIP,并进入MASTER状态
补充:vip/32
D类IP地址第一个字节以“1110”开始,它是一个专门保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。地址范围224.0.0.1-239.255.255.254
实现多点广播
若要使用多点广播,则需要让一个数据报标有一组目标主机地址,当数据报发出后,整个组的所有所有主机都能收到该数据报。IP多点广播(或多点发送)实现了将单一信息发送到多个接受者的广播,其思想是设置一组特殊网络地址作为多点广播地址,每一个多点广播地址都被看做一个组,当客户端需要发送、接收广播信息时,加入到改组即可组播地址:称为组播组的一组主机所共享的地址。组播地址的范围在224.0.0.0--- 239.255.255.255之间(都为D类地址 1110开头
如果现在有三台机器A、B、C,三台机器IP地址都不一样,A\B为server监听广播消息,C为客户端发送广播消息,个人理解是将A、B两台机器的MulticastSocket对象绑定在组播地址中的其中一个,然后C客户端发送消息的组播地址一致,则A、B就能够接收C发送的消息