下面是详细的步骤:
准备工作
在进行nginx负载均衡搭建之前,请确保以下内容已经准备好:
- 两台或以上的服务器,其中一台作为主服务器,其余的作为后端服务器
- 每台服务器上都已经安装了nginx和必要的组件
步骤一:安装支持负载均衡的模块
正常情况下,nginx默认是不支持负载均衡的,需要安装相应的模块。常用的模块有:
- nginx-http-upstream-module:负载均衡模块
- nginx-http-sticky-module:会话保持模块
- nginx-http-healthcheck-module:健康检查模块
以CentOS系统为例,安装命令如下:
yum install -y nginx nginx-module-upstream nginx-module-sticky nginx-module-http-healthcheck
步骤二:配置负载均衡
接下来需要配置nginx实现负载均衡。在主服务器的nginx.conf文件中添加如下内容:
http {
upstream backend {
# 添加后端服务器的地址和端口号,可以根据实际情况自行修改
server 10.0.0.1:80;
server 10.0.0.2:80;
}
server {
listen 80;
server_name example.com;
location / {
# 将请求转发到后端服务器
proxy_pass http://backend;
}
}
}
这样配置之后,当有请求访问主服务器时,nginx就会根据一定的策略将请求分发到后端服务器上。
步骤三:添加会话保持
由于负载均衡会将请求分发到不同的后端服务器上,所以需要添加会话保持,保证用户在同一台后端服务器上处理请求。
添加会话保持的方法是在主服务器的nginx.conf文件中添加如下内容:
http {
# 添加相应的upstream和server配置,略去不表
...
upstream backend {
# 添加会话保持模块,并设置cookie的名称和失效时间
sticky cookie srv_id expires=1h domain=.example.com;
server 10.0.0.1:80;
server 10.0.0.2:80;
}
...
}
这样配置之后,用户在第一次访问后端服务器时,会在cookie中保存一个srv_id值,在之后的访问中,nginx会根据srv_id值将请求转发到同一台后端服务器上。
步骤四:添加健康检查
为了保证负载均衡的稳定性,需要添加健康检查模块,及时发现故障服务器并将其从负载均衡队列中移除。
添加健康检查的方法是在主服务器的nginx.conf文件中添加如下内容:
http {
# 添加相应的upstream和server配置,略去不表
...
upstream backend {
sticky cookie srv_id expires=1h domain=.example.com;
# 添加健康检查,每隔5秒检查一次后端服务器是否正常
check interval=5s rise=2 fall=3 timeout=1000;
server 10.0.0.1:80;
server 10.0.0.2:80;
}
...
}
这样配置之后,nginx会每隔5秒检查一次后端服务器的健康状态,如果连续两次正常返回(rise=2),则将该服务器重新加入队列中;如果连续三次失败(fall=3),则将该服务器从队列中彻底删除。
示例说明
示例一:平均负载均衡
在nginx的默认情况下,负载均衡默认使用轮询算法(Round Robin)实现,即将请求按照顺序分发到后端服务器上。这种算法适用于所有请求的处理时间都相同的场景。
假设现在有两台后端服务器,处理时间相同。当有3个请求访问主服务器时,nginx会将请求分发如下:
- 第一个请求访问10.0.0.1服务器
- 第二个请求访问10.0.0.2服务器
- 第三个请求访问10.0.0.1服务器
这样可以保证每个服务器都处理相同数量的请求,实现平均负载均衡。
示例二:加权轮询负载均衡
有些情况下,每个后端服务器处理时间可能不同,此时需要采用加权轮询算法(Weighted Round Robin)实现。这种算法会根据服务器的权重,按照一定的规则分发请求。
假设现在有两台后端服务器,其中10.0.0.1服务器处理时间较快,权重为2,10.0.0.2服务器处理时间较慢,权重为1。当有3个请求访问主服务器时,nginx会将请求分发如下:
- 第一个请求访问10.0.0.1服务器
- 第二个请求访问10.0.0.1服务器
- 第三个请求访问10.0.0.2服务器
这样可以保证10.0.0.1服务器处理的请求数量是10.0.0.2服务器的两倍,实现加权负载均衡。
以上就是Linux下nginx负载均衡搭建的方法步骤以及两个具体的示例说明。