DIP:192.168.199.230
VIP:192.168.1.235
RIP:192.168.199.231(232)
官方说明文档:
负载均衡器:
0 1 2 3 4 5 6 7 8 9 10 |
[root@LVS001 ~]# ifconfig eth1:1 192.168.1.235 netmask 255.255.255.0 up [root@LVS001 ~]# ipvsadm --set 30 5 60 [root@LVS001 ~]# ipvsadm -A -t 192.168.1.235:80 -s wrr -p 20 [root@LVS001 ~]# ipvsadm -a -t 192.168.1.235:80 -r 192.168.199.232:80 -m -w 1 [root@LVS001 ~]# ipvsadm -a -t 192.168.1.235:80 -r 192.168.199.231:80 -m -w 1 [root@LVS001 ~]# vim /etc/sysctl.conf #################################################################################### net.ipv4.ip_forward = 1 [root@LVS001 ~]# sysctl -w net.ipv4.ip_forward=1 #临时生效命令 #################################################################################### [root@LVS001 ~]# sysctl -p |
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
#!/bin/bash # Author:Byrd # Version:0.1 # Site:note.t4x.org # Contact:root#t4x.org . /etc/init.d/functions VIP=( `ifconfig eth1 | sed -n 's#^.*dr:\(.*\) Bc.*$#\1#gp'` ) RIP=( 1.1.1.11 1.1.1.12 ) start() { if [ `ipvsadm -Ln | wc -l` -ne 3 ]; then exit 0 else ipvsadm -C fi for ((i=0;i<${#VIP[*]};i++)) do ipvsadm --set 30 5 60 ipvsadm -A -t ${VIP}:80 -s wrr for ((p=0;p<${#RIP[*]};p++)) do ipvsadm -a -t ${VIP}:80 -r ${RIP[$p]}:80 -m -w 1 done if [ `ipvsadm -Ln | wc -l` -gt 3 ]; then action "Config LVS NAT Success" /bin/true fi done sysctl -w net.ipv4.ip_forward=1 >/dev/null 2>&1 # sed -i "s/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g" /etc/sysctl.conf # sysctl -p } stop() { if [ `ipvsadm -Ln | wc -l` -eq 3 ]; then exit 1 fi for ((i=0;i<${#VIP[*]};i++)) do #route add -host ${VIP} dev eth0 #ipvsadm --set 30 5 60 ipvsadm -D -t ${VIP}:80 if [ `ipvsadm -Ln | wc -l` -eq 3 ]; then action "Close LVS NAT Success" /bin/true fi done sysctl -w net.ipv4.ip_forward=0 >/dev/null 2>&1 } case "$1" in start) start && exit 0 ;; stop) stop || exit 2 ;; *) echo "USAGE: $0 start|stop" ;; esac |
Real-Server:
0 1 |
[root@RealServer001 ~]# route del default gw 192.168.199.1 [root@RealServer001 ~]# route add default gw 192.168.199.230 |
[root@RealServer001 ~]# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
[root@RealServer001 ~]# echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
[root@RealServer001 ~]# echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
[root@RealServer001 ~]# echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#!/bin/bash # Author:Byrd # Version:0.1 # Site:note.t4x.org # Contact:root#t4x.org DIP=( 1.1.1.25 ) GTY=( 1.1.1.2 ) start() { echo `route -n | grep UG | awk '{print $2}'` > /tmp/nat route del default gw `route -n | grep UG | awk '{print $2}'` route add default gw ${DIP} if [ `route -n | grep UG | wc -l` -eq 1 ]; then echo "RealServer Config Success" fi } stop() { route del default gw `route -n | grep UG | awk '{print $2}'` route add default gw 1.1.1.2 } case "$1" in start) start && exit 0 ;; stop) stop || exit 2 ;; *) echo "Usage $0 start|stop" ;; esac |
客 户通过Virtual IP Address(虚拟服务的IP地址)访问网络服务时,请求报文到达调度器,调度器根据连接调度算法从一组真实服务器中选出一台服务器,将报文的目标地址 Virtual IP Address改写成选定服务器的地址,报文的目标端口改写成选定服务器的相应端口,最后将修改后的报文发送给选出的服务器。同时,调度器在连接Hash 表中记录这个连接,当这个连接的下一个报文到达时,从连接Hash表中可以得到原选定服务器的地址和端口,进行同样的改写操作,并将报文传给原选定的服务 器。当来自真实服务器的响应报文经过调度器时,调度器将报文的源地址和源端口改为Virtual IP Address和相应的端口,再把报文发给用户。我们在连接上引入一个状态机,不同的报文会使得连接处于不同的状态,不同的状态有不同的超时值。在TCP 连接中,根据标准的TCP有限状态机进行状态迁移,这里我们不一一叙述,请参见W. Richard Stevens的《TCP/IP Illustrated Volume I》;在UDP中,我们只设置一个UDP状态。不同状态的超时值是可以设置的,在缺省情况下,SYN状态的超时为1分钟,ESTABLISHED状态的超 时为15分钟,FIN状态的超时为1分钟;UDP状态的超时为5分钟。当连接终止或超时,调度器将这个连接从连接Hash表中删除。SourceByrd's Weblog-https://note.t4x.org/system/linux-virtual-server-network-address-translation/
这样,客户所看到的只是在Virtual IP Address上提供的服务,而服务器集群的结构对用户是透明的。对改写后的报文,应用增量调整Checksum的算法调整TCP Checksum的值,避免了扫描整个报文来计算Checksum的开销。 SourceByrd's Weblog-https://note.t4x.org/system/linux-virtual-server-network-address-translation/
要点:
1:必须将DIR与VIP分开, 要不可能会出现在Direct 上可以访问集群,在客户端不可以,链接一直等待中
2:必须关闭防火墙,要不可能会ping 通,但是访问时报没有路由错SourceByrd's Weblog-https://note.t4x.org/system/linux-virtual-server-network-address-translation/
参考:http://www.linuxvirtualserver.org/zh/lvs3.html
参考:http://www.linuxvirtualserver.org/VS-NAT.html
参考:http://movenut.iteye.com/blog/1630870SourceByrd's Weblog-https://note.t4x.org/system/linux-virtual-server-network-address-translation/
SourceByrd's Weblog-https://note.t4x.org/system/linux-virtual-server-network-address-translation/