鸿 网 互 联 www.68idc.cn

Nginx安装与负载均衡配置

来源:互联网 作者:佚名 时间:2022-07-19 11:04
Nginx 安装与负载均衡配置 一、 ??? 需求说明 1. ????? 系统要求: Centos8 操作系统 2. ????? 负载均衡 通过 Nginx 实现地址轮询 3. ????? 测试环境 通过 docker 环境制作两个简单的
Nginx安装与负载均衡配置


Nginx安装与负载均衡配置_负载均衡

一、??? 需求说明

1.????? 系统要求:

Centos8操作系统

2.????? 负载均衡

通过Nginx实现地址轮询

3.????? 测试环境

通过docker环境制作两个简单的nginx前端页面,分别是nginx1nginx2

通过部署Nginx负载,实现两个地址的轮询

二、??? 负载均衡的方式

负载均衡有3种方式:

l? 循环机制:循环分发对应用服务器的请求

l? 最少连接机制:将请求发送给连接数最少的服务器

l? ip-hash机制:哈西函数用于确定请求被配那个服务器(基于客户端IP地址)

1.??? 轮询机制

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

适合服务器配置相当,无状态且短平快的服务使用。也适用于图片服务器集群和纯静态页面服务器集群。

优点:方式简便、成本低廉。

缺点:可靠性低和负载分配不均衡。

?? 代码示例:

upstream? balance {

? ? server ip地址1;

? ? server ip地址2;

}

指定轮询几率weight和访问比率成正比,用于后端服务器性能不均的情况

权重越高,在被访问的概率越大,如下例,分别是30%70%

upstream?balance {

????server?ip地址1?weight=3;

????server?ip地址2?weight=7;

}

2.??? 最少连接机制

当某些请求耗费较长时间完成时,最少连接机制能让实例的负载更加均衡

在最少连接机制下nginx不会让大量请求使应用服务器超载,而是将请求分发至相对悠闲的服务器。

轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。

?? 代码示例:

least_conn指令用在服务器组配置中时,最少连接机制就生效了。

upstream blance {

least_conn;???????? ???#把请求转发给连接数较少的后端服务器
server ?ip
地址1;
server ?ip
地址2;
server ?ip
地址3;
}

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

3.??? ip-hash机制

请注意循环或者最少连接数负载均衡机制,可能将同一客户端的请求分发至不同的服务器,无法保证相同客户端的请求总是会被指向相同服务器。

比如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,所以为了使客户端请求总是分发向特定的服务器,就需要ip-hash负载均衡机制,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。

每个请求按访问iphash结果分配,这样每个访客固定访问一个后端服务器(除非服务器不可用),可以解决session不能跨服务器的问题。

?? 代码示例:

不加权重

upstream myapp1 {

ip_hash;
server ?ip
地址1;
server ?ip
地址2;
server ?ip
地址3;
}

服务器权重没有配置,意味着所有服务器等权重的应用于负载均衡。循环机制下大量请求以统一的方式处理,各服务器基本会被分发数量相等的请求。权重参数指定给服务器,权重就作为负载均衡的决定条件。

添加加权重

upstream myapp1 {

ip_hash;
server ?ip
地址1 weight=3;
server ?ip
地址2;
server ?ip
地址3;
}

在上面的配置中每5个请求,3个会被指向ip地址11个指向ip地址21个指向ip地址3

此策略适合有状态服务,比如session,当有服务器需要剔除,必须手动down掉。

4.??? 其他机制

还有一些机制需要通过安装第三方插件来实现,比如:fairurl_hash

1)? fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

#实现响应时间短的优先分配

upstream dynamic_tsingxin {

? ? server ip地址1;

? ? server ip地址2;

? ? fair;? ? ?????

}

2)? url_hash(第三方)?

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

#实现每个url定向到同一个后端服务器

upstream dynamic_tsingxin {

? ? server ip地址1;

? ? server ip地址2;

? ? hash $request_uri;? ?

? ? hash_method crc32;

}

注意:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。

三、??? 负载状态设置:

1.down表示单前的server暂时不参与负载

2.weight默认为1weight越大,负载的权重就越大?

3.max_fails允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream模块定义的错误?

4.fail_timeoutmax_fails次失败后,暂停的时间

5.backup预留的备份服务器。 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻

6.max_conns限制最大的接收连接数

?

四、??? Nginx安装

注:如果你使用的是CentOS8,直接使用第三步命令即可安装。

第一步:安装yum-utils

yum install yum-utils

[root@LoadBalance yum.repos.d]# yum install yum-utils

Last metadata expiration check: 0:00:51 ago on Fri 30 Apr 2021 05:45:05 PM CST.

Dependencies resolved.

==================================================================================================

?Package??????????????? Architecture??????? Version???????????????????? Repository?????????? Size

==================================================================================================

Installing:

?yum-utils????????????? noarch????????????? 4.0.17-5.el8??????????????? baseos???????????? ??68 k

Transaction Summary

==================================================================================================

Install? 1 Package

Total download size: 68 k

Installed size: 20 k

Is this ok [y/N]: y

Downloading Packages:

yum-utils-4.0.17-5.el8.noarch.rpm???????????????????????????????? 532 kB/s |? 68 kB???? 00:00

-----------------------------------------------------------------------------------

Total????????????????????????????????????????????????????????????? 79 kB/s |? 68 kB???? 00:00

Running transaction check

Transaction check succeeded.

Running transaction test

Transaction test succeeded.

Running transaction

? Preparing??????? :????????????????????????????????????????????????????????????????????????? 1/1

? Installing?????? : yum-utils-4.0.17-5.el8.noarch??????????????????????????????????????????? 1/1

? Running scriptlet: yum-utils-4.0.17-5.el8.noarch????????????????????????????? ??????????????1/1

? Verifying??????? : yum-utils-4.0.17-5.el8.noarch??????????????????????????????????????????? 1/1

Installed:

? yum-utils-4.0.17-5.el8.noarch

Complete!

第二步:创建nginx.repo文件

/etc/yum.repos.d/nginx.repo

[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=0

gpgkey=https://nginx.org/keys/nginx_signing.key

module_hotfixes=true

第三步:安装Nginx

注:如果你使用的是CentOS8,直接使用第三步命令即可安装。

[root@LoadBalance yum.repos.d]# yum install nginx

Last metadata expiration check: 0:01:00 ago on Fri 30 Apr 2021 05:45:05 PM CST.

Dependencies resolved.

==============================================================

?Package????????? Architecture????? Version???????????????????????? Repository?????????????? Size

==============================================================

Installing:

?nginx??????????? x86_64??????????? 1:1.20.0-1.el8.ngx????????????? nginx-stable??????????? 820 k

Transaction Summary

==============================================================

Install? 1 Package

Total download size: 820 k

Installed size: 2.8 M

Is this ok [y/N]: y

Downloading Packages:

nginx-1.20.0-1.el8.ngx.x86_64.rpm???????????????????????????????? 247 kB/s | 820 kB???? 00:03

-----------------------------------------------------------------------------------

Total???????????????????????????????????????????????????????????? 247 kB/s | 820 kB???? 00:03

warning: /var/cache/dnf/nginx-stable-614ef03fac352fea/packages/nginx-1.20.0-1.el8.ngx.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY

nginx stable repo???????????????????????????????????????????????? 1.1 kB/s | 1.5 kB???? 00:01

Importing GPG key 0x7BD9BF62:

?Userid???? : "nginx signing key

?Fingerprint: 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62

?From?????? : https://nginx.org/keys/nginx_signing.key

Is this ok [y/N]: y

Key imported successfully

Running transaction check

Transaction check succeeded.

Running transaction test

Transaction test succeeded.

Running transaction

? Preparing??????? :????????????????????????????????????????????????????????????????????????? 1/1

? Running scriptlet: nginx-1:1.20.0-1.el8.ngx.x86_64????????????????????????????????????????? 1/1

? Installing?????? : nginx-1:1.20.0-1.el8.ngx.x86_64????????????????????????????????????????? 1/1

? Running scriptlet: nginx-1:1.20.0-1.el8.ngx.x86_64????????????????????????????????????????? 1/1

---------------------------------------------------------------------

Thanks for using nginx!

Please find the official documentation for nginx here:

* https://nginx.org/en/docs/

Please subscribe to nginx-announce mailing list to get

the most important news about nginx:

* https://nginx.org/en/support.html

Commercial subscriptions for nginx are available on:

* https://nginx.com/products/

----------------------------------------------------------------------

? Verifying??????? : nginx-1:1.20.0-1.el8.ngx.x86_64????????????????????????????????????????? 1/1

Installed:

? nginx-1:1.20.0-1.el8.ngx.x86_64

Complete!

第四步:启动Nginx

启动前,请关闭Selinux,防止访问报错

[root@LoadBalance yum.repos.d]# systemctl start nginx

五、??? 配置负载均衡

[root@LoadBalance ~]# vim /etc/nginx/nginx.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 /etc/nginx/conf.d/*.conf;

??? upstream balance {????????????? ?#负载的配置(upstream)必须在http模块内

??? #ip_hash;?????????????????? #注释掉了ip_hash,则默认是轮询

server 10.78.56.63:9991;?????? ?#添加集群

??? server 10.78.56.63:9992;?

??? }

??? server {

????? listen 8080;?????????????? #服务监听的端口

??? server_name 10.78.56.101;??? #服务访问IP

??? location / {

????? #index? http://10.78.56.101:8080

?????? proxy_pass http://balance;??? ?#和前面upstream的命名一致 ??????

??? }

}

}

?

[root@LoadBalance ~]# systemctl restart nginx? ?#重启服务

?

?

?Nginx安装与负载均衡配置_nginx;负载均_02

Nginx安装与负载均衡配置_负载均衡_03


【文章由高防cdn http://www.juniucdn.com处的文章,转载请说明出处】
上一篇:Docker - 仓库(8)
下一篇:没有了
网友评论
<