01. (反向代理)负载均衡的概念说明
什么是集群?
完成相同任务或工作的一组服务器 (web01 web02 web03 -- web集群)

什么是负载均衡?
1) 实现用户访问请求进行调度分配
2) 实现用户访问压力分担

什么是反向代理?
反向代理: 外网 ---> (eth0外网) 代理服务器 (eth1内网) ---> 公司网站服务器web(内网)
外网用户(客户端) --- 代理服务器 (服务端)
代理服务器(客户端) --- web服务器(服务端)
正向代理: 内网(局域网主机) --- (内网)代理服务器(外网) --- 互联网 --- web服务器(日本)
FQ的操作

02. 准备负载均衡的环境

集群服务器部署:
    PS: 集群中每天服务器的配置一模一样
    企业中: 
    01. 先部署好一台LNMP服务器,上传代码信息
    02. 进行访问测试
    03. 批量部署多台web服务器
    04. 将nginx配置文件进行分发
    05. 将站点目录分发给所有主机
    教学中:
    01. 将web01作为模板主机克隆
    sed -i 's#\.7#.8#g' /etc/sysconfig/network-scripts/ifcfg-eth[01]
    hostnamectl set-hostname web02
    
    利用手动方式实现负载均衡:
    修改hosts主机地址和域名映射文件 
    
    负载均衡服务器部署:
    第一个历程: 安装部署nginx软件
    ....

    第二个历程: 编写nginx负载服务配置文件
    ngx_http_upstream_module   --- upstream   负载均衡  OK
    ngx_http_proxy_module       --- proxy_pass 反向代理
    
    upstream oldboy {            #定义oldboy集群名称
       server 10.0.0.7:80;
       server 10.0.0.8:80;
       server 10.0.0.9:80;
    }
    server {
        listen       80;
        server_name  www.oldboy.com;
        location / {
           proxy_pass http://oldboy;    #指定集群oldboy反向代理的地址       }
    }
    
    第三个历程: 实现负载功能测试
    搭建集群测试环境:
    for name in www bbs blog;do echo "$name 10.0.0.7">/html/$name/test.html;done
    for name in www bbs blog;do echo "$name 10.0.0.8">/html/$name/test.html;done
    for name in www bbs blog;do echo "$name 10.0.0.9">/html/$name/test.html;done
    修改windows解析文件 10.0.0.5为负载均衡服务器
    10.0.0.5    www.oldboy.com  blog.oldboy.com bbs.oldboy.com
网页访问www.oldboy.com测试负载均衡 负载均衡访问网站异常排错思路: 第一步: 负载均衡 测试后端web节点服务器是否能够正常访问 [root@lb01 conf.d]# curl
-H host:www.oldboy.com 10.0.0.7/test.html www 10.0.0.7 [root@lb01 conf.d]# curl -H host:www.oldboy.com 10.0.0.8/test.html www 10.0.0.8 [root@lb01 conf.d]# curl -H host:www.oldboy.com 10.0.0.9/test.html www 10.0.0.9 第二步: 负载均衡 利用curl命令访问负载均衡服务器 查看两个配置文件 第三步: 打开一个xshell连接 ping www.oldboy.com 第四步: 配置文件编写不正确

03. 负载均衡配置模块详细说明

    ngx_http_upstream_module   --- upstream
    实现不同调度功能
    1. 轮询分配请求(平均)
    2. 权重分配请求(能力越强责任越重)
       upstream oldboy {
          server 10.0.0.7:80 weight=3;
          server 10.0.0.8:80 weight=2;
          server 10.0.0.9:80 weight=1;
       }
    3. 实现热备功能(备胎功能)
           upstream oldboy {
          server 10.0.0.7:80;
          server 10.0.0.8:80;
          server 10.0.0.9:80 backup;
       }
    4. 定义最大失败次数                     健康检查参数
    upstream oldboy {
          server 10.0.0.7:80 max_fails=5;
          server 10.0.0.8:80;
          server 10.0.0.9:80;
       }
       max_fails=5
    5. 定义失败之后重发的间隔时间            健康检查参数
       fail_timeout=10s  会给失败的服务器一次机会
    
    实现不同调度算法
    1. rr  轮询调度算法
    2. wrr 权重调度算法
    3. ip_hash 算法  (出现反复登录的时候)
     upstream oldboy {
          ip_hash;
          server 10.0.0.7:80;
          server 10.0.0.8:80;
          server 10.0.0.9:80 backup;
       }
    4. least_conn  根据服务器连接数分配资源
    
    ngx_http_proxy_module       --- proxy_pass
    01. 访问不同的网站地址,不能显示不同的网站页面  (面试题)
    proxy_set_header Host $host;  
     location / {
           proxy_pass http://oldboy; 
           proxy_set_header Host $host;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_next_upstream error timeout http_404 http_502 http_403;
    }
    02. 访问网站用户地址信息无法进行分析统计       (面试题)
    proxy_set_header X-Forwarded-For $remote_addr;
    03. 访问负载均衡会出现错误页面,影响用户体验
    proxy_next_upstream error timeout http_404 http_502 http_403;

 stream 和 http 区域同级即可


#四层端口代理 
stream {
  upstream test_mysql {
    hash $remote_addr consistent;       # 通过配置一致性 hash 来防止调度异常
    server 192.168.1.1:3306 weight=5 max_fails=3 fail_timeout=30s;
  }
  server {
    listen 10086 so_keepalive=on;       # 开启 TCP 存活探测
    proxy_connect_timeout 10s;          # 连接超时时间
    proxy_timeout 300s;             # 端口保持时间
    proxy_pass test_mysql;
  }
}

 

posted on 2021-07-09 15:43  宇小白  阅读(65)  评论(0编辑  收藏  举报