基于nginx实现的负载均衡

负载均衡是高可用网络基础架构的关键组件,通常用于将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性。

在本地使用虚拟机环境搭建集群做测试是最省钱的做法,如果手上没有多余的云服务器,建议使用虚拟机搭建集群。

 

一、准备工作

我使用VMware在本地部署了3台CentOS服务器作为测试环境,统一安装宝塔编译环境(LNMP)。虚拟机的网络配置不是本文的重点,就不再赘述了。

 

二、检查环境

这3台CentOS服务器编译好环境之后分别添加一个网站,检查web服务是否正常,并修改其中2台的默认模板文件,方便在测试负载均衡效果时区分是哪台服务器提供的web服务。

本次测试的三台服务器IP地址分别为

  • 192.168.150.10(负载均衡 主服务器)
  • 192.168.150.20(业务服务器)
  • 192.168.150.30(业务服务器)

 

三、部署网站

测试域名为 t10.com,因此需要在宿主机上将此域名解析到负载均衡主服务器(192.168.150.10)。

修改宿主机的hosts文件(路径:C:\Windows\System32\drivers\etc\hosts),添加以下内容。

192.168.150.10 t10.com

 

分别在三台服务器上添加网站后,将t10.com这个域名解析到网站上。

如下图示例

 

在负载均衡主服务器的网站配置文件中加入一条转发规则

location / { 
    # 转发至负载均衡服务器
    proxy_pass http://fzjh;
    proxy_connect_timeout 2s;
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

 

 

在负载均衡主服务器的nginx配置文件中加入规则

# 在http模块下,server模块平级处添加
upstream fzjh {
    # least_conn;
    # ip_hash;
    server 192.168.150.20:80 weight=1;
    server 192.168.150.30:80 weight=1;
    # server 192.168.150.30:80 backup;
}

 

 

保存配置文件后重启nginx,此时访问 t10.com时会自动分发至两台业务服务器(192.168.150.20、192.168.150.30)

 

四、常用的nginx负载均衡算法

1、轮询(默认)

轮询即Round Robin,根据Nginx配置文件中的顺序,依次把客户端的Web请求分发到不同的后端服务器

 

http{ 
 upstream sampleapp {
   server ...; 
   server ...; 
 } 
 .... 
 server{ 
   listen 80; 
   ... 
   location / { 
    proxy_pass http://sampleapp; 
   }  
 } 

 

2、least_conn(最少连接)

Web请求会被转发到连接数最少的服务器上

http{ 
 upstream sampleapp { 
   least_conn;
   server ...; 
   server ...; 
 } 
 .... 
 server{ 
   listen 80; 
   ... 
   location / { 
    proxy_pass http://sampleapp; 
   }  
 } 

 

3、ip_hash(IP地址哈希)

前述的两种负载均衡方案中,同一客户端连续的Web请求可能会被分发到不同的后端服务器进行处理,因此如果涉及到会话Session,那么会话会比较复杂。常见的是基于数据库的会话持久化。要克服上面的难题,可以使用基于IP地址哈希的负载均衡方案。这样的话,同一客户端连续的Web请求都会被分发到同一服务器进行处理。

http{ 
 upstream sampleapp { 
   ip_hash;
   server ...; 
   server ...; 
 } 
 .... 
 server{ 
   listen 80; 
   ... 
   location / { 
    proxy_pass http://sampleapp; 
   }  
 } 

 

4、基于权重的负载均衡算法

基于权重的负载均衡即Weighted Load Balancing,这种方式下,我们可以配置Nginx把请求更多地分发到高配置的后端服务器上,把相对较少的请求分发到低配服务器。

http{ 
 upstream sampleapp {
   server ... weight=1; 
   server ... weight=1; 
 } 
 .... 
 server{ 
   listen 80; 
   ... 
   location / { 
    proxy_pass http://sampleapp; 
   }  
 }

 

注意事项

  • 权重和backup的写法是支持混合使用的,如
# 在http模块下,server模块平级处添加
upstream fzjh {
    least_conn;
    server 192.168.150.20:80 weight=1;
    server 192.168.150.30:80 weight=1;
    server 192.168.150.40:80 backup;
}
  • backup即为备机,当所有业务服务器都宕机时,请求会自动转发至备机。
  • 多台业务服务器的代码同步可以使用rsync解决

 

 

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇