在进行实验之前要关闭selinux
LVS/NAT模式的配置
LVS-NAT基于cisco的LocalDirector。VS/NAT不需要在RealServer上做任何设置,其只要能提供一个tcp/ip的协议栈即可,甚至其无论基于什么OS。基于VS/NAT,所有的入站数据包均由Director进行目标地址转换后转发至内部的RealServer,RealServer响应的数据包再由Director转换源地址后发回客户端。
LVS/NAT模式不能与netfilter兼容,因此,不能将VS/NAT模式的Director运行在netfilter的保护范围之中。现在已经有补丁可以解决此问题,但尚未被整合进ip_vs code。
在进行实验之前先来了解一下简单的概念
客户端来源的IP是CIP,提供服务的是VIP(客户端访问请求的服务端),director用于和realserver通信的IP叫DIP,realserver用于和director通信的IP叫RIP
下面是NAT模式的拓扑结构图
Director需要配置两块网卡eht0和eht1其中eht0设为桥接模式,eth1模式如下图所示
由于NAT模型的特性,在这里为两台RealServer的网卡eth0和Director的网卡eth1配为相同模式,具体如上图
在配置完各自的网卡后使用ping命令使Client,Director,RealServer彼此能够互相ping通。
在两台RealServer服务器上安装Apache,并启动服务。然后分别建立index.html页面
RealServer1的index.html的内容为RSS1
RealServer1的index.html的内容为RSS2
为两台RealServer路由使其的默认网关指向Director的DIP即172.16.88.1
#route add default gw 172.16.88.1
安装ipvsadm
#yum -y install ipvsadm
配置Director
添加服务 # ipvsadm -A -t 172.16.200.1:80 -s rr -A 在内核的虚拟服务器列表中添加一条新的虚拟IP记录,也就是增加一台新的虚拟服务器。 -t 说明虚拟服务器提供的是tcp 的服务,此选项后面跟如下格式:[VIP:port] or [RIP:port] -s scheduler使用的调度算法,有这样几个选项 rr|wrr|lc|wlc|lblc|lblcr|dh|sh 设置转发 # ipvsadm -a -t 172.16.200.1:80 -r 172.16.88.2 -m # ipvsadm -a -t 172.16.200.1:80 -r 172.16.88.3 -m -a在内核虚拟服务器列表的一条记录里添加一条新的Real Server记录。 -r指定Real Server的IP地址,此选项后面跟如下格式:[RIP:port] -m指定LVS 的工作模式为NAT 模式 打开路由转发功能 # echo "1" > /proc/sys/net/ipv4/ip_forward
测试效果如下图
LVS/DR模型配置
在DR模式中所有机器(包括Director和RealServer)都使用了一个额外的IP地址,即VIP。当一个客户端向VIP发出一个连接请求时,此请求必须要连接至Director的VIP,而不能是RealServer的。因为,LVS的主要目标就是要Director负责调度这些连接请求至RealServer的。
因此,在Client发出至VIP的连接请求后,只能由Director将其MAC地址响应给客户端(也可能是直接与Director连接的路由设备),
而Director则会相应的更新其ipvsadm table以追踪此连接,而后将其转发至后端的RealServer之一。
为了防止客户端在发出请求后RealServer的VIP响应请求,需要对网络接口上本地IP地址发出的ARP回应作出相应级别的限制(arp_announce),以及如何定义对目标地址为本地IP的ARP询问不同的应答模式(arp_ignore)
arp_announce
0.(默认) 在任意网络接口上的任何本地地址
1.尽量避免不在该网络接口子网段的本地地址.当发起ARP请求的源IP地址是被设 置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是
否为所有接口上的子网段内ip之一.
2.对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址
arp_ignore
0 (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求
1 只回答目标IP地址是来访网络接口本地地址的ARP查询请求
2 只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内
3 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应
4-7 保留未使用
8 不回应所有(本地地址)的arp查询
下面是DR模式的拓扑结构图
Director的网卡eth0配置两个IP地址如上图所示的eth0和eht0:1,模式为桥接 两个RealServer的网卡eth0模式都设置为桥接模式,且eht0的IP为DIP,VIP设置为lo:0(回环地址)
配置RealSever1和RealServer2,两台服务器配置相同
安装apache服务,并启用,然后添加主页index.html RealServer1的index.html的内容为RSS1 RealServer1的index.html的内容为RSS2 设置arp_ignore和arp_announce #echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore #echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce #echo 1 > /proc/sys/net/ipv4/conf/all/arhp_ignore #echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 添加回环地址以及设置路由 #ifconfig lo:0 172.16.88.1 broadcast 172.16.88.1 netmask 255.255.255.255 up #route add -host 172.16.88.1 dev lo:0
配置Director
为eht0增加第二个IP地址,并添加路由使所有的请求都经过eht0:1转发 #ifconfig eth0:1 172.16.88.1 broadcast 172.16.88.1 netmask 255.255.255.255 up #route add -host 172.16.88.1 dev eth0:1 打开路由转发功能 #echo 1 > /proc/sys/net/ipv4/ip_forward 添加服务 # ipvsadm -A -t 172.16.88.1:80 -s rr 设置转发 # ipvsadm -a -t 172.16.88.1:80 -r 172.16.88.2 -g # ipvsadm -a -t 172.16.88.1:80 -r 172.16.88.3 -g -g表示是DR模式
配置完成后,使用ping命令使Director和RealServer以及Client彼此能够相通
在浏览器测试效果如下图所示
那接下来就以上术的DR模式为基础,讲解一下LVS的持久连接。
由于HTTP是一种无状态的协议没次请求完毕之后就立即断开了,但是对于电商网站来说却需要能够记忆用户的请求,比如淘宝时当你把选完的一件衣服假如到购物车时是有RealServer1来响应,而当添加第二件衣服到购物车时却是有RealServer2来响应,这会给客户带来无谓的烦恼,所以就需要有一种持久的连接来满足客户的需求。那需要用到LVS的持久连接了,其实Session和Cokies也能够满足客户的这种需求,只是这里就不再赘述。
LVS持久连接的类型有
PCC:持久客户端连接,客户端发送的请求都定义到同一个realserver上
# ipvsadm -A -t 172.16.88.1:0 -s rr -p 1800
PPC:持久端口连接 对同一个端口的请求都定义到同一个realserver上
# ipvsadm -A -t 172.16.88.1:80 -s rr -p 1800# ipvsadm -A -t 172.16.88.1:443 -s rr -p 1800
PNMP:持久防火墙数据包连接,定义端口之间的姻亲关系把两个不同端口定义到同一个realserver
本文转自 沐木小布丁 51CTO博客,原文链接:http://blog.51cto.com/sxhxt/950351