赞
踩
互联网应用中,随着站点的硬件性能、响应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器力不从心。这时需要考虑横向拓展与纵向扩展,横向拓展是提升硬件等;纵向扩展一般使用普通服务器构建服务器群集(负载均衡群集、高可用群集、高性能运算群集),如 LVS 负载均衡集群。
负载均衡是一种将网络流量分配到多个服务器上的技术,以达到提高系统性能、可靠性和可扩展性的目的。其原理是将来自客户端的请求分发到多台服务器上,从而避免单台服务器过载,提高系统的吞吐量和响应速度。
LVS(Linux Virtual Server):是一种基于 Linux 内核的负载均衡软件,支持多种负载均衡算法和协议,如 IPVS、NAT、DR 等。
HAProxy:是一种高性能的负载均衡软件,支持多种负载均衡算法和协议,如 TCP、HTTP、HTTPS 等。
Nginx:是一种高性能的 Web 服务器和反向代理服务器,也可以作为负载均衡器使用,支持多种负载均衡算法和协议,如 HTTP、TCP、UDP 等。
F5 BIG-IP:是一种商业化的负载均衡硬件和软件,支持多种负载均衡算法和协议,如 HTTP、TCP、UDP、SSL 等。
群集所提供的应用服务(如 HTTP、FTP) 由服务器池承担,其中的每个节点具有独立的 RIP (Real IP,真实IP) 地址,只处理调度器分发过来的客户机请求。
当某个节点暂时失效时,负载调度器的容错机制会将其隔离,等待错误排除以后再重新纳入服务器池。
为服务器池中的所有节点提供稳定、一致的文件存取服务,确保整个群集的统一性。
在 Linux/UNIX环境中,共享存储可以使用NAS设备或者提供NFS(Network File System,网络文件系统)共享服务的专用服务器。
关于群集的负载调度技术,可以基于 IP、端口、内容等进行分发,其中基于 IP 的负载调度是效率最高的。基于 IP 的负载均衡模式中,有三种工作模式。
Linux Virtual Server (LVS) 是针对 Linux 内核开发的一个负载均衡项目,由我国的章文嵩博士在 1998 年 5月创建,官方站点位于 http://www.linuxvirtualserver.org/。
LVS 实际上相当于基于 IP 地址的虚拟化应用,为基于 IP 地址和内容请求分发的负载均衡提出了一种高效的解决方法。
针对Linux内核的负载均衡解决方案,LVS 现在已成为 Linux 内核的一部分,默认编译为 ip_vs
模块,必要时能够自动调用。
modprobe ip_vs # 确定对内核的支持
cat /proc/net/ip_vs # 查看ip_vs版本,能够查看即表示已经启动
ipvsadm
管理工具ipvsadm
是在负载调度器上使用的LVS群集管理工具,通过调用ip_vs
模块来添加、删除服务器节点;
即要使用ip_vs
,需要安装ipvsadm
# 安装ipvsadm
yum -y insatll ipvsadm
# 查看版本号
ipvsadm -v
LVS群集的管理工作主要包括创建虚拟服务器、添加服务器节点、查看群集节点状态、删除服务器节点和保存负载分配策略。
在网关服务器配置
# 打开网关路由转发
vi /etc/sysctl.conf
···
net.ipv4.ip_forward = 1
# 设置防火墙策略
firewall-cmd --add-interface=ens33 --zone=external
或
firewall-cmd --add-masquerade --zone=public
# 为WEB服务器池安装Apache
yum -y install httpd
# 启动Apache
systemctl start httpd
# 利用LVS做一对多的调度
ipvsadm -A -t 192.168.27.145:80 -s rr
-A 添加虚拟调度服务器
-t 指定VIP地址及TCP端口
-s 指定负载调度算法rr wrr lc wlc
ipvsadm -ln # 查看
ipvsadm -a -t 192.168.27.145:80 -r 192.168.153.132:80 -m -w 1
ipvsadm -a -t 192.168.27.145:80 -r 192.168.153.133:80 -m -w 1
-a 添加服务器
-r 指定调度到哪一台服务器;RIP地址及TCP端口
-m 表示使用NAT群集模式
-g 表示使用DR群集模式
-i 表示使用TUN群集模式
-w 设置权重;默认1;0表示不参与调度
# 查看节点状态
ipvsadm -ln
-l 列表查看LVS虚拟服务器;可以指定查看某一个VIP地址,默认查看全部
-n 以数字形式显示地址、端口等信息
此时,真机访问网关服务器,LVS负载调度器将用户调度访问WEB服务器池的节点
# 删除LVS群集192.168.153.133中的节点192.168.27.145
ipvsadm -d -r 192.168.27.145:80 -t 192.168.153.133:80
-d 执行删除操作(必须指定目标对象,包括节点地址、虚拟IP地址)
# 删除虚拟服务器
ipvsadm -D -t 192.168.27.145:80
-D 删除整个虚拟服务器;指定虚拟IP地址即可,无需指定节点
如果没有保存策略,重启ipvasdm
将会清除全部策略
# 保存策略
ipvsadm-save > /etc/sysconfig/ipvsadm
# 打开80端口
firewall-cmd --add-port=80/tcp --zone=external
# LVS需要使用80端口进行转发,设置端口转发
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -p tcp --sport 80 -j ACCEPT
现在可以访问网关服务器,显示web服务器的内容
为了更方便查看效果,可以修改web服务器Apache配置文件,关闭保持连接
vim /etc/httpd/conf/httpd.conf
Keepalive OFF
# 安装软件
yum install rpcbind nfs-utils -y
# 创建共享目录
mkdir /share
# 编辑配置文件,确定共享目录与共享主机
vim /etc/exports
/share 192.168.153.0/24(rw,sync)
# 启动NFS服务
systemctl start rpcbind
systemctl start nfs
# 客户端需要安装nfs工具
yum -y install nfs-utils nfs-utils-lib nfs4-acl-tools
# 挂载
mount -t nfs 192.168.153.134:/share /var/www/html/
或
mount.nfs 192.168.153.134:/share /var/www/html/
/share
目录下创建文件,并访问网关服务器# nfs服务的默认端口是2049
# 需要在NFS服务器配置防火墙策略
firewall-cmd --add-port=2049/tcp --zone=public
在DR模式的群集中,LVS负载调度器作为群集的访问入口,但不作为网关使用;服务器池中的所有节点都各自接入Internet,发送给客户机的Web响应数据包不需要经过LVS负载调度器;调度器通过本地网络与各节点连接,不在需要专门的IP隧道。
这种方式入站、出站访问数据被分别处理,因此LVS负载调度器和所有节点服务器都需要配置有VIP地址,以便响应对整个群集的访问。考虑到数据的安全性,共享存储设备会放在内部的专用网络中。
采用虚接口的方式ens33:0
,为网卡ens33
绑定VIP地址,以便响应集群访问
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0
启用网卡ens33:0
,查看配置结果
/proc
响应参数对于DR群集模式来说,由于LVS负载调度器和各节点需要公用VIP地址,应该关闭Linux内核的重定向参数响应
vim /etc/sysctl.conf
···
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
——————————————————————————
sysctl -p # 重新加载
ipvsadm -A -t 192.168.27.149:80 -s rr
ipvsadm -a -t 192.168.27.149:80 -r 192.168.27.150:80 -g -w 1
ipvsadm -a -t 192.168.27.149:80 -r 192.168.27.151:80 -g -w 1
——————————————————————
# 如果需要清除全部策略
ipvsadm -C
使用 DR 模式时,节点服务器也需要配置 VIP 地址,并调整内核的 ARP 响应参数以阻止更新 VIP 的 MAC 地址,避免发生冲突。除此以外,Web 服务的配置与 NAT 方式类似。
在每个节点服务器,同样需要具有 VIP 地址 192.168.27.149
,但此地址仅用作发送 Web 响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚接口 lo:0
来承载 VIP 地址,并为本机添加一条路由记录,将访问 VIP 的数据限制在本地,以避免通信紊乱。
每一个web服务器池的节点都需要进行配置。
使用ifconfig
命令查看
添加VIP本地访问路由器
route add -host 192.168.27.149 dev lo:0
——————————————
# 永久配置
vim /etc/rc.local
···
/sbin/route add -host 192.168.27.149 dev lo:0
/proc
响应参数调整 ARP 响应参数以阻止更新 VIP 的 MAC 地址
vim /etc/sysctl.conf
···
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
cd /share
mkdir http1 http2
echo "hello linux 8888888888" > ./http1/index.html
echo "hello python 6666666666" > ./http2/index.html
——————————————————————————
# 编辑配置文件,确定共享目录与共享主机
vim /etc/exports
/share 192.168.153.0/24(rw,sync)
/share/http1 192.168.153.0/24(rw,sync)
/share/http2 192.168.153.0/24(rw,sync)
# 启动NFS服务
systemctl start rpcbind
systemctl start nfs
在HTTP1
上挂载
mount -t nfs 192.168.153.134:/share/http1 /var/www/html
在HTTP2
上挂载
mount.nfs 192.168.153.134:/share/http2 /var/www/html
systemctl start httpd
访问VIP192.168.27.149
arp_ignore
和arp_announce
参数ARP协议即地址解析协议,是根据IP地址获取MAC地址的一个网络层协议。
工作原理:ARP首先会发起一个请求数据包,数据包的首部包含了目标主机的IP地址,然后这个数据包会在链路层进行再次包装,生成**以太网数据包,**最终由以太网广播给子网内的所有主机,每一台主机都会接收到这个数据包,并取出标头里的IP地址,然后和自己的IP地址进行比较,如果相同就返回自己的MAC地址,如果不同就丢弃该数据包。ARP接收返回消息,以此确定目标机的MAC地址;与此同时,ARP还会将返回的MAC地址与对应的IP地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。Windows下cmd
输入 arp -a
就可以查询本机缓存的ARP数据。
# arp_ignore参数的作用是控制系统在收到外部的arp请求时,是否要返回arp响应 0:响应任意网卡上接收到的对本机IP地址的arp请求(包括环回网卡上的地址),而不管该目的IP是否在接收网卡上。 1:只响应目的IP地址为接收网卡上的本地地址的arp请求。 2:只响应目的IP地址为接收网卡上的本地地址的arp请求,并且arp请求的源IP必须和接收网卡同网段。 # arp_announce的作用是控制系统在对外发送arp请求时,如何选择arp请求数据包的源IP地址。 0:允许使用任意网卡上的IP地址作为arp请求的源IP,通常就是使用数据包a的源IP。 1:尽量避免使用不属于该发送网卡子网的本地地址作为发送arp请求的源IP地址。 2:忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址。 # arp_ignore和arp_announce参数在DR模式下的作用 arp_ignore:因为DR模式下,每个真实服务器节点都要在环回网卡上绑定虚拟服务IP。这时候,如果客户端对于虚拟服务IP的arp请求广播到了各个真实服务器节点,如果arp_ignore参数配置为0,则各个真实服务器节点都会响应该arp请求,此时客户端就无法正确获取LVS节点上正确的虚拟服务IP所在网卡的MAC地址。假如某个真实服务器节点A的网卡eth1响应了该arp请求,客户端把A节点的eth1网卡的MAC地址误认为是LVS节点的虚拟服务IP所在网卡的MAC,从而将业务请求消息直接发到了A节点的eth1网卡。这时候虽然因为A节点在环回网卡上也绑定了虚拟服务IP,所以A节点也能正常处理请求,业务暂时不会受到影响。但时此时由于客户端请求没有发到LVS的虚拟服务IP上,所以LVS的负载均衡能力没有生效。造成的后果就是,A节点一直在单节点运行,业务量过大时可能会出现性能瓶颈。所以DR模式下要求arp_ignore参数要求配置为1。 arp_announce:每个机器或者交换机中都有一张arp表,该表用于存储对端通信节点IP地址和MAC地址的对应关系。当收到一个未知IP地址的arp请求,就会再本机的arp表中新增对端的IP和MAC记录;当收到一个已知IP地址(arp表中已有记录的地址)的arp请求,则会根据arp请求中的源MAC刷新自己的arp表。如果arp_announce参数配置为0,则网卡在发送arp请求时,可能选择的源IP地址并不是该网卡自身的IP地址,这时候收到该arp请求的其他节点或者交换机上的arp表中记录的该网卡IP和MAC的对应关系就不正确,可能会引发一些未知的网络问题,存在安全隐患。所以DR模式下要求arp_announce参数要求配置为2。 arp_ignore和arp_announce参数分别有all,default,lo,eth1,eth2…等对应不同网卡的具体参数。当all和具体网卡的参数值不一致时,取较大值生效。
的虚拟服务IP上,所以LVS的负载均衡能力没有生效。造成的后果就是,A节点一直在单节点运行,业务量过大时可能会出现性能瓶颈。所以DR模式下要求arp_ignore参数要求配置为1。
arp_announce:每个机器或者交换机中都有一张arp表,该表用于存储对端通信节点IP地址和MAC地址的对应关系。当收到一个未知IP地址的arp请求,就会再本机的arp表中新增对端的IP和MAC记录;当收到一个已知IP地址(arp表中已有记录的地址)的arp请求,则会根据arp请求中的源MAC刷新自己的arp表。如果arp_announce参数配置为0,则网卡在发送arp请求时,可能选择的源IP地址并不是该网卡自身的IP地址,这时候收到该arp请求的其他节点或者交换机上的arp表中记录的该网卡IP和MAC的对应关系就不正确,可能会引发一些未知的网络问题,存在安全隐患。所以DR模式下要求arp_announce参数要求配置为2。
arp_ignore和arp_announce参数分别有all,default,lo,eth1,eth2…等对应不同网卡的具体参数。当all和具体网卡的参数值不一致时,取较大值生效。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。