07. Nginx进阶-Nginx负载均衡

news2024/12/23 12:34:29

简介

负载均衡

什么是负载均衡?

负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行。

Nginx负载均衡

什么是Nginx负载均衡?

Nginx负载均衡可以大大提升系统的吞吐率、请求性能、容灾性能。

工作原理

web服务器直接面向用户时,往往要承载大量并发请求。
单台服务器难以负荷,此时使用多天web服务器组成集群,前端使用Nginx负载均衡将请求分散到后端web服务器集群中。

示意图

应用

主机规划

主机名称主机地址主机功能
master-1192.168.131.129负载均衡主机
master-2192.168.131.130web主机1
master-3192.168.131.131web主机2

环境准备

安装Nginx

三台主机一同安装Nginx服务

  • 配置yum仓库
cat > /etc/yum.repos.d/nginx.repo << 'EOF'
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
  • 安装Nginx
yum list | grep nginx
yum -y install nginx
nginx -v

配置web主机

  • 配置web站点

地址:192.168.131.130、192.168.131.131
路径:/etc/nginx/conf.d/default.conf

server {
    listen       80;
    server_name  wang.mingqu.com;
    charset utf-8;

    location / {
        root   /www/wangmingqu/;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}
  • 配置web页面

地址:192.168.131.130、192.168.131.131
路径:/www/wangmingqu/index.html

#主机:192.168.131.130、192.168.131.131
mkdir -p /www/wangmingqu/

#主机:192.168.131.130
echo "王茗渠测试页面,主机IP:192.168.131.130" > /www/wangmingqu/index.html

#主机:192.168.131.131
echo "王茗渠测试页面,主机IP:192.168.131.131" > /www/wangmingqu/index.html

注意:生成环境中两台web主机的资源内容需要保持一致,此处是为了演示负载均衡分配到了两台机器上

  • 启动web服务
systemctl stop firewalld
setenforce 0
nginx -t
systemctl start nginx
curl -iv  wang.mingqu.com

简单应用

配置负载均衡

地址:192.168.131.129
路径:/etc/nginx/conf.d/wangmingqu.conf

upstream web {
    server 192.168.131.130;
    server 192.168.131.131;
}

server {
    listen 80;
    server_name wang.wangmingqu.com;
    charset utf-8;

    location / {
        proxy_pass http://web; 
    }  

}

检查配置

nginx -t
systemctl reload nginx

验证负载均衡

image.png
image.png

配置参数

upstream

语法:upstream name {…}
作用:定义一个负载均衡主机组
适用范围:http

server

语法:server url|host;
作用:定义负载均衡主机组中的主机
适用范围:upstream

proxy_pass

语法:proxy_pass http://name;
作用:引用定义的负载均衡主机组,将客户端请求转发至upstream服务池。
适用范围:location

后端状态

  1. weight

语法:server url|host weight=数值;
作用:指定负载均衡主机组中的主机权重,将客户端请求优先发送到该主机。
适用范围:upstream

  1. down

语法:server url|host down;
作用:指定当前主机暂时不参与负载均衡。
适用范围:upstream

  1. backup

语法:server url|host backup;
作用:指定负载均衡主机组中的某个主机为备份主机。
适用范围:upstream

  1. max_fails

语法:server url|host max_fails=数值;
作用:允许请求失败的次数
适用范围:upstream

  1. fail_timeout

语法:server url|host max_fails=数值 fail_timeout=时间s;
作用:经过max_fails失败后,服务暂停时间,单位秒“s”
适用范围:upstream

  1. max_conns

语法:server url|host max_conns=数值;
作用:限制最大的请求连接数。
适用范围:upstream

算法详解

轮询算法

  1. 简介

按时间顺序逐一分配到不同的后端服务器(默认算法),简称rr。
不考虑实际负载或配置,平均分配客户端请求。

  1. 应用
upstream web {
    server 192.168.131.130;
    server 192.168.131.131;
}

server {
    listen 80;
    server_name wang.wangmingqu.com;
    charset utf-8;

    location / {
        proxy_pass http://web; 
    }  

}

权重算法

  1. 简介

权重算法,设置的weight值越大,请求访问到该机器的概率越高。又称为加权轮询,简称wrr。

  1. 应用
upstream web {
    server 192.168.131.130 weight=10;
    server 192.168.131.131;
}

server {
    listen 80;
    server_name wang.wangmingqu.com;
    charset utf-8;

    location / {
        proxy_pass http://web; 
    }  

}

IP哈希算法

  1. 简介

每个请求按访问IP的hash结果分配。
这样来自同一IP的固定客户端访问同一个后端服务器。
注意:不能和weight一起使用。

  1. 应用
upstream web {
    ip_hash;
    server 192.168.131.130;
    server 192.168.131.131;
}

server {
    listen 80;
    server_name wang.wangmingqu.com;
    charset utf-8;

    location / {
        proxy_pass http://web; 
    }  

}

URL哈希算法

  1. 简介

每个请求按访问URL的hash结果分配。
每个相同的URL定向到同一个后端服务器。

  1. 应用
upstream web {
    hash $request_uri;
    server 192.168.131.130;
    server 192.168.131.131;
}

server {
    listen 80;
    server_name wang.wangmingqu.com;
    charset utf-8;

    location / {
        proxy_pass http://web; 
    }  

}

最少连接数算法

  1. 简介

最少连接数算法,哪台机器的链接数少就分发到这台机器上,简称lc。

  1. 应用
upstream web {
    least_conn;
    server 192.168.131.130;
    server 192.168.131.131;
}

server {
    listen 80;
    server_name wang.wangmingqu.com;
    charset utf-8;

    location / {
        proxy_pass http://web; 
    }  

}

加权最少连接数算法

  1. 简介

加权最少连接数算法,就是weight和least_conn两个算法的集合,简称wlc。

  1. 应用
upstream web {
    least_conn;
    server 192.168.131.130 weight=5;
    server 192.168.131.131;
}

server {
    listen 80;
    server_name wang.wangmingqu.com;
    charset utf-8;

    location / {
        proxy_pass http://web; 
    }  

}

七层负载&四层负载

七层负载

七层负载均衡简介

什么是Nginx七层负载均衡?

七层负载均衡是在应用层,可以完成很多应用方面的协议请求。
比如http应用的负载均衡,可以实现http信息的改写、头信息的改写、安全应用规则控制、URL匹配规则控制、以及转发、rewrite等等的规则。
所以在应用层的服务里面,可以做的内容就更多,Nginx是一个典型的七层负载均衡。

七层负载均衡应用场景

可以将请求分发到不同的服务上,并且可以根据请求信息进行灵活的代理转发;
由于请求会通过负载均衡服务器,负载均衡服务器会过滤一些请求(例如:DOS攻击)避免所有请求信息都打到服务器上,保障了服务器的稳定运行。
处于网络分层的最上层,需要对数据进行解析,与客户端建立连接,效率比较低。

配置web主机

  • 配置web站点

地址:192.168.131.130、192.168.131.131
路径:/etc/nginx/conf.d/default.conf

server {
    listen       80;
    server_name  wang.mingqu.com;
    charset utf-8;

    location / {
        root   /www/wangmingqu/;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}
  • 配置web页面

地址:192.168.131.130、192.168.131.131
路径:/www/wangmingqu/index.html

#主机:192.168.131.130、192.168.131.131
mkdir -p /www/wangmingqu/

#主机:192.168.131.130
echo "王茗渠测试页面,主机IP:192.168.131.130" > /www/wangmingqu/index.html

#主机:192.168.131.131
echo "王茗渠测试页面,主机IP:192.168.131.131" > /www/wangmingqu/index.html

注意:生成环境中两台web主机的资源内容需要保持一致,此处是为了演示负载均衡分配到了两台机器上

  • 启动web服务
systemctl stop firewalld
setenforce 0
nginx -t
systemctl start nginx
curl -iv  wang.mingqu.com

配置负载均衡

地址:192.168.131.129
路径:/etc/nginx/conf.d/wangmingqu.conf

upstream web {
    server 192.168.131.130;
    server 192.168.131.131;
}

server {
    listen 80;
    server_name wang.wangmingqu.com;
    charset utf-8;

    location / {
        proxy_pass http://web; 
    }  

}

检查配置

nginx -t
systemctl reload nginx

验证负载均衡

image.png
image.png

四层负载

四层负载均衡简介

什么是Nginx四层负载均衡?

四层负载均衡是基于传输层协议包来封装的(如:TCP/IP),那我们前面使用到的七层是指的应用层,他的组装在四层的基础之上,无论四层还是七层都是指的OSI网络模型。

四层负载均衡应用场景
  1. 四层+七层来做负载均衡,四层可以保证七层的负载均衡的高可用性;如:nginx就无法保证自己的服务高可用,需要依赖LVS或者keepalive。
  2. 如:tcp协议的负载均衡,有些请求是TCP协议的(mysql、ssh),或者说这些请求只需要使用四层进行端口的转发就可以了,所以使用四层负载均衡。
四层负载均衡总结
  1. 四层负载均衡仅能转发TCP/IP协议、UDP协议、通常用来转发端口,如:tcp/22、udp/53;
  2. 四层负载均衡可以用来解决七层负载均衡端口限制问题;(七层负载均衡最大使用65535个端口号)
  3. 四层负载均衡可以解决七层负载均衡高可用问题;(多台后端七层负载均衡能同时的使用)
  4. 四层的转发效率比七层的高得多,但仅支持tcp/ip协议,不支持http和https协议;
  5. 通常大并发场景通常会选择使用在七层负载前面增加四层负载均衡;

添加四层负载模块

查看四层负载均衡模块
/usr/local/nginx/sbin/nginx -V 2>&1 | grep stream
安装四层负载均衡模块
cd /usr/local/nginx/conf/
./configure --prefix=/usr/local/nginx \
--user=nginx --group=nginx \
--with-http_realip_module \
--with-http_v2_module \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-stream \
--with-stream_ssl_module \
--with-http_sub_module \
--with-http_random_index_module

创建配置文件

mkdir -p /usr/local/nginx/conf/conf.stream/

主配置文件

路径:/usr/local/nginx/conf/nginx.conf
主机地址:192.168.131.129

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}

include /usr/local/nginx/conf/conf.stream/*.conf;

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /usr/local/nginx/conf/conf.d/*.conf;
}

子配置文件

路径:/usr/local/nginx/conf/conf.d/stream.conf
主机地址:192.168.131.129

stream {
  upstream web_test_01 {
    server 192.168.131.130:22;
  }

  upstream web_test_02 {
      server 192.168.131.131:22;
  }

  server {
    listen 8081;
    proxy_connect_timeout 1s;
    proxy_timeout 3s;
    proxy_pass web_test_01;
  }

  server {
    listen 8082;
    proxy_connect_timeout 1s;
    proxy_timeout 3s;
    proxy_pass web_test_02;
  }
}

验证四层负载

  1. 检查配置文件
/usr/local/nginx/sbin/nginx -t
systemctl reload nginx
  1. 验证四层负载
ssh -p 8081 root@192.168.131.129
ssh -p 8082 root@192.168.131.129

image.png
image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1489519.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

redis07 持久化(RDB、AOF)

思维草图 redis持久化认识 Redis是一个基于内存的数据库&#xff0c;它的数据是存放在内存中&#xff0c;内存有个问题就是关闭服务或者断电会丢失。 Redis的数据也支持写到硬盘中&#xff0c;这个过程就叫做持久化。 Redis提供了2种不同形式的持久化方式。 RDB&#xff08…

安全团队官网介绍页源码

安全团队官网介绍页源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面 下载地址 https://www.qqmu.com/2383.html

Unity 角色控制(初版)

角色控制器组件&#xff0c;当然是将组件放在角色上了。 using System.Collections; using System.Collections.Generic; using UnityEngine;public class c1 : MonoBehaviour {// 获取角色控制器private CharacterController player;void Start(){// 加载角色控制器player …

【自然语言处理六-最重要的模型-transformer-下】

自然语言处理六-最重要的模型-transformer-下 transformer decoderMasked multi-head attentionencoder和decoder的连接部分-cross attentiondecoder的输出AT(Autoregresssive)NAT transformer decoder 今天接上一篇文章讲的encoder 自然语言处理六-最重要的模型-transformer-…

红黑树的简单介绍

红黑树 红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路径会比其他路径长出俩倍&#x…

爬虫案例二

第一步电影天堂_免费在线观看_迅雷电影下载_电影天堂网 (dytt28.com)电影天堂_电影下载_高清首发 (dytt89.com)电影天堂_免费在线观看_迅雷电影下载_电影天堂网 (dytt28.com) 打开这个网站 我直接打开 requests.exceptions.SSLError: HTTPSConnectionPool(hostwww.dytt28.com…

99.qt qml-单例程序实现

在之前讲过: 58.qt quick-qml系统托盘实现https://nuoqian.blog.csdn.net/article/details/121855993 由于,该示例只是简单讲解了系统托盘实现,并没有实现单例程序,所以多次打开后就会出现多个exe出现的可能,本章出一章QML单例程序实现, 多次打开始终只显示出第一个打开…

论文阅读:2022Decoupled Knowledge Distillation解耦知识蒸馏

SOTA的蒸馏方法往往是基于feature蒸馏的&#xff0c;而基于logit蒸馏的研究被忽视了。为了找到一个新的切入点去分析并提高logit蒸馏&#xff0c;我们将传统的KD分成了两个部分&#xff1a;TCKD和NCKD。实验表明&#xff1a;TCKD在传递和样本难度有关的知识&#xff0c;同时NCK…

【RT-DETR有效改进】全新的SOATA轻量化下采样操作ADown(轻量又涨点,附手撕结构图)

一、本文介绍 本文给大家带来的改进机制是利用2024/02/21号最新发布的YOLOv9其中提出的ADown模块来改进我们的Conv模块&#xff0c;其中YOLOv9针对于这个模块并没有介绍&#xff0c;只是在其项目文件中用到了&#xff0c;我将其整理出来用于我们的YOLOv8的项目&#xff0c;经…

动态之美:Motion 5特效,让视频栩栩如生 mac版

Motion 5&#xff0c;一款强大的视频后期特效软件&#xff0c;凭借其丰富的功能和出色的性能&#xff0c;成为了众多影视制作人员的首 选工具。它不仅能够满足专业级影视制作的需求&#xff0c;也适合初学者探索和实践视频特效的魅力。 Motion 5软件获取 Motion 5拥有丰富多样…

SpringBoot源码解读与原理分析(四十)基于jar/war包的运行机制

文章目录 前言第14章 运行SpringBoot应用14.1 部署打包的两种方式14.1.1 以可独立运行jar包的方式14.1.2 以war包的方式 14.2 基于jar包的独立运行机制14.2.1 可独立运行jar包的相关知识14.2.2 SpringBoot的可独立运行jar包结构14.2.3 JarLauncher的设计及工作原理14.2.3.1 Jar…

怎样获得CNVD原创漏洞证书

1. 前言 因为工作变动&#xff0c;我最近把这一年多的工作挖漏洞的一些工作成果提交到了CNVD漏洞平台&#xff08;https://www.cnvd.org.cn/&#xff09;&#xff0c;获得了多张CNVD原创漏洞证书。本篇博客讲下怎么获得CNVD原创漏洞证书&#xff0c;以供大家参考。 2. CNVD原创…

【设计模式 03】抽象工厂模式

一个具体的工厂&#xff0c;可以专门生产单一某一种东西&#xff0c;比如说只生产手机。但是一个品牌的手机有高端机、中端机之分&#xff0c;这些具体的属于某一档次的产品都需要单独建立一个工厂类&#xff0c;但是它们之间又彼此关联&#xff0c;因为都共同属于一个品牌。我…

数据可视化原理-腾讯-散点图

在做数据分析类的产品功能设计时&#xff0c;经常用到可视化方式&#xff0c;挖掘数据价值&#xff0c;表达数据的内在规律与特征展示给客户。 可是作为一个产品经理&#xff0c;&#xff08;1&#xff09;如果不能够掌握各类可视化图形的含义&#xff0c;就不知道哪类数据该用…

白银期货开户交割规则有哪些?

白银期货交割是指期货合约到期时&#xff0c;交易双方通过该期货合约所载商品所有权的转移&#xff0c;了结到期未平仓合约的过程。小编在此为大家详细介绍白银期货的交割规则有哪些。白银期货的交割规则有哪些&#xff1f;白银期货的交割规则主要有&#xff1a; 一、交割商品…

echarts如何实现3D饼图(环形图)?

一、实现的效果 二、具体步骤 1.安装依赖 npm install echarts 2.引入echarts import * as echarts from echarts; 注意&#xff1a;这里需要用到echarts-gl&#xff0c;必须单独引入才可以 import echarts-gl; 3.echarts部分代码 我知道这部分内容很多&#xff0c;但只要cv…

【ES入门一:基础概念】

集群层面上的基础概念 集群 由多个es实例组成的叫做集群 节点 单个ES的服务实例叫做节点。每个实例都有自己的名字&#xff0c;就是在配置文件中配置的‘node.name’中的内容。为了标识每个节点&#xff0c;每个节点启动后都会分配一个UID&#xff0c;存储在data目录。每个…

第七十四天漏洞发现-Web框架中间件插件BurpSuite浏览器被动主动探针

第74天 漏洞发现-Web框架中间件插件&BurpSuite&浏览器&被动&主动探针 最近几天都是演示工具如何使用如&#xff1a;AWVS、Nessus、nexpose等综合性利用工具。 Burp插件和漏扫工具的区别 知识点&#xff1a; 1、浏览器插件&BurpSuite插件 2、Hack-Tools&…

基于协同过滤的旅游推荐系统设计与实现

基于协同过滤的旅游推荐系统设计与实现 在当今旅游业蓬勃发展的背景下&#xff0c;人们对于旅游体验的需求日益增加&#xff0c;如何为用户提供更加个性化、精准的旅游推荐成为了旅游行业的一个重要课题。为解决这一问题&#xff0c;我们设计并实现了一个基于协同过滤的旅游推…

“互动+消费”时代,借助华为云GaussDB重构新零售中消费逻辑

场与人的关系 “人—货—场”是零售中重要的三要素&#xff0c;我们一直在追求&#xff0c;将零售中的人、货、场进行数字化并在云端进行整合&#xff0c;形成属于我们自己的云平台。 随着互联网技术为信息提供的便利&#xff0c;消费者的集体力量正在逐渐形成一股强大的反向…