• Nginx配置高可用的集群


    Nginx

    1.Nginx反向代理

    • 既然是反向代理,那么什么是正向代理,当一个用户向访问谷歌浏览器,我通过在浏览器中配置代理服务器(比如www.zxdl.com)通过代理服务器去访问谷歌浏览器。

    • 而反向代理是,其实客户端对代理无感知,客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后再返回客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴漏的是代理服务器地址。隐藏真实服务器地址。

    2.负载均衡

    • 我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上改成将请求分发多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。

    3.动静分离

    • 动态资源和静态资源分开部署,把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。

    4.nginx安装

    • 安装nginx前需要安装一些依赖

      1.pcre依赖安装
      wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
      
      tar -xvf pcre-8.37.tar.gz 
      cd pcre-8.37/
      # 检查,如果抱错:configure: error: You need a C++ compiler for C++ support. 请执行:yum install -y gcc gcc-c++
      ./configure 
      # 安装
      make && make install
      # 查看安装是否完成:pcre-config --version
      # yum 安装 openssl zlib 
      # yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
      
    • 安装nginx

      https://www.runoob.com/linux/nginx-install-setup.html
      

    5.nginx常用命令

    # 查看版本好
    /usr/sbin/nginx -v
    # 启动
    /usr/sbin/nginx
    # 停止
    /usr/sbin/nginx -s stop
    # 重新加载配置
    /usr/sbin/nginx -s reload
    

    6.nginx配置

    • 全局块:主要影响nginx服务器整体运行配置指令
    • events块:影响nginx与用户网络连接
    • http块:

    6.1全局块

    worker_processes 1; #它可以有效提高并发处理,根据CPU核心数,e.g:双核4线程可以设置为4
    worker_connections #单个工作进程可以允许同时建立连接的数量。默认:1024。它与内存和操作系统级别的‘进程最大可打开文件数’
    
    

    6.2events块

    1.connections不是随便设置的,而是与两个指标有重要关联,一是内存,二是操作系统级别的“进程最大可打开文件数”。
    2.内存:每个连接数分别对应一个read_event、一个write_event事件,一个连接数大概占用232字节,2个事件总占用96字节,那么一个连接总共占用328字节,通过数学公式可以算出100000个连接数大概会占用 31M = 100000 * 328 / 1024 / 1024,当然这只是nginx启动时,connections连接数所占用的nginx。
    3.进程最大可打开文件数:进程最大可打开文件数受限于操作系统,可通过 ulimit -n 命令查询,以前是1024,现在是65535,
    nginx提供了worker_rlimit_nofile指令,这是除了ulimit的一种设置可用的描述符的方式。 该指令与使用ulimit对用户的设置是同样的效果。此指令的值将覆盖ulimit的值,如:worker_rlimit_nofile 20960;
    设置ulimits:ulimit -SHn 65535
    

    6.3http块

    • http块,server块

    7.Nginx配置实例-反向代理

    server {
            listen       80 default_server;
            listen       [::]:80 default_server;
            server_name  192.168.1.1;#访问ip
            root         /usr/share/nginx/html;
    
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
    
            location / {
              proxy_pass http://127.0.0.1:8080
            }
      ...
    }
    # 当用户浏览器访问192.168.1.1 就会反向代理到 http://127.0.0.1:8080
    
    • 根据不同路径访问,当访问 127.0.0.1:9001/edu/将转发到http://127.0.0.1:8001,当访问 127.0.0.1:9001/vod/将转发到http://127.0.0.1:8002,
    server {
            listen       9001;
            server_name  localhost;
      location ~/edu/ {
        proxy_pass http://127.0.0.1:8001;
      }
      location ~/vod/ {
        proxy_pass http://127.0.0.1:8002;
      }
    }
    
    
    • 负载均衡。浏览器访问http://192.168.1.1/edu/a.html 负载均衡效果,平均分配8080和8081
    # 负载均衡配置
    
    

    ![image-20200827231727170](/Users/xujunkai/Library/Application Support/typora-user-images/image-20200827231727170.png)

    • 动静分离
      • 静态资源放在独立服务器上。通过nginx转到静态服务器。通过expires可以设计浏览器缓存时间。它会对比服务器该文件最后更新时间的变化,如果没有变化,则不从服务器抓取,返回状态码304,如果有修改,则直接从服务器重新下载,返回状态码200。
    location /www/ {
      root /data/; #访问data目录下静态文件
      autoindex on;# 它会列出当前文件下所有静态资源
    }
    # 当你输入   http://192.168.1.1/xxxx/a.html
    location /xxx/ {
      root /data/; #访问data目录下静态文件
    }
    # 直接返回a.html
    

    7.Nginx配置高可用的集群

    • 一台主服务器一台从服务器

    • 需要一个软件keepalived

    对外暴漏一个虚拟ip,当主服务器挂了,会将虚拟IP转从服务器。
    
    • 准比工作
    1.准备2台服务器
    2.在两台服务器安装nginx
    3.在两台服务器安装keepalived
    	yum install keepalived
    
    • 编辑/etc/keepalived/keepalived.conf。之前有默认配置文件
    # 全局定义
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL# 唯一值,服务器名字可在vi /etc/hosts中配置,如 127.0.0.1 LVS_DEVEL
    }
    # 检测脚本 和权重参数,判断nginx是否活着
    vrrp_script chk_http_port {
      script "/usr/local/src/nginx_check.sh"
      interval 2 #检测脚本执行间隔
      weight 2 #设置当前服务器权重
    }
    
    // 虚拟ip配置
    vrrp instance VI_1 {
      state MASTER # 主服务器为MASTER,备份服务器BACKUP
      interface ens33 # 要在哪个网卡绑定你虚拟主机名字
      virtual_router_id 51# 主,备机的virtual_router_id必须相同
      priority 100 #主,备机取不同的优先级,主机值较大,备份机较小
      advert_int 1# 每隔1秒,进行心跳
      # 权限校验
      authentication {
        auth_type PASS
        auth_pass 1111
      }
      virtual_ipaddress {
        192.168.11.50 # 虚拟ip地址绑定,当然可以绑定多个
      }
    }
    
    • nginx_check.sh 检查nginx是否还活着
    #! /bin/bash
    A = `ps -c nginx -no-header |wc -l`
    if [ $A eq 0 ];then
        /usr/local/nginx/sbin/nginx
        sleep 2
        if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
            killall keepalived
        fi
    fi
    
    • 从服务器更改 虚拟ip配置即可
    state BACKUP # 主服务器为MASTER,备份服务器 BACKUP
    priority 90 # priority小于主服务器
    
    • 启动nginx 主服务器和备份服务器
    • 启动keepalived
    systemctl start keepalived.service
    
    • 测试
    1.在浏览器输入虚拟ip也就是上面设置的192.168.11.50
    2.通过ip a 查看虚拟ip是否绑定
    
    # 当把主服务器停止 再从浏览器访问虚拟ip,按理来说是可以访问的
    ./nginx -s stop #停止主服务器
    # 浏览器也可以正常访问。说明切换了备份服务器。
    

    8.nginx机制

    ![image-20200830110351231](/Users/xujunkai/Library/Application Support/typora-user-images/image-20200830110351231.png)

    - 一个 master和多个woker工作的好处
    - 可以使用nginx -s reload热部署,利用nginx进行热部署
    - 每个work是独立进程,如果其中一个woker出现问题,其他woker独立的,继续进行争抢,实现请求过程,不会造成服务中断
    - nginx使用io多路复用,Windows无这种机制。
    
    • 关于连接数
    根据cpu数量设置worker
    发送请求占用多少个woker连接数???要么2个,要么4个
      连接 + 返回
    work支持最大连接数: cpu核数 乘以最大连接数:比如4个worker 每个worker支持1024连接数 那么就是4*1024
    worker支持最大并发数???? 
    	4*1024除以2 或 4, 但也不绝对,支持最大并发数,应该用如下公式
    
    	- 普通静态访问最大并发数:worker_connections * worker_processes/2
    	- 而如果是HTTP作为反向代理,最大并发数量是worker_connections * worker_processes/4
    
    
  • 相关阅读:
    UVA748 Exponentiation 解题报告
    uva465 解题报告
    UVA 10494 If We Were a Child Again 解题报告
    【今日所得】1.29。。。
    题型总结之高精度
    cf 163 div2 c题 YY 思路
    寒假计划
    Facebook Hacker Cup 2013 Qualification Round 解题报告
    戴戒指的含义(以后要结婚的必看)
    男人心疼女人的13种方式
  • 原文地址:https://www.cnblogs.com/xujunkai/p/13657978.html
Copyright © 2020-2023  润新知