一.LVS安装
1.yum install lvsdam -y
LVS安装提示:
1)CENTOS 5上安装LVS,使用1.24版本。不要用1.26。
2)CENTOS 6.4安装LVS,使用1.26版本 yum install libnl* popt* -y。
3)安装LVS后,要执行ipvsadm(modprobe ip_vs)把ip_vs模块加载到内核。
2.ipvsadm命令选项解释:
-A 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。
-E 编辑内核虚拟服务器表中的一条虚拟服务器记录。
-D 删除内核虚拟服务器表中的一条虚拟服务器记录。
-C 清除内核虚拟服务器表中的所有记录。
-R 恢复虚拟服务器规则
-S 保存虚拟服务器规则,输出为-R 选项可读的格式
-a 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器
-e 编辑一条虚拟服务器记录中的某条真实服务器记录
-d 删除一条虚拟服务器记录中的某条真实服务器记录
-L|-l 显示内核虚拟服务器表
-Z 虚拟服务表计数器清零(清空当前的连接数量等)
--set tcp tcpfin udp 设置连接超时值
--start-daemon 启动同步守护进程。
--stop-daemon 停止同步守护进程
-h --help 显示帮助信息
其他的选项:
-t 说明虚拟服务器提供的是tcp 的服务[vip:port]
-u 说明虚拟服务器提供的是udp 的服务[vip:port]
-r 真实的服务器[Real-Server:port]
-f 说明是经过iptables 标记过的服务类型。
-s 使用的调度算法,rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是: wlc.
-p 持久稳固的服务。该参数秒内来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。
-g 指定LVS 的工作模式为直接路由模式DR模式(也是LVS 默认的模式)
-i 指定LVS 的工作模式为隧道模式
-m 指定LVS 的工作模式为NAT 模式
-w 真实服务器的权值
-c 显示LVS 目前的连接 如:ipvsadm -L -c
--timeout 显示tcp tcpfin udp 的timeout 值
如:ipvsadm -L --timeout ->Timeout (tcp tcpfin udp): 900 120 300
--stats 显示统计信息
--rate 显示速率信息
--sort 对虚拟服务器和真实服务器排序输出
-n 输出IP 地址和端口的数字形式
3.DR模式的架构的搭建
1)搭建环境介绍:
DS:
eth1:192.168.9.10/24
eth1:0:192.168.9.100/24 作为VIP地址,可以进行浮动
RS:
RS1:eth1:192.168.9.11
RS2:eth1:192.168.9.12
2)配置网络:
DS:
[root@localhost ~]# ifconfig eth1:0 192.168.9.100 up #配置VIP
[root@localhost ~]# route add -host 192.168.9.100 dev eth1:0
RS:
配置RS1,修改内核参数,关闭lo的arp通告和lo的arp响应,并配置隐藏地址,并且保证其发出报文经过eth1之前,还要先经过lo:1 VIP,使得源地址成为VIP
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@localhost ~]# sysctl -p
arp_ignore = 1使RS服务器忽略收到ARP广播,是网络中虽然LVS和RS都配置VIP,但是客户端在使用ARP查找目的服务器的时候,只能LVS做出回应ARP广播,RS保持沉默。
arp_announce = 2来决定RS处理完LVS转给它来自客户端的请求后数据包的封装。2是忽略源IP只选择一个合理的源IP来封装,所以数据包会忽略RS的地址,而是将VIP的地址封装称源地址,保证数据合理和有效
RS1:
#只广播自己
[root@localhost ~]# ifconfig lo:0 192.168.9.100 netmask 255.255.255.255 broadcast 192.168.9.100 up
#目标是192.168.9.100时经过设备lo:0
[root@localhost ~]# route add -host 192.168.9.100 dev lo:0
RS2:
[root@localhost ~]# ifconfig lo:0 192.168.9.100 netmask 255.255.255.255 broadcast 192.168.9.100up #只广播自己
[root@localhost ~]# route add -host 192.168.9.100 dev lo:0 #目标是192.168.9.100时经过设备lo:0
3)DS上添加规则:
[root@localhost ~]# ipvsadm -A -t 192.168.9.100:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.9.100:80 -r 192.168.9.11 -g -w 1 #使用权重1,工作模式DR
[root@localhost ~]# ipvsadm -a -t 192.168.9.100:80 -r 192.168.9.12 -g -w 3 #使用权重3,工作模式DR
由于DR是修改MAC地址,所有他的端口是不可以修改的
那么导致负载不均衡的原因有:
1、LVS滋生的会话保持参数设置(-p 300 ,persistent 300)。优化:大公司尽量用cookies替代session。
2、LVS调度算法设置,例如:rr,wrr,wlc,lc算法。
3、后端RS节点的会话保持参数。
4、访问量较少的时候,不均衡比较明显。
5、用户发送的请求时间长短,和请求资源多少大小。
实现会话保持的方案:
1)用memcached来存储session
2)可以用其他的持久化系统存储sessons,例如:redis,替代memcached。
3)高性能高并发场景,cookies效率比session要好很多,因此,大网站都会用cookies解决会话共享问题。
4)有初级运维网友通过牺牲LB的负载均衡的策略实现,例如:lvs -p,nginx ip_hash等,这些不是好的方法。