专栏首页codingnginx实现负载均衡

nginx实现负载均衡

一个网站要保持高可用,绝对要避免单点故障,即只有一台服务器提供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

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;
    }
}

检测配置是否正确:

nginx -tc /etc/nginx/nginx.conf

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

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

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

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值

实例:

upstream test  {
    hash $request_uri;
    server 127.0.0.1:8001;
    server 127.0.0.1:8002;
    server 127.0.0.1:8003;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 利用git的hooks实现代码检测及自动部署

    章鱼喵
  • nginx教程之初窥门径

    牛人与普通人的区别在于:前者遇到不爽的事,二话不说,自己动手解决;普通人要么骂骂咧咧,要么置于不理,眼不见为净。当然,这并没有什么不好,这个世界就是需要普通人占...

    章鱼喵
  • ubuntu安装lemp步骤

    章鱼喵
  • 网站工作原理第二部分:客户端 - 服务器模型和Web应用程序的结构

    在 之前文章,我们分析了网站在基本工作原理,包括客户端(您的计算机)和服务器(响应客户端网站请求的另一台计算机)之间的交互。

    疯狂的技术宅
  • 一次失败的面试,复习一次一致性哈希算法

    本文故事绝对真实,如有雷同,绝对不是巧合! 话说前几天有一次,某大厂的二面。然后呢,烟哥那天刚好有事,所以去不了。于是就约了一场视频面试了!

    乔戈里
  • 复习一次一致性哈希算法

    当时的情形是这样的,先介绍一下自己的项目。然后介绍完项目背景以后,因为有一个登陆模块。于是乎有了如下问题

    JAVA葵花宝典
  • 租用云服务器之前 这些坑你得擦亮眼睛

    企业上云或者个人建站,都得需要一个服务器空间来放置网站程序、应用等,所以服务器租用是现在广大企业和站长不可忽视的环节。由于云服务器快速普及,性价比也在快速提升,...

    尊托云数
  • 从入门到熟悉 HTTPS 的 9 个问题

    HTTP 协议中的内容都是明文传输,HTTPS 的目的是将这些内容加密,确保信息传输安全。最后一个字母 S 指的是 SSL/TLS 协议,它位于 HTTP 协议...

    Java技术栈
  • 速读原著-TCP/IP(Rlogin协议)

    R l o g i n的第一次发布是在 4 . 2 B S D中,当时它仅能实现 U n i x主机之间的远程登录。这就使得R l o g i n比Te l n...

    cwl_java
  • 九个问题从入门到熟悉 HTTPS

    Q1: 什么是 HTTPS? BS: HTTPS 是安全的 HTTP HTTP 协议中的内容都是明文传输,HTTPS 的目的是将这些内容加密,确保信息传输安全。...

    小小科

扫码关注云+社区

领取腾讯云代金券