网站首页 > 技术教程 正文
集群和负载均衡
使用集群是网站解决高并发的常用手段。当一台服务器的处理能力不足时,不要企图去换更强大的服务器,对大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求。这种情况下,更恰当的做法是增加服务器分担原有服务器压力。
通过负载均衡调度服务器,将来自浏览器的访问请求分发到应用服务器集群中的任何一台服务器上,如果有更多的用户,就在集群中加入更多的应用服务器,使应用服务器的负载压力不再成为整个网站的瓶颈。
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配置参看如下:
upstream gitlib {
server 192.168.1.106:8088;
server 192.168.1.107:8088;
}
server {
listen 80;
server_name *.gitlib.com;
location / {
access_log off;
proxy_pass http://gitlib;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
配置Keepalived高可用
由于Keepalived只检测本机和他机Keepalived是否正常并实现VIP的漂移,而如果本机nginx出现故障不会则不会漂移VIP。所以需要编写脚本来判断本机nginx是否正常,如果发现NginX不正常,重启之。等待2秒再次校验,仍然失败则不再尝试,关Keepalived,其他主机此时会接管VIP。
Nginx检查脚本: check_nginx_pid.sh
#!/bin/bash A=`ps -C nginx --no-header |wc -l` if [ $A -eq 0 ];then /usr/sbin/nginxd start #启动nginx sleep 2 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #nginx重启失败 service keepalived stop fi fi
keepalive.conf配置:
! Configuration File for keepalived
global_defs {
notification_email {
}
notification_email_from ravior@gitlib.com
smtp_server smtp.qq.com
smtp_connect_timeout 30
router_id nginx_master
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_nginx_status {
script "/home/gitlib/shell/check_nginx_pid.sh" #监控脚本
interval 2 # 监控脚本执行时间间隔
weight 2 # 权重
}
vrrp_instance VI_1 {
state BACKUP
interface enp0s3
virtual_router_id 51
priority 10
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx_status # 调用检测脚本
}
virtual_ipaddress {
192.168.1.109/24 # 设置虚拟IP
}
}
配置完成之后,重启Nginx/Keepalived, 即可实现双机热备。可以通过手动关闭Nginx模拟Nginx故障,观察VIP是否会出现漂移。
猜你喜欢
- 2024-10-10 「Ansible专栏」Ansible条件判断的介绍和使用
- 2024-09-12 Linux自动化进阶:Ansible配置管理
- 2024-09-12 ELK总结—第三篇Logstash监控Nginx日志存入redis,实现服务解耦
- 2024-09-12 Nginx基本属性配置详解(nginx详细讲解)
- 2024-09-12 3、Nginx的基本配置与优化(nginx常用优化配置的方式)
- 2024-09-12 Welcome to nginx!(Welcome to nginx!怎么办)
- 2024-09-12 Nginx 解决error.log和access.log日志的改善总结
- 2024-09-12 C++后端开发必须彻底搞懂Nginx,从原理到实战(高级篇)
- 2024-09-12 nginx负载均衡-普通hash和一致性hash负载均衡实现
- 2024-09-12 Nginx + Keepalived 高可用之主从配置
欢迎 你 发表评论:
- 10-23Excel计算工龄和年份之差_excel算工龄的公式year
- 10-23Excel YEARFRAC函数:时间的"年份比例尺"详解
- 10-23最常用的10个Excel函数,中文解读,动图演示,易学易用
- 10-23EXCEL中如何计算截止到今日(两个时间中)的时间
- 10-2390%人不知道的Excel神技:DATEDIF 精准计算年龄,告别手动算错!
- 10-23计算工龄及工龄工资(90%的人搞错了):DATE、DATEDIF组合应用
- 10-23Excel中如何计算工作日天数?用这两个函数轻松计算,附新年日历
- 10-23怎样快速提取单元格中的出生日期?用「Ctrl+E」批量搞定
- 最近发表
-
- Excel计算工龄和年份之差_excel算工龄的公式year
- Excel YEARFRAC函数:时间的"年份比例尺"详解
- 最常用的10个Excel函数,中文解读,动图演示,易学易用
- EXCEL中如何计算截止到今日(两个时间中)的时间
- 90%人不知道的Excel神技:DATEDIF 精准计算年龄,告别手动算错!
- 计算工龄及工龄工资(90%的人搞错了):DATE、DATEDIF组合应用
- Excel中如何计算工作日天数?用这两个函数轻松计算,附新年日历
- 怎样快速提取单元格中的出生日期?用「Ctrl+E」批量搞定
- Excel日期函数之DATEDIF函数_excel函数datedif在哪里
- Excel函数-DATEDIF求司龄_exceldatedif函数计算年龄
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)

本文暂时没有评论,来添加一个吧(●'◡'●)