nginx tcp转发_Nginx学习(九):负载均衡服务

介绍

对于请求而言,负载均衡能很好的均摊请求,提高服务端吞吐率和整体性能,多个服务节点部署的方式,也提高了容灾和服务高可用。


一、负载均衡分类

负载均衡分为:GSLB和SLB。

1. GDLB

全局负载均衡,往往按照国家为单位或省为单位来进行负载均衡的。

3a91c3a0226211c1e8e1d948fb608ad6.png

北京用户张三,他不可能直接就去请求调度中心节点,先请求北京地区的调度节点,调度节点返回给张三对应的地址,张三再访问应用服务,这个应用服务也在北京。所以这样没有给中心节点造成压力。

2. SLB

往往调度节点和服务节点在一个逻辑单元里面,或者说是在一个地域里面,那么小的地域就决定了他对部分服务的实时性,响应性是非常好的。

da7c5b6e694836b047f4dc90e4fdff43.png

nginx就是一个典型的SLB。

负载均衡按照网络模型(OSI)可以分为:四层负载均衡和七层负载均衡。

1. 四层负载均衡

四层负载均衡就是在OSI模型中的传输层,传输层可以支持到tcp/ip协议的控制,所以他只需要对客户端的请求进行tcp/ip协议的包转发,就可以实现负载均衡。

5636592c2d598df929b68369b26765fe.png

好处是性能非常快,只需要最底层进行应用处理,不需要进行复杂的逻辑,只需要进行包的转发就可以。

2. 七层负载均衡

七层负载均衡是在应用层,所有可以完成很多应用方面的协议的请求,比如:http应用层负载均衡,他可以实现http信息的改写,头信息的改写,安全应用规则的控制,以及转发,rewrite等规则。

44294f0b09a7182bca1f04c61b23a112.png

nginx就是一个典型的7层SLB。

二、配置语法

nginx实现负载均衡的原理:就是用到了proxy_pass,它把所有客户端的请求代理去转发到对应的后端服务器上,只是它不是转发到一台服务,而是转发到一组虚拟的服务池中。

ebe2d5401aa1d1fb966555e08824969c.png

配置语法:

Syntax:  upstream name {...};Default: --Context: http

配置场景:

upstream load {        server 192.168.x.xx1:8001;        server 192.168.x.xx2:8002;        server 192.168.x.xx3:8003;    }server {     listen       80;    server_name  localhost node1;    location / {        proxy_pass http://load;        include proxy_params;    }}

使用iptables规则关闭8002服务:

iptables -I INPUT -p tcp --dport 8002 -j DROP

访问测试:

http://node1

三、upstream参数介绍

upstream backend {    ip_hash;    server backend1.example.com weight=5;    server backend2.example.com:8080;    server unix:/tmp/backend3;    server backend1.example.com:8080 down;    server backend2.example.com:8080 backup;    server backend3.example.com:8080 max_fails=1 fail_timeout=10s;}

后端服务器在负载均衡调度中的状态:

状态描述
down当前的server暂时不参与负载均衡
backup预留的备份服务器,其他节点都不提供服务时使用
max_fails允许请求失败的次数
fail_timeout经过max_fails失败后,服务暂停的时间
max_conns限制最大的接收的连接数

四、调度算法

调度算法描述
轮询按照时间 顺序逐一分配到不同的后端服务器(默认)
加权轮询weight值越大,分配到的访问几率越高
ip_hash每个请求按访问IP的hash结果分配,这样来自同一个IP的固定访问一个后端服务器
url_hash按照访问的URL的hash结果来分配请求,使每个URL定向到同一个后端服务器
least_conn最少连接数,那个机器连接数少就分发
hash关键数值hash自定义的key

url_hash配置:

upstream backend {    hash $request_url;    server backend1.example.com 8081;    server backend2.example.com 8082;    server backend3.example.com 8083;}

hash key配置:

Syntax:  hash key [xonsistent];Default: --Context: upstreamThis directive appeared in version 1.7.2

推荐阅读

Nginx学习(六):Nginx访问控制

Nginx学习(七):Nginx作为静态资源

Nginx学习(八):Nginx作为代理服务

75fae6093c0eab7b624ee38acfc15471.png

看完本文有收获?请转发分享给更多人

关注「并发编程之美」,一起交流Java学习心得

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

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

相关文章

控制台发送get命令_.NET Core使用命令行参数库构建控制台应用程序

前言在我们开发中可能需要设计一次性应用程序,这些实用程序可以利用接近原始源代码的优势,但可以在与主Web应用程序完全独立的安全性上下文中启动。具体在 [管理过程](https://12factor.net/admin-processes)中也已经列出了原因。创建控制台应用打开命令…

C语言函数为什么不能返回数组?

C语言函数为什么不能返回数组?在C语言程序开发中,我们不可以编写下面这样的代码:char f(void)[8] {char ret; // ...fill... return ret; }int main(int argc, char ** argv) {char obj_a[10]; obj_a f(); }不可以编写这样的代码这其实就是不…

mockito_书评:Mockito Essentials

mockitoSujoy Acharya的Mockito Essentials副标题( Packt出版 ,2014年10月)是:“实用指南,可帮助您使用Mockito进行单元测试并开始运行。” Mockito Essentials中的前言和七章涵盖大约190个实质性页面。 前言 在序言中…

C语言中quot;##quot;的独特用法

市面上有很多比较火的编程语言,比如Python、 JAVA、 Go等,你可能觉得C语言很古老、很落后。如果你有这种想法,那可能你只是一个初学的菜鸟。可能绝大部分 C 程序员都不知道"##"隐藏用法,下面就来给大家讲讲。一、##的“…

html a标签去掉下划线_如何用HTML基本元素制作表格

第2天【HTML基本元素】主要内容标题标签段落标签强制换行水平线图片超链接文本格式化标签列表表格学习目标一、标题标题&#xff08;Heading&#xff09;是通过 <h1> - <h6> 标签进行定义的。<h1> 定义最大的标题。 <h6> 定义最小的标题。标题很重要请…

C语言中几个容易踩的“坑”!

今天给大家分享几个C语言中的坑。一、带参数的宏展开顺序#include #define f(a,b) a##b #define g(a) #a #define h(a) g(a)int main(void) {printf("%s\n",h(f(1,2)));printf("%s\n",g(f(1,2)));return 0; }运行结果:12f(1,2)浅析&#xff1a;本题中的#运…

dockerfile cd目录_使用Werf和现有的Dockerfiles改善你的CI/CD体验

迟到总比不到好。该故事讲关于我们因不支持使用常规的Dockerfile来构建镜像导致我们差点犯了一个重大错误。Werf[1]是一个GitOps工具&#xff0c;可以很好地集成到任何CI/CD系统中&#xff0c;并提供完整的应用程序生命周期管理&#xff0c;允许你&#xff1a;构建和推送镜像部…

alxc tool 报错数组超出了界限_代码审计之报错信息泄露与字符串截断

机器在语言编码转换的时候&#xff0c;经常会出现各种各样的异常&#xff0c;这些神奇的字符串就有可能组合成一堆乱码出来&#xff0c;也有可能直接把程序搞崩溃掉&#xff0c;不过总有那么一些字符&#xff0c;可以帮助我们在利用漏洞的时候变得更简单一些&#xff0c;下面我…

C语言,去你的策略模式!

前言 这里先插一点题外话&#xff0c;在C语言中&#xff0c;实现封装、继承、隐藏、多态等等特性&#xff0c;是完全没有问题的。但是在使用过程中&#xff0c;必定是不如自带这些特性的语言方便好用的&#xff0c;比如C \java等。一旦要通过C语言来实现各种设计模式&#xff0…

eager_EAGER的获取是代码的味道

eager介绍 Hibernate获取策略确实可以使几乎没有爬网的应用程序和响应Swift的应用程序有所不同。 在这篇文章中&#xff0c;我将解释为什么您应该选择基于查询的获取而不是全局获取计划。 取得101 Hibernate定义了四种关联检索策略 &#xff1a; 提取策略 描述 加入 原始S…

什么时候会是用treeset?_flex:1 到底代表什么?

今天在做项目的时候遇到一个关于布局的问题, 就是 flex: 1; 我一直以为 flex: 1; 代表的是 flex: aoto; 后来发现结果并不是这样, 所以写一篇博客来讲解一下 flex: 1; 代表什么代码第一版<div class"container"><div class"div">我是一个div&l…

纠缠不清的C语言位域(位段)详解

位域是什么&#xff1f;有些数据在存储时并不需要占用一个完整的字节&#xff0c;只需要占用一个或几个二进制位即可。例如开关只有通电和断电两种状态&#xff0c;用 0 和 1 表示足以&#xff0c;也就是用一个二进位。正是基于这种考虑&#xff0c;C语言又提供了一种叫做位域的…

matlab画累计直方图_科学网—matlab 绘制直方图——常用命令 - 范凯波的博文

直方图上显示数值close all ,x rand(100,1);%获得直方图的数据[n,y] hist(x);maxN max(n);%设置显示x,y长度限制axis([0 1.2 0 maxN2])%根据直方图的数据绘制出图形bar(y,n);for i 1:length(y)%直方图上面数据对不齐&#xff0c;利用水平和垂直对齐 &#xff0c;可以参考se…

django debug=false后静态文件丢失_python框架Django实战商城项目之工程搭建

项目说明 该电商项目类似于京东商城&#xff0c;主要模块有验证、用户、第三方登录、首页广告、商品、购物车、订单、支付以及后台管理系统。 项目开发模式采用前后端不分离的模式&#xff0c;为了提高搜索引擎排名&#xff0c;页面整体刷新采用jinja2模板引擎实现&#xff0c;…

mysql解压缩 1067_windows安装mysql8.0.0解压版附出现1067错误解决方法

1、自己到mysql官网下载mysql-8.0.0-dmr-winx64.zip解压缩安装包2、下载页面地址&#xff1a;https://dev.mysql.com/downloads/mysql/3、解压缩到任意目录(我自己是D:\DevTools\mysql-8.0.0)4、配置环境变量添加path路径为你的mysql8.0.0路径下面的bin目录(我的目录是D:\DevTo…

基于C语言的函数指针应用-消息命令处理框架

简述大家都知道&#xff0c;在C语音中指针的地位很重要&#xff0c;各种指针&#xff0c;功能很强大&#xff01;但是用不好&#xff0c;指针也比较容易出问题。这里介绍的是函数指针的一种应用方法&#xff0c;即使用函数指针来实现消息命令的注册与回调处理。代码测试的处理函…

easyexcel 动态列_easyexcel动态表头列导出SequenceDiagram 阅读源码事半功倍

EasyExcel简介Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存&#xff0c;poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题&#xff0c;但POI还是有一些缺陷&#xff0c;比如07版Excel解压缩以及解压后存储都是…

python3进阶_Python3 进阶教程 2020全新版

REVENGE_7771天前如果不创建class类的话&#xff0c;直接使用dog.name是会报错的&#xff0c;因为一般数据类型不接受这种调用方式0赞 0采集潘某人永不屈服2天前class Student()定义的时候&#xff0c;需要在括号内写明继承的类Person在__init__()方法&#xff0c;需要调用sup…

C语言中的输入输出

在C语言中提供了许多内置的输入输出函数。标准文件的定义在C语言中会把所有设备当文件来处理。为了访问键盘和屏幕&#xff0c;以下三个文件会在程序执行时而打开。标准文件文件指针设备标准输入stdin键盘标准输出stdout屏幕标准错误stderr屏幕C 语言中的输入/输出通常使用内置…

lambda 延迟执行_Java Lambdas和低延迟

lambda 延迟执行总览 有关在Java和低延迟中使用Lambda的主要问题是&#xff1a; 他们会产生垃圾吗&#xff0c;您能做些什么吗&#xff1f; 背景 我正在开发一个支持不同有线协议的库。 这个想法是&#xff0c;您可以描述要写入/读取的数据&#xff0c;并且有线协议确定它是否…