Nginx 01 - 负载均衡

Posted 懒人实录

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx 01 - 负载均衡相关的知识,希望对你有一定的参考价值。

nginx安装

下载

https://nginx.org/en/download.html

传到虚拟机中并解压缩

编译安装

./configure --prefix=/usr/local/nginx

make

make install

如果出现警告或报错

提示:

./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.

安装perl库

yum install -y pcre pcre-devel

提示:

./configure: error: the HTTP gzip module requires the zlib library.
You can either disable the module by using --without-http_gzip_module
option, or install the zlib library into the system, or build the zlib library
statically from the source with nginx by using --with-zlib=<path> option.

安装zlib库

yum install -y zlib zlib-devel

启动Nginx

进入安装好的目录/usr/local/nginx/sbin

./nginx 启动 
./nginx -s stop 快速停止
./nginx -s quit 优雅关闭,在退出前完成已经接受的连接请求
./nginx -s reload 重新加载配置

禁止防火墙开机启动

systemctl disable firewalld.service

放行端口

firewall-cmd --zone=public --add-port=80/tcp --permanent

重启防火墙

firewall-cmd --reload

安装成系统服务

创建服务脚本

vi /usr/lib/systemd/system/nginx.service

服务脚本内容

[Unit]
Description=nginx - web server
After=network.target remote-fs.target nss-lookup.target


[Service]

Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecQuit=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]

WantedBy=multi-user.target

重新加载系统服务

systemctl daemon-reload

启动服务

systemctl start nginx.service

开机启动

systemctl enable firewalld.service

Nginx配置负载均衡

在http下添加 upstream upstream_name {} 来配置要映射的服务器,upstream_name大家可以指定为服务的域名或者项目的代号

server下的location 我们将 / 下的全部请求转发到 http://upstream_name ,也就是我们上面配置的服务器列表中的某一台服务器上。具体是哪台服务器,nginx会根据配置的调度算法来确认。

Nginx 01 - 负载均衡

我们在浏览器中打开localhost:80。多刷新几次就可以看到页面上的内容发生了变化。

nginx负载均衡策略

轮询最基本的配置方法,它是upstream的默认策略,每个请求会按时间顺序逐一分配到不同的后端服务器。

参数:

  • fail_timeout   max_fails结合使用

  • max_fails   设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有对该服务器的请求都失败了,那么认为该服务器会被认为是停机了

  • fail_time  务器会被认为停机的时间长度,默认为10s

  • backup  标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里

  • down     标记服务器永久停机了。

注意:

  • 在轮询中,如果服务器down掉了,会自动剔除该服务器。

  • 缺省配置就是轮询策略。

  • 此策略适合服务器配置相当,无状态且短平快的服务使用。

权重

在轮询策略的基础上制定沦陷的几率

upstream httpds{

    server 192.168.88.132:88 weight=2;

    server 192.168.88.132:99;

    server 192.168.88.132:11 backup;

    server 192.168.88.132:22 max_fails=3 fail_timeout=20s;

}

这里例子中,weight参数用于制定轮询的几率,weight默认值为1;weight的数值和被访问的几率成正比。

注意:

  • 权重越高分配到需要处理的请求越多。

  • 此策略可以与least_conn和ip_hash结合使用。

  • 此策略比较适合服务器的硬件配置差别比较大的情况。

ip_hash

upstream httpds{

    ip_hash;

    server 192.168.88.132:88 weight=2;

    server 192.168.88.132:99;

    server 192.168.88.132:11 backup;

    server 192.168.88.132:22 max_fails=3 fail_timeout=20s;

}

注意:

  • ip_hash不能与backup同时使用。

  • 此策略适合有状态服务,比如session。

  • 当有服务器需要剔除,必须手动down掉。

least_conn 最小连接

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

upstream httpds{

    least_conn;

    server 192.168.88.132:88 weight=2;

    server 192.168.88.132:99;

    server 192.168.88.132:11 backup;

    server 192.168.88.132:22 max_fails=3 fail_timeout=20s;

}

注意:

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


还有一些第三方的调度策略可以集成到nginx中,

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

  • url_hash 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

以上是关于Nginx 01 - 负载均衡的主要内容,如果未能解决你的问题,请参考以下文章

Nginx 01 - 负载均衡

Nginx负载均衡-day

nginx反向代理与负载均衡

nginx负载均衡配合keepalived服务案例实战

01_Nginx入门

负载均衡Nginx+KeepAlived