高可用Nginx配置负载均衡
00 分钟
2024-4-19
2024-10-17
type
status
date
slug
summary
tags
category
icon
password
💡
负载均衡:是把大量的请求按照我们指定的方式均衡的分配给集群中的每台服务器,从而不会产生集群中大量请求只请求某一台服务器,从而使该服务器宕机的情况,有助于缓解服务器的处理压力,也可以保证业务的正常访问情况。
 

一、单Nginx服务器负载均衡

💡
第一种方式使用的是使用一台Nginx服务器为主用于负载均衡,把请求分流到不同的web服务器或项目中进行处理
这里使用3台机器作为演示(虚拟机)
Nginx服务器(主)
Web服务器1(web1)
Web服务器2(web2)
负责反向代理与负载均衡
运行业务
用于分流或宕机时保证业务正常
Ubuntu 2核-2G
Ubuntu 1核-2G
Ubuntu 1核心-2G
192.168.50.99
192.168.50.21
192.168.50.240
notion image
 

1.配置Nginx环境

这里选择web服务器也安装nginx作为演示,手头上目前没有别的项目,使用nginx自带的网页来操作
三台机器都需要进行nginx的安装,因为都是Ubuntu系统,所以可以采用简便的安装方式
notion image
 
这个时候可以在浏览器输入web1,web2的IP地址,查看是否出现欢迎页面
notion image
这里可以修改一下web服务器的内容,使得更加容易分辨出来访问的是哪个服务器
重新刷新一下页面就可以看到页面被修改了,标记出了web服务器网页的IP地址
notion image
 

2.负载均衡的配置

当两台web服务器设置完成之后,就可以去主nginx服务上设置负载均衡了
连接上主nginx服务器
这里需要在server块前添加一个http服务组
在server块中只需要将请求反向代理给设置的http组就可以了
完整配置如下
 
保存后就可以输入指令查看文件配置是否正常,重启nginx
 
重启后可以访问主nginx服务器IP地址192.168.50.99,查看是否正常运行
notion image
这里访问到的是web1服务器,因为权重设置了2,所以每访问两次web1服务器才会到web2服务器,这里刷新两次查看是成功访问上
notion image
这里一个简单的负载均衡就配置完成了
 

3.云上配置

这里的教程是作为内网演示,如果项目上云的情况下配置也是如此
例如在阿里云购买的服务器都会有一个公网与内网的IP地址
notion image
例如购买3台机器,1台用作nginx负载均衡服务器,2台用作业务上线,首先查看3台服务器内网间是否互通,2台上线业务的服务器搭建业务后可以在安全组中设置公网无法访问,使用主nginx服务器进行负载均衡以及业务的访问。解析域名后只需要在server块中添加server_name字段就可以了。
 
 

二、双机热备

⚠️
如上文搭建的负载均衡集群可以保证业务的运行,但是如果主nginx服务器出现问题,被攻击或宕机的情况下,那么整个集群就会全部宕掉,所以对于某些项目来说可以选择搭建两台nginx服务器做一个双机热备,即便一台nginx服务器宕掉,也不影响业务的运行
这里需要在上文的内容中多加一台nginx负载均衡服务器做副服务器
Nginx服务器(主)
Nginx服务器(副)
Web服务器1(web0)
Web服务器2(web1)
负责反向代理与负载均衡
负责主服务器宕机接管
运行业务
用于分流
Ubuntu 2核-2G
Ubuntu 2核-2G
Ubuntu 1核-2G
Ubuntu 1核心-2G
192.168.50.99
192.168.50.226
192.168.50.21
192.168.50.240
这里会出现一个问题,因为nginx服务器需要使用域名单独解析上去,无法解析第二个IP地址,所以这里解析到的是虚拟IP,当主服务器挂掉的时候,副服务器会接管虚拟IP地址提供负载均衡
notion image
这里使用keepalived用来监测服务状态
 

1.安装keepalived

这里使用的是Ubuntu系统,所以使用一条指令就可以直接安装keepalived
 

2.配置主副Nginx服务器

首先根据上文给副Nginx服务器也设置好负载均衡
接下来需要修改主副Nginx服务器中keepalived的配置了
主Nginx
 
副Nginx
当配置完文件之后重启keepalived服务
这时就可以在主nginx输入ip a指令查看是否已经绑定好了虚拟IP
notion image
 
可以尝试访问IP 192.168.50.123查看是否能正常访问内部web服务器
notion image
虚拟IP检测就没有问题了
 
接下来就需要写入一个脚本给keepalived,因为keepalived是检测本身服务是否停掉掉然后漂移IP,所以需要实时检测nginx是否存活,当nginx挂掉然后漂移IP
主副服务器都需要添加脚本
 
还需要去keepalived.conf中添加一下检测脚本,主副机都需要添加修改,注意路径
 

3.测试

首先使用ip a指令查看虚拟IP是否正常
notion image
 
可以看到目前虚拟IP是在主服务器下,那么可以尝试打开虚拟IP查看是否正常使用
notion image
 
这个时候就可以测试keepalived脚本检测与虚拟IP的漂移了,脚本设置的是nginx关闭后,自动杀掉keepalived进程,IP漂移到副服务器上,那么接下来就需要把主服务器nginx服务关闭,模拟被攻击或者宕掉
notion image
 
这里可以看到,在ng1,主服务器上把nginx服务停止后,keepalived服务会停止,停止后虚拟IP会立即漂移到副nginx服务器上,这里可以测试继续访问虚拟IP是否还可以正常使用
notion image
 
当主服务器重新启动nginx和keepalived服务时,因为主从配置,虚拟IP会立即漂移回主服务器去
notion image
 

4.上云

这个方案上云的问题在于需要一个虚拟的公网IP,要不然无法实现漂移,域名解析到其中一台服务器的IP地址上挂掉后就无法访问,可以使用阿里云的高可用虚拟IP产品,那么就只要将域名解析到公网虚拟IP上就可以了
notion image

三、注意的问题

1.nginx服务器中upstream块后面的名称ywba{ 括号中要空格,要不然检查配置文件的时候会显示反代出错
 
2.双机热备方案时,副Nginx服务器也需要与主服务器一样配置负载均衡,要不然IP漂移过去之后无法访问后面的web服务器
 
3.keepalived的配置文件,主副机要保持一致,除了权重与主从标识,其他名称最好都为一致
 
4.检测脚本中的user要使用root,使用登录的账户名不一定可以正常运行
 
5.注意主副机中脚本的路劲,在配置文件中需要注意修改
 
还有什么问题欢迎在评论区留言👀

评论
  • Twikoo