据说让你抓狂的Nginx性能调优,我却这么轻松就搞定了( 二 )

注:此策略适合请求时间长短不一造成服务器负载的情况时使用
fair(第三方,需要单独安装插件)

按照服务器的响应时间来分配请求,响应时间短的服务器优先分配(能者多劳)
例子:
#动态服务器组upstream dynamic_zuoyu {server localhost:8080;#tomcat 7.0server localhost:8081;#tomcat 8.0server localhost:8082;#tomcat 8.5server localhost:8083;#tomcat 9.0fair;#实现响应时间短的优先分配}url_hash(第三方,需要单独安装插件)
按照url哈希来分配请求到服务器,使得相同的url每次到的服务器一致,这样也可以减轻对服务器的压力(配合缓存命中来使用)
例子:
#动态服务器组upstream dynamic_zuoyu {hash $request_uri;#实现每个url定向到同一个后端服务器server localhost:8080;#tomcat 7.0server localhost:8081;#tomcat 8.0server localhost:8082;#tomcat 8.5server localhost:8083;#tomcat 9.0}【据说让你抓狂的Nginx性能调优,我却这么轻松就搞定了】注:此策略适合同一个资源多次请求的情况时使用
静态web服务器前后端分离location / {root/data/paibo_web_8081_css; #前端代码存放路径indexindex.html index.htm;}静态资源(文件、图片等)location /upfile/ {root /home/audit_files/; #文件存放路径index index.html;}Nginx的下载与安装#下载gcc编译器yum -y install gcc gcc-c++#下载PCREyum -y install pcre-devel openssl-devel#下载nginx,官方网站是 http://nginx.org ,自己找到需要的版本,右键复制下载链接wget http://nginx.org/download/nginx-1.19.2.tar.gz#解压tar -zxvf nginx-1.19.2.tar.gz#生成makefile 。使用./configure --help查看各个模块的使用情况,使用--without-http_ssi_module的方式关闭不需要的模块 。可以使用--with-http_perl_modules方式安装需要的模块cd nginx-1.19.2./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module #编译安装make && make install#进入到安装目录cd /usr/local/nginx/#将 /usr/local/nginx/sbin/nginx 软连接到 /usr/local/sbin 下,就可以在任意地方使用nginx命令ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/#修改配置文件vim /usr/local/nginx/conf/nginx.conf#测试nginx配置文件是否正常nginx -t#启动nginxnginx#关闭防火墙systemctl stop firewalldsystemctl disable firewalld#外部访问,nginx默认监听80端口192.168.198.98:80#重新载入配置文件nginx -s reload#重启nginxnginx -s reopen#停止nginxnginx -s stopNginx+Keepalived实现高可用#在两台服务器安装nginx,参考<Nginx的下载与安装>#我这里用的是下面两台服务器,为了区分,做了以下修改192.168.198.6 #编辑index.html,<h1>Welcome to nginx! 2</h1>192.168.198.98 #编辑index.html,<h1>Welcome to nginx! 1</h1>#两台服务器都需要执行以下操作#下载keepalived安装包cd /data/soft/wget https://www.keepalived.org/software/keepalived-2.1.0.tar.gz#解压安装包tar -zxvf keepalived-2.1.0.tar.gz#编译安装cd keepalived-2.1.0./configure --prefix=/usr/local/keepalivedmake && make install#keepalived启动脚本变量引用文件,默认文件路径是/etc/sysconfig/,也可以不做软链接,直接修改启动脚本中文件路径即可(安装目录下)cp /usr/local/keepalived/etc/sysconfig/keepalived/etc/sysconfig/keepalived#将keepalived主程序加入到环境变量(安装目录下)cp /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived#keepalived启动脚本(源码目录下),放到/etc/init.d/目录下就可以使用service命令便捷调用cp /data/soft/keepalived-2.1.0/keepalived/etc/init.d/keepalived/etc/init.d/keepalived#将配置文件放到默认路径下mkdir /etc/keepalivedcp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf#加为系统服务chkconfig –add keepalived#开机启动chkconfig keepalived on#查看开机启动的服务chkconfig –list#启动、关闭、重启service keepalived start|stop|restart######################### 至此,安装完成;以下就是在keepalived.conf做HA的配置 #########################vim /etc/keepalived/keepalived.conf##### master #####! Configuration File for keepalived# 全局定义块global_defs {router_id redis-rocketMQ#标志本节点的字符串,建议使用hostname}# keepalived 会定时执行脚本并对脚本执行的结果进行分析,动态调整 vrrp_instance 的优先级 。如果脚本执行结果为 0,并且 weight 配置的值大于 0,则优先级相应>的增加 。如果脚本执行结果非 0,并且 weight配置的值小于 0,则优先级相应的减少 。其他情况,维持原本配置的优先级,即配置文件中 priority 对应的值 。vrrp_script chk_nginx {script "/etc/keepalived/nginx_check.sh"#检测 nginx 状态的脚本路径interval 2#检测时间间隔weight -20#如果条件成立,权重-20}# 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称vrrp_instance VI_1 {state MASTER#主节点为MASTER,备用节点为BACKUPinterface eno16777736#与本机网卡名称一致virtual_router_id 51#虚拟路由的id号,两个节点必须设置一样mcast_src_ip 192.168.198.98priority 100#设置优先级,值范围 0~254,master要比backup高nopreempt#优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题advert_int 1#组播信息发送间隔,节点必须设置一致authentication {#设置验证信息,节点必须设置一致auth_type PASSauth_pass 1111}#将 track_script 块加入 instance 配置块track_script {chk_nginx#执行 Nginx 监控的服务}virtual_ipaddress {#虚拟节点池,节点必须设置一样192.168.198.111#虚拟ip,可设置多个}}##### backup #####! Configuration File for keepalivedglobal_defs {router_id zk_alone}vrrp_script chk_nginx {script "/etc/keepalived/nginx_check.sh"interval 2weight -20}vrrp_instance VI_1 {state BACKUPinterface eno16777736virtual_router_id 51mcast_src_ip 192.168.198.6priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}track_script {chk_nginx}virtual_ipaddress {192.168.198.111}}#编写 Nginx 状态检测脚本#ps -C nginx | wc -l,查看当前有多少个nginx进程#逻辑:如果 nginx 停止运行,尝试启动,如果无法启动则杀死本机的 keepalived 进程, keepalied将虚拟 ip 绑定到 BACKUP 机器上vi /etc/keepalived/nginx_check.sh#!/bin/bashA=`ps -C nginx –no-header |wc -l`if [ $A -eq 0 ];then/usr/local/nginx/sbin/nginxsleep 2if [ `ps -C nginx --no-header |wc -l` -eq 0 ];thenkillall keepalivedfifi#赋权限chmod +x /etc/keepalived/nginx_check.sh#启动 两台Keepalivedservice keepalived start#访问虚拟IP192.168.198.111 # Welcome to nginx! 1######################### HA测试 ##########################由于我们写了一个自动启动nginx的脚本再keepalived中,故关闭时,先关闭keepalived,再关闭nginx192.168.198.98service keepalived stopnginx -s stop#再次访问192.168.198.111查看变化 Welcome to nginx! 2192.168.198.98service keepalived start #由于有启动nginx的脚本,故省去启动nginx的操作#再次访问192.168.198.111查看变化 Welcome to nginx! 1


推荐阅读