lvs的nat图解:
lvs的nat模式和dr模式的主要的差别就是nat模式的调度器要负责消息的接收和发送,而dr模式中的调度器只需要负责消息的接收,至于消息的发送直接有后面的realserver直接返回给客户端;
需要遵循以下规则:(dir为调度器的ip,rip为realserver的ip)
1.调度器中的dip和rip要在同一个网络中,如果Dip和rip不在同一网络中,就不能将报文送达到realserver,同时realserver的网关要设置为和Dip一样的网关,否则报文从realserver无法到达DIP。
2.Rip通常为私有地址,仅能和集群节点中(Dip通信)。
3.Director位于client和realserver之间,处理进去的所有通信。
4.Realserver必须将网关指向Dip。
5.Director支持端口映射。向外提供服务的端口和realserver的端口可能不一致。
Realserver可以使用任意操作系统,只用director是linux就可以。
lvs的工作模式和iptables的工作模式有相似之处:
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是在内核中工作,下次重启会导致服务不见了,所以要保存规则