一、安装LVS

LVS的编译安装参考本站文章:http://www.linuxe.cn/post-192.html,对于LVS这种功能性软件,在生产中用yum安装也是没有问题的。

1 yum install ipvsadmin -y

LVS工具ipvsadm常用选项:

-l:列出所有负载均衡规则

-n:不进行dns解析

-C:清空所有规则

-A:增加一个虚拟服务器

-a:增加一个真实服务器

-S:保存规则

1 ipvsadm -Sn > /root/lvsrules.txt  #保存规则
2 cat /root/lvsrules.txt | ipvsadm -R  #恢复规则

二、LVS工作模式介绍

LVS负载均衡常用的工作模式有NAT、DR、和TUN三种,其中DR模式性能最为优越,使用最为广泛。

NAT模式:网络地址转换 
NAT(Network Address Translation)是一种外网和内网地址映射的技术。NAT模式下,数据的进出都要经过LVS的处理。LVS需要作为Real Server(真实服务器)的网关。当包到达LVS时,LVS做目标地址转换(DNAT),将目标IP改为Real Server的IP。Real Server接收到包以后,仿佛是客户端直接发给它的一样。Real Server处理完返回响应时,源IP是Real Server IP,目标IP是客户端的IP。这时Real Server的包通过网关(LVS)中转,LVS会做源地址转换(SNAT),将包的源地址改为VIP,这样,这个包对客户端看起来就仿佛是LVS直接返回给它的。客户端无法感知到后端Real Server的存在。

DR模式:直接路由模式

请求由LVS接受,但是由Real Server返还给用户信息,不经过LVS转发。这里引申一个问题:当用户请求时,源IP是CIP,目标地址是VIP;LVS调度器将请求转发给Real Server处理后再发送给用户,这个时候源IP是RIP,目标地址是CIP,但是CIP在一开始并没有请求RIP,而用RIP去响应请求时CIP是不会接受的,所以就需要用VIP响应请求。

具体实现方法:DR模式下LVS和Real server都需要配备一样的VIP(VIP的MAC地址和物理网卡是一样的)(Real Server通过将VIP绑定在loopback实现),问题又来了,在一个网段内多台服务器出现同样IP地址会引起冲突,那么如何工作下去呢?需要在调度服务器上设置一个VIP一个DIP,每个Real Server也有一个RIP和一个VIP,但是Real Server的VIP地址做了隐藏,做了ARP抑制,不会应答广播,只在响应CIP时作为源地址使用。当产生请求时LVS将目标MAC地址修改为某台Real Server的MAC,该包就会被转发到相应的Real Server处理,此时源IP和目标IP都没变。Real Server收到LVS转发来的包时发现MAC是自己的,IP也是自己的,于是这个包被合法地接受。当Real Server返回响应时,只要直接向CIP返回即可,不再经过LVS。

三、LVS  DR模式搭建流程:

模拟环境如下:

DIP:192.168.36.10

VIP:192.168.36.100

RIP:192.168.36.15、192.168.36.16

1、首先Director服务器外网卡上配置VIP,并且添加一个路由条目,指明接收到该VIP的请求后交给谁处理

01 <pre class="brush: bash;auto-links: false;">ifconfig eth0:1 192.168.36.100 broadcast 192.168.36.100 netmask 255.255.255.255 up  #添加VIP,广播地址和VIP一样,注意子网掩码不要写错
02 route add -host 192.168.36.100 dev eth0:1 
03  
04 ifconfig
05 eth0      Link encap:Ethernet  HWaddr 00:0C:29:B1:5B:03 
06           inet addr:192.168.36.10  Bcast:192.168.36.255  Mask:255.255.255.0
07  
08 eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:B1:5B:03 
09           inet addr:192.168.36.100  Bcast:192.168.36.100  Mask:255.255.255.255
10  
11 lo        Link encap:Local Loopback 
12           inet addr:127.0.0.1  Mask:255.0.0.0
13           inet6 addr: ::1/128 Scope:Host
14           UP LOOPBACK RUNNING  MTU:65536  Metric:1
15           RX packets:29 errors:0 dropped:0 overruns:0 frame:0
16           TX packets:29 errors:0 dropped:0 overruns:0 carrier:0
17           collisions:0 txqueuelen:0
18           RX bytes:2440 (2.3 KiB)  TX bytes:2440 (2.3 KiB)
19  
20 ping 192.168.36.100    #验证是否畅通
21 64 bytes from 192.168.36.100: icmp_seq=1 ttl=64 time=0.057 ms
22  
23 route add -host 192.168.36.100 dev eth0:1    #增加路由条目</pre>
24 <br>
25 <br>

2、使用ipvsadm工具配置Director和Real Server信息

1 [root@Server01 ipvsadm-1.26]# ipvsadm -A -t 192.168.36.100:80 -s rr    #指定LVS调度器的地址以及算法,-t代表tcp协议             
2 [root@Server01 ipvsadm-1.26]# ipvsadm -a -t 192.168.36.100:80 -r 192.168.36.15:80 -g    #指定Real Server的地址以及工作模式,-g代表DR模式
3 [root@Server01 ipvsadm-1.26]# ipvsadm -a -t 192.168.36.100:80 -r 192.168.36.16:80 -g

3、使用ipvsadm -L 可以检查一下配置结果

 

4、在每台Real Server上绑定VIP到回环网卡上,并增加路由条目

1 ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
2 route add -host $VIP dev lo:0

5、在每台Real Server上做ARP抑制,其中2个参数为arp_ignore、arp_announce。

arp_ignore(接收到ARP请求后的响应级别):

0:本地有相应地址就相应,无论在哪个接口

1:仅对请求的目标地址是在本地接口上才作响应,这样后端服务器回环地址上的IP不会去响应广播

arp_announce(向外回应自己网络地址):

0:在任意网络接口上的本地地址都向外响应

1:尽量使用与本地接口匹配的地址向外响应

2:仅使用与本地接口匹配的网络向外响应,效果和arp_ignore类似也是避免响应

ARP抑制的配置方法(也可以配置在/etc/sysctl.conf中):

1 echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
2 echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
3 echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
4 echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

6、访问VIP地址测试,可以看到分别访问到了两台不同的服务器,实际生产环境中两个服务器上文件应该是一致的,这里为了测试效果,所以放了不同的文件区分,如果无法正常打开页面,查看下iptables的规则是否有清空

四、LVS NAT模式部署

使用LVS NAT模式需要保证集群中的服务器处于NAT网络中,下面是Centos部署NAT的方法

1、在后端每台服务器上将网关设置为LVS服务器地址

route add default gw 192.168.36.10

2、在LVS服务器上开启网络转发

echo net.ipv4.ip_forward =1 > /etc/sysctl.conf

sysctl -p

3、使用iptables转发

iptables -t nat -A POSTROUTING -s 192.168.36.0/24 -o ens33 -j MASQUERADE

4、NAT模式下无需配置ARP抑制

1 ifconfig ens33:1 192.168.36.100 netmask 255.255.255.0 up
2  
3 ipvsadm -A -t 192.168.36.100 -s rr
4 ipvsadm -a -t 192.168.36.100 -r 192.168.36.110  -m
5 ipvsadm -a -t 192.168.36.100 -r 192.168.36.120  -m

最新文章

  1. OpenLiveWriter代码插件
  2. Linux命令-文件文本操作grep
  3. python UnicodeDecodeError: &#39;ascii&#39; codec can&#39;t decode byte 0xa6 in position 907: ordinal not in range(128)
  4. Navicat premium工具常用快捷键
  5. Android 图片添加水印图片或者文字
  6. Bootstrap系列 -- 42. 导航条中的按钮、文本和链接
  7. android学习笔记50——SQLiteOpenHelper、android实现系统自带样式
  8. Spring security3入门(转)
  9. Validform:一行代码搞定整站的表单验证!
  10. 【BZOJ】【1070】【SCOI2007】修车
  11. 【递推】BZOJ 3930: [CQOI2015]选数
  12. Asp.net mvc中整合autofac
  13. (转)自适应网页设计(或称为响应式web设计)(Responsive Web Design)
  14. C#。1 数据类型,常量变量,类型转换
  15. struts2-----新建项目
  16. 安装配置rsync服务端
  17. 201521123007《Java程序设计》第9周学习总结
  18. DOM遍历 - 后代
  19. MATLAB 统计数据并画出统计直方图
  20. AutoMapper在MVC中的运用06-一次性定义映射、复杂类型属性映射

热门文章

  1. 上一个树形菜单的改进,增添了数据绑定功能而非仅仅的jq特效
  2. 揭开HTTPS的神秘面纱
  3. 从零开始学习vue(2)
  4. java期末总结
  5. 【java多线程】volatile 关键字
  6. Linux高级调试与优化——用户态堆
  7. go-ethereum开发问题
  8. 监控Linux服务器上python服务脚本
  9. linux查看内存使用情况top
  10. Day06:抽象类、接口和内部类(上)