nginx反向代理

集群概述

简        介:

    集群就是一组独立的计算机,通过网络连接组合成一个组合来共同完一个任务。

集群优点:

  • 高性能
  • 可伸缩性
  • 高可用

集群种类:

 

  • 负载均衡集群     简称:LBC或者LB。      ===>>>解决调度问题
  • 高可用集群         简称:HAC。                 ===>>>解决单点故障
  • 高性能计算集群  简称:HPC.                      ===>>>解决复杂运算
  • 网络计算集群                                             ===>>>云计算等

Nginx复杂概念说明:

  • 对用户访问请求进行调度管理
  • 对用户的访问请求进行压力分担

Nginx反向代理说明:

  • 反向代理,接收用户请求代替用户向后端访问

 Nginx反向代理所使用的模块:

  • ngx_http_upstream_module
  • ngx_http_proxy_module

upstream模块配置

参数:

  • upstream                  ===> 定义一个负载均衡池 名称自定义
  •  server                      ===> 服务器起点标签 后面跟节点地址
  • weight=3                  ===> 指定轮训次数,性能好可设置大一些
  • max_fails=3           ===> nginx尝试连接后端主机失败的次数
  • fail_timeout=10s       ===> 在fail_timeout定义的次数失败后,距离下次检查的间隔时间
  • backup                      ===> 备份服务器不提供工作,主服务器宕机提供工作

调度算法

  • 定义轮询调度算法   -rr-     默认调度算法
  • 定义权重调度算法   weight=3
  • 定义静态调度算法    ip_hash   如果没有session共享可以临时用ip_hash算法 
  • 定义daur(动态调度算法)   根据后端服务器响应时间来分配请求,比较智能的调度锻打,此算法可以根据页面大小加载时间智能的进行负载均衡,需要下载upstream_fair模块
  • 定义最小的连接数-least_conn  
####################### proxy
    upstream server_pools {
        server 192.168.10.249:80 weight=3 max_fails=3 fail_timeout=10;
        server 192.168.10.253:80 weight=5 max_fails=3 fail_timeout=10;
        server 192.168.10.252:80 weight=5 max_fails=3 fail_timeout=10 backup;
    }

ip_hash算法(不能有backup标识和weighe标识)

    upstream server_pools {
        ip_hash;
        server 192.168.10.249:80 max_fails=3 fail_timeout=10;
        server 192.168.10.253:80 max_fails=3 fail_tim eout=10;
        server 192.168.10.252:80 max_fails=3 fail_timeout=10;
    }  

动态调度算法

    upstream server_pools {
        server 192.168.10.249:80 max_fails=3 fail_timeout=10;
        server 192.168.10.253:80 max_fails=3 fail_timeout=10;
        server 192.168.10.252:80 max_fails=3 fail_timeout=10;
        fair;
    }

proxy模块配置

参数详解:

  • proxy_pass http://server_pools;                                         ===>web.yan.com请求都发送到upstream定义的服务器节点池。
  • proxy_set_header Host $host;                                           ===>在代理向后端服务器发送的http请求头中加入host字段信息,用于当后端服务器配置有多个虚拟主机时,可以识别代理的是哪个虚拟主机
  • proxy_set_header X-Forwarded-For $remote_addr;         ===>在代理向后端服务器发送的http请求头中加入X-Forwarded-For字段信息,用于后端服务器程序、日志等接收记录真实用户的IP,而不是代理服务器的IP。
  • proxy_connect_timeout 60;                                                ===> 设定反向代理与后端节点服务器连接的超时时间,即发起握手等候响应的超时时间。
  • proxy_send_timeout 60;                                                     ===>设定代理后端服务器的数据回传超时时间
  • proxy_read_timeout 60;                                                     ===>设定Nginx从代理的后端服务器获取信息的超时时间
  • proxy_buffer_size 4k;                                                         ===>设定缓冲区的大小
  • proxy_buffers 4 32k;                                                           ===>设定缓冲区的数量和大小
  • proxy_busy_buffers_size 64k;                                            ===>设定系统很忙时可以使用的proxy_buffers大小
  • proxy_temp_file_write_size 64k;                                        ===>设定proxy缓存临时文件的大小
  • access_log off;                                                                 ===> 不记录日志可选
  • proxy_next_upstream                                                    ===>提高用户体验报错自动切换
    server {
        listen 80;
        server_name web.yan.com;
        location / {
           proxy_pass http://server_pools;
           proxy_set_header Host $host;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_connect_timeout 60;
           proxy_send_timeout 60;
           proxy_read_timeout 60;
           proxy_buffer_size 4k;
           proxy_buffers 4 32k;
           proxy_busy_buffers_size 64k;
           proxy_temp_file_write_size 64k;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_504;
        }
    }

动静分离

服务器规划:

/upload     10.0.0.8:80       html/www/upload         upload服务器
/static       10.0.0.7:80       html/www/static            static静态服务器
/                10.0.0.9:80      html/www 默认

创建upstream负载信息:

    upstream upload_pools {
      server 192.168.10.56:80;
    }
    upstream static_pools {
      server 192.168.10.57:80;
    }
    upstream default_pools {
      server 192.168.10.58:80;
    }

 调用upstream信息

    server {
        listen 80;
        server_name www.yan.com;
    location /static/ { 
        proxy_pass http://static_pools;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }

        location /upload/ { 
            proxy_pass http://upload_pools;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }

     location / { 
            proxy_pass http://default_pools;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
         access_log  logs/access_www.log  main;
    }
}

手机用户电脑用户访问不同网站实例配置:

    upstream upload_pools {
      server 10.0.0.8:80;
    }

    upstream static_pools {
      server 10.0.0.7:80;
    }

    upstream default_pools {
      server 10.0.0.9:80;
    }

    server {
        listen 80;
        server_name www.yan.com;
        location / {
         if ($http_user_agent ~* "Iphome")
          {
            proxy_pass http://static_pools;
          }
         if ($http_user_agent ~* "Android")
          {
            proxy_pass http://upload_pools;
          }
        proxy_pass http://default_pools;
               }
         access_log  logs/access_www.log  main;
    }
}

 keepalived加Nginx高可用集群

Nginx配置

配置listen 192.168.10.244:80; (域名解析到VIP)内核需要开启允许绑定非本地的IP

echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf
##/etc/sysctl.conf 加上
sysctl -p 

配置文件

    upstream server_pools {
        server 192.168.10.56;
        server 192.168.10.57;
        server 192.168.10.58;
    }
    server {
        listen 192.168.10.244:80;
        server_name www.yan.com;
        location / {
            proxy_pass http://server_pools;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;
        }
        access_log  logs/access_www.log  main;
    }
        server {
        listen 192.168.10.245:80;
        server_name blog.yan.com;
        location / {
            proxy_pass http://server_pools;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;
        }
        access_log  logs/access_blog.log  main;
        
    }

keepalived配置

    keepalived脑裂说明:

     由于某种原因,导致两台高可用服务器对在指定的时间内,无法检测到对方心跳信息,各自取得资源服务权,而此时的两台高可用服务器都在正常运行,会导致同一个IP或者服务器在两端同时存在而发生冲突,严重占用同一个VIP使用户写入数据丢失。

     心跳线老化,

     高可用集群同一个交换机故障

    防火墙规则

    网卡等信息配置不正确等

    解决办法,监控备用服务器需IP信息,如果有则,主服务器出现问题。

#!/bin/bash

if [ `ip a s ens33|grep 192.168.10.244|wc -l` -ne 0 ]
then
    echo "keepalived is error!!!"
else
    echo "keepalived is ok!!!"
fi

  NGinx宕机实现,keepalived主备切换(配置文件标红处就是执行脚本切换操作)

 #!/bin/bash
 #name: check_web.sh
 #desc: check nginx and kill keepalived 
 if [ `ps -ef |grep nginx |grep -v grep |wc -l` -lt 2  ];then
      /etc/init.d/keepalived stop 
 fi
chmod +x /server/scripts/check_web.sh 

配置文件

#lb01
global_defs {
   router_id LVS_01        #唯一标示
}

  vrrp_script check_web {
    script "/server/scripts/check_web.sh"           #执行的脚本路径
    interval 2                                      #两秒检查一次             
    weight 2                                        #触发脚本优先级减去定义的weight降低优先级改为备服务
  }

vrrp_instance VI_1 {      #
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass admin
    }
    virtual_ipaddress {
     192.168.10.244/24 dev ens33 label ens33:1
    }
     track_script { #执行脚本
      check_web
     } } vrrp_instance VI_2 { state BACKUP interface ens33 virtual_router_id
52 priority 100 advert_int 1 authentication { auth_type PASS auth_pass root } virtual_ipaddress { 192.168.10.245/24 dev ens33 label ens33:2 }

 

}

#lb02 
global_defs {
   router_id LVS_02
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass admin
    }
    virtual_ipaddress {
     192.168.10.244/24 dev ens33 label ens33:1
    }
}
vrrp_instance VI_2 {
    state MASTER
    interface ens33
    virtual_router_id 52
    priority 150 
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass root
    }   
    virtual_ipaddress {
     192.168.10.245/24 dev ens33 label ens33:2
    }   

}

 

posted @ 2018-08-20 18:56  闫世成  阅读(370)  评论(0编辑  收藏  举报