优质博文:IT-BLOG-CN
负载均衡(Load Balance): 意思就是分摊到多个操作单元上进行执行,例如Web
服务器、FTP
服务器、企业关键应用服务器和其他任务服务器等,从而共同完成工作任务。负载均衡建立在现有的网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的宽带、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
一、配置负载均衡
当网站访问量非常大时,一台服务器已经不够用了(因为网站越来越慢)。于是将相同的应用部署在多台服务器上,将大量用户的请求分配给多台机器处理。带来的好处是,其中一台服务器万一挂了,只要还有其他服务器正常运行,就不会影响用户使用。架构图:Web
层的负载均衡通过Nginx
来实现,服务层的负载均衡一般通过zookeeper
来实现。
【1】配置conf/nginx.conf
文件,将多个Tomcat
地址配置在upstream
属性中:
#可以用于配置负载均衡
upstream proxy_test {
server 192.168.88.130:8080;
server 192.168.88.130:8989;
}
server {
listen 80;
server_name virtual.test.com;
location / {
#通过反向代理,将请求转发给配置的负载均衡中
proxy_pass http://proxy_test;
index index.html;
}
}
【2】通过访问http://virtual.test.com/
虚拟域名(需要配置本机的HOSTS
文件),测试Nginx
的负载均衡。
● 第一次请求,结果展示:
● 第二次请求,结果展示:
二、属性值配置
配置中weight
、max_fails
、fail_timeout
等可选属性值配置
upstream proxy_test {
server 192.168.88.130:8080 weight=1 max_fails=2 fail_timeout=10s;
server 192.168.88.130:8989 weight=2 max_fails=2 fail_timeout=10s;
}
● weight
:weigth
参数表示权值,权值越高被分配到的几率越大(例如:上述中的权重分配,通常访问8989
两次后才会访问一次8080
,从而实现对于性能好的服务器理应承担更多的压力)。
● max_fails
、fail_timeout
:用于判断后端节点状态(例如:如上配置表明如果后端节点10秒内出现2次不可用情况,判定节点不可用。判定不可用后10秒内请求不会转发到此节点,直到10秒后重新检测节点健康情况)既在单位周期为fail_timeout
设置的时间,中达到max_fails
次数,这个周期次数内,如果后端同一个节点不可用,那么接将把节点标记为不可用,并等待下一个周期(同样时常为fail_timeout
)再一次去请求,判断是否连接是否成功。如果成功,将恢复之前的轮询方式,如果不可用将在下一个周期(fail_timeout
)再试一次。默认:fail_timeout
为10s
,max_fails
为1
次。在两个节点都可用的情况下,突然有一个节点挂掉,客户端请求过来后哪怕请求到了不可用的节点,此次请求也不会失败,因为Nginx
会把此次请求转发到另外一个可用节点,再把结果返回给客户端。当一个节点挂掉,Nginx
不知道节点是否恢复的时候,会把客户端的请求同时转发到两个节点,判断节点健康情况。
三、高可用
Nginx
作为负载均衡器,所有的请求都到Nginx
,可见Nginx
处于非常重点的位置,如果Nginx
服务器宕机后端web
服务将无法提供服务,影响严重。
为了屏蔽负载均衡服务器的宕机,需要建立一个备份机。主服务器和备份机上都运行高可用Hight Availabillty
监控系统,通过传送诸如 I am alive
这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP
并继续提供负载均衡服务;当备份管理器又从主服务器接收到I am alive
这样的信息时,它就释放服务IP
地址,这样主服务器就开始再次提供负载均衡服务。可以通过如下技术实现检测功能:
keepalived
:用于集群管理,保证集群搞可用的一个服务软件,用来防止单点故障。Keepalived
的作用是检测Web
服务器的状态,如果有一台服务器死机或工作出现故障,Keepalived
的作用是检测到,并将有故障的web
服务器从系统中剔除,当web
服务器正常工作后Keepalived
自动将 web
服务器加入到服务器群中,这些工作自动完成,无需人工干涉,需要人工做的是修复故障的web
服务器。keepalived
是以VRRP
协议为实现基础的,VRRP
全称Virtual Router Redundancy Protocol
,即虚拟路由冗余协议。虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N
台提供相同功能的路由器组成一个路由器组,这个组里面有一个master
和多个backup
,master
上面有一个对外提供服务的vip
(VIP = Virtual IPAddress
,虚拟IP
地址,该路由器所在局域网内其他机器的默认路由为该vip
),master
会发组播,当backup
收不到VRRP
包时就认为 master
宕掉了,这时就需要根据VRRP
的优先级来选举一个backup
当master
。这样的话就可以保证路由器的高可用了。
keepalived
主要有三个模块,分别是core
、check
和VRRP
。core
模块为keepalived
的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check
负责健康检查,包括常见的各种检查方式。VRRP
模块是来实现VRRP
协议的。