LVS负载均衡-keepalived高可用
问题:
1.lvs会挂,业务下线,单点故障
2.RS会挂,一部分用户会请求异常,lvs还存有这个RS的负载记录
解决:
单点故障的解决方式:一变多
a)主备
b)主从
RS挂了如何确定?
ping服务是错误的,ping是网络层,服务是应用层。
访问一下:验证的是应用层的http协议 -》 发请求,判断返回200
lvs:内核中的模块:ipvs
第三方程序:keepalived
代替人自动化运维,解决单点故障没实现HA
1.监控自己服务
2.Master通告自己还活着,Backup监听Master状态,Master挂了,一堆Backup推举出一个新的Master
3.配置:VIP,添加ipvs,keepalived配置文件
4.对后端server做健康检查
*,keepalived 是个通用工具,比如说nginx也能监控。
什么是Keepalived?
Keepalived是Linux下一个轻量级别的高可用解决方案。高可用:广义来讲,是指整个系统的高可用行;狭义的来讲就是主机的冗余和接管。
VRRP(VritrualRouterRedundancyProtocol,虚拟路由冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此Keepalvied一方面具有服务器状态检测和故障隔离功能,另外一方面也有HAcluster功能。
健康检查和失败切换是keepalived的两大核心功能。所谓的健康检查,就是采用tcp三次握手,icmp请求,http请求,udp echo请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业务的服务器)进行保活;而失败切换主要是应用于配置了主备模式的负载均衡器,利用VRRP维持主备负载均衡器的心跳,当主负载均衡器出现问题时,由备负载均衡器承载对应的业务,从而在最大限度上减少流量损失,并提供服务的稳定性。
VRRP选举机制
VRRP路由器在运行过程中有三种状态:
- Initialize状态: 系统启动后就进入Initialize,此状态下路由器不对VRRP报文做任何处理;
- Master状态;
- Backup状态;
一般主路由器处于Master状态,备份路由器处于Backup状态。
VRRP使用选举机制来确定路由器的状态,优先级选举:
1.VRRP组中IP拥有者。如果虚拟IP地址与VRRP组中的某台VRRP路由器IP地址相同,则此路由器为IP地址拥有者,这台路由器将被定位主路由器。
2.比较优先级。如果没有IP地址拥有者,则比较路由器的优先级,优先级的范围是0~255,优先级大的作为主路由器
3.比较IP地址。在没有Ip地址拥有者和优先级相同的情况下,IP地址大的作为主路由器。
Keepalived实例测试
keepalived实验:
主机: node01~node04
node01:
ipvsadm -C
ifconfig eth0:8 down
----------------------------
node01,node04:
yum install keepalived ipvsadm -y
配置:
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vi keepalived.conf
node01:
vrrp:虚拟路由冗余协议!
vrrp_instance VI_1 {
state MASTER // node04 BACKUP
interface eth0
virtual_router_id 51
priority 100 // node04 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.150.100/24 dev eth0 label eth0:3
}
}
virtual_server 192.168.150.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 192.168.150.12 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.150.13 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
scp ./keepalived.conf root@node04:`pwd`