lvs的nat图解:
linux
lvs的nat模式和dr模式的主要的差异就是nat模式的调度器要负责消息的接收和发送,而dr模式中的调度器只须要负责消息的接收,至于消息的发送直接有后面的realserver直接返回给客户端;vim
须要遵循如下规则:(dir为调度器的ip,rip为realserver的ip)bash
1.调度器中的dip和rip要在同一个网络中,若是Dip和rip不在同一网络中,就不能将报文送达到realserver,同时realserver的网关要设置为和Dip同样的网关,不然报文从realserver没法到达DIP。服务器
2.Rip一般为私有地址,仅能和集群节点中(Dip通讯)。网络
3.Director位于client和realserver之间,处理进去的全部通讯。负载均衡
4.Realserver必须将网关指向Dip。框架
5.Director支持端口映射。向外提供服务的端口和realserver的端口可能不一致。curl
Realserver可使用任意操做系统,只用director是linux就能够。tcp
lvs的工做模式和iptables的工做模式有类似之处:
ide
iptables:在内核空间是netfilter,而在用户空间是iptables,咱们经过iptables写规则,这些规则会在netfilter上面生效;
lvs:在内核空间工做的是ipvs,而在用户空间是ipvsadm,经过命令ipvsadm写规则在内核上面的ipvs框架上生效;
注意:iptables和lvs不能同时使用。缘由是:
iptables中的5个钩子为:(本身理解的,有点粗俗)
prerouting:刚刚进入网络层的数据包经过此节点,尚未到达路由以前,源地址转换在此
input:通过路由以后,如何是访问本机的就会经过此节点
ouput:从本机取到数据以后,出来时要通过的节点,而后走postrouting
forward:定义的转发规则从这里转发到后面的主机
postrouting:出去的时候数据包通过此节点,目标地址转换在此
因为咱们对外公布的地址就是负载均衡本地的地址,因此会经过input连将请求送达到本机上,若是本机的确有个端口在响应这个用户请求,就会回复的,负责拒绝。
很显然,在Lvs中咱们不能让用户的请求到达本机上面去,如何作?
其实咱们的LVS工做在input链上面的,咱们在input上面设置规则,一旦发现用户请求是一个集群服务,就会强行修改这个报文的行程的,原本是到达本机的,结果强行修改行程以后,到达post_routing--->其余主机上
这是有点反常与iptables机制的,因此LVS和iptables不能同时使用。
安装以及配置:
首先dir上面配置两个网卡:(192.168.116.137为桥接的,192.168.113.128为host-only模式)
在其余两台主机上配置一个网卡,度为host-only模式,而且和dir的host-only在同一个网段中,网关指定为192.168.113.128。
在dir上面下载lvs:
#yum install ipvsadm
打开转发机制: [root@localhost ~]# echo 1 >/proc/sys/net/ipv4/ip_forward #打开ipv的ip转发机制,当前生效 [root@localhost ~]# vim /etc/sysctl.conf #打开ipv的ip转发机制,永久生效 net.ipv4.ip_forward = 1
下来再realserver上面下载安装httpd。并分别编辑访问页面为rs1和rs2.
测试以下:
[root@localhost conf]# curl 127.0.0.1 rs 1 [root@localhost conf]#
下来就是写规则了:
ipvsadm: 管理集群服务 添加:-A -t|u|f service-address [-s scheduler] -t: TCP协议的集群 -u: UDP协议的集群 service-address: IP:PORT -f: FWM: 防火墙标记 service-address: Mark Number 修改:-E 删除:-D -t|u|f service-address 管理集群服务中的RS 添加:-a -t|u|f service-address -r server-address [-g|i|m] [-w weight] -t|u|f service-address:事先定义好的某集群服务 -r server-address: 某RS的地址,在NAT模型中,可以使用IP:PORT实现端口映射; [-g|i|m]: LVS类型 -g: DR模型 -i: TUN模型 -m: NAT模型 [-w weight]: 定义服务器权重 修改:-e 删除:-d -t|u|f service-address -r server-address 查看 -L|l -n: 数字格式显示主机地址和端口 --stats:统计数据 --rate: 速率 --timeout: 显示tcp、tcpfin和udp的会话超时时长 -c: 显示当前的ipvs链接情况 删除全部集群服务 -C:清空ipvs规则 保存规则 -S # ipvsadm -S > /path/to/somefile 载入此前的规则: -R # ipvsadm -R < /path/form/somefile
我这里在dir上面添加的规则以下:
ipvsadm -A -t 192.168.116.137:80 -s rr ipvsadm -a -t 192.168.116.137:80 -r 192.168.113.129 -m ipvsadm -a -t 192.168.116.137:80 -r 192.168.113.130 -m
而后再dir上面访问测试页面:
注意:ipvs是在内核中工做,下次重启会致使服务不见了,因此要保存规则