阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

基于Nginx的负载均衡概述与实现

449次阅读
没有评论

共计 4215 个字符,预计需要花费 11 分钟才能阅读完成。

前言:

前面我们提到了 LVS 和 Keepalived 结合起来的高可用负载均衡,LVS 根据原目 ip 地址及端口将其调度转发至后端 的某个主机,是一种四层的实现,因为 LVS 是四层的,所以不会受限于套接字或打开的文件数量。不过,如果我们想实现一些更高阶的功能,LVS 就显得力不从心了,比如基于 uri,cookie,header 头部信息的负载均衡,此时我们就可以选择一些 7 层的负载均衡实现,比如 Nginx 或 haproxy 等。本次我们就先来讲讲 Nginx 的负载均衡。

  • LVS http://www.linuxidc.com/Linux/2017-03/141927.htm
  • Keepalived http://www.linuxidc.com/Linux/2017-03/141929.htm

正文:

其实,如果对 LVS 的各种类型和调度有清晰的认识,那么理解 Nginx 的负载均衡并没有什么难度,无非就是监听前端 server 的 ip 和端口,并指定后端可调用的服务器地址就好~ 虽然 Nginx 也有健康检测机制,但是只有在 Nginx plus 中才能能使用。不过如果后端服务的端口不存在 Nginx 倒也不会向其调用请求啦~ 那我们来具体说说。

uostream

ngin 的负载均衡得用到 upstream 模块,它用来定义一个后端服务器组,即把所有后端的服务器整合在一起,然后通过 proxy 代理到这个服务器组。就能实现简单的 http 负载均衡了,upstream 默认的调度方式是 wrr(具体内容可参考 LVS 中的介绍),所以我们只用指定服务器的 ip,如果端口不是默认 80 端口也可以单独指定,还有一些调度用到的参数,比如权重。如果只是干巴巴的介绍也很抽象,我们就根据配置来介绍吧。

http{
    …
    upstream backserver {#backserver 是一个自定义的名字,后面会调用
            server 172.16.53.101;          #第一个后端 server
            server 172.16.53.102 ;          #第二个后端 server
        }
    …
    server {
        listen 80;
        server_name xiaofengfeng.cn;
        location / {
                proxy_pass      #代理到服务器组,此处只支持 http/https
                index index.html;
        }
}
}

上面就是一个最简单的基于 nginx 的服务均衡配置了。upstream 的 server 后面还可以加许多参数,比如设置不同的权值 weight=number,权值越大调用的次数越多。backup 参数可以设置 backup server,比如我们可以设置本机为 backup server,当后端服务器都不能访问的时候,我们本机可以提供一个 sorry 页面。

http{
    …
    upstream backserver {
            server 172.16.53.101;
            server 172.16.53.102 ;
            server 127.0.0.1 backup;
              #指定本机回环地址为备用 server,此处我们提供一个 sorry server
        }
    server {
            listen 192.168.157.128:80;  #代理服务只监听前端服务的 ip 和端口
            server_name xiaofengfeng.cn;
            location / {
                    proxy_pass  http://backserver;
                    index index.html;
            }
    }
    server {
            listen 127.0.0.1:80;          #回环地址用来做 sorry server
            server_name xiaofengfeng2.cn;
            location / {
                    root /var/nginx;
                    index index.html;
            }
    }
}

注:因为我们改变了监听的 ip 所以得重启 nginx 服务,而不是用 nginx -s reload。

除了 server 配置选项还有其他一些常用的,比如我们可以改变其调用算法为 wlc,即 least_conn,就会根据后端服务器的连接数来调用。如果我们的一些用户信息,比如说 session,cookie 等保存在后端服务器本地,为了放置用户信息丢失,我们可以让一个用户的请求都发送到同一个后端服务器。ip_hash 就可以实现这样的功能。来自同一个源 IP 地址的请求始终发往同一个 upstream server。除了根据源地址 hash,我们还可以指定特定的参数来作为 hash 的条件,比如,如果我们用 uri 作为 hash 条件,那么同一个 uri 的请求会发往同一台后端服务器。此时我们就要用到 hash 选项,比如:

hash $request_uri consistent

$request_uri 是内置提供的变量,就是请求的 uri 咯,consistent 是一致性哈希算法,这个倒是可以说道说道。我们知道哈希就是无论输入什么值,都会得到一个固定长度的散列值,我们对不同的 uri 求散列值,如果后端服务器有 6 台服务器,然后给他们进行编号 0 -6,然后用求的散列值对 6 做取余运算,就一定会得到 0 - 6 中的一个值,然后把这个分配给对应编号的服务器。不过,这个算法有个问题,如果某个服务器挂掉,我们就得重新以 5 来做取余运算,然后重新把所有过程从来一遍。所以就出现了上面的一致性哈希算法,我们现在先不关注后端有几台服务器,我们把 0 到 2 的 32 次方减一这个多个数字分布在一个圆环上,就上钟表上的 0 -12 一样,0 的地方就是 12. 然后我们对后端每个服务器的 ip 地址做哈希计算,得到的值在和 2 的 32 次方做取余运算,那么后端的这些服务器一定会分布在这个圆环上的某个点处,然后我们在对 hash 选项指定的内容,此处是 uri 做 hash 计算,得到的值在和 2 的 32 次方取余,所以这些 uri 也会分布在这个圆环上。然后我们规定,在这个圆环上分布的服务器,负责响应它到它下一个服务器的区间上分布的请求。此时当后端的某台服务器挂掉时,只会影响这台服务器后面的 URI 请求,而不会影响其他服务器,只用把属于这台服务器的请求,给它上一台就好,我们画个图说明下。

基于 Nginx 的负载均衡概述与实现

我们用方块表示后端服务器经过哈希计算的分布情况,用红色的线表示不同 uri 请求的分布情况,服务器 1 只用负责 1 到 2 之间的 uri 请求,以此类推,5 只用负责 5 到 1 之间的 uri 请求,如右图所示,假如 2 号服务器挂掉了,我们就把所有属于 2 号服务器的请求分配给 1 号服务器~ 好啦~ 这就是一致性哈希算法~~~ 很重要哟,许多地方都有用到。

除了支持 web 服务的负载均衡,nginx 还支持其他服务的负载均衡,此时我们就得用到另外 d 的模块 stream 和 stream_proxy_module。不过这两个模块必须得是 1.9.13 以上的版本~ 并且默认 stream 并没有加载。得在编译时加入 –with-stream 选项,不过如果我们用的是预编译的 rpm 包安装的话,默认是有这个的~ 以下是 /etc/nginx/nginx.conf

user  nginx;
worker_processes  1;
 
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
 
 
events {
    worker_connections  1024;
}
stream {
        upstream sshsrvs {
                server 192.168.10.130:22;
                server 192.168.10.131:22;
        }
 
        server {
                listen 172.16.100.6:22202;
                proxy_pass sshsrvs;
                proxy_timeout 60s;
                proxy_connect_timeout 10s;
        }
 
}

我们启动或者重启 nginx,然后我们就可以通过 22202 访问后端的 ssh 服务了,MySQL 服务也类似~ 当然是轮询访问啦~ 和上面的 web 服务类似。

下面关于 Nginx 的文章您也可能喜欢,不妨参考下:

CentOS 7.2 下编译安装 PHP7.0.10+MySQL5.7.14+Nginx1.10.1  http://www.linuxidc.com/Linux/2016-09/134804.htm

Nginx 实现集群的负载均衡配置过程详解 http://www.linuxidc.com/Linux/2017-02/140549.htm

Nginx 高级应用 – 负载均衡与 rewrite 规则  http://www.linuxidc.com/Linux/2017-02/140476.htm

CentOS 6.4 安装配置 Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm

Nginx 安装配置使用详细笔记 http://www.linuxidc.com/Linux/2014-07/104499.htm

Nginx 日志过滤 使用 ngx_log_if 不记录特定日志 http://www.linuxidc.com/Linux/2014-07/104686.htm

Nginx 的 500,502,504 错误解决方法 http://www.linuxidc.com/Linux/2015-03/115507.htm

CentOS 7 编译安装 Nginx1.10.2 脚本启动失败解决思路 http://www.linuxidc.com/Linux/2017-01/139794.htm

Nginx 简单实现网站的负载均衡  http://www.linuxidc.com/Linux/2017-02/140351.htm

Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-03/141928.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4215字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7961344
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛 NAS-8:有了 NAS 你可以干什么?软件汇总篇 前言 哈喽各位玩友!我是是星哥,不少朋友私...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

  4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定! 前言 作为 NAS 玩家,你是否总被这些...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...