名词概念
CIP Client IP,访问用户自身的IP
VIP Virtual IP,用户访问的目的IP
RIP Real IP,后端webserver的真实IP
DIP 负载均衡器自身的IP
概述
负载均衡是实现将用户访问流量分发的方法,自身有高可用(保证存活)的能力(但并不是高可用集群),是以提高服务的并发处理能力为目标的集群搭建方法。
实现负载均衡一般可以使用顺序、比重、流量、服务类别等进行分配,LB的部署方式也分为路由和服务直接返回模式。
-
负载均衡可以通过“软硬”两种方法实现:
软件LB:LVS(四层路由设备)、Nginx(七层负载均衡,主要针对http, smtp, pop3, imap)、Haproxy(通Nginx)
硬件LB:最著名的就F5.(型号 F5 BIG-IP-1500, F5 BIG-IP LTM8800),价格昂贵是它的唯一缺点
LB的主要方式
-
http重定向
- 根据用户的
http请求
计算出一个真实的web服务器的IP地址
,并将该web服务器IP地址写入http重定向
中,重新返回
给浏览器,由浏览器重新访问新的Ip。多应用于下载网站中。 - 优点:简单
- 缺点:浏览器需要
两次请求
服务器才能完成一次访问,性能差。http重定向服务器自身的处理能力可能成为其瓶颈。使用http302相应重定向,有可能会使搜索引擎判定为SEO作弊
,降低搜索排名。
- 根据用户的
-
DNS LB
- DNS LB提供域名到
IP解析
的过程,将LB部署在DNS解析服务器
上。此时DNS服务器也就充当了LB。主要使用了域名运营商
提供的只能DNS以及多线解析技术(不过这些跟我们没多大关系)。具体实现即DNS上配置多个域名对应的IP记录,域名解析式通过DNS服务器的算法(轮询)将一个域名请求分配到真实的服务器上。 - 优点:工作都交给了DNS服务器,省却了功夫。同时多个DNS还支持
基于地理位置的域名解析
,将域名解析成距离用户地理位置最近的一个服务器地址,加快访问速度,极大程度改善性能。 - 缺点:①DNS目前为
多级解析
,每一级(包括本地)都可能存在缓存记录
。当一台存在于缓存中的服务器下线之后,该服务器对应的DNS记录可能仍然存在,导致用户的访问失败。②DNSLB的控制权在域名服务商的手中
,网站可能无法做出过多的改善和管理
,也不能实现按照服务器的处理能力来分配负载。DNS负载均衡采用的是简单的轮询算法
,不能区分服务器之间的差异,不能反映服务器运行的状态。
- DNS LB提供域名到
-
反向代理负载均衡
- 主要的代表即为
代表Nginx
,其工作原理是根据负载均衡算法
将请求的浏览器访问抓发到不同的web服务器来处理,处理结果经过反向服务器再发送回浏览器。 - 优点:部署简单,处于http协议层面。
- 缺点:使用了反向代理服务器后,web服务器RIP
不能直接暴露在外
,因此web服务器不需要使用外部IP地址,而反向代理服务作为沟通桥梁就需要配置双网卡、外部内部两套IP地址。
- 主要的代表即为
-
IP负载均衡
代表lvs-nat
- 在网络层通过修改目标地址进行负载均衡。用户访问请求到达负载均衡服务器后,负载均衡服务器在操作系统内核进程获取网络数据包,根据算法得到一台RIP,然后将用户请求的目标地址修改成RIP,数据处理完成后返回给负载均衡服务器,负载均衡服务器收到响应后将自身的地址修改为CIP后再将数据返回回去。类似于反向代理。
- 优点:在响应请求时速度叫反向代理要快。
- 缺点:当请求数据较大时,速度较慢。
-
数据链路层负载均衡
代表lvs-dr
- 在
数据链路层修改MAC地址
进行负载均衡。负载均衡服务器的DIP
和它管理的web服务器集群使用的VIP
一致,负载均衡服务器分发过程中不修改访问地址的IP地址
,而是修改MAC地址。 - 优点:不需要负载均衡服务器进行IP地址的转换。数据相应时,不需要经过负载均衡服务器。
- 缺点:负载均衡服务器网卡带宽要求较高。
- 在
-
物理层负载均衡
代表F5
- ①F5 BIG-IP提供12种灵活的算法将所有的流量均衡的分配到各个服务器而面对用户,只是一台虚拟服务器。②自带健康性检查,F5 BIG-IP可以确认应用程序能否对请求返回对应的数据。③F5 BIG-IP具有动态的Session的会话保持功能。④F5 BIG-IP的iRules功能可以做到HTTP内容过滤,根据不同的域名,URL,将访问请求传送到不同的服务器。
- 优点:性能好
- 缺点:贵
LB中的几种轮询算法
- Fixed Scheduling Method 静态调度方法
- RR 轮询
- WRR 加权轮询(需要设置权重)
- DH 目标地址hash(哈希映射)
- SH 源地址hash
- Dynamic Scheduling Method 动态调度方法
- LC 最小连接
- WLC 加权最小链接
- LBLC 基于本地的最少连接(找出最近使用的服务器,若该服务器是可用的且没有超载,则会优先选择该服务器)
- LBLCR 带复制的基于本地的最少连接(与LBLC的不同在于,对应的一个RIP可能所属与一个集群映射)
LVS
概述
- LVS是Linux Virtual Server的简称,其工作在一台服务器上提供Directory的功能,本身并不提供任何服务,只是把特定的请求转发给对应的RealServer,从而实现集群环境中的LB。
NAT转发模式
工作原理
- 客户端将请求法王前端的Director,请求报文中包含CIP和VIP。
- Director接收到报文后,若VIP为规则内存在的地址,那么它将客户端请求报文的VIP改为后端的RIP,并根据算法发送出去。
- 报文送到Real Server后,由于报文的RIP为自身IP,故会响应该请求,处理完成后返回给LB。
- Director接收到RS处理完成的报文后将RIP修改为VIP发送给CIP。
配置中注意
- NAT中RS的网关必须指向LVS,否则报文无法发送给CIP
缺点
因为所有的请求报文都需要Director处理应答,Director自身很可能成为架构的性能瓶颈
DR直接路由模式
工作原理
- 客户端将请求发往前段的Director,请求报文包含CIP,VIP
- Director收到报文后,发现为规则内存在的地址,则将客户端请求报文源MAC改为自身的DIP的MAC,目标MAC改为RIP的MAC地址,并将其转发给RS
- RS接收到报文后,对报文进行处理,然后启用回环网卡接口(lo)发送到默认网卡(eth0)直接发送给CIP
特点
- 集群节点和director必须处于一个物理网络内
- RIP可以使用公网IP或私有IP
- director仅处理入站请求,director服务器的压力小
- 集群节点网卡不知想director,故出站不经过director
- 不支持端口映射
- 大多数系统都可以作为realserver,需要支持ARP广播
关于ARP的特殊处理法
在配置RS的lo时,需要吧netmask配置为255.255.255.255,防止ARP广播的影响
TUN-IP隧道模式
工作原理
- 客户端将请求发往前端的Director,请求报文中包含CIP,VIP
- Director接收到报文后,识别VIP为规则内存在的IP,则Director在客户端请求的报文前封装一层IP报文,将源地址改为DIP,转发到RIP
- RS接收后,首先拆封第一次IP报文,之后第二层IP报文对应自身lo接口上的VIP,所以会处理请求报文,并将响应报文通过lo结构发给eth0网卡直接发送给CIP
特点
- 优点
- Director只负责将请求报文发送给RS,而RS应答发送给CIP。减少Director的数据流。Director不再是系统的瓶颈,能处理巨大的请求量。区别于DR模式,此方法可以实现异地LB。
- 缺点
- 隧道模式的RS节点需要合法IP,需要所有的RS都支持"IP Tunneling"(IP Encapsulation)协议,RS可能只能部署Linux服务器
LVS-DR的实际操作
- 1.在DirectorServer上添加VIP和设置路由
ifconfig eth0:0 192.168.1.2 broadcast 192.168.1.255 netmask 255.255.255.0 up # 设置VIP和VIP的广播域和子网掩码 echo 'route add -host 192.168.1.2 dev eth0:0' >> /etc/rc/local # 永久添加路由
- 2.LVS设置路由条目
yum -y install ipvsadm #下载安装LVS ipvsadm -C #清空LVS的规则 ipvasadm -A -t 192.168.1.2:80 -s rr # -A为添加virtual_server -t使用tcp协议 -s指定调度策略 rr 轮询 ipvsadm -a -t 192.168.1.2:80 -r 192.168.1.3:80 -g ipvsadm -a -t 192.168.1.2:80 -r 192.168.1.4:80 -g # -a 添加realserver -g 指定模式为DR
- 3.让配置永久生效
ipvsadm -save > /etc/sysconfig/ipvsadm systemctl enable ipvsadm
- 4.在RealServer上进行配置
RS_1
在RS_2上执行类似的操作ifconfig lo:0 192.168.1.3/32 #配置lo网卡 echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #忽略arp响应,不允许接受 echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #允许arp发送
LVS-NAT的实际操作
- 1.前期工作
Director需要两个网卡,一个外网一个内网,其中外网网卡为VIP,此处取外网网卡IP为10.10.10.2,内网网卡IP为192.168.1.2,两个RSIP分别为192.168.1.3 192.168.1.4 - 2.在RS上将Director作为网关
RS_2上有相同操作echo 'route add -net 10.10.10.2/24 gw 192.168.1.2'
- 3.在LVS上的操作
echo 1 > /proc/sys/net/ipv4/ip_forward #启动路由功能 yum -y install ipvsadm ipvsadm -A -t 10.10.10.2:80 -s rr ipvsadm -a -t 10.10.10.2:80 -r 192.168.1.3:80 -m ipvsadm -a -t 10.10.10.2:80 -r 192.168.1.4:80 -m
LVS上的其他操作汇总
# 1.管理虚拟服务
ipvsadm -A -t IPADDR:PORT -s rr #添加采用轮询算法
ipvsadm -E -t IPADDR:PORT -s -wrr #修改算法为加权轮询
ipvsadm -D -t IPADDR:PORT #删除虚拟服务
# 2.管理RS
ipvsadm -a -t RIP:PORT -r VIP -g -w 2 #加使用DR权重2
ipvsadm -e -t RIP:PORT -r VIP -g -w 5 #改权重
ipvsadm -d -t RIP:PORT -r VIP #删除
# 3.查看统计
ipvsadm -Ln #查看当前
ipvsadm -lnc #查看当前转发情况
ipvsadm -Ln --stats --rate #查看ipvs模块的转发
keepalived高可用集群
keepalived是集群管理中保证集群高可用的一个服务软件,用于防止单点故障。
工作原理
- 1.keepalived是以VRRP协议为实现基础的,VRRP全程Virtual Rou8ter Redundacy Protocol,即虚拟路由冗余协议。
- 2.实际上,keepalived是将相同功能的server构成一个组,在组中存在一个master和多个backup,master上面对外有对外提供服务的vip,master会发组播,当backup收不到vrrp包时就认为master宕机了,此时按照VRRP的优先级,会选举一个backup作为master
- 3.keepalived中主要有三个模块,为core, check, vrrp
- core 为keepalived的核心,负责主程序的启动维护和全局配置文件的加载和解析
- check负责健康检查
- vrrp实现vrrp协议
实际配置
-
1.环境准备 需准备两台以上服务器(此处以两台为例),其中一台搭载Keepalived
- RS1:192.168.1.3
- RS2:192.168.1.4
- VIP:192.168.1.2
-
2.配置
- RS1 作为master
yum -y install keepalived vi /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { router_id 1 #设备在组中的标识,可相同 } #vrrp_script chk_nginx { #健康检查 #script "/etc/keepalived/ck_ng.sh" #检查脚本 #interval 2 #检查频率 #weight -5 #priority减5 #fall 3 #失败三次 } vrrp_instance VI_1 { #VI_1 实例名,两台路由器相同 state MASTER #主或者从状态 interface eth0 #监控网卡 mcast_src_ip 192.168.1.3 #心跳源IP virtual_router_id 55 #虚拟路由编号,主从需一致 priority 100 #优先级 advert_int 1 #心跳间隔 authentication { #秘钥认证(1-8位) auth_type PASS auth_pass 123456 } virtual_ipaddress{ #VIP 192.168.0.1/24 } #track_script { #引用脚本 #chknginx } } #修改完成后 systemctl enable keepalived
- 在RS2上需要修改
state MASTER 修改为 state BACKUP
mcat_src_ip 改为自身RIP
priority 100 改为 99
HAproxy
概述
是一款高性能LB软件,因为专注负载均衡,相比在七层上的NginxLB,他做的更好,更专业。其处理模式分为单进程模式和多进程模式,分别适应于CPU过剩和内存过剩环境
特点
- 1.支持tcp/http 两种协议层的LB,使得LB功能非常丰富
- 2.支持8种LB算法
- 3.性能优秀
- 4.拥有一个出色监控页面,实时亮节系统的当前情况
- 5.功能强大的ACL支持(ACL 访问控制列表)
示例1
-
环境
- 三台以上(此处三台为例子)互相做好域名解析
- HAproxy IP: 192.168.1.2/24
- web1 IP: 192.168.1.3/24
- web2 IP: 192.168.1.4/24
-
操作步骤
- 1.安装HAproxy
yum -y install epel-release yum -y install haproxy
- 2.配置HAproxy
global #全局配置 log 127.0.0.1 local3 info #日志配置 maxconn 4096 #最大连接限制(优先级低) uid nobody gid nobody daemon #守护进程运行 nbproc 1 #可生成的进程数 defaults #默认配置,无配置时启用该配置 log global #日志使用全局配置 mode http #模式 maxconn 2048 #最大连接数(优先级中) retries 3 #健康检查(此处若三此无应答则不可用) option redispatch #服务不可用后的操作(重定向到别的服务器) stats uri /haproxy #状态模块 stats auth aaa:123 #状态模块认证,可用此用户名密码来登录网页查看当前负载均衡状态 contimeout 5000 #HA和RS请求超时时常 clitimeout 50000 #客户端连接时常 srvtimeout 50000 #HA作为服务器和Cli的链接时长 frontend http-in #前端模块,后名字随意 bind 0.0.0.0:80 #面向用户监听的端口和地址 mode http #http模式的LB log global option httplog #使用httplog格式 option httpclose #防止产生多余的cookie信息 acl html url_reg -i \.html$ #访问控制列表名称html,规则要求url以html结尾 use_backend html-server if html #若满足acl html规则,则推送给后端的服务器 htmlserver default_backend html-server #默认的后端服务器为html-server backend html-server #后端,后名字随意 mode http #模式为http协议层 balance roundrobin #轮询算法 opption httpchk GET /index.html #允许使用http协议检查健康 cookie SERVERID insert indirect nocache #转发CLI请求时插入cookie再转给RS,若第二次访问就把cookie除掉 server html-A web1:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5 #2000毫秒一次检查甲亢 连续两次测试通过视为有效,连续失败5次则服务器宕机 server html-B web2:80 wight 1 cookie 3 check inter 2000 rise 2 fall 5
-
查看HAproxy的状态
- 网址输入http://haproxy/
组群的配置文件配置样式参考
-
global log 127.0.0.1 local3 info maxconn 4096 uid nobody gid nobody daemon nbproc 1 defaults log global mode http maxconn 2048 retries 3 option redispatch stats uri /haproxy stats auth wing:123 contimeout 5000 clitimeout 50000 srvtimeout 50000 frontend http-in bind 0.0.0.0:80 mode http log global option httplog option httpclose acl php url_reg -i \.php$ acl html url_reg -i \.html$ use_backend php-server if php use_backend html-server if html default_backend html-server backend php-server mode http balance roundrobin option httpchk GET /index.php cookie SERVERID insert indirect nocache server php-A 192.168.122.30:80 weight 1 cookie 1 check inter 2000 rise 2 fall 5 server php-B 192.168.122.40:80 weight 1 cookie 2 check inter 2000 rise 2 fall 5 #cookie 1 标识 serverid 为 1 #check inter 2000 #rise 2 #fall 5 backend html-server mode http balance roundrobin option httpchk GET /index.html cookie SERVERID insert indirect nocache server html-A 192.168.122.10:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5 server html-B 192.168.122.20:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5
Nginx
概述
老熟人
特点和优缺点
- 特点
- 1.功能强大,性能卓越,运行稳定
- 2.配置简单灵活
- 3.能够自动剔除工作不正常的后端服务器
- 4.上传文件需要使用异步模式
- 5.支持多种分配策略,可以分配权重,分配方式灵活
- 优点
- Nginx复制用户请求在后端服务器出现问题是,nginx会再复制一份请求给另一台后端服务器(LVS在这种情况下只能等待用户重新发送请求)
- 缺点
- 流量会经过nginx,nginx会成为集群架构网络效率的瓶颈
配置
- 1.同步时间,域名解析,准备IP
- 2.配置Nginx
- yum -y install epel-release
- yum -y isntall nginx
- vim /etc/nginx/nginx.comf
upstream html { server web1:80 weight=1 max_fails=2 fail_timeout=2; server web2:80 weight=1 max_fails=2 fail_timeout=2; } upstream php{ server web3:80 weight=1 max_fails=2 fail_timeout=2; server web4:80 weight=1 max_fails=2 fail_timeout=2; } upstream server { location / { proxy_pass http://html; } location ~*\.php$ { proxy_pass http://php; } }
Nginx支持的状态参数
- down 暂停对该服务器的调度
- backup 类似于LVS Sorry Server,当所有的非backup服务器挂了,则会抓发到这台服务器
- max_fails 转发请求失败次数
- fail_timeout 在经历max_fails次失败后,暂停真实服务器的事件。
Nginx支持的负载均衡算法
- RR
- WRR
- ip_hash IP摘要,根据每个请求Ip进行调度,可以解决Session的问题,不能使用weight(同一个IP发往同一个服务器)
- fair 可以根据页面的大小和加载时间长短进行调度,使用第三方的upstream_fair 模块,需要加载第三方插件
- url_hash 按请求的url的hash进行调度,从而使每个url定向到同一个服务器,使用第三方的hash模块