共计 6870 个字符,预计需要花费 18 分钟才能阅读完成。
背景
上一期我们《实现基于 LNMP 的电子商务网站》搭建了小米网站,随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的 1000QPS,变为 3000QPS,网站已经不堪重负,响应缓慢,面对此场景,单纯靠单台 LNMP 的架构已经无法承载更多的用户访问,此时需要用负载均衡技术,对网站容量进行扩充,来解决承载的问题。scale out? scale up?
技术说明
集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术。
集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。
集群组成后,可以利用多个计算机和组合进行海量请求处理(负载均衡),从而获得很高的处理效率,也可以用多个计算机做备份 ( 高可用),使得任何一个机器坏了整个系统还是能正常运行。集群在目前互联网公司是必备的技术,极大提高互联网业务的可用性和可缩放性。
负载均衡集群技术
负载均衡(Load Balance)负载均衡集群为企业需求提供了可解决容量问题的有效方案。负载均衡集群使负载可以在计算机集群中尽可能平均地分摊处理。
负载通常包括应用程序处理负载和网络流量负载。这样的系统非常适合向使用同一组应用程序的大量用户提供服务。每个节点都可以承担一定的处理负载,并且可以实现处理负载在节点之间的动态分配,以实现负载均衡。对于网络流量负载, 当网络服务程序接受了高入网流量,以致无法迅速处理,这时,网络流量就会发送给在其它节点上运行的网络服务程序。也可根据服务器的承载能力,进行服务请求的分发,从而使用户的请求得到更快速的处理。
负载均衡集群技术实现
负载均衡(Load Balance)
负载均衡技术类型:基于 4 层负载均衡技术和基于 7 层负载均衡技术
负载均衡实现方式:硬件负载均衡设备或者软件负载均衡
硬件负载均衡产品:F5 BIG-IP、Citrix Netscaler、深信服、Array、Radware
软件负载均衡产品: LVS(Linux Virtual Server)、Haproxy、Nginx、Ats(apache traffic server)
负载均衡技术演示图
lvs 是实现负载均衡技术的一种,下面来介绍一下 lvs
LVS 是什么
LVS 是 Linux Virtual Server 的简称,也就是 Linux 虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是 www.linuxvirtualserver.org。现在 LVS 已经是 Linux 标准内核的一部分,在 Linux2.4 内核以前,使用 LVS 时必须要重新编译内核以支持 LVS 功能模块,但是从 Linux2.4 内核以后,已经完全内置了 LVS 的各个功能模块,无需给内核打任何补丁,可以直接使用 LVS 提供的各种功能。
LVS 自从 1998 年开始,发展到现在已经是一个比较成熟的技术项目了。可以利用 LVS 技术实现高可伸缩的、高可用的网络服务,例如 WWW 服务、Cache 服务、DNS 服务、FTP 服务、MAIL 服务、视频 / 音频点播服务等等,有许多比较著名网站和组织都在使用 LVS 架设的集群系统,例如:Linux 的门户网(www.linux.com)、向 RealPlayer 提供音频视频服务而闻名的 Real 公司(www.real.com)、全球最大的开源网站(sourceforge.net)等。
LVS 软件作用:通过 LVS 提供的负载均衡技术和 Linux 操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。
LVS 特性
高并发连接:LVS 基于内核网络层面工作,有超强的承载能力和并发处理能力。单台 LVS 负载均衡器,可支持上万并发连接。稳定性强:是工作在网络 4 层之上仅作分发之用,这个特点也决定了它在负载均衡软件里的性能最强,稳定性最好,对内存和 cpu 资源消耗极低。
成本低廉:硬件负载均衡器少则十几万,多则几十万上百万,LVS 只需一台服务器和就能免费部署使用,性价比极高。
配置简单:LVS 配置非常简单,仅需几行命令即可完成配置,也可写成脚本进行管理。
支持多种算法:支持多种论调算法,可根据业务场景灵活调配进行使用
支持多种工作模型:可根据业务场景,使用不同的工作模式来解决生产环境请求处理问题。
应用范围广:因为 LVS 工作在 4 层,所以它几乎可以对所有应用做负载均衡,包括 http、数据库、DNS、ftp 服务等等
缺点:工作在 4 层,不支持 7 层规则修改,机制过于庞大,不适合小规模应用。
LVS 工作流程图
LVS 工作内核模型
1. 当客户端的请求到达负载均衡器的内核空间时,首先会到达 PREROUTING 链。
2. 当内核发现请求数据包的目的地址是本机时,将数据包送往 INPUT 链。
3.LVS 由用户空间的 ipvsadm 和内核空间的 IPVS 组成,ipvsadm 用来定义规则,IPVS 利用 ipvsadm 定义的规则工作,IPVS 工作在 INPUT 链上, 当数据包到达 INPUT 链时,首先会被 IPVS 检查,如果数据包里面的目的地址及端口没有在规则里面,那么这条数据包将被放行至用户空间。
4. 如果数据包里面的目的地址及端口在规则里面,那么这条数据报文将被修改目的地址为事先定义好的后端服务器,并送往 POSTROUTING 链。
5. 最后经由 POSTROUTING 链发往后端服务器。
LVS 负载均衡 NAT 工作流程
(a). 当用户请求到达 Director Server,此时请求的数据报文会先到内核空间的 PREROUTING 链。此时报文的源 IP 为 CIP,目标 IP 为 VIP
(b). PREROUTING 检查发现数据包的目标 IP 是本机,将数据包送至 INPUT 链
(c). IPVS 比对数据包请求的服务是否为集群服务,若是,修改数据包的目标 IP 地址为后端服务器 IP,然后将数据包发至 POSTROUTING 链。此时报文的源 IP 为 CIP,目标 IP 为 RIP
(d). POSTROUTING 链通过选路,将数据包发送给 Real Server
(e). Real Server 比对发现目标为自己的 IP,开始构建响应报文发回给 Director Server。此时报文的源 IP 为 RIP,目标 IP 为 CIP
(f). Director Server 在响应客户端前,此时会将源 IP 地址修改为自己的 VIP 地址,然后响应给客户端。此时报文的源 IP 为 VIP,目标 IP 为 CIP
实验:负载均衡集群企业级应用实战 -LVS-nat 模式
实验环境:
一台 DR 负载均衡器,两块网卡,一块桥接 172.17.253.132,一块仅主机 192.168.10.200
两台后端服务器,一块网卡仅主机 192.168.10.188 和 192.168.10.189,实现过基于 lnmp 的电子商务网站的服务器
一. 在 DR 负载均衡器配置
1.yum install ipvsadm -y
2.grep -i -C 10 “ipvs” /boot/config-VERSION-RELEASE.x86_64,# 查看内核是否支持 ipvs 模块
3.iptables -F ;setenf orce 0 清空防火墙策略,关闭 selinux 策略
4.ipvsadm -A -t 172.17.253.132:80 -s wrr #开启一个基于 80 端口的虚拟 web 服务,调度算法为 wrr
5.ipvsadm -a -t 172.17.253.132:80 -r 192.168.10.188:80 -m -w1 #配置 web 服务后端服务器为 nat 工作方式,权重为 1
ipvsadm -a -t 172.17.253.132:80 -r 192.168.10.189:80 -m -w1
6. 修改内核配置,开启路由转发
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p 使修改的内和配置参数生效
二. 在 real server 配置
iptables -F ;setenforce 0 清空防火墙策略,关闭 selinux 策略
配置网关指向 192.168.10.200,开启 nginx,php-fpm,mariadb 服务
route add defult gw 192.168.10.200
三,验证
在浏览器上访问 172.17.253.132
LVS 负载均衡 DR 工作模式
Virtual Server via Direct Routing(VS-DR): 用直接路由技术实现虚拟服务器。当参与集群的计算机和作为控制管理的计算机在 同一个网段时 可以用此方法, 控制管理的计算机接收到请求包时直接送到参与集群的节点。直接路由模式比较特别,很难说和什么方面相似,前种模式基本上都是工作在网络层上(三层),而直接路由模式则应该是工作在数据链路层上(二层)。
工作原理:DR 和 REAL SERVER 都使用同一个 IP 对外服务。但只有 DR 对 ARP 请求进行响应,所有 REAL SERVER 对本身这个 IP 的 ARP 请求保持静默。也就是说,网关会把对这个服务 IP 的请求全部定向给 DR,而 DR 收到数据包后根据调度算法,找出对应的 REAL SERVER,把目的 MAC 地址改为 REAL SERVER 的 MAC 并发给这台 REAL SERVER。这时 REAL SERVER 收到这个数据包,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。由于 DR 要对二层包头进行改换,所以 DR 和 REAL SERVER 之间必须在一个广播域,也可以简单的理解为在同一台交换机上。
数据包到后端服务器时经过负载均衡器,回来的时候,直接发送到客户端,不经过负载均衡器,大大提高了效率。
LVS 负载均衡 DR 工作流程
(a) 当用户请求到达 Director Server,此时请求的数据报文会先到内核空间的 PREROUTING 链。此时报文的源 IP 为 CIP,目标 IP 为 VIP
(b) PREROUTING 检查发现数据包的目标 IP 是本机,将数据包送至 INPUT 链
(c) IPVS 比对数据包请求的服务是否为集群服务,若是,将请求报文中的源 MAC 地址修改为 DIP 的 MAC 地址,将目标 MAC 地址修改 RIP 的 MAC 地址,然后将数据包发至 POSTROUTING 链。此时的源 IP 和目的 IP 均未修改,仅修改了源 MAC 地址为 DIP 的 MAC 地址,目标 MAC 地址为 RIP 的 MAC 地址
(d) 由于 DS 和 RS 在同一个网络中,所以是通过二层来传输。POSTROUTING 链检查目标 MAC 地址为 RIP 的 MAC 地址,那么此时数据包将会发至 Real Server。
(e) RS 发现请求报文的 MAC 地址是自己的 MAC 地址,就接收此报文。处理完成之后,将响应报文通过 lo 接口传送给 eth0 网卡然后向外发出。此时的源 IP 地址为 VIP,目标 IP 为 CIP
(f) 响应报文最终送达至客户端
特点:
1、保证前端路由将目标地址为 VIP 报文统统发给 Director Server,而不是 RS
2、RS 可以使用私有地址;也可以是公网地址,如果使用公网地址,此时可以通过互联网对 RIP 进行直接访问
3、RS 跟 Director Server 必须在同一个物理网络中
4、所有的请求报文经由 Director Server,但响应报文必须不能进过 Director Server
5、不支持地址转换,也不支持端口映射
6、RS 可以是大多数常见的操作系统
7、RS 的网关绝不允许指向 DIP(因为我们不允许他经过 director)
8、RS 上的 lo 接口配置 VIP 的 IP 地址
实验:负载均衡集群企业级应用实战 -LVS-DR 模式:
实验环境:一台 DR 负载均衡器,一块网卡 172.17.253.132,桥接,两台台后端服务器 172.17.251.236 和 172.17.253.253,各一块网卡,桥接
一,在 DR 负载均衡器上
1.yum install ipvsadm -y
2.grep -i -C 10 “ipvs” /boot/config-VERSION-RELEASE.x86_64,# 查看内核是否支持 ipvs 模块
3.iptables -F ;setenf orce 0 清空防火墙策略,关闭 selinux 策略
4.ifconfig ens33:0 172.17.253.100 broadcast 172.17.253.100 netmask 255.255.255.255 up #配置 VIP 到本地网卡别名 ens33:0 上(vip 地址可以是随意的),并且只广播自己,否则,将来会和后端服务器上回环网卡上配置的 vip 冲突,所以在后端服务器上配置的 vip 也只广播自己
5.route add -host 172.17.253.100 dev ens33:0 #配置 vip 路由
6.ipvsadm -A -t 172.17.253.100:80 -s wrr #开启一个基于 80 端口的虚拟 web 服务,调度方式为 wrr
7.ipvsadm -a -t 172.17.253.100:80 -r 172.17.253.132:80 -g -w 1 #配置 web 服务后端 real server 为 DR 工作方式 权重为 1
ipvsadm -a -t 172.17.253.100:80 -r 172.17.253.253:80 -g -w 1
8. 修改内核配置,开启路由转发
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p 使修改的内核配置参数生效
二,在 RS 后端服务器上
iptables -F ;setenforce 0 清空防火墙策略,关闭 selinux 策略
1.ifconfig lo:0 172.17.253.100 broadcast 172.17.253.100 netmask 255.255.255.255 up #配置 VIP 到本地回环网卡 lo 上,并只广播自己
2.route add -host 172.17.253.100 lo:0 #配置本地回环网卡路由
3.
echo “1” > /proc/sys/net/ipv4/conf/lo/arp_ignore
#1 只回答目标 IP 地址是来访网络接口本地地址的 ARP 查询请求
echo “2” > /proc/sys/net/ipv4/conf/lo/arp_announce
#2 对查询目标使用最适当的本地地址. 在此模式下将忽略这个 IP 数据包的源地址并尝试选择与能与该地址通信的本地地址.
echo “1” > /proc/sys/net/ipv4/conf/all/arp_ignore
echo “2” > /proc/sys/net/ipv4/conf/all/arp_announce
# 关闭 arp 应答
(1): 仅在请求的目标 IP 配置在本地主机的接收到请求报文的接口上时,才给予响应
(2):必须避免将接口信息向非���网络进行通告
4. 开启 web、php-fpm、mysql 服务
三,验证
在浏览器上访问 172.17.253.100(vip)
好了,这期的内容就到这里,下期再见。
一些关于 Keepalived 相关教程集合:
CentOS 7 下 Keepalived + HAProxy 搭建配置详解 http://www.linuxidc.com/Linux/2017-03/141593.htm
Keepalived 高可用集群应用场景与配置 http://www.linuxidc.com/Linux/2017-03/141866.htm
Nginx+Keepalived 实现站点高可用 http://www.linuxidc.com/Linux/2016-12/137883.htm
Nginx+Keepalived 实现站点高可用(负载均衡) http://www.linuxidc.com/Linux/2016-12/138221.htm
构建高可用集群 Keepalived+Haproxy 负载均衡 http://www.linuxidc.com/Linux/2016-12/138917.htm
Keepalived 高可用 LVS http://www.linuxidc.com/Linux/2017-03/142235.htm
CentOS6.5 下 Keepalived 高可用服务单实例配置 http://www.linuxidc.com/Linux/2016-12/138110.htm
Keepalived 安装与配置 http://www.linuxidc.com/Linux/2017-02/140421.htm
LVS 实现负载均衡集群企业级应用实战 http://www.linuxidc.com/Linux/2017-11/148270.htm
Keepalived+LVS-DR 实现实现负载均衡高可用集群 http://www.linuxidc.com/Linux/2017-12/149030.htm
Linux 下 Keepalived 服务安装文档 http://www.linuxidc.com/Linux/2017-03/141441.htm
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-12/149078.htm