当前位置: 首页 > 编程日记 > 正文

Nginx搭建负载均衡集群

(1).实验环境

youxi1  192.168.5.101  负载均衡器

youxi2  192.168.5.102  主机1

youxi3  192.168.5.103  主机2

(2).Nginx负载均衡策略

nginx的负载均衡用于upstream模板定义的后端服务器列表中选取一台服务器接收用户的请求。一个基本的upstream模块如下:

1

2

3

4

5

upstream [服务器组名称]{

  server [IP地址]:[端口号];

  server [IP地址]:[端口号];

  ....

}

在upstream模块配置完成后,要让指定的访问反向代理到服务器列表,格式如下:

1

2

3

4

location ~ .*$ {

  index index.jsp index.html;

  proxy_pass http://[服务器组名称];

}

扩展:nginx的location配置规则:http://outofmemory.cn/code-snippet/742/nginx-location-configuration-xiangxi-explain

这样就完成了最基本的负载均衡,但是这并不能满足实际需求。目前Nginx的upstream模块支持6种方式的负载均衡策略(算法):轮询(默认方式)、weight(权重方式)、ip_hash(依据ip分配方式)、least_conn(最少连接方式)、fair(第三方提供的响应时间方式)、url_hash(第三方通过的依据URL分配方式)。

1)轮询

最基本的配置方法,是upstream模块默认的负载均衡策略。每个请求会按时间顺序平均分配到不同的后端服务器。有如下参数:

fail_timeout与max_fails结合使用
max_fails在fail_timeout参数设置的时间内最大失败次数。如果在这个时间内,所有该服务器的请求都失败了,那么认为该服务器停机
fail_time服务器被认为停机的时长,默认10s(被认为停机的服务器尝试间隔?)
backup标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里
down标记服务器永久停机

注意:1.down标记的服务器会自动剔除;2.缺省就是轮询;3.此策略适合服务器配置无状态且短平块的服务使用

2)weight

权重方式,在轮询策略的基础上指定轮询的几率。也可以认为是在轮询的基础上新增了一个weight的参数,此参数指定轮询的几率,值为number。upstream模块配置模板如下:

1

2

3

4

5

upstream [服务器组名称]{

  server [IP地址]:[端口号] weight=2;

  server [IP地址]:[端口号];

  ....

}

在该例子中,没有weight参数的服务器默认为1,weight的数值与访问比例成正比,所有weight值的总和为一个循环单位,服务器自身的weight值为循环单位内的轮询次数。

注意:1.权重越高分配到的请求越多;2.此策略可以和least_conn策略、iphash策略结合使用;3.此策略比较适合服务器硬件配置差距较大的情况。

3)ip_hash

依据ip分配方式,指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端请求一致发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题。upstream模块配置模板如下:

1

2

3

4

5

6

upstream [服务器组名称]{

  ip_hash;

  server [IP地址]:[端口号] weight=2;

  server [IP地址]:[端口号];

  ....

}

注意:1.nginx1.3.1之前的版本不能在ip_hash中使用权重(weight);2..ip_hash不能与backup同时使用;3.此策略适合有状态服务的程序,比如session;4.当有服务器需要剔除,必须手动down掉。

4)least_conn

最少连接方式,把请求发给链接数最少的后端服务器。轮询是把请求平均分配给各个后端,使它们的负载大致相同。但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。upstream模块配置模板如下:

1

2

3

4

5

6

upstream [服务器组名称]{

  least_conn;

  server [IP地址]:[端口号] weight=2;

  server [IP地址]:[端口号];

  ....

}

注意:此策略适合请求处理时间长短不一造成的服务器过载情况。

5)fair

响应时间方式,按照服务器端的响应时间来分配请求,响应时间短的优先分配。upstream模块配置模板如下:

1

2

3

4

5

6

upstream [服务器组名称]{

  server [IP地址]:[端口号] weight=2;

  server [IP地址]:[端口号];

  ....

  fair;

}

注意:需要安装第三方插件。

6)url_hash

url分配方式,按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再次收到请求,就可以在缓存中读取。upstream模块配置模板如下:

1

2

3

4

5

6

upstream [服务器组名称]{

  hash $request_uri;

  server [IP地址]:[端口号] weight=2;

  server [IP地址]:[端口号];

  ....

}

注意:1.需要安装第三方插件;2.uri,是i,不是小写的L。

(3).实验

1)在负载均衡器youxi1上编译安装nginx

安装nginx的依赖包

1

[root@youxi1 ~]# yum -y install gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel

上传nginx源码包nginx-1.14.1.tar.gz,解压安装

1

2

3

4

5

6

[root@youxi1 ~]# tar xf nginx-1.14.1.tar.gz -C /usr/local/src/

[root@youxi1 ~]# cd /usr/local/src/nginx-1.14.1/

[root@youxi1 nginx-1.14.1]# ./configure --prefix=/usr/local/nginx  --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module  --with-http_mp4_module

[root@youxi1 nginx-1.14.1]# make && make install

[root@youxi1 nginx-1.14.1]# echo $?

0

参数说明:

--with-http_dav_module,启用ngx_http_dav_module支持(增加PUT,DELETE,MKCOL:创建集合,COPY和MOVE方法)默认情况下为关闭,需编译开启;

--with-http_stub_status_module,启用ngx_http_stub_status_module支持(获取nginx自上次启动以来的工作状态);

--with-http_addition_module,启用ngx_http_addition_module支持(作为一个输出过滤器,支持不完全缓冲,分部分响应请求);

--with-http_sub_module,启用ngx_http_sub_module支持(允许用一些其他文本替换nginx响应中的一些文本);

--with-http_flv_module,启用ngx_http_flv_module支持(提供寻求内存使用基于时间的偏移量文件);

--with-http_mp4_module,启用对mp4文件支持(提供寻求内存使用基于时间的偏移量文件)。

生成nginx用户

1

[root@youxi1 nginx-1.14.1]# useradd -M -s /sbin/nologin nginx

启动并添加开机自启

1

2

3

[root@youxi1 nginx-1.14.1]# /usr/local/nginx/sbin/nginx

[root@youxi1 nginx-1.14.1]# echo /usr/local/nginx/sbin/nginx >> /etc/rc.local

[root@youxi1 nginx-1.14.1]# chmod +x /etc/rc.d/rc.local

如果防火墙是开启的记得添加端口号

1

2

3

[root@youxi1 nginx-1.14.1]# firewall-cmd --permanent --zone=public --add-port=80/tcp && firewall-cmd --reload

success

success

查看下界面,看看nginx是否正常安装

测试完成后,修改nginx的配置文件,最后重启nginx

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

[root@youxi1 nginx-1.14.1]# cp /usr/local/nginx/conf/nginx.conf{,.bak}

[root@youxi1 nginx-1.14.1]# vim /usr/local/nginx/conf/nginx.conf

user  nginx;  //第2行

location / {  //第43行起

  root html;

  index index.html index.htm;

  if ($request_uri ~* \.html$){

    proxy_pass http://htmlservers;

  }

  if ($request_uri ~* \.php$){

    proxy_pass http://phpservers;

  }

  proxy_pass http://picservers;

}

upstream htmlservers {  //在http模块下,server模块平级处添加

  server 192.168.5.102:80;

  server 192.168.5.103:80;

}

upstream phpservers{

  server 192.168.5.102:80;

  server 192.168.5.103:80;

}

upstream picservers {

  server 192.168.5.102:80;

  server 192.168.5.103:80;

}

[root@youxi1 nginx-1.14.1]# /usr/local/nginx/sbin/nginx -s reload

2)在youxi2和youxi3上布置网页程序

1

2

3

4

5

6

7

8

9

10

11

[root@youxi2 ~]# yum -y install httpd

[root@youxi2 ~]# echo youxi2 > /var/www/html/index.html

[root@youxi2 ~]# echo youxi2.php > /var/www/html/index.php

[root@youxi2 ~]# echo youxi2.other > /var/www/html/index.jsp

[root@youxi2 ~]# systemctl start httpd.service

[root@youxi3 ~]# yum -y install httpd

[root@youxi3 ~]# echo youxi3 > /var/www/html/index.html

[root@youxi3 ~]# echo youxi3.php > /var/www/html/index.php

[root@youxi3 ~]# echo youxi3.other > /var/www/html/index.jsp

[root@youxi3 ~]# systemctl start httpd.service

如果防火墙是开启的,记得添加端口号

1

2

3

4

5

6

7

[root@youxi2 ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp && firewall-cmd --reload

success

success

[root@youxi3 ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp && firewall-cmd --reload

success

success

3)测试

首先测试html页面

接着测试php页面

最后测试其他页面

转自:https://www.cnblogs.com/diantong/p/11208508.html

相关文章:

如何卸载iPhone模拟器中的自己创建的程序

当你使用iPhone模拟器测试过很多程序以后,模拟器中放置了大量无用的程序。 一直在找如何清除这些程序,其实后来发现很简单。 模拟器本身就带将这些程序清除到垃圾箱的功能。如下图所示:点击上图所示的命令“还原内容和设置...”后出现如下图所…

MySQL存储引擎的介绍

数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。 现在许多数据库管理系统都支持多种不同的…

Maya和Arnold的高级照明实践

Maya和Arnold的高级照明实践 时长6小时20分钟 包括项目文件 1920X1080 MP4 语言:英语机译中文字幕 大小:14.8G 题目:FXPHD - MYA312 - Maya & Arnold的高级照明实践 FXPHD - MYA312 - 玛雅和阿诺德的高级照明实践。 信息:本…

读《大道至简》第六章感想

语言确实是种工具,但我们不应该忽略工具的作用。我们想什么,去做什么事会决定使用什么工具,但反过来我们有什么工具也会决定我们怎么想,怎么做事。如果工具没有提供这个功能,你就不会向这方面想,也就不会这…

Java学习总结:1

Java的特性 1.简洁有效 2.可移植性 3.面向对象 4.解释型 5.适合分布式计算 6.拥有较好的性能 7.健壮、防患于未然 8.具有多线程处理能力 9.具有较高的安全性 10.是一种动态语言 11.是一种中性结构 Java在开发上有三个分支 一.Java EE(Java企业级开发) 二.Java SE(Java标准版…

2022-2028年中国轻型输送带行业市场发展规模及市场分析预测报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新(交付时间约3个工作日) 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国轻型输送带行业市场行业相关概述、中国轻型输送带行业市场行业运行环境、分析了中国轻型输…

从零开始写个编译器吧 - 单词化简述(Tokenization)

2019独角兽企业重金招聘Python工程师标准>>> 实际上,所谓的源代码,我们可以将其视为一段长长的字符串。所谓字符串,即是字符的有序集。但是,字符本身作为编译器的输入单位,粒度实在太小了,因此&…

springboot+mybatis ,出现多于的参数导致查询数据缺少

在springbootmybatis 中,经常会有多于的字段遗留在xml文件中,这种情况正常人会以为会判断空和null状态,不影响sql语句,但是实际上会有影响, 因为在parameter中未定义,是undefined,而不是null和空…

【C4D教程】Octane渲染大师班

【C4D教程】Octane渲染大师班 本套教程共9大章 4小时20分 高清1920X1080 mp4 视频 英语机译中文字幕 大小 17.8G 信息。 云桥网络 平台获取教程 学习使用Cinema 4D和Octane Render创建惊人渲染的过程和工作流程。 实践分析和指导。 7个项目文件可供学习和借鉴。 C4D Octa…

Java学习总结:2

java的注释 /***文档注释*这种注释的内容会被解释成程序的正式文档*/ public class TestDemo {public static void main(String args[]){System.out.println("Hello MLDN");//System的首字母要大写,否则会显示程序包system不存在/*多行注释............*…

Android采用Application总结一下

什么是 Application   Application和Activity,Service由于是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象。用来存储系统的一些信息。通常我们是不须要指定一个Application的,这时系统会自己主动帮我们创建&#xff…

nginx介绍及常用功能

什么是nginx nginx跟Apache一样,是一个web服务器(网站服务器),通过HTTP协议提供各种网络服务。 Apache:重量级的,不支持高并发的服务器。在Apache上运行数以万计的并发访问,会导致服务器消耗大…

网页制作常见的问题(怎样兼容IE6/IE7/火狐浏览器)

1、IE6双边距问题&#xff1f; 在IE6的浏览器中明明设置的是10px的margin却为什么显示的是20px的margin其实这个Ie6的一个双边距BUG 例如: <style type"text/css"> body {margin:0} div { float:left; margin-left:10px; width:300px; height:300px; border:1p…

Ubuntu系统---安NVIDIA 驱动后 CUDA+cuDNN 安装

Ubuntu系统---安NVIDIA 驱动后 CUDAcuDNN 安装 --------------------------------------------20190726--------------------------------------------------------------------------------------------- 上接《Ubuntu系统---NVIDIA 驱动安装》。预配置环境&#xff1a;Ubunt…

Maya基础入门学习教程

Maya基础入门学习教程 视频&#xff1a;.MKV, 1280x720, 共57节课 时长 4小时25分钟&#xff0c;3GB 语言&#xff1a;英语中文字幕&#xff08;根据原英文字幕机译更准确&#xff09;原英文字幕 指导老师&#xff1a;Shane Whittington Shane Whittington 百度一下 云桥网…

java学习总结:3

逻辑运算 1.’!’(非) 2.与(多个条件一起满足) Java中&&和&都是表示与的逻辑运算符&#xff0c;都表示逻辑运输符and&#xff0c;当两边的表达式都为true的时候&#xff0c;整个运算结果才为true&#xff0c;否则为false。 ’&&的短路功能&#xff0c;当…

asp.net httpmodule 访问页面控件 备忘

用到的时候发现还得找代码&#xff0c;存一个例子方便自己和他人修改&#xff1a; using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls;…

Ubuntu下Sublime Text 3解决无法输入中文的方法

2019独角兽企业重金招聘Python工程师标准>>> 环境&#xff1a; Ubuntu14.04搜狗输入法 for LinuxSublime text 3提示&#xff1a;编译请在非root下进行 本经验目前在Ubuntu14.04环境下&#xff0c;已有搜狗输入法 for Linux和Sublime Text 3的情况下安装成功。 保存…

电子书下载:Building Websites with DotNetNuke 5

下载&#xff1a;http://www.ctdisk.com/file/9941471 转载于:https://www.cnblogs.com/MaxWoods/archive/2012/10/10/2719167.html

Java学习总结:4

面向对象 面向对象的程序设计具有封装性、继承性、多态性。 类的定义语法如下&#xff1a; class 类名称{数据类型 属性(变量);...public 返回值的数据类型 方法名称(参数1&#xff0c;参数2...){程序语句;[return 表达式;] } }定义类 class Book {String title;double pric…

在3ds Max中使用V-Ray 5渲染引擎视频教程

在3ds Max中使用V-Ray 5渲染引擎视频教程 MP4 | 视频&#xff1a;h264, 1280x720 | 音频&#xff1a;AAC, 44.1 KHz, 2通道。AAC, 44.1 KHz, 2 Ch. 技能水平。初学者&#xff5c;类型&#xff1a;电子学习&#xff5c;语言&#xff1a;英语中文字幕&#xff08;根据原英文字幕…

OC实用转换model的工具

OC实用转换model的工具 说明 这是本人写的一个专门用来将json数据直接转换生成Model文件的工具,目的是为了让你从写Model文件的繁琐过程中解脱出来,提升效率以及减少出错的几率,工具的特点如下: 1. 用组合设计模式处理树形数据结构(非线性数据结构) 2. 在调试台中处理生成Model…

后端怎么防止重复提交?(常用的做法)

后端怎么防止重复提交&#xff1f;&#xff08;常用的做法&#xff09; 客户端的抖动&#xff0c;快速操作&#xff0c;网络通信或者服务器响应慢&#xff0c;造成服务器重复处理。防止重复提交&#xff0c;除了从前端控制&#xff0c;后台也需要控制。因为前端的限制不能解决…

利用MAC OS X 自带的磁盘工具提取光盘镜像ISO文件

虽说渐渐地Mac笔记本基本告别内置光驱时代了&#xff0c;随着网络的普及&#xff0c;使用到光驱的机会也渐少&#xff0c;但有时又难免需要光驱&#xff0c;比如二货出版社的随书光盘等…我们可以通过USB外置光驱将光盘内容提取为ISO文件保存到电脑里&#xff0c;方便以后可以随…

Java学习总结:5

面向对象 对象数组 引用数据类型也可以定义数组 格式&#xff1a; 1.对象数组的动态初始化 类名称 对象数组名称 new 类名称 [长度];动态初始化默认情况下&#xff0c;数组的每一个元素都是其对应的默认值null。 class Book5{private String title;private double price;…

Maya初学者完整的3D动画大师班视频教程

Maya初学者完整的3D动画大师班视频教程 时间13小时30分 包括课程项目文件 1280X720 MP4 语言&#xff1a;英语中文字幕&#xff08;根据原英文字幕机译更准确&#xff09;原英文字幕 教程大小解压后&#xff1a;8.38G Maya初学者。完整的3D动画大师班 百度一下 云桥网络 平台…

jQuery-1.9.1源码分析系列(四) 缓存系统

先前在分析Sizzle的时候分析到Sizzle有自己的缓存机制&#xff0c;点击这里查看。不过Sizzle的缓存只是对内使用的&#xff08;内部自己存&#xff0c;自己取&#xff09;。接下来分析jQuery可以对外使用的缓存&#xff08;可存可取&#xff09;。 首先需要明白jQuery缓存需要解…

CBA 赛程的笔记 - 北京首钢

2014-11-01 19:35北京首钢103:89广东宏远结束技术统计 发挥不错&#xff0c;打的比较好&#xff01;2014-11-05 19:35八一双鹿89:100北京首钢结束技术统计 第一节国内球员打的太屎&#xff0c;最后一节国内球员发挥不错&#xff01;2014-11-07 19:35浙江稠州107:116北京首钢结束…

个人技术生涯的感悟(2)

很多时候&#xff0c;一门门槛很低的编程语言对于初学者的帮助是非常大的&#xff0c;从而决定这个人的技术路线的选择。 在经历过大一下学期对C&#xff0c;和C的迷茫之后&#xff0c;在大二上学期&#xff0c;学校在搞一个网页设计比赛&#xff0c;正好和两个朋友一起参赛。开…

HtmlAgilityPack 处理通配的contains

//选择不包含class属性的节点 var result node.SelectNodes(".//span[not(class)]"); //选择不包含class和id属性的节点 var result node.SelectNodes(".//span[not(class) and not(id)]"); //选择不包含class"expire"的span var result node…