龙空技术网

分布式系统之初识Nginx

程序猿架构 140

前言:

而今大家对“nginx分布式系统”大体比较注重,你们都想要了解一些“nginx分布式系统”的相关资讯。那么小编同时在网络上收集了一些关于“nginx分布式系统””的相关内容,希望兄弟们能喜欢,大家一起来了解一下吧!

Nginx两大作用:1.轻量web容器 2.反向代理服务器。

在Java领域中,Nginx更多的被用作在前端提供负载均衡的反向代理服务。

所以本文仅简要介绍下反向代理概念和负载均衡的实现。


反向代理

是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

随便画了个流程图如下:


安装Nginx

网上教程一大堆,略过了......

常用命令

nginx -s stop 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务。

nginx -s quit 平稳关闭Nginx,保存相关信息,有安排的结束web服务。

nginx -s reload 因改变了Nginx相关配置,需要重新加载配置而重载。

nginx -s reopen 重新打开日志文件。

nginx -c filename 为 Nginx 指定一个配置文件,来代替缺省的。

nginx -t 不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。

nginx -v 显示 nginx 的版本。

nginx -V 显示 nginx 的版本,编译器版本和配置参数。

Demo配置

先以一个小Demo来了解一下它是怎么实现负载均衡吧。

如上面那个流程图所示,我们想要通过访问Nginx,经过负载均衡,访问到不同Tomcat下的某项目(如个人博客)。

配置文件如下:

http { #设定mime类型,类型由mime.type文件定义 include /etc/nginx/mime.types; default_type application/octet-stream; #设定日志格式 access_log /var/log/nginx/access.log; #设定负载均衡的服务器列表 upstream load_balance_server { #weigth参数表示权值,权值越高被分配到的几率越大 server 127.0.0.1 weight=2; server 127.0.0.1:8081 weight=1; } #HTTP服务器 server { #监听80端口 listen 8090;  #以什么IP进行访问 server_name localhost; #对所有请求进行负载均衡请求 location /blog { #请求转向load_balance_server 定义的服务器列表 proxy_pass  ; } }}

配置文件中,我们通过定义了一个upstream来说明负载均衡策略(详情见下文),然后在location中对应。

配置完后执行nginx -s reload命令来重启Nginx.

因为我们的Nginx的端口是8090,,所以我们访问时,nginx通过负载均衡,会按权重跳到我们在upstream中设置的地址。

如下图所示:

说明测试通过,但因博客中的图片不是全局路径,所以会显示不出来。通过原网址访问没有问题。

.

Nginx负载均衡调度的方法

即上面配置中的upstream可选的四种负载均衡算法

服务器轮询(默认方式):每个请求访问按照时间顺序逐一分配到不同的服务器端,如果后端某台服务器宕机时,故障系统会被自动的剔除,使用户访问不受影响。Weight(权重)指定轮询的权值,Weight值越大,分配到的访问几率越高,主要用于服务器端性能不均的情况下。
ip_hash:每个请求按照访问的IP的Hash值进行分配,这行来自同一个IP的用户将会固定到后端的一个服务器,固定服务器后可以有效的解决网页存在的session共享的问题。
fair:该算法可以根据页面大小和加载时间长短智能的进行决策负载均衡,即根据后端服务器的响应时间来分配请求,响应时间段的优先分配。Nginx本身未集成fair模块,如果需要该调度算法,必须下载Nginx的upstream_fair模块,然后在config中配置加载。
url_hash:此调度算法是根据访问的url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步的提高后端服务器的效率。Nginx本身未集成该模块,如果使用需安装Nginx的hash包,并编译加载到nginx。Nginx的upstream模块支持的状态参数

在http的upstream模块中,可以通过server指令指定后端服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态。通常设置的状态参数如下:

down:表示当前的server暂时不参与负载均衡。
backup:预留的备份服务器。当其他的所有非backup机器出现故障或者忙的时间,才会请求backup服务器,因此这台服务器的压力最轻。
max_fails:允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
fail_timeout:在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。

注:当负载均衡调度算法使用ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup。

标签: #nginx分布式系统 #nginx算法博客