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会根据配置的调度算法来确认。
我们在浏览器中打开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 - 负载均衡的主要内容,如果未能解决你的问题,请参考以下文章