集群和负载均衡
使用集群是网站解决高并发的常用手段。当一台服务器的处理能力不足时,不要企图去换更强大的服务器,对大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求。这种情况下,更恰当的做法是增加服务器分担原有服务器压力。
通过负载均衡调度服务器,将来自浏览器的访问请求分发到应用服务器集群中的任何一台服务器上,如果有更多的用户,就在集群中加入更多的应用服务器,使应用服务器的负载压力不再成为整个网站的瓶颈。
Nginx基于反向代理可实现负载均衡,可以用Nginx的proxy和upstream实现集群的负载均衡。
Keepalived高可用故障转移
Keepalived高可用服务是通过VRRP来实现的。在Keepalived服务工作时,主Master节点会不断地向备节点发送(多播的方式)心跳消息,用来告诉备Backup节点自己还活着。当主节点发生故障时,无法给备节点发送心跳消息,如果备节点无法继续检测到来自主节点的心跳。就会调用自身的接管程序,接管主节点的IP资源和服务。当主节点恢复时,备节点又会释放主节点故障时自身接管的IP资源和服务,恢复到原来的备用角色。
因此在线上环境中,经常使用Nginx+Keepalived实现高可用集群的搭建。
准备工作
至少准备两台以上服务器,例如:
- Linux服务器A:192.168.1.106
- 安装软件:Nginx/Keepalived
Linux服务器B:192.168.1.106
- 安装软件:Nginx/Keepalived
Nginx安装可参考文章: https://gitlib.com/page/nginx-start.html
- Keepalived安装可参考文章: https://gitlib.com/page/keepalived-start.html
配置Nginx集群
Nginx按照一定的算法(权重、轮询),将请求转发到集群中一台服务器上,减轻单个服务器压力,提高系统并发量, 还可以通过心跳检测的方式,判断应用服务器当前是否可以正常工作,如果服务器宕掉,自动将请求发送到其他应用服务器。
两台Linux服务器的Nginx配置参看如下:
1 | upstream gitlib { |
配置Keepalived高可用
由于Keepalived只检测本机和他机Keepalived是否正常并实现VIP的漂移,而如果本机nginx出现故障不会则不会漂移VIP。所以需要编写脚本来判断本机nginx是否正常,如果发现NginX不正常,重启之。等待2秒再次校验,仍然失败则不再尝试,关Keepalived,其他主机此时会接管VIP。
Nginx检查脚本: check_nginx_pid.sh
1 | #!/bin/bash |
keepalive.conf配置:
1 | ! Configuration File for keepalived |
配置完成之后,重启Nginx/Keepalived, 即可实现双机热备。可以通过手动关闭Nginx模拟Nginx故障,观察VIP是否会出现漂移。