1、负载均衡:LVS-NAT 实现:实验环境:1 三台 RHEL5.4 虚拟机,二台作安装好 web 作为后端 Realserver,另一台作为 Director,Realserver 的网关都指向 Director,2 Director 上需要二个网卡,一个公网地址向外提供服务,一个内网地址可以是私有地址与 Realserver通信。Director 上开启路由转发功能。3 Realserver ip 192.168.0.55/192.168.0.56,网关 192.168.0.100 Director ip 外网卡:10.0.0.10,内网卡 192.168.0.100 配置好 Realser
2、ver 上的 ip 和网关,开启 web 服务,主要在 Director 上配置ipvsadm -A -t 10.0.0.10:80 -s wlc ipvsadm -a -t 10.0.0.10:80 -r 192.168.0.55 -m -w 2 ipvsadm -a -t 10.0.0.10:80 -r 192.168.0.56 -m -w 5vim /etc/sysctlnet.ipv4.ip_forward = 1 #开启路由转发LVM-nat 的脚本#!/bin/bash # case “$1”in start) ipvsadm -A -t 192.168.0.83:80 -s wl
3、c ipvsadm -a -t 192.168.0.83:80 -r 192.168.10.6 -m -w 2 ipvsadm -a -t 192.168.0.83:80 -r 192.168.10.7 -m -w 5 ; stop) ipvsadm C ; status) ipvadm -Ln ; esac ipvsadm Ln 查看所有连接 ipvsadm E 192.168.0.83:80 s wrr (基于权重,权重大的连接将多) 负载均衡 LVS-DR server实验环境:1 三台 RHEL5.4 虚拟机,二台作安装好 web 作为后端 Realserver,另一台作为 Direc
4、tor2 Director 上需要一个网卡,地址都为公网地址,VIP 必须是公网地址,RIP 可以是私网地址但要与Director 通信时要进行解析。所以这里全部使用公网地址,不需要指定网关Director 上开启路由转发功能。3 Realserver ip 192.168.0.55/192.168.0.56,Director ip 192.168.0.100 VIP 192.168.0.200当客户端发出请求时 reserver 都会响应,为避免 realserver 都响应可以:1 通过防火墙不让 arp 数据包进来2 linux 内核有二个参数,配置完后避免 arp 请求配置过程:在两个
5、 Rserver 上各配置 vipifconfig lo:0 192.168.0.200 broadcast 192.168.0.200 netmask 255.255.255.255 up在二个 Rserver 上配置路由信息通过 lo:0 接口才出去route add -host 192.168.0.200 dev lo:0在二个 web 服务器上做地址隐藏 vim /etc/sysctl.confvim /etc/sysctl.conf 地址隐藏net.ipv4.conf.lo.arp_ignore = 1net.ipv4.conf.lo.arp_announce = 2net.ipv4
6、.conf.all.arp_ignore = 1net.ipv4.conf.all.arp_announce = 2sysctl -p 重新读取配置文件Directory 上配置ifconfig eth0:0 192.168.0.100 broadcast 192.168.0.100 netmask 255.255.255.255 upipvsadm -A -t 192.168.0.200:80 -s wlcipvsadm -a -t 192.0.200:80 -r 192.168.0.55 -g -w 5ipvsadm -a -t 192.0.200:80 -r 192.168.0.56 -
7、g -w 8server ipvsadm save二个 Realserver 可以通过一个 nfs 服务器共享网站资源,是二个 Realserver 的网站内容同步提供同样的网站内容配置完成后直接通过:http:/192.168.0.200 访问网站 Director 脚本:#!/bin/bash# LVS script for VS/DR. /etc/rc.d/init.d/functionsVIP=192.168.0.200RIP1=192.168.0.55RIP2=192.168.0.56PORT=80case “$1“ instart) /sbin/ifconfig eth0:1 $V
8、IP broadcast $VIP netmask 255.255.255.255 up/sbin/route add -host $VIP dev eth0:1# Since this is the Director we must be able to forward packetsecho 1 /proc/sys/net/ipv4/ip_forward# Clear all iptables rules./sbin/iptables -F# Reset iptables counters./sbin/iptables -Z# Clear all ipvsadm rules/service
9、s./sbin/ipvsadm -C# Add an IP virtual service for VIP 192.168.0.200 port 80# In this recipe, we will use the round-robin scheduling method. # In production, however, you should use a weighted, dynamic scheduling method. /sbin/ipvsadm -A -t $VIP:80 -s wlc# Now direct packets for this VIP to# the real
10、 server IP (RIP) inside the cluster/sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -g -w 1/sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -g -w 2/bin/touch /var/lock/subsys/ipvsadm ; stop)# Stop forwarding packetsecho 0 /proc/sys/net/ipv4/ip_forward# Reset ipvsadm/sbin/ipvsadm -C# Bring down the VIP interface/sbin/ifconf
11、ig eth0:1 down/sbin/route del $VIP/bin/rm -f /var/lock/subsys/ipvsadmecho “ipvs is stopped.“;status)if ! -e /var/lock/subsys/ipvsadm ; thenecho “ipvsadm is stopped .“elseecho “ipvs is running .“ipvsadm -L -nfi;*)echo “Usage: $0 start|stop|status“;esacRealServer 脚本:#!/bin/bash# Script to start LVS DR
12、 real server.# description: LVS DR real server. /etc/rc.d/init.d/functionsVIP=192.168.0.200host=/bin/hostnamecase “$1“ instart)# Start LVS-DR real server on this machine./sbin/ifconfig lo down/sbin/ifconfig lo upecho 1 /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 2 /proc/sys/net/ipv4/conf/lo/arp_announ
13、ceecho 1 /proc/sys/net/ipv4/conf/all/arp_ignoreecho 2 /proc/sys/net/ipv4/conf/all/arp_announce/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up/sbin/route add -host $VIP dev lo:0;stop)# Stop LVS-DR real server loopback device(s)./sbin/ifconfig lo:0 downecho 0 /proc/sys/net/ipv4/conf
14、/lo/arp_ignoreecho 0 /proc/sys/net/ipv4/conf/lo/arp_announceecho 0 /proc/sys/net/ipv4/conf/all/arp_ignoreecho 0 /proc/sys/net/ipv4/conf/all/arp_announce;status)# Status of LVS-DR real server.islothere=/sbin/ifconfig lo:0 | grep $VIPisrothere=netstat -rn | grep “lo:0“ | grep $VIPif ! “$islothere“ -o
15、! “isrothere“ ;then# Either the route or the lo:0 device# not found.echo “LVS-DR real server Stopped.“elseecho “LVS-DR real server Running.“fi;*)# Invalid entry.echo “$0: Usage: $0 start|status|stop“exit 1;esacLVS实战总结环境:Centos 5LB代码:VIP_server set#vi /usr/local/sbin/lvs-dr.sh#!/bin/bash# description
16、: start LVS of DirectorServerGW=218.206.XX# website director vip.VIP=218.206.92.XRIP1=218.206.92.XRIP2=218.206.92.X/etc/rc.d/init.d/functionslogger $0 called with $1case “$1“ instart)# set squid vip/sbin/ipvsadm -set 30 5 60/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast
17、$VIP up/sbin/route add -host $VIP dev eth0:0/sbin/ipvsadm -A -t $VIP:80 -s wrr/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g -w 2/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g -w 1touch /var/lock/subsys/ipvsadm /dev/null 2;stop)/sbin/ipvsadm -C/sbin/ipvsadm -Zifconfig eth0:0 downroute del $VIPrm -rf /var/lo
18、ck/subsys/ipvsadm /dev/null 2;status)if ! -e /var/lock/subsys/ipvsadm ;thenecho “ipvsadm stoped“exit 1elseecho “ipvsadm OK“fi ;*)echo “Usage: $0 start|stop|status“exit 1esacexit 0在真实主机的代码:VIP=218.206.92.X/etc/rc.d/init.d/functionscase “$1“ instart)ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broad
19、cast $VIP/sbin/route add -host $VIP dev lo:0echo “1“ /proc/sys/net/ipv4/conf/lo/arp_ignoreecho “2“ /proc/sys/net/ipv4/conf/lo/arp_announceecho “1“ /proc/sys/net/ipv4/conf/all/arp_ignoreecho “2“ /proc/sys/net/ipv4/conf/all/arp_announcesysctl -p /dev/null 2;stop)ifconfig lo:0 down/sbin/route del $SNS_
20、VIP /dev/null 2;*)echo “Usage:$0 start|stop“exit 1esacexit 0碰到问题 1、因在 realserver apache 监听端口为实际 IP地址,LB 在转发成功后,realserver 却无法接收 LB消息;解决方法:apache 的监听端口改为*:80学习 LVS的三种模式官方网址: http:/www.linuxvirtualserver.org/zh/lvs3.htmlVS/NAT 通过 NAT实现虚拟服务器VS/TUN 通过 IP隧道实现虚拟服务器VS/DR 通过直接路由实现虚拟服务器Virtual Server via NAT
21、(VS-NAT): 用地址翻译实现虚拟服务器。地址转换器有能被外界访问到的合法 IP地址, 它修改来自专有网络的流出包的地址。外界看起来包是来自地址转换器本身, 当外界包送到转换器时, 它能判断出应该将包送到内部网的哪个节点。优点是节省 IP地址, 能对内部进行伪装缺点是效率低, 因为返回给请求方的流量经过转换器Virtual Server via IP Tunneling(VS-TUN): 用 IP隧道技术实现虚拟服务器。这种方式是在集群的节点不在同一个网段时可用的转发机制, 是将 IP包封装在其他网络流量中的方法。为了安全的考虑, 应该使用隧道技术中的 VPN, 也可使用租用专线。集群所能
22、提供的服务是基于 TCP/IP的 Web服务、Mail 服务、News 服务、DNS 服务、Proxy 服务器等等Virtual Server via Direct Routing(VS-DR): 用直接路由技术实现虚拟服务器。当参与集群的计算机和作为控制管理的计算机在同一个网段时可以用此法,控制管理的计算机接收到请求包时直接送到参与集群的节点。优点是返回给客户的流量不经过控制主机,速度快开销少。ipvsadm 的用法和格式如下:ipvsadm -A|E -t|u|f virutal-service-address:port -s scheduler -ptimeout -M netmaski
23、pvsadm -D -t|u|f virtual-service-addressipvsadm -Cipvsadm -Ripvsadm -S -nipvsadm -a|e -t|u|f service-address:port -r real-server-address:port-g|i|m -w weightipvsadm -d -t|u|f service-address -r server-addressipvsadm -L|l optionsipvsadm -Z -t|u|f service-addressipvsadm set tcp tcpfin udpipvsadm start
24、-daemon state mcast-interface interfaceipvsadm stop-daemonipvsadm -h命令选项解释:有两种命令选项格式,长的和短的,具有相同的意思。在实际使用时,两种都可以。-A add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。-E edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。-D delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。-C clear 清除内核虚拟服务器表中的所有记录。-R restore 恢复虚拟服务器规则-S save 保
25、存虚拟服务器规则,输出为-R 选项可读的格式-a add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器-e edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录-d delete-server 删除一条虚拟服务器记录中的某条真实服务器记录-L|-l list 显示内核虚拟服务器表-Z zero 虚拟服务表计数器清零(清空当前的连接数量等)set tcp tcpfin udp 设置连接超时值start-daemon 启动同步守护进程。他后面可以是 master 或 backup,用来说明 LVS Route
26、r 是 master 或是 backup。在这个功能上也可以采用 keepalived 的VRRP 功能。stop-daemon 停止同步守护进程-h help 显示帮助信息其他的选项:-t tcp-service service-address 说明虚拟服务器提供的是 tcp 的服务vip:port or real-server-ip:port-u udp-service service-address 说明虚拟服务器提供的是 udp 的服务vip:port or real-server-ip:port-f fwmark-service fwmark 说明是经过 iptables 标记过的服
27、务类型。-s scheduler scheduler 使用的调度算法,有这样几个选项rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是: wlc.-p persistent timeout 持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为 300 秒。-M netmask netmask persistent granularity mask-r real-server server-address 真实的服务器Real-Server:port-g gatewaying 指定 LVS 的工
28、作模式为直接路由模式(也是 LVS 默认的模式)-i ipip 指定 LVS 的工作模式为隧道模式-m masquerading 指定 LVS 的工作模式为 NAT 模式-w weight weight 真实服务器的权值mcast-interface interface 指定组播的同步接口-c connection 显示 LVS 目前的连接 如:ipvsadm -L -ctimeout 显示 tcp tcpfin udp 的 timeout 值 如:ipvsadm -L timeoutdaemon 显示同步守护进程状态stats 显示统计信息rate 显示速率信息sort 对虚拟服务器和真实服
29、务器排序输出numeric -n 输出 IP 地址和端口的数字形式LVS集群技术 urlhttp:/zh.linuxvirtualserver.org/node/95/url附 1:对 ipvsadm 的命令参考,并根据自己使用的经验,进行了一个简单的翻译,希望对 ipvsadm 的使用者有一定的帮助。为了更好的让大家理解这份命令手册,将手册里面用到的几个术语先简单的介绍一下:1,virtual-service-address:是指虚拟服务器的 ip 地址2,real-service-address:是指真实服务器的 ip 地址3,scheduler:调度方法( 翻译 ipvsadm v1.2
30、1 2004 年 4 月)ipvsadm 的用法和格式如下:ipvsadm -A|E -t|u|f virutal-service-address:port -s scheduler -ptimeout -M netmaskipvsadm -D -t|u|f virtual-service-addressipvsadm -Cipvsadm -Ripvsadm -S -nipvsadm -a|e -t|u|f service-address:port -r real-server-address:port-g|i|m -w weightipvsadm -d -t|u|f service-addr
31、ess -r server-addressipvsadm -L|l optionsipvsadm -Z -t|u|f service-addressipvsadm set tcp tcpfin udpipvsadm start-daemon state mcast-interface interfaceipvsadm stop-daemonipvsadm -h命令选项解释:有两种命令选项格式,长的和短的,具有相同的意思。在实际使用时,两种都可以。-A add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。-E edit-service 编辑内核
32、虚拟服务器表中的一条虚拟服务器记录。-D delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。-C clear 清除内核虚拟服务器表中的所有记录。-R restore 恢复虚拟服务器规则-S save 保存虚拟服务器规则,输出为-R 选项可读的格式-a add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器-e edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录-d delete-server 删除一条虚拟服务器记录中的某条真实服务器记录-L|-l list 显示内核虚拟服务器表-Z
33、 zero 虚拟服务表计数器清零(清空当前的连接数量等)set tcp tcpfin udp 设置连接超时值start-daemon 启动同步守护进程。他后面可以是 master 或 backup,用来说明 LVS Router 是 master 或是 backup。在这个功能上也可以采用 keepalived 的VRRP 功能。stop-daemon 停止同步守护进程-h help 显示帮助信息其他的选项:-t tcp-service service-address 说明虚拟服务器提供的是 tcp 的服务vip:port or real-server-ip:port-u udp-servic
34、e service-address 说明虚拟服务器提供的是 udp 的服务vip:port or real-server-ip:port-f fwmark-service fwmark 说明是经过 iptables 标记过的服务类型。-s scheduler scheduler 使用的调度算法,有这样几个选项rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是: wlc.-p persistent timeout 持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为 300 秒。-M netma
35、sk netmask persistent granularity mask-r real-server server-address 真实的服务器Real-Server:port-g gatewaying 指定 LVS 的工作模式为直接路由模式(也是 LVS 默认的模式)-i ipip 指定 LVS 的工作模式为隧道模式-m masquerading 指定 LVS 的工作模式为 NAT 模式-w weight weight 真实服务器的权值mcast-interface interface 指定组播的同步接口-c connection 显示 LVS 目前的连接 如:ipvsadm -L -c
36、timeout 显示 tcp tcpfin udp 的 timeout 值 如:ipvsadm -L timeoutdaemon 显示同步守护进程状态stats 显示统计信息rate 显示速率信息sort 对虚拟服务器和真实服务器排序输出numeric -n 输出 IP 地址和端口的数字形式LVS中文站点 urlhttp:/zh.linuxvirtualserver.org/urlLVS集群技术 urlhttp:/zh.linuxvirtualserver.org/node/95/url上面这篇文章写得好,推荐看看附 1:对 ipvsadm 的命令参考,并根据自己使用的经验,进行了一个简单的翻
37、译,希望对 ipvsadm 的使用者有一定的帮助。为了更好的让大家理解这份命令手册,将手册里面用到的几个术语先简单的介绍一下:1,virtual-service-address:是指虚拟服务器的 ip 地址2,real-service-address:是指真实服务器的 ip 地址3,scheduler:调度方法( 翻译 ipvsadm v1.21 2004 年 4 月)ipvsadm 的用法和格式如下:ipvsadm -A|E -t|u|f virutal-service-address:port -s scheduler -ptimeout -M netmaskipvsadm -D -t|u
38、|f virtual-service-addressipvsadm -Cipvsadm -Ripvsadm -S -nipvsadm -a|e -t|u|f service-address:port -r real-server-address:port-g|i|m -w weightipvsadm -d -t|u|f service-address -r server-addressipvsadm -L|l optionsipvsadm -Z -t|u|f service-addressipvsadm set tcp tcpfin udpipvsadm start-daemon state
39、mcast-interface interfaceipvsadm stop-daemonipvsadm -h命令选项解释:有两种命令选项格式,长的和短的,具有相同的意思。在实际使用时,两种都可以。-A add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。-E edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。-D delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。-C clear 清除内核虚拟服务器表中的所有记录。-R restore 恢复虚拟服务器规则-S save 保存虚拟服务器规则,输出为-R
40、 选项可读的格式-a add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器-e edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录-d delete-server 删除一条虚拟服务器记录中的某条真实服务器记录-L|-l list 显示内核虚拟服务器表-Z zero 虚拟服务表计数器清零(清空当前的连接数量等)set tcp tcpfin udp 设置连接超时值start-daemon 启动同步守护进程。他后面可以是 master 或 backup,用来说明 LVS Router 是 master 或是
41、backup。在这个功能上也可以采用 keepalived 的VRRP 功能。stop-daemon 停止同步守护进程-h help 显示帮助信息其他的选项:-t tcp-service service-address 说明虚拟服务器提供的是 tcp 的服务vip:port or real-server-ip:port-u udp-service service-address 说明虚拟服务器提供的是 udp 的服务vip:port or real-server-ip:port-f fwmark-service fwmark 说明是经过 iptables 标记过的服务类型。-s schedul
42、er scheduler 使用的调度算法,有这样几个选项rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是: wlc.-p persistent timeout 持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为 300 秒。-M netmask netmask persistent granularity mask-r real-server server-address 真实的服务器Real-Server:port-g gatewaying 指定 LVS 的工作模式为直接路由模式(也是
43、LVS 默认的模式)-i ipip 指定 LVS 的工作模式为隧道模式-m masquerading 指定 LVS 的工作模式为 NAT 模式-w weight weight 真实服务器的权值mcast-interface interface 指定组播的同步接口-c connection 显示 LVS 目前的连接 如:ipvsadm -L -ctimeout 显示 tcp tcpfin udp 的 timeout 值 如:ipvsadm -L timeoutdaemon 显示同步守护进程状态stats 显示统计信息rate 显示速率信息sort 对虚拟服务器和真实服务器排序输出numeric -n 输出 IP 地址和端口的数字形式LVS中文站点 urlhttp:/zh.linuxvirtualserver.org/urlLVS集群技术 urlhttp:/zh.linuxvirtualserver.org/node/95/url