部署LVS-DR集群

一、ipvsadm的用法

   集群原理:https://blog.csdn.net/ck784101777/article/details/99753041

   要使用LVS我们需要使用Ipvsadm工具去操作它,因为LVS是基于内核的,我们只能在用户层去操作

基本命令

常见用法

二、部署LVS-DR集群

1.工作过程介绍

DR模式,即(Direct Routing)直接路由模式

DR模式的网络拓扑

 

1) 工作过程: 当一个client发送一个WEB请求到VIP,LVS服务器根据VIP选择对应的real-server的Pool,根据算法,在Pool中选择一台Real-server,LVS在hash表中记录该次连接,然后将client的请求包发给选择的Real-server,最后选择的Real-server把应答包直接传给client;当client继续发包过来时,LVS根据更才记录的hash表的信息,将属于此次连接的请求直接发到刚才选择的Real-server上;当连接中止或者超时,hash表中的记录将被删除。

 

2) DR模式的几个细节:

1> LVS和Real-server必须在相同的网段:(相同的广播域内)

DR模式在转发client的包时,只修改了包目的MAC地址为选定的Real-server的mac地址,所以如果LVS和Real-server在不通的广播域内,那么Real-server就没办法接收到转发的包。下面是mac地址的修改过程:

Cilent--->LVS选择一个真实服务器,直转真实服务器,起中间转发作用,LVS将数据包的来源MAC地址修改为自己的MAC地址,保持原CIP不变,将请求MAC地址修改为真实服务器的MAC地址(发现请求的是在规则里面存在的地址),保持VIP不变--->Real Server确保VIP是本机lo接口的换回地址,处理数据包之后直接返回给客户端(不过LVS),MAC地址仍然为LVS的MAC地址,所以在客户端看来消息是由LVS返回的

补充:lookback就是路由器上一个环回地址,它是一个虚拟的接口。 可以确保路由ID的稳定性,该接口不会出现链路失效的情况,因为Liunx有路由功能,所以支持创建环回地址

 

2> LVS不需要开启路由转发:

LVS的DR模式不需要开启路由转发功能,就可以正常的工作,出于安全考虑,如果不需要转发功能,最好关闭。

 

3> ARP问题:

通常,DR模式需要在Real-server上配置VIP,配置的方式为:

/sbin/ifconfig lo:0 inet VIP netmask 255.255.255.255

 

i) 原因在于,当LVS把client的包转发给Real-server时,因为包的目的IP地址是VIP,那么如果Real-server收到这个包后,发现包的目的IP不是自己的系统IP,那么就会认为这个包不是发给自己的,就会丢弃这个包,所以需要将这个IP地址绑到网卡上(绑定到虚拟网卡上);当发送应答包给client时,Real-server就会把包的源和目的地址调换(源地址为VIP,目标地址为CIP),直接回复给client。

 

ii) 关于ARP广播:

* 上面绑定VIP的掩码是”255.255.255.255″,说明广播地址是其本身,那么他就不会将ARP发送到实际的自己该属于的广播域了,这样防止与LVS上VIP冲突,而导致IP冲突。

* 另外在Linux的Real-server上,需要设置ARP的sysctl选项,修改配置文件

 

arp_announce用来限制,是否使用发送的端口的ip地址来设置ARP的源地址:

* “0″代表是用ip包的源地址来设置ARP请求的源地址。

* “1″代表不使用ip包的源地址来设置ARP请求的源地址,如果ip包的源地址是和该端口的IP地址相同的子网,那么用ip包的源地址,来设置ARP请求的源地址,否则使用”2″的设置。

* “2″代表不使用ip包的源地址来设置ARP请求的源地址,而由系统来选择最好的接口来发送。

  当内网的机器要发送一个到外部的ip包,那么它就会请求路由器的Mac地址,发送一个arp请求,这个arp请求里面包括了自己的ip地址和Mac地址,而linux默认是使用ip的源ip地址作为arp里面的源ip地址,而不是使用发送设备上面的 ,这样在lvs这样的架构下,所有发送包都是同一个VIP地址,那么arp请求就会包括VIP地址和设备 Mac,而路由器收到这个arp请求就会更新自己的arp缓存,这样就会造成ip欺骗了,VIP被抢夺,所以就会有问题。现在假设一个场景来解释arp_announce:Real-server的ip地址: 202.106.1.100(public local address),172.16.1.100(private local address),202.106.1.254(VIP)如果发送到client的ip包产生的arp请求的源地址是202.106.1.254(VIP),那么LVS上的VIP就会被冲掉,因为交换机上现在的arp对应关系是Real-server上的VIP对应自己的一个MAC,那么LVS上的VIP就失效了。

“0″,代表对于arp请求,任何配置在本地的目的ip地址都会回应,不管该arp请求的目的地址是不是接口的ip;如果有多个网卡,并且网卡的ip都是一个子网,那么从一个端口进来的arp请求,别的端口也会发送回应。“1″,代表如果arp请求的目的地址,不是该arp请求包进入的接口的ip地址,那么不回应。“2″,要求的更苛刻,除了”1″的条件外,还必须要求arp发送者的ip地址和arp请求进入的接口的ip地址是一个网段的。

 

2.Linux部署LVS-DR集群

1.任务

  • 客户端IP地址为192.168.4.10
  • LVS调度器VIP地址为192.168.4.15
  • LVS调度器DIP地址设置为192.168.4.5
  • 真实Web服务器地址分别为192.168.4.100、192.168.4.200
  • 使用加权轮询调度算法,web1的权重为1,web2的权重为2

2.拓扑图

3.Web服务器配置

  web1和web2同样配置

  1. [root@web1 ~]# cd /etc/sysconfig/network-scripts/  //打开网卡目录
  2. [root@web1 ~]# cp ifcfg-lo ifcfg-lo:0     //建一张虚拟网卡 eth0:0代表在eth0上建立虚拟网卡
  3. //这里的子网掩码必须是32(也就是全255),网络地址与IP地址一样,广播地址与IP地址也一样,见上文
  4. [root@web1 ~]# vim ifcfg-lo:0
  5. DEVICE=lo:0
  6. IPADDR=192.168.4.15
  7. NETMASK=255.255.255.255
  8. NETWORK=192.168.4.15
  9. BROADCAST=192.168.4.15
  10. ONBOOT=yes
  11. NAME=lo:0

防止地址冲突的问题:

这里因为web1也配置与代理一样的VIP地址,默认肯定会出现地址冲突;

sysctl.conf文件写入这下面四行的主要目的就是访问192.168.4.15的数据包,只有调度器会响应,其他主机都不做任何响应,这样防止地址冲突的问题。见上文

  1. [root@web1 ~]# vim /etc/sysctl.conf   
  2. #手动写入如下4行内容
  3. net.ipv4.conf.all.arp_ignore = 1
  4. net.ipv4.conf.lo.arp_ignore = 1
  5. net.ipv4.conf.lo.arp_announce = 2
  6. net.ipv4.conf.all.arp_announce = 2
  7. #当有arp广播问谁是192.168.4.15时,本机忽略该ARP广播,不做任何回应
  8. #本机不要向外宣告自己的lo回环地址是192.168.4.15
  9. [root@web1 ~]# sysctl -p   //刷新配置

常见错误:如果重启网络后未正确配置lo:0,有可能是NetworkManager和network服务有冲突,关闭NetworkManager后重启network即可。(非必须的操作)

  1. [root@web1 ~]# systemctl stop NetworkManager
  2. [root@web1 ~]# systemctl restart network

4. 调度器配置

  安装ipvsadm软件并部署LVS-DR模式调度器

  1. [root@proxy ~]# yum -y install ipvsadm        //安装服务
  2. [root@proxy ~]# ipvsadm -C #清空所有规则  //安装之前情况规则
  3. [root@proxy ~]# ipvsadm -A -t 192.168.4.15:80 -s wrr   //添加一个集群,并添加规则
  4. [root@proxy ~]# ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.100 -g -w 1 
  5.  //为集群配置真实服务器 -g采用dr模式   -w权重为1
  6. [root@proxy ~]# ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.200 -g -w 1
  7. [root@proxy ~]# ipvsadm -Ln   //查看规则
  8. TCP 192.168.4.15:80 wrr
  9. -> 192.168.4.100:80 Route 1 0 0
  10. -> 192.168.4.200:80 Route 2 0 0

5.客户端测试

客户端使用curl命令反复连接http://192.168.4.15,查看访问的页面是否会轮询到不同的后端真实服务器。

扩展知识:默认LVS不带健康检查功能,需要自己手动编写动态检测脚本,实现该功能:(参考脚本如下,仅供参考)

  1. [root@proxy ~]# vim check.sh
  2. #!/bin/bash
  3. VIP=192.168.4.15:80
  4. RIP1=192.168.4.100
  5. RIP2=192.168.4.200
  6. while :
  7. do
  8. for IP in $RIP1 $RIP2
  9. do
  10.      curl -s http://$IP &>/dev/vnull   //不输出统计消息  
  11. if [ $? -eq 0 ];then            //当这个结果不为0说明服务器输出信息有问题
  12. ipvsadm -Ln |grep -q $IP || ipvsadm -a -t $VIP -r $IP      //如果输出结果为0代表服务器没有问题,则添加进规则
  13. else
  14. ipvsadm -Ln |grep -q $IP && ipvsadm -d -t $VIP -r $IP //如果输出结果不为0代表服务器有问题,在规则中删除这个服务器
  15. fi
  16. done
  17. sleep 1  //睡眠1s 刷新检查时间为一秒
  18. done
  19. [root@proxy ~]#./check.sh &          //把这个脚本挂到后台
  20. [root@client ~]#curl 192.168.4.15:80 //客户端反复测试,检测到结果轮流出现则表示实验成功
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值