keepalive配置文件详解
第一部分:全局定义块
1、email通知。作用:有故障,发邮件报警。
2、Lvs负载均衡器标识(lvs_id)。在一个网络内,它应该是唯一的。
3、花括号“{}”。用来分隔定义块,因此必须成对出现。如果写漏了,keepalived运行时,不会得到预期的结果。由于定义块内存在嵌套关系,因此很容易遗漏结尾处的花括号,这点要特别注意。
1 | global_defs { |
第二部分:vrrp_sync_group
确定失败切换(FailOver)包含的路由实例个数。即在有2个负载均衡器的场景,一旦某个负载均衡器失效,需要自动切换到另外一个负载均衡器的实例是哪些? 实例组group{}至少包含一个vrrp实例
1 | vrrp_sync_group VG_1{ #监控多个网段的实例 |
第三部分:vrrp_instance
虚拟路由实例配置
1 | vrrp_instance VI_1 { |
第四部分:virtual_server
虚拟服务器virtual_server定义块 ,虚拟服务器定义是keepalived框架最重要的项目了,是keepalived.conf必不可少的部分。 该部分是用来管理LVS的,是实现keepalive和LVS相结合的模块。ipvsadm命令可以实现的管理在这里都可以通过参数配置实现,注意:real_server是被包含在viyual_server模块中的,是子模块。
1 | virtual_server 192.168.202.200 23 { //VIP地址,要和vrrp_instance模块中的 virtual_ipaddress地址一致 |
第五部分:vrrp_script
服务监控脚本。keepalived只能做到对网络故障和keepalived本身的监控,即当出现网络故障或者keepalived本身出现问题时,进行切换。但是这些还不够,我们还需要监控keepalived所在服务器上的其他业务进程,比如说nginx,keepalived+nginx实现nginx的负载均衡高可用。
1 | vrrp_script check_haproxy{ |
实例lvs+keepalived+nginx高可用搭建
服务器 IP地址 角色
Srv01 192.168.227.164
VIP: 192.168.227.100 LVS+Keepalive
Srv02 192.168.227.165
VIP: 192.168.227.100 LVS+Keepalive
Srv03 192.168.227.159
VIP: 192.168.227.100 Nginx
Srv04 192.168.227.160
VIP: 192.168.227.100 Nginx
设置后端服务器
引用 https://www.cnblogs.com/rexcheny/p/10778636.html
ARP的内核参数
由于LVS服务器和后端服务器的网卡上都配置了VIP,那么当客户端联系VIP的时候肯定是和LVS服务器的VIP进行通信,然后由LVS服务器基于规则进行调度,我们知道2层通信是基于MAC地址的,那么首次通信时客户端可能并不知道LVS服务器的MAC地址,那么就需要进行ARP广播来解析出VIP所在的服务器的MAC地址,那么显然对客户端进行ARP应答的只能是LVS服务器不能是后端服务器,所以我们就要在后端上修改内核参数来禁止ARP应答和宣告。那么有2个内核参数表示这两个设置:
arp_ignore:表示接收到ARP广播时的响应级别,默认值为0
0,默认值,表示响应所有,只要对方查询的IP配置在我自己这台主机上且无论ARP请求从哪个网卡进来,该主机都会响应
1,收到该ARP请求的网卡IP与ARP请求的IP一致,该主机才响应
arp_announce:定义将自己的地址向外通告的级别,默认是0
0,表示将本机所有的MAC地址都向外通告
1,多网卡主机且都配置了IP地址,那么该主机接入到网络时,无论哪个网卡接入到网络,该网卡都会向外宣告自己所有的MAC地址,所以1表示如果IP不在这个接口上,就避免向外通告,但是不保证一定不会下外通告。
2,仅向网卡IP直连的网络进行通告
为什么会有这些级别呢?因为主机可以有多个网卡,每个网卡都对应一个网段,默认情况下这个多网卡主机只要接入网络它就会把自己所在的所有网络地址都向外进行通告。
所以对于后端服务器,也就是本例子中的Nginx,我们应该在lo上配置子接口,且设置arp_ignore为1,arp_announce为2。
调整脚本
这个是配置的nginx端的,用于vip连接分发访问流量到nginx,使用方法 复制到一个sh文件 例子:bash lvs.sh start
1 |
|
处理lvs的脑裂(大坑)
https://www.jianshu.com/p/35941504a2e8
发现的脑裂,应该是防火墙将vrrp 广播给过滤掉了,导致backup接受不到master的广播,然后自己去争抢了vip。所以此处我将防火墙关闭了,如果有对防火墙要求,可以只将防火墙的vvrp开启。注意命令中要修改自己的网卡名称ens33
1 | firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface ens33 --destination 224.0.0.1 --protocol vrrp -j ACCEPT |
为了使服务的端口可以通信,80端口或者需要使用的端口也需要放行的
1 | firewall-cmd --zone=public --add-port=80/tcp --permanent |
查看配置的规则
1 | firewall-cmd --direct --get-rules ipv4 filter INPUT |
生产环境配置文件实例:
该配置是lvs加keepalived的主配置,从配置需要修改的已经配置
1 | [root@lvs_1 ~]# cat /etc/keepalived/keepalived.conf |
systemctl retsrat keepalived
nginx高可用集群双主配置
编写lb01服务器keepalived配置文件
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
1 | ! Configuration File for keepalived |
修改nginx负载均衡文件
1 | upstream oldboy { |
修改内核文件
1 | 异常问题: |
重启nginx负载均衡服务
systemctl restart nginx