公开资料
Ubuntu下Nginx安装并配置负载均衡
如何使用JavaScript实现纯前端读取和导出excel文件
将组态王配置为OPC服务器的方法
国家标准公开系统
Vim使用教程
Docker镜像加速列表
S7-1500冗余系统图
华为服务器安装Ubuntu 20.04系统并实现向日葵远程桌面
Ubuntu下keepalived和nginx实现高可用性负载均衡
Ubuntu系统配置
CAN DBC文件解析
东南大学齿轮箱振动数据集(含轴承、齿轮、复合故障)
Redis常用数据类型
在Ubuntu中安装Redis
一图看懂Linux文件权限
Linux命令速查
ubuntu apt卸载命令
本文档使用 MrDoc 发布
-
+
首页
Ubuntu下keepalived和nginx实现高可用性负载均衡
# 概述 ## 1. 前导知识 [Ubuntu安装keepalived](https://blog.csdn.net/weixin_41621706/article/details/117087712) [Ubuntu安装nginx并配置负载均衡](https://doc.bdgca.com/doc/83/) ## 2. 本文项目目标 在Ubuntu下使用keepalived和nginx搭建高可用性负载均衡。keepalived虚拟IP为192.168.229.130,两台服务器的IP地址分别为192.168.229.128,192.168.229.129。两台服务器中81端口模拟网站,80端口为负载均衡端口。负载均衡的配置详情请参见《[Ubuntu安装nginx并配置负载均衡](https://doc.bdgca.com/doc/83/)》  ## 3. 系统环境 Ubuntu 20.04.2 LTS 桌面版(192.168.229.128) Ubuntu 20.04.2 LTS 服务器版(192.168.229.129) # 配置nginx负载均衡 《[Ubuntu安装nginx并配置负载均衡](http://showdoc.bkzy.ltd/web/#/5?page_id=463)》中,配置完成了一台服务器(192.168.229.128)的负载均衡,参照文章继续配置192.168.229.129服务器的负载均衡: ``` sudo vim /etc/nginx/conf.d/ningx.conf ```  保存后,重启 nginx。 测试192.168.229.129服务器的负载均衡:  至此,192.168.229.128,192.168.229.129两台服务器的负载均衡全部配置完成。 # 安装配置keepalived [keepalived实现服务高可用](https://www.cnblogs.com/clsn/p/8052649.html) ## 1. 安装 参照[Ubuntu安装keepalived](https://blog.csdn.net/weixin_41621706/article/details/117087712) ``` sudo apt-get install keepalived ``` ## 2. 设置随系统自启动 - 编辑 `/etc/rc.local`文件 ``` sudo vim /etc/rc.local ``` 在文件中增加一行`service keepalived start &`: ``` #!/bin/sh -e # 上面一行不要删除 # 服务类要以 & 结尾一行,表示不要等待运行结束 service keepalived start & #文末必须以exit 0结束 exit 0 ``` 为`rc.local`文件添加执行权限 ``` sudo chmod +x /etc/rc.local ``` ## 3. keepalived的配置 编辑配置文件: ``` sudo vim /etc/keepalived/keepalived.conf ``` ### 3.1 keepalived配置说明 ``` ! Configuration File for keepalived global_defs { #检测到realserver或者负载均衡出现故障后, 通知的邮箱地址 notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } #发送通知的邮箱的地址 notification_email_from Alexandre.Cassen@firewall.loc #利用的stmp服务器地址 smtp_server 192.168.200.1 smtp_connect_timeout 30 #自定义主机名,建议使用IP地址 router_id 192.168.229.128 vrrp_skip_check_adv_addr vrrp_iptables vrrp_garp_interval 0 vrrp_gna_interval 0 } #预先定义一个脚本,方便后面调用,也可以定义多个,方便选择; vrrp_script chk_nginx { script "/etc/keepalived/nginx_chk.sh" #具体脚本路径 interval 2 #脚本循环运行间隔,s } #一个虚拟路由器组的物理实例, 同一组KA里的实例不能重名 vrrp_instance VI_1{ #当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUP state MASTER #非抢占模式;如果开启非抢占模式,上面的state需要都配置城BACKUP,利用优先级确定谁是MASTER #nopreempt #绑定为当前虚拟路由器使用的物理接口,需要据实查询填写 interface ens33 #当前虚拟路由器惟一标识,也叫做分组名称,该组内的设备需要相同,范围是0-255 virtual_router_id 100 #当前物理节点在此虚拟路由器中的优先级,值越大优先级越大;范围1-254 priority 101 #vrrp通告的时间间隔,默认1s, 谁的优先级高, vip跑在哪个节点上, 就由哪个节点发送通告, backup节点接收通告。组内要一致 advert_int 1 #设置验证信息,组内一致 authentication { #有PASS 和 AH 两种,常用 PASS auth_type PASS #仅前8位字符有效, 每一组负载均衡器使用相同的密码即可 auth_pass 1111 } #虚拟IP, 要和服务器在同一个网段, 能和服务器网关进行通信的, 而且是没有被占用的 #可以设置多个IP virtual_ipaddress { 192.168.229.130 } #使用在这个域中使用预先定义的脚本,上面定义的 track_script { chk_nginx } #当前节点成为主节点时触发的脚本 #notify_master <STRING>|<QUOTED-STRING> #当前节点称为备用节点时触发的脚本 #notify_backup <STRING>|<QUOTED-STRING> #当前节点转为“失败”状态时触发的脚本 # 一般不会使用, 一般一个节点不是master就是backup状态, #很少出现fault, 除非是ip地址冲突或者资源不足, 导致角色切换失败会出现fault状态 #notify_fault <STRING>|<QUOTED-STRING> #通用格式的通知触发机制,一个脚本可完成以上三种状态的转换时的通知 #notify <STRING>|<QUOTED-STRING> } ``` ### 3.2 去除注释的精简版配置 - 服务器192.168.229.128使用的配置文件: ``` ! Configuration File for keepalived global_defs { router_id 192.168.229.128 } vrrp_script chk_nginx { script "/etc/keepalived/nginx_chk.sh" interval 2 } vrrp_instance VI_1{ state MASTER interface ens33 virtual_router_id 100 priority 101 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.229.130 } track_script { chk_nginx } } ```  - 服务器192.168.229.129使用的配置文件: ``` ! Configuration File for keepalived global_defs { router_id 192.168.229.129 } vrrp_script chk_nginx { script "/etc/keepalived/nginx_chk.sh" interval 2 } vrrp_instance VI_1{ state BACKUP interface ens33 virtual_router_id 100 priority 101 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.229.130 } track_script { chk_nginx } } ``` - 其中,`interface`参数的值`ens33`要通过`ifconfig`指令查询,找到要进行虚拟化的物理网卡的名称。 ``` ifconfig ```  ### 3.3 nginx_chk脚本 - 脚本文件 脚本文件`/etc/keepalived/nginx_chk.sh`用于检查nginx相关服务器是否启动,如果没有启动则重启。如果重启不成功,则杀死keepalived服务,切换到备用服务 ``` #!/bin/bash #上面这句注释不可删除 #检查是否有nginx相关的进程 A=`ps -C nginx --no-header |wc -l` #如果没有 if [ $A -eq 0 ];then # 重启nginx,延迟2秒 service nginx restart sleep 2 # 重新检查是否有nginx相关的进程 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then # 仍然没有nginx相关的进程,杀死当前keepalived,切换到备用机 killall keepalived fi fi ``` - 为脚本文件添加执行权限 ``` sudo chmod +x /etc/keepalived/nginx_chk.sh ``` - 测试脚本,如果有错误会输出错误信息,没有错误什么也不输出 ``` cd /etc/keepalived ./nginx_chk.sh ```  - 两台服务器都要添加这个脚本和权限。 ## 4. 重启keepalived ``` sudo service keepalived restart ``` ## 5. 检查keepalived重启是否成功 ``` systemctl status keepalived.service ``` - 不成功的例子 如果不成功,根据提示信息检查哪里有错误  - 成功的例子  ## 6. keepalived脑裂 >脑裂相关: [keepalived的脑裂问题](https://blog.51cto.com/u_10630401/2089847) keepalived分别在两台服务器执行,出现两台服务器都设置了同样的虚拟IP 这个是两台服务器的keepalived数据交互的问题,由于防火墙的原因,两台服务器没有收到相互的优先级等信息,都以为是master,所以设置了虚拟IP 关闭防火墙或添加keepalived组播地址(224.0.0.18)、组播协议vrrp在iptables中。 编辑`/etc/rc.local`文件: ``` sudo vim /etc/rc.local ``` 内容如下: ``` #!/bin/sh -e # 上面一行不要删除,文件中如果有其他内容请不要删除 # 允许组播地址,-s后面的地址是另一台安装有keepalived服务器的IP地址,-s ip可省略, -d后面是组播协议公共地址 iptables -A INPUT -s 192.168.1.188 -d 224.0.0.18 -j ACCEPT # 允许组播协议VRRP iptables -A INPUT -s 192.168.1.188 -p vrrp -j ACCEPT # 服务类要以 & 结尾一行,表示不要等待运行结束 service keepalived start & #文末必须以exit 0结束 exit 0 ```  如果`/etc/rc.local`是新建的文件,最后还要为他加上执行权限: ``` sudo chmod +x /etc/rc.local ``` 运行测试: ``` cd /etc/ sudo ./rc.local ``` 没有任何提示即正常。 # 测试 ## 1. 检查虚拟IP是否设置成功,以及能否切换 ``` ip a ``` 192.168.229.128的虚拟IP已经设置进来了:  192.168.229.129(BACKUP)上没有虚拟IP:  停掉Master的keepalived再检查 ``` sudo service keepalived stop ip a ``` Master的虚拟IP没有了:  backup上有了虚拟IP:  ## 2. 检查页面能否访问 - 先将上面停掉的master上的keepalived启动起来 ``` sudo service keepalived start ``` - 通过虚拟IP 192.168.229.130访问页面:  - 停掉master上的keepalived,再次通过虚拟IP访问页面,仍然能正常 ## 3. 检查停掉nginx后是否能自动重启 - 在任意master或者backup上停止掉nginx: ``` sudo service nginx stop ``` - 再次通过虚拟IP访问页面,应仍能访问到不断切换的两个页面 # 结论 高可用性负载均衡配置成功 # 参考文献 [Keepalived安装和基础功能实现](https://www.jianshu.com/p/ef45c8fb07ed) [centos7安装keepalived记录最新版踩坑](https://blog.csdn.net/wade1010/article/details/88858050) [Nginx+keepalived双机热备(主从模式)](https://blog.csdn.net/u011019141/article/details/78895702) [Ubuntu下运行.sh文件](https://blog.csdn.net/qq_33757398/article/details/87969870)
wangjp
2024年8月18日 17:55
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码