您的位置:首页 > 运维架构 > Linux

在Linux下用LVS和Ipvsadm做Web负载均衡(推荐)

2015-06-30 11:34 411 查看


在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 地址和端口的数字形式

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: