nginx 负载均衡
一、 nginx 并发优化
1、worker_processes
句法: | worker_processes number (or) auto; |
---|---|
默认: | worker_processes 1; |
语境: | main |
定义工作进程数。
最佳值取决于许多因素,包括(但不限于)CPU内核数,存储数据的硬盘驱动器数以及加载模式。如有疑问,将其设置为可用的CPU内核数将是一个不错的开始(值“ auto”将尝试自动检测它)。
2、worker_cpu_affinity
句法: | worker_cpu_affinity cpumask …; worker_cpu_affinity auto [cpumask]; |
---|---|
默认: | - |
语境: | main |
将工作进程绑定到CPU组。每个CPU集由允许的CPU的位掩码表示。应该为每个工作进程定义一个单独的集合。默认情况下,辅助进程未绑定到任何特定的CPU。
例如 |
---|
worker_processes 4; |
worker_cpu_affinity 0001 0010 0100 1000; |
3、worker_connections number
句法: | worker_connections number; |
---|---|
默认: | worker_connections 512; |
语境: | events |
设置工作进程可以打开的最大同时连接数。
应当记住,该数目包括所有连接(例如,与代理服务器的连接等),而不仅包括与客户端的连接。另一个需要考虑的因素是,并发连接的实际数量不能超过打开文件最大数量的当前限制,可以通过worker_rlimit_nofile进行更改 。
4、epoll
use epoll ,使用epoll 多路复用机制。
注释:
- nginx做服务器时
- max_clients = worker_processes * worker_connections
- nginx作为反向代理服务器时
- max_clients = worker_processes * worker_connections / 2
- 文件最大打开数:内核 > 系统 > app
- 修改内核配置参数
- 修改文件 -> /etc/sysctl.conf
- 或者在 /etc/sysctl.d 目录下,编写 .conf 文件
二、 NGINX开源支持四种负载平衡方法
-
Round Robin
- 请求在服务器之间平均分配,同时考虑了服务器权重(默认使用)。
-
least_conn;
- 最少连接 -将活动连接最少的请求发送到服务器,再次考虑服务器权重。
-
ip_hash;
- IP哈希-从客户端IP地址确定向其发送请求的服务器。客户端IP 不变,则访问的后端服务器不变。
-
hash $request_uri consistent;
- 通用哈希 –将请求发送到的服务器是根据用户定义的键确定的,该键可以是文本字符串,变量或组合。
# nginx 负载均衡:
# 配置nginx 配置文件
vim /usr/local/nginx/conf/nginx.conf
……
use nginx nginx;
worker_processes 2;
worker_cpu_affinity 01 10;
……
use epoll;
worker_connections 65535;
http{
......
# 定义一个负载均衡器,可以指定端口
upstream westos {
# NGINX开源支持四种负载平衡方法
# Round Robin –请求在服务器之间平均分配,同时考虑了服务器权重(默认使用)。
# 最少连接 -将活动连接最少的请求发送到服务器,再次考虑服务器权重。
# least_conn;
# IP哈希-从客户端IP地址确定向其发送请求的服务器。客户端IP 不变,则访问的后端服务器不变。
# ip_hash;
# 通用哈希 –将请求发送到的服务器是根据用户定义的键确定的,该键可以是文本字符串,变量或组合。
# hash $request_uri consistent;
#server 172.25.9.2:80 weight=5; #设置权重,权重越高越优先调度
server 172.25.9.2:80;
server 172.25.9.3:80;
#server 127.0.0.1 backup; # 当前服务器做备用,除所有服务器全部无法调度,否则不会调度此服务器
}
......
# 注释之前的 location,
#location / {
# root html;
# index index.php index.html index.htm;
#}
# 新建location ,访问根时,调度到负载均衡器上
location / {
proxy_pass http://westos;
}
......
}
# 后端设置,server2 和 server3 作为后端,以httpd 方式。
server2:
yum install -y httpd
systemctl start httpd
echo server2 > /var/www/html/index.html
server3:
yum install -y httpd
systemctl start httpd
echo server3 > /var/www/html/index.html
三、 nginx sticky 模块的使用
- sticky;(nginxplus 支持的功能)
- 启用会话持久性,浏览器cookie 值不变,则访问的后端也不变。
# 清除原先生成编译文件
make clean
# 重新生成Makefile 文件,指定模块路径
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42
# 不用make install ,会覆盖很多配置
make
# 替换二进制文件,并重启服务
cd nginx-goodies-nginx-sticky-module-ng-08a395c66e42
cp nginx /usr/local/nginx/sbin
systemctl restart nginx
# 编辑配置文件
vim /usr/local/nginx/conf/nginx.conf
......
http{
......
upstream westos {
sticky; #修改的地方,在所定义的负载均衡器中启用即可。
server 172.25.9.2:80;
server 172.25.9.3:80;
}
......
}
# 检测语法
nginx -t
# 重载
nginx -s reload
# 测试,做了负载均衡后,浏览器访问,只要 cookie 值不变,网络正常,服务器正常。始终会调度到同一个后台。
示例截图