前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nginx实现负载均衡

nginx实现负载均衡

作者头像
章鱼喵
发布2019-04-17 16:20:11
1.2K0
发布2019-04-17 16:20:11
举报
文章被收录于专栏:codingcoding

一个网站要保持高可用,绝对要避免单点故障,即只有一台服务器提供web服务,当这台服务器宕机时,流量进不来,意味着白花花的钱就丢了。

负载均衡方案

负载均衡就是为了解决单点故障而出现的方案,分为两种:

  • GSLB

举个例子:同一个网址,文泰来在北京访问,骆冰在杭州访问,并非直接访问到web服务器,而是访问调度中心,调度中心会根据ip所在地,分配一个与请求者最近的web服务器ip,再去访问该web服务器

这种方式能最大限度地提高请求者的访问速度,但成本大,搭建也不容易,对于中小企业要弄这样一套负载均衡并不划算。通常是直接使用第三方提供的服务,如阿里云的付费负载均衡

  • SLB

对于没什么流量,关键是没什么钱的个人、中小企业,自然是玩不起GSLB,直接用nginx搭建免费的SLB就是最佳选择。

这个原理很简单,nginx通过proxy_pass,根据配置在upstream_server的web服务器,进行调度分配

nginx实现负载均衡

image

在服务器不多的情况下,可以用一台服务器开不同的端口来模拟负载均衡,如用8001,8002,8003三个端口模拟三台服务器,nginx的配置如下:

upstream_test.conf

代码语言:javascript
复制
upstream test  {
    server 127.0.0.1:8001;
    server 127.0.0.1:8002;
    server 127.0.0.1:8003;
}
server {
    listen 80;
    server_name www.test.com;
    access_log /var/log/nginx/test_proxy.access.log main;

    location / {
        proxy_pass http://test;
        include proxy_params;
    }
}

检测配置是否正确:

代码语言:javascript
复制
nginx -tc /etc/nginx/nginx.conf

重启nginx后,访问域名,每次刷新都会访问不同的服务器,因为默认是采用了轮询策略

那么问题来了,当其中一台服务器宕机了,会不会当指派到这台服务器时,就报服务器错误呢?

使用iptable模拟一台服务器宕机:

代码语言:javascript
复制
iptables -I INPUT -p tcp --dport 8002 -j DROP

此时再访问,发现负载均衡策略会智能地忽略掉宕机的服务器

upstream语法

upsteam backend { server backend1.example.com weight=5; server backend2.exmaple.com:8080; server unix:/tmp/backend3; server backup1.example.com:8080 backup; server backup2.example.com:8080 backup; }

状态说明:

  • down 当前的server不参与负载均衡
  • backup 预留的备份服务器,当其他服务器宕机后,会自动启用
  • max_fails 允许请求失败的次数
  • fali_timeout 经过max_falis失败后,服务暂停的时间
  • max_conns 限制最大的接收的连接数

调度算法

算法

说明

轮询

按时间顺序逐一分配到不同的后端服务器

加权轮询

weight值越大,分配到的访问几率越高

ip_hash

每个请求按访问ip的hash结果分配,同一个ip固定访问一个web服务器

url_hash

按url的hash结果分配

least_conn

优先分配给连接少的机器

hash 数值

按自定义的hash值

实例:

代码语言:javascript
复制
upstream test  {
    hash $request_uri;
    server 127.0.0.1:8001;
    server 127.0.0.1:8002;
    server 127.0.0.1:8003;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.04.05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 负载均衡方案
  • nginx实现负载均衡
  • upstream语法
  • 调度算法
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档