美文网首页
Nginx调度器以及相关优化

Nginx调度器以及相关优化

作者: 郭不戳 | 来源:发表于2022-09-15 08:01 被阅读0次

    nginx功能
    网站服务,网站代理(网站业务),四层代理(其他业务)

    1.Nginx调度器

    1. 使用nginx代理功能

    使用nginx代理功能

    环境准备

    主机名 IP地址
    proxy 192.168.99.5
    web3 192.168.99.100
    web2 192.168.99.200

    检查ip,同网段要互通,检查yum
    在web1、web2主机安装常用软件包与网站服务httpd

    yum -y install vim net-tools bash-completion psmisc httpd
    
    准备网站页面
    echo "web1~~" > /var/www/html/index.html   //创建测试页面,如果是web2主机的话要写web2~~
    systemctl start httpd    //然后将web1、web2的服务开启
    systemctl stop firewalld   //关闭防火墙
    
    到proxy主机测试
    [root@proxy nginx]# curl 192.168.99.100
    web1~~
    [root@proxy nginx]# curl 192.168.99.200
    web2~~
    
    proxy主机安装nginx
    [root@proxy]# tar -xf nginx-1.17.6.tar.gz
    [root@proxy]# cd nginx-1.17.6/
    [root@proxy]#yum -y install gcc make pcre-devel openssl-devel
    [root@proxy nginx-1.17.6]# ./configure 
    [root@proxy nginx-1.17.6]#make
    [root@proxy nginx-1.17.6]#make  install         
    

    2. 修改nginx配置文件实现集群功能

    vim /usr/local/nginx/conf/nginx.conf
    upstream web {        //首先是34~37行,创建集群,集群名称叫web
    server  192.168.99.100:80;   //这里是集群中的服务器ip与端口
    server  192.168.99.200:80;   //第二台集群主机
    }
    server {
            listen       80;
            ...........
            location / {
    proxy_pass  http://web;     //在第47行,调用集群
                root   html;
                index  index.html index.htm;
            }
    

    开启nginx或者重加载nginx配置,多次用curl 192.168.99.5可以看到 web1
    或web2页面轮询出现

    2.Nginx优化

    集群优化

    1. 调节权重定义集群主机任务的分配量

    vim /usr/local/nginx/conf/nginx.conf
    server 192.168.99.200:80 weight=2;   //为性能较强的集群主机配置权重
    ,权重越大任务的分配量就越大
    [root@proxy nginx]# curl 192.168.99.5
    web2~~
    [root@proxy nginx]# curl 192.168.99.5
    web2~~
    [root@proxy nginx]# curl 192.168.99.5
    web1~~
    

    2. 配置健康检查

    vim /usr/local/nginx/conf/nginx.conf
    server 192.168.99.200:80 max_fails=2 fail_timeout=30; //检测两次如果失败
    ,则认为集群中的主机故障,之后等待30秒再次测试
    sbin/nginx -s reload
    测试时,先将web2的httpd服务关闭,回到proxy访问集群页面curl 192.168.99.5
    只会显示web1的页面,此时即使将web2的httpd服务开启也无效,因为要等
    待30秒
    

    3. 相同客户机访问相同服务器

    vim /usr/local/nginx/conf/nginx.conf
    upstream web {
    ip_hash;   //相同客户机访问相同服务器,让一个客户机访问集群时锁定
    一个后台服务器,避免重复登陆的问题
    server 192.168.99.100:80;
    server 192.168.99.200:80;
    }
    sbin/nginx -s reload
    curl 192.168.99.5    //重加载配置后访问只会看到一个网站的页面
    

    4. 添加down标记

    vim /usr/local/nginx/conf/nginx.conf
    upstream web {
    server 192.168.99.100:80;
    server 192.168.99.200:80 down;  //down标记可以让集群主机暂时不参与集群活动
    }
    sbin/nginx -s reload
    curl 192.168.99.5
    

    使用nginx创建其他业务集群(四层代理)

    功能:proxy主机轮询登录到web1和web2

    [root@proxy nginx]# cd ~/lnmp_soft/nginx-1.17.6/
    [root@proxy nginx-1.17.6]# killall nginx
    [root@proxy nginx-1.17.6]# rm -rf /usr/local/nginx/
    ./configure  --with-stream  --with-http_stub_status_module
    //这里的--with-stream 是添加四层代理模块,可以用来创建其
    他业务集群,--with-http_stub_status_module是后面实验所需模块
    另外,如果更新模块,但不想删除之前nginx数据,可以将nginx源码目录下的objs目录中的nginx文件拷贝到nginx的sbin目录下替代现有主程序,然后killall  nginx 再重启即可
    make    //编译
    make install    //安装
    cd /usr/local/nginx/
    sbin/nginx -V   //查看安装模块情况
    

    打开nginx主配置文件,在16行左右(http上面),添加以下内容

    stream {         //创建新业务
    upstream backend {    //创建名叫backend的集群
    server 192.168.99.100:22;    //集群中的主机使用22端口对外提供服务
    server 192.168.99.200:22;
    }
    server {
    listen 12345;    //监听端口号
    proxy_pass backend;    //调用集群
    }
    }
    

    访问测试

    sbin/nginx   //配置写好之后开启服务或者重加载配置文件
    ssh  192.168.99.5 -p 12345    //尝试远程登录,第一次会连接集群的某主机比如web1
    exit    //远程连接成功后退出,再ssh 192.168.99.5 -p 12345可连接到另外一台集群主机
    注意:如果配置没有错误,但无法反复登陆web1与web2,可以按下列方式解决
    [root@proxy nginx]# rm -rf ~/.ssh/known_hosts   //每登录一次之后在proxy中删除记录文件
    ssh  192.168.99.5 -p 12345   //再次尝试登录,会连接到另外一台集群主机
    

    常见nginx问题处理

    1. 404报错

    打开配置文件,在默认的虚拟主机里面的location下面修改
    error_page  404      /test.jpg;  //这里把#注释去掉,后面改成test.jpg
    ,效果是如果客户访问了不存在的页面就显示test.jpg的内容
    sbin/nginx -s reload   //重加载配置
    然后找一个图片扔到/usr/local/nginx/html里面,命名为test.jpg
    使用浏览器虽随意访问不存在的页面192.168.99.5/XXXX.html   就可以看到之前
    那张图片的内容
    如果真机是windows可以用mobaXterm传test.jpg文件到nginx的html目录
    如果真机是linux可以用scp命令
    

    2. 查看网站后台数据

    --with-http_stub_status_module   //该功能利用的模块,之前配置nginx已经安装
    打开配置文件
    location /status  {   //在error_page行上面添加此内容
    stub_status on;    //显示后台的数据
    allow 192.168.99.5;    //只允许proxy查看
    deny all;   //拒绝其他
    }
    sbin/nginx -s reload    //重加载配置
    

    测试

    使用curl 192.168.99.5/status 查看
    Active connections:当前活动的连接数量(当前有多少用户访问该网站)。
    Accepts:已经接受客户端的连接总数量。
    Handled:已经处理客户端的连接总数量。
    Requests:客户端发送的请求数量。
    Reading:当前服务器正在读取客户端请求头的数量。
    Writing:当前服务器正在写响应信息的数量。
    Waiting:当前多少客户端在等待服务器的响应。

    3. 缓存文件在客户端

    用户如果反复访问服务器的相同文件可以缓存到客户机,避免
    服务器反复传送相同文件,节约时间

    打开配置文件,在默认的location下面添加一个location
    location ~* \.(jpg|html|txt|mp3)$ {     //当发现用户访问的是
    以.jpg或者.html等等结尾的页面时
    expires 30d;   //就把上述访问的文件在客户机缓存30天
    }
    sbin/nginx -s reload  //配置完后重加载配置文件
    

    使用火狐浏览器清空历史记录,然后访问192.168.99.5/a.html
    然后地址栏输入about:cache
    查看disk文件的列表,找到被访问文件看最后倒数第2列(Expires)
    信息显示多久过期可以看到该文件的过期时间是一个月之后,说明
    缓存成功。

    4. 支持超长地址栏

    默认情况下nginx无法支持长地址栏,会报414错误

    打开配置文件,在默认的虚拟主机上方添加两行
    client_header_buffer_size 200k;   //第一行表示,用户访问网站的头部信
    息(包含地址栏)长度支持200k大小
    large_client_header_buffers 4 200k;  //第二行表示,如果200k不够,再
    给4个200k
    
    sbin/nginx  -s  reload   //重加载配置
    

    5. 优化nginx并发

    用proxy 和web1
    防火墙与selinux都关闭

    [root@web1 ~]# yum -y install httpd-tools   
    ab -c 200 -n 200 http://192.168.99.5/     //用压力测试工具模拟200人,每人1次,一共200次对99.5的网站发起访问,成功
    ab -c 2000 -n 2000 http://192.168.99.5/   //模拟2000人,每人1次,一共2000次
    对99.5的网站发起访问,失败
    

    接下来进行优化
    在proxy主机:打开nginx配置文件修改第3行,第13行

    worker_processes  2;   //开启的nginx进程数量,通常是随cpu的核心数一致
    worker_connections  50000;   //每个nginx进程支持的并发访问量
    sbin/nginx  -s  reload
    

    proxy与web1都执行以下命令

    ulimit -n     //查询系统打开文件数量的大小
    ulimit -n 100000   //临时定义文件可以同时被打开的次数为10万
    

    回到web1主机执行命令ab -c 2000 -n 2000 http://192.168.99.5/ 看到100%则成功

    vim /etc/security/limits.conf   //打开配置文件实现永久修改
    修改第53、54行
    *               soft    nofile          100000
    *               hard    nofile         100000
    

    相关文章

      网友评论

          本文标题:Nginx调度器以及相关优化

          本文链接:https://www.haomeiwen.com/subject/ridrortx.html