700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 企业运维实战--lvs之DR模式负载均衡 keepalived lvs高可用

企业运维实战--lvs之DR模式负载均衡 keepalived lvs高可用

时间:2021-10-12 15:51:01

相关推荐

企业运维实战--lvs之DR模式负载均衡 keepalived lvs高可用

LVS 介绍

lvs 负载均衡( linux virtual server),linux虚拟服务器,是一个虚拟的四层交换器集群系统,根据目标地址和目标端口实现用户请求转发,本身不产生流量,只做用户请求转发,目前是负载均衡性能最好的集群系统。

负载均衡原理

传统实现负载均衡:DNS ,算法单一、对后方没有健康检测

负载均衡方法:

DR> Tun > NAT> fullNAT

前三种没有抗攻击能力,且对后端没有健康检测

最后一个有上述两种功能,但性能相对较差,不过硬件可以弥补

大概实现过程:

C(Client) ----> DR —> RS ----> C(Client)

1.进行lvs集群的搭建

环境搭建:client --> DR -->RS -->client

安装的是管理工具,第一种叫ipvsadm,第二种叫keepalive

ipvsadm是通过命令行管理,而keepalive读取配置文件管理

本次负载均衡实验采用DR模式,

server1为DR

server23为RS

server1:

yum install -y ipvsadm

新建一个虚拟服务,它需要有一个vip(virtual ip)

ip addr add 172.25.76.100/24 dev eth0

查看ip

ip addr

添加虚拟服务以及将其关联到真实服务器上去

ipvsadm -A -t 172.25.76.100:80 -s rr # 添加虚拟服务

ipvsadm -a -t 172.25.76.100:80 -r 172.25.76.2:80 -g #将虚拟服务关联到真实服务上

ipvsadm -a -t 172.25.76.100:80 -r 172.25.76.3:80 -g #LVS默认无80端口,需另外添加新的虚拟IP记录

添加之后,查看配置结果

可以看到server23都同步了

ipvsadm -ln

ipvsadm-save -n > /etc/sysconfig/ipvsadm (保存配置)

2.后端(real server)提供服务

server23:

yum install -y httpd

systemctl enable --now httpd

echo server2(3)>/var/www/html/index.html

real server禁用arp

##在DR(直连)模式中,客户端想要通过vip访问到真实后端的资源,要求调度节点和后端都要有相同的vip,但是同时会有一个问题产生 DR模式下,调度节点和真实服务器在一个vlan(同一个网段)里面,并且拥有相同的vip,那么其它主机访问vip的时候如何能够根据实现定义好的调度算法正确的在两个real server之间完成调度呢?

我们可以禁用后端的arp(地址广播协议),让主机不要对外广播自己的vip地址,就相当于不要告诉别人我有这个ip,链路层的传输只需要mac地址而不需要通过ip

在真机curl一下添加的vip地址

curl 172.25.76.100

访问不到资源但是在server1上可以看到调度次数:

这是因为没有在server2,3上添加vip

给两台服务器上的网卡绑定VIP地址

[root@server2 ~]# ip addr add 172.25.76.100/32 dev eth0

[root@server3 ~]# ip addr add 172.25.76.100/32 dev eth0

在真机上再curl 172.25.1.100

发现可以访问到资源,可以轮询调度

但是,现在的负载均衡还是有问题,因为此时能够负载均衡只是因为客户端随机访问到了server1上的vip所以才能够正常调度,正常情况下,server1、2、3上都有vip,因此客户端访问vip的时候可能会随机访问到这三个节点的任何一个节点上,那么我们该如何保证客户端在访问vip的时候只能访问到调度节点server1呢?这就需要禁用server2和server3节点的arp协议,让它们不对外广播vip地址

我们在真机上先抓出ip地址

arp -an | grep 100

记住这f4:67的结尾

然后删掉vip 再次抓出ip为空

这时候重新ping 172.25.76.100就可以使得vip重新过来

ping 172.25.76.100arp -an | grep 100

观察两次抓出的ip后面at后的数据是不一样的

因为第二次连接的是server2的vip

重新curl 172.25.76.100观察 全部都是server2

再次重复这次的操作后 我们发现at后的参数和最之前的一样了

但是这也是不对的,我们需要实现的是一直在server2,server3上负载均衡!

禁用arp协议:

使用arptables_jf工具(相当于arp防火墙)禁用

arptable只针对arp协议生效,只控制arp,不影响其它协议

在server2,server3上都要执行:

yum install arptables.x86_64 -y

[root@server2 html]# arptables -A INPUT -d 172.25.76.100 -j DROP[root@server2 html]# arptables -A OUTPUT -s 172.25.76.100 -j mangle --mangle-ip-s 172.25.76.2[root@server2 html]# systemctl restart arptables.service

[root@server3 html]# arptables -A INPUT -d 172.25.76.100 -j DROP[root@server3 html]# arptables -A OUTPUT -s 172.25.76.100 -j mangle --mangle-ip-s 172.25.76.3[root@server3 html]# systemctl restart arptables.service

查看策略

和前面一样,删掉ip节点重新ping一下,发现查到的ip地址的数据没有变化了,都是server1

这时候再进行负载均衡测试发现没有问题。

3.iptable(防火墙)与LVS调度是否有冲突

我们在server1也也装上apache服务编写发布页,再次访问vip,lvs是否能将我们的请求调度到server2和server3上面而不调度server1

在server1上:

yum install -y httpd

systemctl start httpd

echo server1 > /var/www/html/index.html

然后再次到真机进行负载均衡测试:

发现还是OK的,并没有调度server1

这个过程是怎么实现的呢 server1调度节点上的apache为什么不会被访问到

我们在防火墙INPUT链中添加相关策略再进行访问测试,在server1调度节点上添加防火墙策略:所有访问172.25.76.100的请求都丢弃,这时候我们再来客户端访问172.25.76.100,观察是否能够正常完成调度,如果无法调度,则说明防火墙策略优先级高。

server1

iptables -A INPUT -d 172.25.76.100 -j DROP

然后iptables -nL查看策略已经删掉

查看发现无响应

iptables -F (重置策略)

所以防火墙优先级最高,防火墙数据包过滤防火墙,只要数据包进来就会受到它的控制,轮不到ipvs生效

ipvsadm是一个管理工具,内核中的ipvs、iptables < kernel netfilter, iptables优先级最高

iptables允许输入:80 进入,ipvs标记读出:80 后续进入lvs策略(DR模式)

另一种情况 :某台RealServer 死了

server2或者server3上的httpd停掉!

systemctl stop httpd,然后进行负载均衡测试:

调度器依然正常工作,但客户端将会有错误连接提示,这就说明调度器并不关心后端real server的死活,即使已经down掉了也依然会对其进行调度 这时候,只需要删掉server2,或者server3上的 调度策略,这时候客户端在访问的时候就不会有错误信息提示了

ipvsadm -d -t 172.25.76.100:80 -r 172.25.76.2

4.Keepalive+LVS高可用

Keepalived 一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。

开启一台虚拟机server4准备测试lvs的高可用

[root@server1 ~]# yum install keepalived -y[root@server4 ~]# yum install ipvsadm keepalived -y

server1:

清除之前server1上的ipvsadm策略:

ipvsadm -C

删除server1上的vip

ip addr del 172.25.76.100/24 dev eth0

修改keepalive配置文件

cd /etc/keepalived

vim keepalived.conf

! Configuration File for keepalivedglobal_defs {notification_email {root@localhost #邮件通知,如果主机联网的话可以写外部邮箱,用于通知集群状态,写localhost本机的话需要安装mailx}notification_email_from keepalived@localhost #邮件来源smtp_server 127.0.0.1 #必须是本机smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addr#vrrp_strict #禁掉这个选项vrrp_garp_interval 0vrrp_gna_interval 0}vrrp_instance VI_1 {%高可用部分,vrrp协议巧妙利用了路由器硬件的冗余state MASTER %主调度节点interface eth0virtual_router_id 76 #这个写自己的数字priority 100%优先级,只要设置backup优先级比master优先级低就可以advert_int 1%与backup之间每秒发一次心跳authentication {%认证auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.76.100# 写vip}}virtual_server 172.25.76.100 80 {%这部分相当于将lvs的策略以文本的方式写出来了,集群将会根据这部分内容来制定lvs策略delay_loop 6 %每隔6秒钟对后端做一次健康检查lb_algo rr %定义调度算法lb_kind DR%lvs模式(注意大小写)#persistence_timeout 50%50秒内同一个客户端发过来的请求将会交给同一个后端处理,为了看到效果,建议注释掉protocol TCPreal_server 172.25.76.2 80 {weight 1%权重TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 172.25.76.3 80 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 172.25.76.3 80 {weight 1TCP_CHECK {connect_timeout 3nb_get_retry 3delay_before_retry 3}}}

修改之后重启服务:

systemctl start keepalived

把2,3上的httpd服务都启动一下:

在真机负载均衡恢复:

这个时候如果停掉server3的httpd服务:

在server1上查看ipvsadm -ln

会提示有邮件

这个时候把server2也停掉httpd

此时打开前面下载好的server4

把server1上的 /etc/keepalived/keepalived.conf 复制到server4上

scp /etc/keepalived/keepalived.conf server4:/etc/keepalived/

修改一下:修改优先级为77和state为backup

然后启动服务:

启动server2,server3的httpd服务

systemctl start keepalived.serviceipvsadm -ln

ip addr

发现vip也出现了

查看server1 4的日志: cat /var/log/messages

以实现负载均衡

将server1的keepalive down掉之后,server4将接管成为master,并且获得vip和ipvs策略,仍然不影响客户端的正常访问,调度依然可以进行

如果server1再次启开keepalive,则server4又会称为backup,vip和ipvs策略都会迁移到server1上,因为server1优先级更高

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。