最近在研究秒杀程序的设计及服务器配置。
涉及到秒杀这个问题,那肯定就意味着大流量高并发访问,那么大概率我们需要做反向代理与负载均衡配置。
那么如何配置nginx的反响代理与负载均衡呢?
一:配置服务器环境
首先,我们大概需要准备三台服务器
一台做反向代理,剩下的两台做负载均衡的演示。
反向代理服务器只需要配置nginx环境即可,因为,其只做为请求转发的中转站。
两台负载均衡服务器,需要配置lnmp环境,具体配置过程请移步《Centos7.6配置lnmp》
上边的方法是属于有那个条件的同学使用,正常一台服务器也行,在服务器上配置nginx和apache,nginx做反向代理,将请求转发至apache即可。
Lamp环境配置,请移步《LAMP环境配置及NGINX安装》
二:负载均衡配置实例
下面我先放一下我测试使用的一个nginx配置示例,具体的配置项下边会有一个大概的解释:
ini
复制代码
http{ # 配置负载均衡 # 这里的域名要和下面proxy_pass的一样 upstream guanchao.site { # 将请求分配至最小链接 least_conn; # 每个请求会按照访问ip的hash值分配,这样同一客户端连续的Web请求都会被分发到同一server进行处理,可以解决session的问题。如果server挂掉,能自动剔除。 # ip_hash; # weigth参数表示权值,权值越高被分配到的几率越大 # 下面表示219.44有2分之1几率,132.2有2分之1几率 server 47.100.219.44:80 max_fails=2 fail_timeout=5s weight=1; server 8.140.132.2:80 max_fails=2 fail_timeout=5s weight=1; # server 111.231.162.140:80 max_fails=2 fail_timeout=5s weight=1; } server { listen 80; server_name guanchao.site; location / { # 配置负载均衡 proxy_pass http://guanchao.site; #请求转向taishan定义的服务器列表 proxy_set_header Host $host;#将请求头转发给后端服务器 proxy_set_header X-Forward-For $remote_addr;#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP proxy_connect_timeout 2s; 最长链接时间为2s proxy_redirect default; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
111.231.162.140这个服务器作为反向代理服务器
47.100.219.44与8.140.132.2这两台服务器作为负载均衡服务器
以上的配置得到的效果:
我们可以看到,在同一个域名下,多次刷新,我们看到的页面是不同的,因此,证明我们上边的反向代理及负载均衡的配置是没有问题的。
三:负载均衡策略
1:轮询
这种是默认的策略,把每个请求按顺序逐一分配到不同的server,如果server挂掉,能自动剔除。
ini
复制代码
# 配置负载均衡 # 这里的域名要和下面proxy_pass的一样 upstream guanchao.site { # weigth参数表示权值,权值越高被分配到的几率越大 # 下面表示44有2分之1几率,2有2分之1几率 server 47.100.219.44:80 max_fails=2 fail_timeout=5s weight=1; server 8.140.132.2:80 max_fails=2 fail_timeout=5s weight=1; }
2:最少链接
ini
复制代码
# 配置负载均衡 # 这里的域名要和下面proxy_pass的一样 upstream guanchao.site { # 将请求分配至最小链接 least_conn; # weigth参数表示权值,权值越高被分配到的几率越大 # 下面表示44有2分之1几率,2有2分之1几率 server 47.100.219.44:80 max_fails=2 fail_timeout=5s weight=1; server 8.140.132.2:80 max_fails=2 fail_timeout=5s weight=1; }
3:权重weight
ini
复制代码
# 配置负载均衡 # 这里的域名要和下面proxy_pass的一样 upstream guanchao.site { server 47.100.219.44:80 max_fails=2 fail_timeout=5s weight=1; server 8.140.132.2:80 max_fails=2 fail_timeout=5s weight=1; }
4:ip_hash
每个请求会按照访问ip的hash值分配,这样同一客户端连续的Web请求都会被分发到同一server进行处理,可以解决session的问题。如果server挂掉,能自动剔除。
ini
复制代码
# 配置负载均衡 # 这里的域名要和下面proxy_pass的一样 upstream guanchao.site { # 每个请求会按照访问ip的hash值分配,这样同一客户端连续的Web请求都会被分发到同一server进行处理,可以解决session的问题。如果server挂掉,能自动剔除。 ip_hash; # weigth参数表示权值,权值越高被分配到的几率越大 # 下面表示44有2分之1几率,2有2分之1几率 server 47.100.219.44:80 max_fails=2 fail_timeout=5s weight=1; server 8.140.132.2:80 max_fails=2 fail_timeout=5s weight=1; }
以上四个策略可以组合叠加使用。
剩下配置的用处,我在nginx配置实例中都有备注。
四:其他参数
参数列表如下:
down | 表示单前的server暂时不参与负载 |
weight | 默认为1.weight越大,负载的权重就越大 |
max_fails | 允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误 |
fail_timeout | max_fails次失败后,暂停的时间 |
backup | 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻 |
以上大概就是nginx的反响代理与负载均衡的配置,
有好的建议,请在下方输入你的评论。
欢迎访问个人博客 guanchao.site