1.指定nginx 的运行身份
查看nginx的worker运行身份为nobody ,需要为其添加指定用户
useradd -d /usr/local/nginx -M -s /sbin/nologin nginx
修改nginx的配置文件,指定运行身份
vim /usr/local/nginx/conf/nginx.conf
重载nginx后查看worker的运行身份
2.优化性能相关的配置
worker进程的数量
worker进程的数量,通常应该为当前主机的cpu的物理核心数,查看当前主机的核心数量lscpu 修改配置文件中的worker数量为自动获取
vim /usr/local/nginx/conf/nginx.conf
重载nginx后查看worker运行数量,发现数量cpu数量一致了。
worker 进程绑定到指定cpu
将worker进程绑定到指定cpu上,可以提高缓存命中率
worker_cpu_affinity 0001 0010 0100 1000; 分别将worker进程绑定到1,2,3,4号CPU上
编辑配置文件
vim /usr/local/nginx/conf/nginx.conf
控制nginx的最大连接数
单个进程允许的最大连接数需要根据服务器性能和内存使用量作相应的调整。进程的最大连接数又受到linux系统进程的最大打开文件数限制。所以nginx的最大总并发连接数=worker 数量 * 单个进程最大连接数
修改连接数
vim /usr/local/nginx/conf/nginx.conf
再修改linux系统所限制的最大连接数,数量一般应大于所申请数。
vim /etc/security/limits.conf
一个应用程序能开启的最大连接数是受到限制的,内核限制>系统限制>应用软件限制。 查看内科支持的最大文件打开数 sysctl -a | grep file 查看系统支持的最大文件打开数 ulimit -a
3.nginx 平滑升级
nginx 方便地帮助我们实现了平滑升级。其原理简单概括,就是: (1)在不停掉老进程的情况下,启动新进程。 (2)老进程负责处理仍然没有处理完的请求,但不再接受处理请求。 (3)新进程接受新请求。 (4)老进程处理完所有请求,关闭所有连接后,停止。
下载新版本 nginx,解压, 准备进行源码编译, [root@server1 ~]# tar zxf nginx-1.21.1.tar.gz [root@server1 ~]# cd nginx-1.21.1/auto [root@server1 auto]# vim cc/gcc ##轻量化编译,注释掉debug 进行预编译和正式编译,原有的参数不能少,假如想添加其他新模块,,直接在后面添加相关配置参数即可。只编译,不安装,
[root@server1 nginx-1.21.1]
[root@server1 nginx-1.21.1]
备份原nginx二进制文件,期间nginx不会停止服务,将新编辑的二进制序覆盖掉原来安装路径下的nginx.
[root@server1 nginx-1.21.1]
[root@server1 nginx-1.21.1]
然后查看只有老进程在工作,在新版本的编译目录中给nginx发送平滑迁移信号。
[root@server1 nginx-1.21.1]
新版本的master和worker 已经和就版本同时存在,
关闭旧的nginx工作进程
[root@server1 nginx-1.21.1]
可以看到旧的工作进程已经被关闭,只剩下旧的主进程与新的工作进程同时存在,此时访问已经是新版本
再结束旧的主进程
[root@server1 nginx-1.21.1]
再次观查,只有新的主进程和工作进程;
注意:之前的master进程不要结束掉,万一新版本有问题,可以回滚,等新版本确认没有问题了,在结束掉
命令 | 作用 |
---|
kill -USR2 进程号 | 不再让worker进程接受请求,当前请求处理完就让worker进程退出 | kill -WINCH 进程号 | 处理完关闭 | kill-HUP 进程号 | 启动进程 |
4.版本回退
与版本升级一样,将旧版本的二进制应用文件替换新版本的,这里使用之前备份的老版本直接覆盖。
[root@server1 nginx-1.21.1]
[root@server1 sbin]
当旧版本已经被关闭,ps查询不到时, [root@server1 objs]# kill -USR2 2113 3##新版本的PID 就可以拉起旧版本的worker进程 新版本的master和worker 已经和就版本同时存在,
关闭新的nginx工作进程
[root@server1 sbin]
nginx 负载均衡
1、轮询
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
http {
upstream backserver {
server 172.25.1.2;
server 172.25.1.3;
}
server {
listen 80;
server_name www.erqian.org;
location / {
proxy_pass http://backserver;
}
}
测试访问
2、权重
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的 情况。
upstream backserver {
server 172.25.1.2 weight=3;
server 172.25.1.3;
}
测试访问
权重越高,在被访问的概率越大
3.ip_hash
上述方式存在一个问题就是说,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。
我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream backserver { ip_hash; server 172.25.1.2; server 172.25.1.3; }
4.基于cookie的负载均衡
通过nginx的拓展模块nginx-sticky-module实现。 安装插件,重新编译。
[root@server1 nginx-1.20.1]
[root@server1 nginx-1.20.1]
[root@server1 nginx-1.20.1]
编辑配置文件 浏览器访问会一直保持server2 删除掉cookie直后刷新,访问server3
|