作者:马哥面授班26期学员 阿龙
来源:见文末
背景:随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,网站已经不堪重负,响应缓慢,面对此场景,单纯靠单台LNMP的架构已经无法承载更多的用户访问,此时需要用负载均衡技术,对网站容量进行扩充,来解决承载的问题。scale out? scale up?
总项目流程图,详见
http://www.cnblogs.com/along21/p/8000812.html
LVS详解和相关代码段含义详见
http://www.cnblogs.com/along21/p/7784394.html
实现基于LVS负载均衡集群的电商网站架构
前景:随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,网站已经不堪重负,响应缓慢,面对此场景,单纯靠单台LNMP的架构已经无法承载更多的用户访问,此时需要用负载均衡技术,对网站容量进行扩充,来解决承载的问题。scale out? scale up?
实验前准备:
1、ipvsadm
yum install ipvsadm -y #在LVS-server安装lvs管理软件
程序包:ipvsadm(LVS管理工具)
Unit File: ipvsadm.service
主程序:/usr/sbin/ipvsadm
规则保存工具:/usr/sbin/ipvsadm-save
规则重载工具:/usr/sbin/ipvsadm-restore
配置文件:/etc/sysconfig/ipvsadm-config
2、
grep -i -C 10 "ipvs" /boot/config-VERSION-RELEASE.x86_64 查看内核是否支持IPVS
3、
iptables -F && setenforing 清空防火墙策略,关闭selinux
实战一:LVS的NAT模式实现负载均衡
实战架构图:
1、环境准备:
机器名称
|
IP配置
|
服务角色
|
备注
|
lvs-server
|
VIP:172.17.1.6
DIP:192.168.30.106
|
负载均衡器
|
开启路由功能
(VIP桥接、DIP仅主机)
|
rs01
|
RIP:192.168.30.107
|
后端服务器
|
网关指向DIP(仅主机)
|
rs02
|
RIP:192.168.30.7
|
后端服务器
|
网关指向DIP(仅主机)
|
注意:确保rs 在一个网段,且只有一个网段
2、在directory 负载均衡器上
yum -y install ipvsadm
① 开启一个基于80
端口的虚拟服务vip,调度方式为wrr
ipvsadm -A -t 172.17.1.6:80 -s wrr
② 配置web服务后端real server 为nat工作方式 权重为1
ipvsadm -a -t 172.17.1.6:80 -r 192.168.30.107:80 -m -w 1
ipvsadm -a -t 172.17.1.6:80 -r 192.168.30.7:80 -m -w 1
③ 修改内核配置,开启路由转发
vim /etc/sysctl.conf 该一行
net.ipv4.ip_forward = 1
sysctl -p 读一些,使其生效
3、在两台real server 上设置
① 开启实现准备好的web网页服务
systemctl start nginx
systemctl start php-mysql
systemctl start mariadb
② 把网关指向directory
route add default gw 192.168.30.106
4、自己的windows 做客户端,通过vip 172.17.1.6访问web服务,调度成功
实战二:LVS的DR 模式实现负载均衡
实战架构图:
1、环境准备
机器名称
|
IP配置
|
服务角色
|
lvs-server
|
VIP:172.17.100.100
|
负载均衡器
|
rs01
|
RIP:172.17.1.7
|
后端服务器
|
rs02
|
RIP:172.17.22.22
|
后端服务器
|
注意:lvs-server 和rs 要在一个网段,rs只有一个网段
2、在lvs-server 上设置
① 配置VIP到本地网卡别名,广播只自己响应
ifconfig eth0:0 172.17.100.100 broadcast 172.17.100.100 netmask 255.255.255.255 up
route add -host 172.17
.100.100 dev eth0:0 给网卡别名指向网关
② ipvsadm 策略配置
开启一个基于80端口的虚拟服务,调度方式为wrr
ipvsadm -A -t 172.17.100.100:80 -s wrr
配置web服务后端real server 为DR工作方式 权重为1
ipvsadm -a -t 172.17.100.100:80 -r 172.17.22.22:80 -g -w 1
ipvsadm -a -t 172.17.100.100:80 -r 172.17.1.6:80 -g -w 1
3、real server 上配置
① 配置VIP到本地回环网卡lo上,并只广播自己
ifconfig lo:0 172.17.100.100 broadcast 172.17.100.100 netmask 255.255.255.255 up
配置本地回环网卡路由
route add -host 172.17.100.100 lo:0
② 使RS "闭嘴"
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
忽略ARP广播
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
注意:关闭arp应答
1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应
2:必须避免将接口信息向非本网络进行通告
③ 想永久生效,可以写到配置文件中
vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p 读一下,使其生效
4、开启实现准备好的web网页服务
systemctl start nginx
systemctl start php-mysql
systemctl start mariadb
5、效果验证
① 可分别在rs1和rs2建立2个不同内容,统一路径的test.html测试文件,测试负载均衡功能
在RS01 上vim ../test.html
real server 1
在RS01 上vim ../test.html
real server 1
② 打开http://172.17.1.6/ ,并在director上用ipvsadm -L -n观察访问连接
③ 用另外一台测试机,用ab压力测试工具,测试经过负载均衡后的服务器容量
实战三:实现80、443端口都可访问服务,且LVS实现持久连接
1、环境准备
机器名称
|
IP配置
|
服务角色
|
lvs-server
|
VIP:172.17.100.100
|
负载均衡器
|
rs01
|
RIP:172.17.1.7
|
后端服务器
|
rs02
|
RIP:172.17.22.22
|
后端服务器
|
2、在vs 上设置:
① 在iptables 打上标记,把80端口标记为99
iptables -t mangle -A PREROUTING -d 172.17.100.100 -p tcp --dport 80 -j MARK --set-mark 99
在iptables打上标记,把443端口标记为99
iptables -t mangle -A PREROUTING -d 172.17.100.100-p tcp --dport 443 -j MARK --set-mark 99
② 在lvs上建立基于99号标记的虚拟服务
ipvsadm -A -f 99 -s rr -p
设置后端服务地址,用DR模式
ipvsadm -a -f 99 -r 172.17.1.7 -g
ipvsadm -a -f 99 -r 172.17.22.22