• nginx--代理和负载均衡


    nginx代理

    nginx的代理分为正向代理和反向代理

    正向代理指的是,一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。  

    反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

    nginx反向代理的指令不需要新增额外的模块,默认自带proxy_pass指令,只需要修改配置文件就可以实现反向代理。

    反向代理的配置

    nginx的反向代理功能就是 proxy_pass参数,反向代理可以起到保护网站安全的作用,因为任何来自internet的请求都必须先经过代理服务器

    准备两台装有nginx的服务器,一台作为主的,一台作为副的。

    master  192.168.88.67  主负载
    slave   192.168.88.68  web1

    主负载均衡节点的配置文件,只需要在主的服务器的配置文件下的server里加上proxy_pass http://192.168.88.68;  就可以了

    server {
           listen 80;
              server_name  www.zouozu.com;
              location / {
              proxy_pass http://192.168.88.68;  # 只需要加上这句就可以了,请求会直接转发给192.168.88.68机器, 
    }

    配置文件保存之后,检查语法并加载配置文件

    ../sbin/nginx -t   # 检查语法
    ../sbin/nginx -s reload   # 加载配置文件

    此时访问master的服务器192.168.88.67:80地址,会将请求转发给slave的80端口除了页面效果的展示以外,还可以通过log(access.log)查看代理效果

    集群

    集群就是一组(成千上万)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统。每个集群节点都是运行各自服务的独立服务器,这些服务器之间可以彼此通信,协同向用户提供应用程序。系统资源和数据,并以单一系统的模式加以管理。当用户请求集群系统时,集群给用户的感觉就是一个单一独立的服务器,而实际上用户请求的上一组集群服务器。简单的说集群就是一堆服务器合作做同一件事。

    集群的特点

    1 提高性能

    一些计算密集型应用,如:天气预报、核试验模拟等,需要计算机要有很强的运算处理能力,现有的技术,即使普通的大型机器计算也很难胜任。这时,一般都使用计算机集群技术,集中几十台甚至上百台计算机的运算能力来满足要求。提高处理性能一直是集群技术研究的一个重要目标之一。

    2 降低成本

    通常一套较好的集群配置,其软硬件开销要超过100000美元。但与价值上百万美元的专用超级计算机相比已属相当便宜。在达到同样性能的条件下,采用计算机集群比采用同等运算能力的大型计算机具有更高的性价比。

    3 提高可扩展性

    用户若想扩展系统能力,不得不购买更高性能的服务器,才能获得额外所需的CPU 和存储器。如果采用集群技术,则只需要将新的服务器加入集群中即可,对于客户来看,服务无论从连续性还是性能上都几乎没有变化,好像系统在不知不觉中完成了升级。

    4 增强可靠性
    集群技术使系统在故障发生时仍可以继续工作,将系统停运时间减到最小。集群系统在提高系统的可靠性的同时,也大大减小了故障损失。

    nginx负载均衡

     web服务器,要承受大量的请求,例如淘宝的双十一,单台机器难以承受那么多的压力,使用多台服务器组成集群,使用nginx负载均衡。将请求分散的给我们后台服务器集群中。实现负载的分发,会大大提升系统的性能。

     nginx要实现负载均衡需要用到proxy_pass代理模块配置,nginx负载均衡与nginx代理不同地方在于nginx代理仅代理一台服务器,而nginx负载均衡则是将客户端请求代理转发至一组upstream负载均衡池。nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用。

    upstream配置

    1.在nginx.conf里写入下面内容,写在http区域中,和server同级,mynginx可以自己定义,后面的是两台服务器的地址和端口

    upstream mynginx {
           server 192.168.88.67:8000;
           server 192.168.88.68:8000;
    }

    2.在nginx.conf > http 区域 >  server区域  > location配置中添加proxy_pass

    location / {
                root   html;
                index  index.html index.htm;
                proxy_pass http://mynginx;
           include /opt/nginx1-16/conf/proxy_params; }

    # 定义负载均衡池名字叫做mynginx
    upstream mynginx {   
        # 池子中存放2个服务器,默认轮训方式调度服务器
        server 192.168.88.67:8000; 
        server 192.168.88.68:8000;
    }
    # root参数定义网页的根目录,可以写在虚拟主机内,局部变量
    # 如果写在server标签外,就是全局变量
    root html;
    # 虚拟主机1
    server {
       listen 80;
       server_name  www.zouzou.com;
      location / {
      
      # 当请求发送到www.zouzou.com的时候,匹配到 /  ,就执行以下代码
      proxy_pass http://mynginx;
      #包含语法参数,将一个配置文件添加到当前虚拟主机生效,这个文件要手动创建
      #这个proxy_params文件创建在/opt/nginx1-16/conf/底下
      include proxy_params;
    }
    解释

    3.手动创建这个参数文件

    touch /opt/nginx1-16/conf/proxy_params写入下面内容

    [root@HH conf]# cat proxy_params 
    proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffering on; proxy_buffer_size 32k; proxy_buffers 4 128k;

    此时初步负载均衡已经完成,upstream默认按照轮训方式负载,每个请求按时间顺序逐一分配到后端节点。

    检查配置文件并加载

    4.配置应用服务器1

    准备一个flask代码,运行  

    准备代码 myflask.py

    from flask import Flask
    app=Flask(__name__)
    @app.route('/')
    def hello():
        return "<h1>I am is zouzou ~~~~~</h1>"
    if __name__=="__main__":
    app.run(host='0.0.0.0',port=8000)

    启动应用服务器
    python3 myflask.py

    5.配置应用服务器2 

    和上面的一样,可以把return里面的内容改一下,方便区分

    6.通过访问nginx负载均衡器入口,查看负载均衡 是否正常分配,默认是轮训方式

    访问自己的nginx负载均衡的ip地址,查看结果

    upstream分配策略

    在上面我们配置upstream时,没有加多余的参数,默认采用轮询的方式,一个服务器一次,循环,nginx提供给了我们其他的策略

    weight 权重

    upstream mynginx {
           server 192.168.88.67:8000 weight=3;
           server 192.168.88.68:8000 weight=7;  # 这个节点的访问频率是大于上面的,比例为3/7
    }

    ip_hash

    每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器

    upstream mynginx {
           ip_hash;  # 加个这就可以了
           server 192.168.88.67:8000;
           server 192.168.88.68:8000;  
    }

    backup

    在非backup机器繁忙或者宕机时,请求backup机器,因此机器默认压力最小

    upstream mynginx {
           server 192.168.88.67:8000;
           server 192.168.88.68:8000; 
           server node.zouzou.com:8080 backup; 
    }
  • 相关阅读:
    软件创意——汽车语音安全系统
    对系统管理岗位的理解。
    求二维数组最大子数组的和。郭林林&胡潇丹
    电梯调度 结对项目开发(郭林林&胡潇丹)
    电梯调度 结对项目开发
    电梯调度 结对项目开发
    电梯调度的设计与实现过程(李帅 张硕)
    敏捷软件方法综述
    二维数组的子数组和最大问题(李帅 张硕)
    求数组子数组和的最大值 (线性算法)
  • 原文地址:https://www.cnblogs.com/zouzou-busy/p/11624807.html
Copyright © 2020-2023  润新知