背景:我们之前都是一个调度器来调度多台web后端服务器,但是调度器也有不能工作的时候,若调度机坏了,所有的web服务器都不能访问,这就要求 调度器也要备份。因此就引出了高可用的集群KeepAlived,也就是有多个调度器(有主有备),利用keepalived保证web服务通过正常的调度器工作。所有调度器同时宕机的可能性是很小的。
目的 : 保证当个别节点宕机时,整个网络可以不间断地运行
1、KeepAlived的定义
keepalived是 集群管理中保证集群高可用的一个服务软件(防止单点故障),它能够保证当个别节点宕机时,整个网络可以不间断地运行,所以,Keepalived一方面具有 配置管理LVS 的功能,同时还具有 对LVS下的节点进行健康检查 的功能,另一方面也可 实现系统网络服务的高可用。
高可用:两台业务系统启动着相同的服务,如果有一台故障,另一台自动接管,我们将将这个称之为高可用。
Keepalived起初是为LVS设计的,由于Keepalived可以实现对集群节点的状态检测,而IPVS可以实现负载均衡功能。 Keepalived借助于第三方模块IPVS就可以很方便的搭建一套负载均衡系统。 误区:由于Keepalived可以和IPVS一起工作,所以普遍认为Keepalived是一个负载均衡软件,这种理解是错误的。
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后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服务的工作原理:
Keepalived高可用对之间是通过 VRRP进行通信的, VRRP是遑过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。
在 Keepalived服务对之间,只有作为主的服务器会一直发送 VRRP广播包,告诉备它还活着,此时备不会枪占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快可以小于1秒。
此次实验搭建的是负载均衡LVS的DR模式调度后端服务器
配置实验环境:
准备三台虚拟机和一台真机
真机做客户端:ip为172.25.76.250
虚拟机server1做keepalived主调度器,ip为172.25.76.1
虚拟机server2做keepalived备调度器,ip为172.25.76.4
虚拟机server3做web1后端服务器,ip为172.25.76.2
虚拟机server4做web2后端服务器,ip为172.25.76.3
搭建LVS+KeepAlived+Httpd
在keepalived主调度器(server1)上:
步骤一:网上下载keepalived服务压缩包,并解压
tar zxf keepalived-2.0.6.tar.gz
步骤二:下载源码编译所需软件及解决依赖项
一般是编译过程中报错提醒需要安装某些依赖项,然后安装,直到编译不报错。
yum install openssl-devel -y
yum install gcc -y
yum install libnl-devel -y
./configure --prefix=/usr/local/keepalived --with-init=systemd
./configure --help ##可以看到–with-init=(upstart|systemd|SYSV|SUSE|openrc)specify init type,systemd为rhel7版本
–with-init=SYSV 为rhel6版本
步骤四:源码安装
make && make install
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/
yum install mailx -y
global_defs {
notification_email {
root@localhost ##节点宕机给谁发送邮件
}
notification_email_from keepalived@localhost ##发送人名称
smtp_server 127.0.0.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 ##做实验时候,让学生修改此ID,每个人的都不能一样,不然会出问题
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.76.100 ##VIP
}
}
virtual_server 172.25.76.100 80 {
delay_loop 3 ##当rs报错时,尝试多少次之后才邮件告知
lb_algo rr
lb_kind DR ##DR模式
#persistence_timeout 50
protocol TCP
real_server 172.25.76.2 80 {
TCP_CHECK {
weight 1
connect_timeout 3
connect_port 80
}
}
real_server 172.25.76.3 80 {
TCP_CHECK {
weight 1
connect_timeout 3
connect_port 80
}
}
}
systemctl start keepalived
systemctl status keepalived
步骤九:安装ipvsadm服务,并开启
yum install ipvsadm.x86_64 -y
systemctl start ipvsadm.service #开启服务,正确
systemctl status ipvsadm.service #再次查看服务的状态
步骤十:此后时可以查看到eth0网卡上自动生成vip,及自动生成ipvsadm策略
在keepalived备调度器(server4)上:
步骤一:网上下载keepalived服务压缩包,并解压
tar zxf keepalived-2.0.6.tar.gz
步骤二:下载源码编译所需软件及解决依赖项
一般是编译过程中报错提醒需要安装某些依赖项,然后安装,直到编译不报错。
yum install openssl-devel -y
yum install gcc -y
yum install libnl-devel -y
./configure --prefix=/usr/local/keepalived --with-init=systemd
./configure --help ##可以看到–with-init=(upstart|systemd|SYSV|SUSE|openrc)specify init type,systemd为rhel7版本
–with-init=SYSV 为rhel6版本
步骤四:源码安装
make && make install
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/
yum install mailx -y
步骤七:从server1主调度器上发送keepalived配置文件给serer4备调度器
global_defs {
notification_email {
root@localhost ##节点宕机给谁发送邮件
}
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 BACKUP ##备节点
interface eth0 ##说明:主和备用的必须一致
virtual_router_id 51 ##做实验时候,让学生修改此ID,每个人的都不能一样,不然会出问题
priority 50 ##优先级:备用的必须小于主调度器优先级100
advert_int 1 ##检查间隔
authentication {
auth_type PASS ##认证方式(密码认证)
auth_pass 1111 ##认证的密码
}
virtual_ipaddress {
172.25.76.100 ##VIP
##虚拟VIP-->不用手动创建(可以创建多个,对应不同的服务)
}
}
# 虚拟服务的相关配置-->理解成IPVS表规则
virtual_server 172.25.76.100 80 {
delay_loop 3 ##当rs报错时,尝试多少次之后才邮件告知
lb_algo rr ##轮询 ,负载均衡的算法
lb_kind DR ##DR模式
#persistence_timeout 50 ##注释(保持连接的时间)
protocol TCP
real_server 172.25.76.2 80 {
TCP_CHECK {
weight 1
connect_timeout 3
connect_port 80
}
}
real_server 172.25.76.3 80 {
TCP_CHECK {
weight 1
connect_timeout 3
connect_port 80
}
}
}
systemctl start keepalived
systemctl status keepalived
yum install ipvsadm.x86_64 -y
systemctl start ipvsadm.service #开启服务,正确
systemctl status ipvsadm.service #再次查看服务的状态
步骤十:此后时可以查看到eth0网卡上自动生成vip,及自动生成ipvsadm策略
在RS服务器(server2)上:
步骤一:下载arptables服务
yum install arptables -y
arptables -nL
arptables -A INPUT -d 172.25.76.100 -j DROP
arptables -A OUT -s 172.25.76.100 -j mangle --mangle-ip-s 172.25.76.2
yum install httpd -y
步骤五:编辑默认发布页面文件
步骤六:在后端服务器1(server2)上面设置用户访问的入口地址
ip addr add 172.25.76.100/24 dev eth0 #临时添加ip,可在配置文件/etc/sysconfig/network-scripts/中永久添加
步骤一:下载arptables服务
yum install arptables -y
arptables -nL
arptables -A INPUT -d 172.25.76.100 -j DROP
arptables -A OUT -s 172.25.76.100 -j mangle --mangle-ip-s 172.25.76.3
yum install httpd -y
步骤五:编辑默认发布页面文件
步骤六:在后端服务器2(server3)上面设置用户访问的入口地址
测试:
客户端正常查询:
server1调度器开启keepalived服务时,eth0网卡上有vip,server2调度器网卡上自动移除vip:
server1调度器keepalived服务down掉时,server2调度器有日志提醒:
RS真实服务器down掉时,会发送邮件提醒:
修改调度器转发给RS后端服务器的端口为21端口,即可将调度服务作用于ftp服务。
实验环境:
与上个实验LVS+KeepAlived+Http环境相同
准备三台虚拟机和一台真机
真机做客户端:ip为172.25.76.250
虚拟机server1做keepalived主MASTER调度器,ip为172.25.76.1
虚拟机server2做keepalived备BACKUP调度器,ip为172.25.76.4
虚拟机server3做web1后端服务器,ip为172.25.76.2
虚拟机server4做web2后端服务器,ip为172.25.76.3
搭建LVS+KeepAlived+Vsftp
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 etc/keepalived/keepalived.conf
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 172.25.76.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.76.100
}
}
virtual_server 172.25.76.100 21 { #修改虚拟调度端口为21
delay_loop 6
lb_algo rr
lb_kind DR
#persistence_timeout 50
protocol TCP
real_server 172.25.76.2 21 {
TCP_CHECK{
weight 1
connect_port 21
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 172.25.76.3 21 {
TCP_CHECK{
weight 1
connect_port 21
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
2、配置BACKUP的keepalived服务
1)IPVS规则的清理 ipvsadm -C
2)配置文件参数
vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 172.25.76.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 BACKUP
interface eth0
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.76.100
}
}
virtual_server 172.25.76.100 21 { #修改虚拟调度端口为21
delay_loop 6
lb_algo rr
lb_kind DR
#persistence_timeout 50
protocol TCP
real_server 172.25.76.2 21 {
TCP_CHECK{
weight 1
connect_port 21
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 172.25.76.3 21 {
TCP_CHECK{
weight 1
connect_port 21
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
在RS服务器(server2)上:
ip addr add 172.25.76.100/24 dev eth0 #临时添加ip,可在配置文件/etc/sysconfig/network-scripts/中永久添加
yum install arptables -y
arptables -nL
#步骤三:设置规则
arptables -A INPUT -d 172.25.76.100 -j DROP
arptables -A OUT -s 172.25.76.100 -j mangle --mangle-ip-s 172.25.76.2
yum install vsftpd -y
systemctl start vsftpd
systemctl start arptables
在RS服务器(server3)上:
ip addr add 172.25.76.100/24 dev eth0 #临时添加ip,可在配置文件/etc/sysconfig/network-scripts/中永久添加
yum install arptables -y
arptables -nL
#步骤三:设置规则
arptables -A INPUT -d 172.25.76.100 -j DROP
arptables -A OUT -s 172.25.76.100 -j mangle --mangle-ip-s 172.25.76.3
yum install vsftpd -y
systemctl start vsftpd
systemctl start arptables