keepalive的高可用集群:
代理服务器和调度器都是单点模式,keepalive就是用来实现调度器的高可用集群。
原理
keepalive的工作原理:
keepalive是专门为了lvs集群开发出来的,但是适用场景不仅仅局限于lvs。
而且keepalive为后台的真实服务器做了一个健康检查,当服务不可用时,会自动的移除ipvs的转发策略,服务恢复时,会自动重新把策略加入到ipvs。
基于vrrp协议实现的调度器的高可用方案
vrrp:虚拟路由的冗余协议。
keepalive可以实现:
1、主备切换,根据优先级实现,当主故障时,可以自动切换到备,主恢复之后,如果主的优先级比备高,还是会自动的切换到主
2、故障检测和恢复功能
3、主备之间通过组播地址:224.0.0.18,互相发送健康检查的报文,确定主和备之间的通信(确定双方是否工作正常)
4、通过配置vip来实现集群的入口,vrrp是一个冗余协议,主在工作时,备完全不参与集群的工作,只是监听主的状态
keepalive配置过程
ubuntu-1 :主调度器
ubuntu-2:备调度器
vip:192.168.233.188
server-ubuntu-1:客户端
server-ubuntu-2:真实服务器1(双网卡配置)
server-ubuntu-3:真实服务器2(双网卡配置)
keepalived.conf配置文件:
global_defs:整个vrrp的全局配置
vrrp_instance VI_1: 指定网卡设备和vip地址的模块,以及确定vrrp中主备的关系
virtual_server:指定转发的策略,以及lvs的工作模式和负载均衡的算法
check:负责健康检查,只要是检查服务的端口。(监控服务状态一般都是监听端口)
script:文本模式,也可以支持脚本形式的监控
主调度器
apt -y install ipvsadm keepalived
cp /usr/share/doc/keepalived/samples/keepalived.conf.sample /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
全局配置
第8行
smtp_server 127.0.0.1
第10行
router_id LVS_01
vrrp_iptables
#配置了之后keepalive重启之后不会添加iptables策略
网卡模块
第15行添加
satae MASTER
interface ens33
第21行虚拟IP
192.168.42.100
转发模块
real_server 192.168.233.100 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 192.168.233.100 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
retry 3
delay_before_retry 3
}
}
systemctl restart keepalived
vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens37.send_redirects = 0
sysctl -p
备调度器
apt -y install ipvsadm keepalived
cp /usr/share/doc/keepalived/samples/keepalived.conf.sample /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
第8行
smtp_server 127.0.0.1
第10行
router_id LVS_02
vrrp_iptables
#配置了之后keepalive重启之后不会添加iptables策略
网卡模块
第15行添加
satae BACKUP
interface ens33
第21行虚拟IP
192.168.42.100
转发模块
real_server 192.168.233.100 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 192.168.233.100 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
retry 3
delay_before_retry 3
}
}
systemctl restart keepalived
vim /etc/sysctl.conf
:
sysctl -p
server-ubuntu-2和server-ubuntu-3
vim /etc/netplan/01-network-manager-all.yaml
ens37:
dhcp4: no
addresses: [192.168.233.188/24]
netplan apply
vim /etc/sysctl.conf
net.ipv4.conf.ens37.arp_ignore = 1
net.ipv4.conf.ens37.arp_announce = 2
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
sysctl -p
route add -host 192.168.233.188 dev ens38
keepalived配置文件解析
! Configuration File for keepalived
2
3 global_defs {
4 notification_email {
5 acassen
6 }
7 notification_email_from Alexandre.Cassen@firewall.loc
8 smtp_server 127.0.0.1
#本地邮件服务,可以删除不要
9 smtp_connect_timeout 30
#本地邮件服务,可以删除不要
10 router_id LVS_01
#确定主备服务器的id号,必须不同
11 vrrp_iptables
配置了之后keepalived重启之后不会添加iptables的策略。
12 }
13
14 vrrp_instance VI_1 {
15 state MASTER
确定服务器的身份 主
16 interface ens33
指定网卡设备
17 virtual_router_id 50
虚拟路由的id,主备保持一致
18 priority 100
优先级。谁数字大就是主
19 advert_int 1
主备之间检查的心跳率
20 virtual_ipaddress {
21 192.168.233.100
集群的vip地址
22 }
23 }
24
25 virtual_server 192.168.233.100 80 {
26 delay_loop 6
健康检查的间隔时间
27 lb_algo rr
负载均衡的算法
28 lb_kind DR
lvs的模式
29 persistence_timeout 50
连接保持的时间
30 protocol TCP
服务采用的协议
31 #指定的后台真实的服务器
32 real_server 192.168.233.61 80 {
33 weight 1
负载算法的圈子
34 TCP_CHECK {
tcp的健康
35 connect_port 80
检查的目标端口是80
36 connect_timeout 3
连接检查的超时时间3秒
37 retry 3
重试的次数
38 delay_before_retry 3
重试的间隔时间
39 }
40 }
41 }
keepalived.conf配置文件配置完成后,检查步骤:
1、检查配置的转发策略是否生效
2、检查主的vip是否生成
3、检查备服务器是否有vip地址
4、模拟故障切换,主的vip能否飘到备服务器
5、主恢复之后vip是否能够回到主服务器
keepalived和nginx的高可用
keepalived可以不依赖lvs的环境实现故障切换和高可用。
脑裂
脑裂:在HA系统,只要是通过vip这个机制实现,都有可能会出现问题。
vip地址同时出现在了主和备上
解决脑裂的办法:
1、防火墙屏蔽了主备之间的224.0.0.18的报文,导致互相都收不到,就认为对方都已经挂起了,都认为自己是主
2、网卡出现故障(硬件故障),配置出问题:ip地址冲突
3、心跳线:网线之间连接故障,断开,老化
4、keepalived的配置文件有问题,配置的相关项出现问题(80%)
软件成面:
1、抓包进行定位,查看组播的报文是否正常
2、配置文件进行排查(网卡配置,应用配置)
硬件成面:
1、更换心跳线(网线)进行测试
2、网卡硬件的问题
3、内存和cpu,磁盘空间不足,也会出现脑裂
1573

被折叠的 条评论
为什么被折叠?



