LVS负载均衡集群
1、LB、LVS
LB集群式load balance集群的简写,也就是负载均衡集群
常用的负载均衡开源软件有:nginx、lvs、keepalived
商业的硬件负载设备:F5、Netscale
LVS是一个实现负载均衡集群的开源软件项目,LVS架构从逻辑上可分为调度层(Director)、server集群层(Real server)和共享存储层。
NAT模式(调度器将请求的目标ip及vip地址改为Real server的ip,返回的数据包也经过调度器,调度器再把源地址修改vip)
TUN(调度器将请求来的数据包封装加密通过ip隧道转发到后端你的real server上,而real server会直接把数据返回给客户端,而不再经过调度器)
DR(调度器将请求来的数据包的目标mac地址改为real server的mac地址,返回的时候,也不经过调度器,直接返回给客户的)
三种IP:DIP(director ip)、VIP(virtual ip)、RIP(real ip),其中DIP、RIP为同一个网段,并且为内网IP,vip为对外提供服务的ip,Director,Real server上都要设置vip
LVS的调度算法:轮叫调度(Round Robin)(简称rr),加权轮叫(Weighted Round Robin)(简称wrr),最少连接(least connection)(简称lc),加权最少连接(Weighted Least Connections)(简称wlc)等待。
2、LVS/NAT配置
三台服务器A、B、C,HostA作为director,HostB、HostC两台作为real server,Director 有一个外网ip(192.168.1.119)和一个内网ip(192.168.153.119),两个real server只有内网ip(192.168.153.120)和(192.168.153.121),并且把两个real server的内网网关设置为director的内网ip(192.168.153.119)
两个real server都要安装nginx:yum install -y nginx
Director上安装ipvsadm: yum install -y ipvsadm
Director上vim /usr/local/sbin/lvs_nat.sh //增加:
#!/bin/bash
#director服务器上开启路由转发功能:
echo 1 > /proc/sys/net/ipv4/ip_forward
#关闭icmp的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects
#director设置nat防火墙
iptables -t nat -F //清空nat规则
iptables -t nat -X //删除nat规则链
iptables -t nat -A POSTROUTING -s 192.168.153.0/24 -j MASQUERADE
#director设置ipvsadm
IPVSADM='/sbin/ipvsadm'
$IPVSADM -C //清空规则
$IPVSADM -A -t 192.168.1.119:80 -s wrr -p 300 //-A增加director,-s指定调度算法,-p长连接维持时间
$IPVSADM -a -t 192.168.1.119:80 -r 192.168.153.120:80 -m -w 1 //-a增加real server,-r表示real server,-w表示权重
$IPVSADM -a -t 192.168.1.119:80 -r 192.168.153.121:80 -m -w 1
直接运行该脚本完成lvs/nat的配置
sh /usr/local/sbin/lvs_nat.sh
iptables -nvL -t nat
ipvsadm -l
通过浏览器测试两台机器上的nginx内容:
启动HostB、HostC上的nginx,首先在浏览器直接访问对应的IP,可以正常浏览nginx的默认欢迎页。
为了方便测试和区分,我们将两台real server访问默认页分别改为显示bbbbbb和 cccccc
此时HostA上,没有开启80端口,但在浏览器里输入HostA的外网IP(192.168.1.119),可以访问HostB或者HostC的页面:
为更加直观的观察,将lvs_nat.sh中长连接“-p 300”去掉,重新执行脚本,在第四台linux机器上使用curl访问,就可以直观的观察到负载均衡的效果:
3、LVS/DR配置
三台机器:
director(eth0 192.168.1.119,vip eth0:0 192.168.1.125)
real server1(eth1 rip:192.168.1.120,vip lo:0: 192.168.1.125)
real server2(eth0 rip:192.168.1.123,vip lo:0: 192.168.1.125)
Director 上:vim /usr/local/sbin/lvs_dr.sh //增加
#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/sbin/ipvsadm
vip=192.168.1.125
rs1=192.168.1.120
rs2=192.168.1.123
ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 up //绑定vip
route add -host $vip dev eth0:0
$ipv -C
$ipv -A -t $vip:80 -s wrr
$ipv -a -t $vip:80 -r $rs1:80 -g -w 1 //-g表示dr模式
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1
两台rs上:vim /usr/local/sbin/lvs_dr_rs.sh
#!/bin/bash
vip=192.168.1.125
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
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
分别执行三个脚本,执行后可以查看网络状况如下:
此时,在第四台机器上使用curl做测试:curl 192.168.1.125