目录
一、理论
1.Keepalived
2.VRRP协议(虚拟路由冗余协议)
3.部署LVS+Keepalived 高可用群集
二、实验
1.LVS+Keepalived 高可用群集
三、问题
1.备服务器网卡启动报错
四、总结
一、理论
1.Keepalived
(1)简介
Keepalived是一款专为LVS和HA设计的一款健康检查工具;支持故障自动切换、支持节点健康状态检查。
Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群中各个服务节点的状态,后来又加入了可实现高可用VRRP功能。因此,Keepalived除了能够管理LVS集群外,还可以为其他服务(例如:Nginx、Haproxy、MySQL等)实现高可用。
Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router Redundancy Protocol(虚拟路由冗余协议)的缩写,VRP出现的目的就是为了解决静态路由单点故障的问题,它能够保证当个别节点宕机时,整个网络可以不间断的运行
Keepalived一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用。
(2)工作原理
Keepalived是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。
两台主机同时安装好Keepalived软件并启动服务,开始正常工作时,由角色为Master的主机获得所有资源并对用户提供服务,角色为Backup的主机作为Master主机的热备;当角色为Master的主机失效或出现故障时,角色为Backup的主机将自动接管Master主机的所有工作,包括接管VIP资源及相应资源服务;而当角色为Master的主机故障修复后,又会自动接管回它原来处理的工作,角色为Backup的主机则同时释放Master主机失效时它接管的工作,此时,两台主机将恢复到最初启动时各自的原始角色及工作状态。
(3)功能
① 管理LVS负载均衡软件
Keepalived可以通过读取自身的配置文件,实现通过更底层的接口直接管理LVS的配置及控制服务的启动,停止功能
② 支持故障自动切换(Failover)
Keepalived可以实现任意两台主机之间,例如Master和Backup主机之间的故障转移和自动切换,这个主机可以是普通的不能停机的业务服务器,也可以是LVS负载均衡,Nginx反向代理这样的服务器
③ 实现LVS集群中节点的健康检查(Health Checking)
Keepalived可以通过在自身的Keepalived.conf文件里配置LVS的节点IP和相关参数实现对LVS的直接管理;除此之外,当LVS集群中的某一个甚至是几个节点服务器同时发生故障无法提供服务时,Keepalived服务会自动将失效的节点服务器从LVS的正常转发队列中清除出去,并将请求调度到别的正常节点服务器上,从而保证用户的访问不受影响;当故障的阶段服务器被修复以后,Keepalived服务又会自动地把它们加入到正常转发队列中,对客户提供服务。
④ 实现LVS负载调度器、节点服务器地高可用性(HA)
一般企业集群需要满足的三个特点:负载均衡、健康检查、故障切换、使用LVS+Keepalived完全可以满足需求
2.VRRP协议(虚拟路由冗余协议)
Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能。
(1)vrrrp简介
vrrp是针对路由器的一种备份解决方案,由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务,每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态,若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务。
(2)vrrp工作过程
选举Master,比较优先级,高的为Master,若优先级相同无Master时,比较接口IP地址,大的为Master,Master设备发送ARP报文,承担报文转发工作;
状态维持,Master设备周期发送通告报文,公布配置信息和工作状态;
Backup设备根据收到的通告报文判断Master设备是否工作正常,如果Master设备主动放弃Master地位时,会发送优先级为0的通告报文,Backup设备收到后会快速切换成Master设备或者定时器超时后Backup设备认为Master设备无法正常工作,会切换状态为Master。
(3)Keepalived体系主要模块
keepalived体系架构中主要有三个模块,分别是core、check和vrrp。
表1 Keepalived体系模块
模块 | 功能 |
core模块 | 为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。 |
vrrp模块 | 是来实现VRRP协议的。 |
check模块 | 负责健康检查,常见的方式有端口检查及URL检查。 |
3.部署LVS+Keepalived 高可用群集
(1)环境准备
主DR 服务器:192.168.204.70
备DR 服务器: 192.168.204.100
Web 服务器1:192.168.204.80
Web 服务器2:192.168.204.90
客户端:192.168.204.250
vip(虚拟回环):192.168.204.23
(2)配置负载调度器(主keepalived服务器:192.168.204.70)
① #关闭防火墙
systemctl stop firewalld.service
setenforce 0
② #安装服务
yum install ipvsadm keepalived -y
③ #修改配置文件keeplived.conf
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
......
global_defs { #定义全局参数
--10行--修改,邮件服务指向本地
smtp_server 127.0.0.1
--12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02
router_id LVS_01
}
vrrp_instance VI_1 { #定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUP
state MASTER
--21行--修改,指定承载vip地址的物理接口
interface ens33
--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致
virtual_router_id 10
--23行--修改,指定优先级,数值越大优先级越高,主为100,备为99
priority 100
advert_int 1 #通告间隔秒数(心跳频率)
authentication { #定义认证信息,每个热备组保持一致
auth_type PASS #认证类型
--27行--修改,指定验证密码,主备服务器保持一致
auth_pass 123123
}
virtual_ipaddress { #指定群集vip地址
192.168.79.25
}
}
--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.204.23 80 {
delay_loop 6 #健康检查的间隔时间(秒)
lb_algo rr #指定调度算法,轮询(rr)
--39行--修改,指定群集工作模式,直接路由(DR)
lb_kind DR
persistence_timeout 50 #连接保持时间(秒)
protocol TCP #应用服务采用的是 TCP协议
--43行--修改,指定第一个Web节点的地址、端口
real_server 192.168.204.80 80 {
weight 1 #节点的权重
--45行--删除,添加以下健康检查方式
TCP_CHECK {
connect_port 80 #添加检查的目标端口
connect_timeout 3 #添加连接超时(秒)
nb_get_retry 3 #添加重试次数
delay_before_retry 3 #添加重试间隔
}
}
real_server 192.168.204.90 80 { #添加第二个 Web节点的地址、端口
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
##删除后面多余的配置##
④ #启动服务、查看虚拟网卡vip
systemctl start keepalived
ip addr show dev ens33
⑤ #调整proc响应参数,关闭Linux内核的重定向参数响应
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
⑥ #刷新一下
sysctl -p
############################# 配置ipvsadm #################################
⑦ #配置负载分配策略,并启动服务
ipvsadm-save >/etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
⑧ #清空ipvsadm,并做策略
ipvsadm -C
ipvsadm -A -t 192.168.204.23:80 -s rr
ipvsadm -a -t 192.168.204.23:80 -r 192.168.204.80:80 -g
ipvsadm -a -t 192.168.204.23:80 -r 192.168.204.90:80 -g
⑨ #保存设置
ipvsadm
ipvsadm -ln
ipvsadm-save >/etc/sysconfig/ipvsadm
(3)配置负载调度器(备keepalived服务器:192.168.204.100)
配置与主服务器相似
① #关闭防火墙
systemctl stop firewalld.service
setenforce 0
② #安装服务
yum install ipvsadm keepalived -y
③ #修改配置文件keeplived.conf
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
......
global_defs { #定义全局参数
--10行--修改,邮件服务指向本地
smtp_server 127.0.0.1
--12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02
router_id LVS_02
}
vrrp_instance VI_1 { #定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUP
state BACKUP
--21行--修改,指定承载vip地址的物理接口
interface ens33
--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致
virtual_router_id 10
--23行--修改,指定优先级,数值越大优先级越高,主为100,备为99
priority 99
advert_int 1 #通告间隔秒数(心跳频率)
authentication { #定义认证信息,每个热备组保持一致
auth_type PASS #认证类型
--27行--修改,指定验证密码,主备服务器保持一致
auth_pass 123123
}
virtual_ipaddress { #指定群集vip地址
192.168.204.23
}
}
--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.204.23 80 {
delay_loop 6 #健康检查的间隔时间(秒)
lb_algo rr #指定调度算法,轮询(rr)
--39行--修改,指定群集工作模式,直接路由(DR)
lb_kind DR
persistence_timeout 50 #连接保持时间(秒)
protocol TCP #应用服务采用的是 TCP协议
--43行--修改,指定第一个Web节点的地址、端口
real_server 192.168.204.80 80 {
weight 1 #节点的权重
--45行--删除,添加以下健康检查方式
TCP_CHECK {
connect_port 80 #添加检查的目标端口
connect_timeout 3 #添加连接超时(秒)
nb_get_retry 3 #添加重试次数
delay_before_retry 3 #添加重试间隔
}
}
real_server 192.168.204.90 80 { #添加第二个 Web节点的地址、端口
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
##删除后面多余的配置##
④ #启动服务、查看虚拟网卡vip
systemctl start keepalived
ip addr show dev ens33
⑤ #调整proc响应参数,关闭Linux内核的重定向参数响应
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
⑥ #刷新一下
sysctl -p
############################# 配置ipvsadm #################################
⑦ #配置负载分配策略,并启动服务
ipvsadm-save >/etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
⑧ #清空ipvsadm,并做策略
ipvsadm -C
ipvsadm -A -t 192.168.204.23:80 -s rr
ipvsadm -a -t 192.168.204.23:80 -r 192.168.204.80:80 -g
ipvsadm -a -t 192.168.204.23:80 -r 192.168.204.90:80 -g
⑨ #保存设置
ipvsadm
ipvsadm -ln
ipvsadm-save >/etc/sysconfig/ipvsadm
(4)配置节点服务器(web1服务器:192.168.204.80)
① #关闭防火墙
systemctl stop firewalld
setenforce 0
② #安装并开启httpd服务
yum -y install httpd
systemctl start httpd
③ #配置站点文件
vim /var/www/html/index.html
this is david web1!
④ #配置虚拟vip
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.204.23
NETMASK=255.255.255.255
⑤ #重启网络服务,开启虚拟网卡
systemctl restart network
ifup lo:0
ifconfig lo:0
⑥ #设置路由
route add -host 192.168.204.23 dev lo:0
route -n
⑦ #调整 proc 响应参数
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
⑧ #刷新proc参数
sysctl -p
(5)配置节点服务器(web2服务器:192.168.204.90)
配置与web1相似
① #关闭防火墙
systemctl stop firewalld
setenforce 0
② #安装并开启httpd服务
yum -y install httpd
systemctl start httpd
③ #配置站点文件
vim /var/www/html/index.html
this is jack web1!
④ #配置虚拟vip
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.204.23
NETMASK=255.255.255.255
⑤ #重启网络服务,开启虚拟网卡
systemctl restart network
ifup lo:0
ifconfig lo:0
⑥ #设置路由
route add -host 192.168.204.23 dev lo:0
route -n
⑦ #调整 proc 响应参数
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
⑧ #刷新proc参数
sysctl -p
(6)测试验证
① 在客户机上测试(客户机:192.168.204.250)
curl 192.168.204.23
② 查看主keepalived服务器:192.168.204.80
ip a
③ 备keepalived服务器:192.168.204.90
ip a
④ 断开主keepalived服务器:192.168.204.80
systemctl stop keepalived.service
ip a
⑤ 备keepalived服务器:192.168.204.90
ip a
二、实验
1.LVS+Keepalived 高可用群集
(1)配置负载调度器(主keepalived服务器:192.168.204.70)
① 关闭防火墙
② 安装服务
③ 修改配置文件keeplived.conf
④ 启动服务、查看虚拟网卡vip
⑤ 调整proc响应参数,关闭Linux内核的重定向参数响应
⑥ 刷新一下
⑦ 配置负载分配策略,并启动服务
⑧ 清空ipvsadm,并做策略
⑨ 保存设置
(2)配置负载调度器(备keepalived服务器:192.168.204.100)
① 关闭防火墙
② 安装服务
③ 修改配置文件keeplived.conf
④ 启动服务、查看虚拟网卡vip
⑤ 调整proc响应参数,关闭Linux内核的重定向参数响应
⑥ 刷新一下
⑦ 配置负载分配策略,并启动服务
⑧ 清空ipvsadm,并做策略
⑨ 保存设置
(3)配置节点服务器(web1服务器:192.168.204.80)
① 关闭防火墙
② 安装httpd、开启服务
③ 创建一个站点文件
④ 添加回环网卡,修改回环网卡名,IP地址,子网掩码
⑤ 设置路由
⑥ 开机执行命令
⑦ 调整 proc 响应参数
⑧ 刷新配置
(4)配置节点服务器(web2服务器:192.168.204.90)
① 关闭防火墙
② 安装httpd、开启服务
③ 创建一个站点文件
④ 添加回环网卡,修改回环网卡名,IP地址,子网掩码
⑤ 设置路由
⑥ 开机执行命令
⑦ 调整 proc 响应参数
⑧ 刷新配置
(5)测试验证
①在客户机上测试(客户机:192.168.204.250)
②主keepalived服务器:192.168.204.80
③备keepalived服务器:192.168.204.90
④断开主keepalived服务器:192.168.204.80
⑤备keepalived服务器:192.168.204.90
三、问题
1.备服务器网卡启动报错
(1)问题:Failed to start LSB: Bring up/down networking
(2)解决思路:
①根据提示信息进行操作,查找错误信息。
②在系统日志(/var/log/messages)中查看错误信息
③根据错误信息进行问题定位并解决
(3)解决方法
查看日志,提示“未知的名称或服务”
/etc/sysconfig/network-scripts/目录中,发现多出了一个ifcfg-**文件,(ifcfg文件数量和网卡数量相同),删除该文件,重启网卡,成功。
四、总结
Keepalived是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。
Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能。