在上一篇 快速理解LVS负载均衡 中, 快递公司使用 “快递小哥” 微信小程序实现了 业务的均衡负载之后, 成功优化了业务,使快递点得到最大化利用。
但是运营过程, 用户也反馈了,一些问题:
- 快递小哥 有时候打不开。【经过排查, 发现是服务器故障引起的】
- 偶尔有快递站点的无法提供服务,但还是分配快递过去了。【比如说:站点网络问题,停电等不可抗力】
针对上述两个问题, 领导决定做出以下几点优化
- 针对服务器故障问题, 增加备用服务器应对临时需求,故障发生时, 备用服务器可代替主服务器提供服务,主服务器修复成功以后, 备用服务器把业务转让主服务器
- 监控主服务器,故障出现, 自动切换(权重最高的)备用服务器
- 监控快递站点, 一旦发现无法提供服务的站点, 临时屏蔽
如图
在lvs中也有一个第三方应用做了上图的同样的事情, 这个应用的名字叫做:keepalived
几个知识点:
MDNS介绍
DNS报文格式解析(非常详细) MDNS报文相近,MDNS找不到,就看这个吧
keepalived配置说明(长期翻译更新。。。)
VRRP概述
最全面的IGMP协议总结!
keepalived高可用 比较专业的keepalived介绍
【linux下 安装man和man-pages, 执行 man 5 keepalived.conf 可查看英文文档】
DNS报文查询类型
类型 助记符 说明 1 A IPv4地址 2 NS 名字服务器 5 CNAME 规范名称定义主机的正式名字的别名 6 SOA 开始授权标记一个区的开始 11 WKS 熟知服务定义主机提供的网络服务 12 PTR 指针把IP地址转化为域名 13 HINFO 主机信息给出主机使用的硬件和操作系统的表述 15 MX 邮件交换把邮件改变路由送到邮件服务器 28 AAAA IPv6地址 252 AXFR 传送整个区的请求 255 ANY 对所有记录的请求
简单的做一下安装记录,
yum install keepalived ipvsadm -y
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
#配置完 keepalived.conf 启动keepalived 会自动完成 ipvsadm的部署
service keepalived restart
# 主 keepalived.conf
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
# vrrp_strict #严格执行VRRP协议规范,此模式不支持节点单播,引起vip问题的就是这个参数
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.133.245/24 brd 192.168.133.255 dev ens33 label ens33:2
}
}
virtual_server 192.168.133.245 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 0
protocol TCP
real_server 192.168.133.247 80 {
weight 1
HTTP_GET {
url {
path /xxxx.html
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
# 备 keepalived.conf
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
# vrrp_strict #严格执行VRRP协议规范,此模式不支持节点单播,引起vip问题的就是这个参数
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP #主要配置区别
interface ens33
virtual_router_id 51
priority 30 #主要配置区别
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.133.245/24 brd 192.168.133.255 dev ens33 label ens33:2
}
}
virtual_server 192.168.133.245 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 0
protocol TCP
real_server 192.168.133.247 80 {
weight 1
HTTP_GET {
url {
path /xxxx.html
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
再说一下 我对keeplived的工作方式的理解和一些疑问, 请了解的大神留言指正错误
实验环境
master 192.168.133.248
backup 192.168.133.243
real_server 192.168.133.247
virtual_ipaddress 192.168.133.245
测试实验流程
- 先启动 master, 观察master启动时的网络通信
- 再启动 backup, 观察backup启动时的网络通信
- kill掉 master, 观察backup启动时的网络通信
- 通过组播 224.0.0.22(协议IGMPV3)通告更改排除模式
- 组播请求224.0.0.18(协议VRRP[虚拟路由冗余协议])(这么描述是否准确),携带 虚拟路由id 51, 权重100,验证密码 111,ip 192.168.133.245
- 广播通告192.168.133.245,我不明白这步是询问能不能用245这个ip还是什么意思
- 通过MDNS,发起两个问题, 名字分别是: 245.133.168.192.in-addr.arpa 和 linux-4.local. 并携带名称服务器区域(这个我不知道是干啥的)[ANY 对所有记录的请求]
- 自己应答刚才的提问(分两个封包回答的):【提问了3次,但是HINFO只回了两次,PTR却回了3次】
HINFO 刷新主机信息,A 刷新ipv4地址,AAAA 刷新 ipv6地址,有效期都是2分钟
PTR 245.133.168.192.in-addr.arpa 刷新域名指针, 有效期2分钟, Domain Name是不是就是要缓存的值 - 当备机加入服务之后, 224.0.0.22(协议IGMPV3)通告更改排除模式。但后面没有任何封包处理,猜测是因为判断了 248通告的VRRP协议
- 如果MATSER 宕机,间隔3秒钟,之后备机开始使用VRRP协议通告。奇怪的是,备机是不停的在通告,直到MATSER恢复(我猜测这是不是因为我配置问题导致的,确定是刚开始一定是有一个争抢过程的,而且奇怪的是243的权重是30,245的权重是50, 但是事实上243拿到了,并刷新mdns)
文档中对于这个字段的解释,我也不太理解:priority 100 # for electing MASTER, highest priority wins.to be MASTER, make this 50 more than on other machines.(我试着把245的权重提高到80或者改成10也依然如此)