LVS中nat和dr的原理与用法简述
lvs-nat:
多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发;
(1)RIP和DIP必须在同一个IP网络,且应该使用私网地址;RS的网关要指向DIP;
(2)请求报文和响应报文都必须经由Director转发;Director易于成为系统瓶颈;
(3)支持端口映射,可修改请求报文的目标PORT;
(4)vs必须是Linux系统,rs可以是任意系统;
请求和响应过程:
当cip向rip请求时,先是cip作为源,vip作为目标,当请求到达VIP时,源还是cip,但是
目标变成了rip,并通过dip到rip。源ip始终不变。
当rip响应请求时,rip作为源ip,cip作为目标ip,经由dip转发。转发完成后,vip为源ip,cip为目标。目标ip始终不变。
Ivs-nat示例:
实验环境:
1、一台director;安装ipvsadm;
内网ip:192.168.1.1 外网ip:10.1.64.1
2、两台后端服务器,分别部署httpd服务。将网关指向192.168.1.1,并且打开核心转
发功能。echo 1 > /proc/sys/net/ipv4/ip_forward 。并提供测试页。并且三台机器
的时间同步。
实验步骤:
1、搭建好实验环境。
2、部署ipvsadm策略
ipvsadm -A -t 10.1.64.1 -s rr
ipvsadm -a -t 10.1.64.1 -r 192.168.1.2 -m
ipvsadm -a -t 10.1.64.1 -r 192.168.1.3 -m
3、测试
For i in {1..9}; do curl http://10.1.64.1; done
lvs-dr:
Direct Routing,直接路由;
通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变;
Director和各RS都得配置使用VIP;
(1) 确保前端路由器将目标IP为VIP的请求报文发往Director:
(a) 在前端网关做静态绑定;
(b) 在RS上使用arptables;
(c) 在RS上修改内核参数以限制arp通告及应答级别;
arp_announce
arp_ignore
(2) RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director;
(3) RS跟Director要在同一个物理网络;
(4) 请求报文要经由Director,但响应不能经由Director,而是由RS直接发往Client;
(5) 不支持端口映射;
请求和响应的具体过程:
任何本地通信,都是通过Mac地址进行的,IP仅仅是实现网络间通信的。当路由器的网络
接口到real server或director的网络接口都是有Mac地址封装转发的。
当路由器收到来自客户端的请求报文时,路由发现Mac地址是自己的,就将其报文拆解,
发现目标IP不是自己,需要转发,就会在网路中进行ARP广播,寻找VIP的Mac地址,然后
Director和real server 都会响应路由的广播,但是不能让real server响应路由的广播。否则将造
成路由混乱,可能路由会直接将报文发送给real server而不经过director。
为了避免路由混乱问题:
1、不让路由发广播,直接将director的Mac地址绑定。但是若以后对director做冗余
的时候,Mac地址就不能绑定了。
2、对real server的物理网卡上做ARPtables,在Mac层做防火墙,用来限制ARP广播,
明确说明那些广播通告可以出去(进入),哪些不可以出去(进入)。
3、在RS上修改内核参数以限制arp通告及应答级别;
arp_announce
arp_ignore
当客户端的请求到达前端路由时,路由向全网发广播,但是由于对real server做了策略限
制,因此只有director响应路由的广播,因此所有的请求都会到达director,director通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变;然后通过交
换机发送给real server。
响应时,源目标是RIP,目标ip是CIP,但是cip并未访问rip,所以得强行限制该响应报文
先到lo的vip,通过vip到达cip。
IVS-dr实验示例:
示例一:
①客户端一台(192.268.249.148) director(dip 10.1.64.1.1)主机一台。
Real server主机2台。(rip1:10.1.64.2 rip2:10.1.64.3)
VIP:10.1.64.10
②在real server主机中分别部署两台httpd服务。在生产环境中两台httpd服务的内容应该是一
样的,以达到负载均衡的目的。在该实验中为了达到实验效果可以将两台httpd服务的网页
内容稍加区别。
Rip1 :测试页内容RS1 rip2:测试页内容RS2
③在director主机的物理网卡上设定别名,ip地址指向VIP:10.1.64.10
Ifconfig eth0:0 10.1.64.10 netmask 255.255.255.255 broadcast 10.1.64.10 up
④在director主机上设定ipvsadm策略。
Ipvsadm -A -t 10.1.64.10:80 -s rr
Ipvsadm -a -t 10.1.64.10:80 -r 10.1.64.2 -g -w 1
Ipvsadm -a -t 10.1.64.10:80 -r 10.1.64.3 -g -w 1
⑤在两台real server主机中设置响应和通告级别
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
⑥在客户端主机中用curl测试,如图所示,在不断的请求时两台httpd服务会以轮循的方式响
应客户端。
⑦在实验过程中注意防火墙和SElinux的设置。建议清空防火墙和关闭SElinux。
示例二:
①在上述实验原有的基础上,在real server主机上部署MySQL服务。对MySQL做负载均衡。
②为两台MySQL服务添加可以远程连接的用户,两台MySQL服务的用户名要相同。
Real server1
mysql
GRANT ALL ON *.* TO ‘test’@’10.1.%.%’ IDENTIFIED BY ‘testpass’;
FLUSH PRIVILEGES;
Real server2
mysql
GRANT ALL ON *.* TO ‘test’@’10.1.%.%’ IDENTIFIED BY ‘testpass’;
FLUSH PRIVILEGES;
为了显示实验效果,在real server2中添加一张表;
CREATE DATABASE zhangzhide;
③在director主机上添加ipvsadm策略
Ipvsadm -A -t 10.1.64.10:3306 -s rr
Ipvsadm -a -t 10.1.64.10:3306 -r 10.1.64.2 -g -w 1
Ipvsadm -a -t 10.1.64.10:3306 -r 10.1.64.2 -g -w 1
④在客户机上测试MySQL的负载均衡
示例三、
FWM:FireWall Mark
通过在director主机上的防火墙上打标记的方式将MySQL和httpd服务放在同一个集群中。
为了不受上述实验的ipvsadm策略的影响,建议将其清空ipvsadm -C。
①在director主机防火墙上打标记。
iptables -t mangle -A PREROUTING -d 10.1.64.10 -p tcp -m multiport –dports 80,3306 -j MARK
–set-mark 11
②在director主机上写ipvsadm策略
ipvsadm -A -f 11 -s rr
ipvsadm -a -f 11 -r 10.1.64.2 -g -w 1
ipvsadm -a -f 11 -r 10.1.64.3 -g -w 2
③在客户机上分别测试httpd服务和MySQL服务。
测试MySQL
测试httpd服务
示例四、
Prot affinity
借助于FireWall Mark,能够完成将多个端口绑定在一起,并使用持久连接来实现统一调度
之效用。
原创文章,作者:zzd,如若转载,请注明出处:http://www.178linux.com/56240