Nginx+Keepalived实现负载均衡
前言
首先我们说一下整体思路,如图
每个NGINX都有个自己的IP地址,但是让他俩来共同轮流使用一个VIP,以便主(MASTER)宕机后备(BACKUP)来接替VIP来继续提供服务。
这里我们用四台虚拟机,来分别代表NGINX1、NGINX2、WEB1、WEB2,WEB3忽略就好。
准备工作
关闭所有机器的防火墙等安全机制
[root@localhost ~]# systemctl stop firewalld [root@localhost ~]# iptables -F [root@localhost ~]# setenforce 0
NGINX测试机安装keepalived
[root@nginx ~]# yum -y install keepalived ipvsadm
WEB测试机安装apache,这里直接用yum安装
[root@node ~]# yum -y install httpd
NGINX1配置
首先修改主配置文件
[root@nginx1 ~]# vim /usr/local/nginx/conf/nginx.conf ** http{ ***略*** upstream apache_pool { server 192.168.200.11:80 weight=1; server 192.168.200.112:80 weight=1; } server { ***略*** location / { root html; index index.html index.htm; proxy_pass http://apache_pool; proxy_set_header Host $http_host; } } } **
keepalived配置文件修改
global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_script chk_http_port { script "/check/chk_nginx" #通过此脚本检测 interval 2 #执行时间间隔,默认单位秒 weight -20 #脚本执行成功后降低的优先级,这里是-5 fall 2 #检测两次失败后才确定失败 rise 1 #检测一次成功即成功 } vrrp_instance VI_1 { state MASTER interface eno16777728 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.200.254 } track_script { #引用VRRP脚本,即在 vrrp_script 部分指定的名字。 chk_http_port } }
写一个检测NGINX状态的脚步,如果NGINX出现问题的话,停止keepalived服务,让出VIP。
[root@nginx ~]# mkdir /check [root@nginx ~]# vim /check/chk_nginx *** #bin/bash ps -C nginx --no-heading >/dev/null if [ $? -ne 0 ] then /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf sleep 2 ps -C nginx --no-heading >/dev/null if [ $? -ne 0 ] then systemctl stop keepalived #killall -9 keepalived fi fi *** [root@nginx ~]# chmod +x /chech/chk_nginx
NGINX2的配置与1相同,这里就不做多解释了
开启网络服务
[root@node1 ~]# systemctl start httpd
测试
NGINX测试机开启keepalived服务
[root@nginx ~]# systemctl start keepalived
用网页查看
当主动关闭NGINX1服务是,我们可以看到VIP跑到了NGINX2上,因为脚本的原因,我们可以选择关闭NGINX1的网卡来进行故障测试
首先我们看到2没有 VIP地址
关闭1的网卡后
我们可以看到2上已经获取到了VIP地址
本帖子也是纯手工制作,转载请标明出处-----------burukku(づ。◕ᴗᴗ◕。)づ
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构