一、基本概念
Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。
Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。
所以,Keepalived 一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。
三个重要功能:
管理LVS负载均衡软件
实现LVS集群节点的健康检查中
作为系统网络服务的高可用性(failover)
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路由器的。
二、keepalived实例
1、keepalived高可用服务器(web服务示例)
(1)架构图
(2)环境说明
client:192.168.120.190
web1:192.168.120.191
web2:192.168.120.192
(3)部署步骤
步骤一、安装Keepalived软件(web主机)
# yum install -y keepalived
步骤二、部署Keepalived服务
web1:
# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
admin@test.com.cn //设置报警收件人邮箱
}
notification_email_from ka@localhost //设置发件人
smtp_server 127.0.0.1 //定义邮件服务器
smtp_connect_timeout 30
router_id web1 //设置路由ID号(实验需要修改)
}
vrrp_instance VI_1 {
state MASTER //主服务器为MASTER(实验需要修改)
interface eth0 //定义网络接口(实验需要修改)
virtual_router_id 50 //主辅VRID号必须一致(实验需要修改)
priority 100 //服务器优先级,优先级高优先获取VIP(实验需要修改)
advert_int 1
authentication {
auth_type pass
auth_pass forlvs //主辅服务器密码必须一致
}
virtual_ipaddress { 192.168.120.10 } //谁是主服务器谁获得该VIP(实验需要修改)
}
web2:
# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
admin@test.com.cn //设置报警收件人邮箱
}
notification_email_from ka@localhost //设置发件人
smtp_server 127.0.0.1 //定义邮件服务器
smtp_connect_timeout 30
router_id web2 //设置路由ID号(实验需要修改)
}
vrrp_instance VI_1 {
state BACKUP //从服务器为BACKUP(实验需要修改)
interface eth0 //定义网络接口(实验需要修改)
virtual_router_id 50 //主辅VRID号必须一致(实验需要修改)
priority 50 //服务器优先级(实验需要修改)
advert_int 1
authentication {
auth_type pass
auth_pass forlvs //主辅服务器密码必须一致(实验需要修改)
}
virtual_ipaddress { 192.168.120.10 } //谁是主服务器谁配置VIP(实验需要修改)
}
步骤三、启动服务(web主机)
# systemctl start keepalived
步骤四、配置防火墙和SELinux
启动keepalived会自动添加一个drop的防火墙规则,需要清空!
# iptables -F
# setenforce 0
步骤五:测试
登录两台Web服务器查看VIP信息
# ip addr show
客户端访问
客户端使用curl命令连接http://192.168.120.10,查看Web页面;关闭web1虚拟机,客户端再次访问http://192.168.120.10,验证是否可以正常访问服务
2、Keepalived+LVS服务器
(1)架构图
(2)部署步骤
步骤一:配置网络环境
1)设置Web1、Web2服务器的网络参数
# nmcli connection modify eth0 ipv4.method manual \
ipv4.addresses 192.168.4.100/24 connection.autoconnect yes
# nmcli connection up eth0
接下来给web1配置VIP地址
注意:这里的子网掩码必须是32(也就是全255),网络地址与IP地址一样,广播地址与IP地址也一样
# cd /etc/sysconfig/network-scripts/
# cp ifcfg-lo{,:0}
# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.4.15
NETMASK=255.255.255.255
NETWORK=192.168.4.15
BROADCAST=192.168.4.15
ONBOOT=yes
NAME=lo:0
注意:这里因为web1也配置与调度器一样的VIP地址,默认肯定会出现地址冲突。
写入这四行的主要目的就是访问192.168.4.15的数据包,只有调度器会响应,其他主机都不做任何响应
# vim /etc/sysctl.conf
#手动写入如下4行内容
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
#当有arp广播问谁是192.168.4.15时,本机忽略该ARP广播,不做任何回应
#本机不要向外宣告自己的lo回环地址是192.168.4.15
重启网络服务,设置防火墙与SELinux
# systemctl restart network
# sysctl -p
# ifconfig
# systemctl stop firewalld
# setenforce 0
配置proxy1、proxy2主机的网络参数(不配置VIP,由keepalvied自动配置)
步骤二:配置后台web服务
1)安装软件,自定义Web页面(web1和web2主机)
# yum -y install httpd
# echo "192.168.4.100" > /var/www/html/index.html
# yum -y install httpd
# echo "192.168.4.200" > /var/www/html/index.html
2)启动Web服务器软件(web1和web2主机)
# systemctl start httpd ; systemctl enable httpd
步骤三:调度器安装Keepalived与ipvsadm软件
注意:两台LVS调度器执行相同的操作(如何已经安装软件,可用忽略此步骤)
安装软件
# yum install -y keepalived
# systemctl enable keepalived
# yum install -y ipvsadm
# ipvsadm -C
步骤四:部署Keepalived实现LVS-DR模式调度器的高可用
LVS1调度器设置Keepalived,并启动服务
# vim /etc/keepalived/keepalived.conf
global_defs {
notification_email {
admin@test.com.cn //设置报警收件人邮箱
}
notification_email_from ka@localhost //设置发件人
smtp_server 127.0.0.1 //定义邮件服务器
smtp_connect_timeout 30
router_id lvs1 //设置路由ID号(实验需要修改)
}
vrrp_instance VI_1 {
state MASTER //主服务器为MASTER(实验需要修改)
interface eth0 //定义网络接口(实验需要修改)
virtual_router_id 50 //主辅VRID号必须一致(实验需要修改)
priority 100 //服务器优先级(实验需要修改)
advert_int 1
authentication {
auth_type pass
auth_pass forlvs //主辅服务器密码必须一致(实验需要修改)
}
virtual_ipaddress { 192.168.4.15 } //配置VIP(实验需要修改)
}
virtual_server 192.168.4.15 80 { //设置ipvsadm的VIP规则(实验需要修改)
delay_loop 6
lb_algo wrr //设置LVS调度算法为WRR
lb_kind DR //设置LVS的模式为DR
#persistence_timeout 50
#注意这样的作用是保持连接,开启后,客户端在一定时间内始终访问相同服务器
protocol TCP
real_server 192.168.4.100 80 { //设置后端web服务器真实IP(实验需要修改)
weight 1 //设置权重为1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.4.200 80 { //设置后端web服务器真实IP(实验需要修改)
weight 2 //设置权重为2
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
# systemctl start keepalived
# iptables -F
# ipvsadm -Ln #查看LVS规则
# ip a s #查看VIP配置
LVS2调度器设置Keepalived
从proxy1传给proxy2
#scp /etc/keepalived/keepalived.conf 192.168.4.6:/etc/keepalived/
# vim /etc/keepalived/keepalived.conf
router_id lvs2
state BACKUP
priority 50
# systemctl start keepalived
# iptables -F #每重启一次服务就要清空一下防火墙
# ipvsadm -Ln #查看LVS规则
# ip a s #查看VIP配置
步骤五:客户端测试
客户端使用curl命令反复连接http://192.168.4.15,查看访问的页面是否会轮询到不同的后端真实服务器