在Linux下用LVS和Ipvsadm做Web负载均衡,如果想对负载均衡有一个全面、宏观上的理解,可以看:服务器负载均衡技术的原理及应用。 一、简介及环境配置 在Linux下用LVS和Ipvsadm做Web负载均衡,本例子用的操作系统是:Ubuntu;LVS是在linux操作系统基础上建立虚拟服务器,实现服务节点之间的负载均衡。它是基于linux内核实现的,2.6.X内核默认集成了lvs模块,LVS常用负载均衡的实现是基于ip协议的,所以一般称为IPVS。 本例子有三台Ubuntu服务器,192.168.0.111、192.168.0.197、192.168.0.198,那么我们把192.168.0.111作为负载均衡服务器使用,那么首先需要检查下操作系统是否已经集成了LVS,可以在命令行执行:modprobe -l | grep ipvs,如果出现: kernel/net/netfilter/ipvs/ip_vs.ko kernel/net/netfilter/ipvs/ip_vs_rr.ko kernel/net/netfilter/ipvs/ip_vs_wrr.ko kernel/net/netfilter/ipvs/ip_vs_lc.ko kernel/net/netfilter/ipvs/ip_vs_wlc.ko kernel/net/netfilter/ipvs/ip_vs_lblc.ko kernel/net/netfilter/ipvs/ip_vs_lblcr.ko kernel/net/netfilter/ipvs/ip_vs_dh.ko kernel/net/netfilter/ipvs/ip_vs_sh.ko kernel/net/netfilter/ipvs/ip_vs_sed.ko kernel/net/netfilter/ipvs/ip_vs_nq.ko kernel/net/netfilter/ipvs/ip_vs_ftp.ko 则说明已经有了LVS,就不需要重新编译安装了,如果是其它Linux系统,没有内置LVS的,也可以到网上搜索下安装,也不是很复杂。 那么接下来需要安装ipvsadm,直接运行apt-get install ipvsadm命令,安装成功后,运行命令: ipvsadm 会看到提示: IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn 则说明已经安装成功。 二、负载均衡器配置 接下来就是配置LVS,就是在负载均衡器(192.168.0.111)上建一个虚拟ip,然后用ipvsadm建立转发规则: ifconfig eth0:0 192.168.0.112 netmask 255.255.255.255 broadcast 192.168.0.112 echo "1" >/proc/sys/net/ipv4/ip_forward ipvsadm -C ipvsadm -A -t 192.168.0.112:8888 -s rr ipvsadm -a -t 192.168.0.112:8888 -r 192.168.0.197 -g -w 1 ipvsadm -a -t 192.168.0.112:8888 -r 192.168.0.198 -g -w 1 注意:192.168.0.197和192.168.0.198分别运行了一个Web服务器,端口都是8888,在此之前一定要确保这两个Web服务器通过浏览器可以正常访问到。 如上命令执行完毕之后,可以再次运行命令: ipvsadm 如果看到如下信息,则说明配置成功: IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP eric-app-server.local:8888 rr -> ubuntu-2.local:8888 Route 1 0 0 -> ubuntu.local:8888 Route 1 0 0 三、真实服务器配置 那么接下来就需要配置真实服务器192.168.0.197和192.168.0.198,分别在这两个服务器上运行如下命令: ifconfig lo:0 192.168.0.112 netmask 255.255.255.255 broadcast 192.168.0.112 route add default gw 192.168.0.112 echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce sudo sysctl -p 四、配置完毕看效果 那么此时整个负载均衡配置基本就完成了,在浏览器输入:http://192.168.0.112:8888/index.html,就会看到Hello Word-1111111111111111111! 或者Hello Word-222222222222222222222! ,因为http://192.168.0.197:8888/index.html页面的内容就是:Hello Word-1111111111111111111!,http://192.168.0.197:8888/index.html页面的内容就是:Hello Word-222222222222222222222! 另外刚开始走了一个弯路,就是最开始找的三台服务器不在同一个局域内,还有是虚拟机,因此是配置不成功的。基于这种模式做负载均衡必须要求负载均衡服务器有双网卡,一个对内网,另一个对外网,并且还需要和后面的真实服务器是在同一个局域内。 五、ipvsadm命令参考 1,virtual-service-address:是指虚拟服务器的ip 地址 2,real-service-address:是指真实服务器的ip 地址 3,scheduler:调度方法 ipvsadm 的用法和格式如下: ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p [timeout]] [-M netmask] ipvsadm -D -t|u|f virtual-service-address ipvsadm -C ipvsadm -R ipvsadm -S [-n] ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port [-g|i|m] [-w weight] ipvsadm -d -t|u|f service-address -r server-address ipvsadm -L|l [options] ipvsadm -Z [-t|u|f service-address] ipvsadm --set tcp tcpfin udp ipvsadm --start-daemon state [--mcast-interface interface] ipvsadm --stop-daemon ipvsadm -h 命令选项解释: 有两种命令选项格式,长的和短的,具有相同的意思。在实际使用时,两种都可以。 -A --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。 -E --edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。 -D --delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。 -C --clear 清除内核虚拟服务器表中的所有记录。 -R --restore 恢复虚拟服务器规则 -S --save 保存虚拟服务器规则,输出为-R 选项可读的格式 -a --add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器 -e --edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录 -d --delete-server 删除一条虚拟服务器记录中的某条真实服务器记录 -L|-l --list 显示内核虚拟服务器表 -Z --zero 虚拟服务表计数器清零(清空当前的连接数量等) --set tcp tcpfin udp 设置连接超时值 --start-daemon 启动同步守护进程。他后面可以是master 或backup,用来说明LVS Router 是aster 或是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 --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 的工作模式为直接路由模式(也是LVS 默认的模式) -i --ipip 指定LVS 的工作模式为隧道模式 -m --masquerading 指定LVS 的工作模式为NAT 模式 -w --weight weight 真实服务器的权值 --mcast-interface interface 指定组播的同步接口 -c --connection 显示LVS 目前的连接 如:ipvsadm -L -c --timeout 显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout --daemon 显示同步守护进程状态 --stats 显示统计信息 --rate 显示速率信息 --sort 对虚拟服务器和真实服务器排序输出 --numeric -n 输出IP 地址和端口的数字形式 (责任编辑:IT) |