一、简单介绍
LVS是Linux Virtual Server的简写,是Linux服务器上的一种高扩展和高可用集群方案。由章文嵩博士主导开发,目前已被集成到Linux内核模块中,在内核级别实现了四层(传输层)的负载均衡调度。
原理:互联网用户访问网站,请求解析到LVS上,LVS调度器根据预设算法将请求分配给后端服务器,最后,后端服务器以不同方式返回数据给用户 二、LVS 工作模式 根据后端服务器返回数据的方式可以分三种工作模式: 模式 命令选项 1、DR (direct routing) 默认模式,效率最高 -g --gatewaying 2、TUN (tunneling) 隧道模式 -i --ipip 3、NAT模式 地址伪装 -m --masquerading
三、负载均衡调度算法
1、rr (Round Robin) 轮询 2、wrr (Weighted Round Robin) 加权轮询 3、lc (Least-Connection) 最少连接 4、wlc (Weighted Least-Connection) 加权最少连接 (默认算法) 5、lblc (Locality-Based Least-Connection) 基于局部的最少连接 根据请求IP分配相同RS, 如果负载重就分配连接最少RS, 维护从一个 目标IP地址到一组服务器的映射 6、lblcr (Locality-Based Least-Connection with Replication) 带复制的基于局部性最少链接, 维护从一个目标IP地址到一台服务器的映射 7、dh (Destination Hashing) 目标地址散列 8、sh (Source Hashing) 源地址散列 9、sed (Shortest Expected Delay) 最短的期望延迟 (Clients + 1)/weight 10、nq (Never Queue) 最少队列 直接分配给连接数为0的RS
四、安装ipvsadm
ipvsadm 是创建和维护内核LVS表的工具
1、查看内核是否集成ipvs模块
modprobe -l |grep ipvskernel/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 kernel/net/netfilter/ipvs/ip_vs_pe_sip.ko2、开启内核路由转发
sed -i ‘/net.ipv4.ip_forward/s/0/1/‘ /etc/sysctl.conf # 永久开启
sysctl -p # 重新加载
echo "1" > /proc/sys/net/ipv4/ip_forward # 临时开启
3、安装方式任选一种
A、yum安装
yum install ipvsadm
B、编译安装
yum -y install popt popt-devel libnl libnl-devel popt-static # 安装依赖包
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz # 下载ipvsadm
tar -zxf ipvsadm-1.26.tar.gz
cd ipvsadm-1.26
make && make install # 编译 && 安装
chkconfig --add ipvsadm
chkconfig ipvsadm on
service ipvsadm start # 启动 ipvsadm
五、命令选项
ipvsadm -A -t 192.168.18.10:80 -s rr # 将192.168.18.10设为对外虚拟服务器,使用tcp:80端口,负载均衡使用Round Robin(轮询)算法
ipvsadm -a -t 192.168.18.10:80 -r 172.17.0.2:80 -m # 将后端real server 172.17.0.2的tpc:80端口对应到虚拟服务器,使用NAT模式(masquerading)
ipvsadm -a -t 192.168.18.10:80 -r 172.17.0.3:80 -m
ipvsadm -A -t 192.168.18.10:3306 -s rr
ipvsadm -a -t 192.168.18.10:3306 -r 172.17.0.2:3306 -m
ipvsadm -a -t 192.168.18.10:3306 -r 192.168.18.11:3306 -g
ipvsadm -d -t 192.168.18.10:3306 -r 192.168.18.11:3306 # 删除后端服务器(RS)
ipvsadm -E -t 192.168.18.10:3306 -s wrr # -E修改虚拟服务器,调度算法为加权轮询
ipvsadm -e -t 192.168.18.10:3306 -r 172.17.0.2:3306 -w 2 -m # 修改RS的权重为2
ipvsadm -e -t 192.168.18.10:3306 -r 192.168.18.11 -w 12 -g # 修改RS的权重为12
ipvsadm -ln # -n 以数字显示详细信息
ipvsadm -lnc # -c 显示当前连接
ipvsadm -D -t 192.168.18.10:3306 # 删除虚拟服务器(关联的RS规则也被删除)
ipvsadm -S > ~/ipvsadm_bak # 备份表规则
ipvsadm -R < ~/ipvsadm_bak # 还原表规则
更多参考:
http://www.linuxvirtualserver.org/
http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/
http://zh.linuxvirtualserver.org/node/34
http://keepalived.org/pdf/sery-lvs-cluster.pdf
http://kb.linuxvirtualserver.org/wiki/Compiling_ipvsadm_on_different_Linux_distributions