LVS的DR模式与LVS+Keepalievd搭建高可用web服务

一、lvs:(虚拟负载均衡器)

1、lvs工作在ios七层模型的第四层--转发(kernel层面),主要分为两部分:ipvsadm(用户管理工具)和ipvs+netfilter(内核层面)

2、工作方式:用户管理(ipvsadm)写策略文件将策略加载至内核层面(ipvs+netfilter),实现lvs功能。(管理空间与内核层面的通信)。

3、工作模式:DR、NAT、TUN、FullNAT

4、netfilter(内核层面)对防火墙数据包与lvs的数据包的处理区分:若是lvs数据包,通过ip_vs模块将其“强制转发”至与其对应的链路。注意:iptables的优先级高于ipvs

5、DR模式原理简介:

  该模式工作在第二层(路由层)无转发,当客户端访问vs(负载调度器)时,第二层通过MAC地址寻址vs;vs将MAC地址修改为某个后端服务器的MAC地址、IP地址不变(IP协议使用在第四层),传给后端服务器RS(Real Server),第二层无转发功能也就是路由功能,这就要求RS(后端服务器)与VS(负载调度器)必须在同一个网段;RS接受信息后,继续向上层应用传递,又第四层使用TCP协议,因此后端服务器必须有虚拟IP才能完成三次握手协议;客户端收到响应,在第二层进行vip的Arp缓存(ip与MAC地址的映射缓存),如此一来,当下次访问vip时将不再访问负载调度器,而是直接访问的后端服务器。所以,要让客户端屏蔽掉对vip的Arp服务,使客户端不对后端服务器地址进行缓存。

二、DR模式实验:

设定:server1为负载调度器,server2和server3为后端服务器

在server1上安装ipvsadm,并将vip添加至eth0上

添加策略,实现管理部分对内核ip_vs的控制

ipvsadm -A  -t 172.25.254.100:80 -s rr

-t表示tcp协议,172.25.254.100为vip,172.25.254.100:80表示添加虚拟ip的80端口,-s rr表示采用轮询算法。

ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.2:80 -g

ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.3:80 -g

-a表示添加,-r ip:真实节点的ip的80端口,-g表示的是DR模式(直连模式);该策略表示若访问vip的80的数据包,将其ip地址改为rip(realserver的ip地址)

开启ipvsadm服务

  负载调度器将客户端的请求转发给后端服务器,但是负载调度器不可能记录下所有的服务器的ip来转发,因此我需要们在server2和server3上分别添加vip  

ip addr add 172.25.254.100/32 dev eth0

  此时,负载调度器将客户端的请求转发给后端服务器,当vip的请求到来时,后端服务器直接响应客户端,但是此时客户端的arp会记录该响应信息(客户端的真实ip,也就是rip),那么当客户端再次访问vip时,会通过send-arp便可以直接访问后端服务器,那么lvs也就失去了其负载均衡的意义。那么,要想实现负载均衡,就要解决(1)后端服务器不响应关于vip的请求(2)后端服务器只响应负载调度器转发过来的请求,不再经过负载调度器,而是直接与客户端完成tcp协议,客户端对后端服务器的arp缓存也很重要,arp服务处于ios的第二层,所以vip的数据包传输至第二层时,我么可以将vip转换成rip、cip信息不变,进行arp缓存。

所以我们要安装arptables(工作在iso模型的第二层)

 

在后端服务器上输入如下命令

arptables -A IN -d 172.25.254.100 -j DROP  ##隐藏vip,当外界访问vip时,后端服务器不作响应

arptables -A OUT -s 172.25.254.100 -j mangle --mangle-ip-s 172.25.254.2

##当发送的数据包的源地址是vip时,则将vip转换为rip,实现客户端不对服务端做arp缓存

然后保存arptables_jf策略(server3同理)

开启arptables_jf服务

我们现在可以测试了

在客户端 curl 172.25.254.100,可以看到我们编辑后端服务器的httpd的默认发布文件的内容轮询出现

在客户端用命令 arp -an 172.25.254.100 查看对vip的arp缓存可以看到MAC地址是负载调度器的MAC地址

我们关闭掉某后端服务器的httpd服务后,可以看到lvs对后端服务器无安全检查。 

我们还可以在后端服务器都done掉了,让负载调度器充当服务器

安装ldirectord

开启ldirectord服务,打开server1的httpd服务,并编辑其默认发布文件。当我们都关掉后端服务器的httpd服务后,可以看到在客户端测试,显示的是server1的httpd的默认发布文件的内容

三、LVS+Keepalievd

首先,我们要在主备机上安装和配置Keepalievd环境,先将Keepalievd安装好,再进行如下配置

 

server4作为备机做同样的操作

然后我们修改keepalievd的配置文件

高可用测试:

server1的state为MASTER server4的state为BACKUP 当server1故障的时候,server4作为备用会启用。

我们可以看到server1的172.25.254.100ip在keepalievd启动时会自动添加

负载均衡测试:

  我们可以看到测试结果,两台服务器的httpd轮询出现

故障切换测试:任意关闭realserver上的httpd服务,Keepalived监控模块是否能及时发现, 然后屏蔽故障节点,同时将服务转移到正常节点来执行

我们还可以同时主备两个服务,分别是httpd和vsftpd(让server1主httpd,备vsftpd;让server4主vsftpd,备httpd)

只需要修改server1的keepalievd配置文件如下图,而server4与之对应,只是主备关系和优先级大小相反而已

 

然后在两台服务器上添加虚拟ip172.25.254.200/32

ip addr add 172.25.254.200/31 dev eth0

然后将其隐藏,不让客户端与realserve响应

server3同理

然后开启两台服务器的vsftpd服务

我们可以看到server1和server4自动添加了ip,分别是100 和 200

这样,server1和server4就互为主备了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值