Nginx负载均衡

Posted 冥想心灵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx负载均衡相关的知识,希望对你有一定的参考价值。

 如果你是使用VM虚拟机 克隆出来的 需要更改以下参数

  集群服务器部署:   集群中每台服务器的配置一模一样
    01. 先部署好一台LNMP服务器,上传代码信息
    02. 进行访问测试
    03. 批量部署多台web服务器
    04. 将nginx配置文件进行分发
    05. 将站点目录分发给所有主机

 

lb01 192.168.1.4    #l两台可以实现高可用
lb02 192.168.1.5
LNMP01 192.168.1.8  #数据库部署在其它服务器上
LNMP02 192.168.1.10  #数据库部署在其它服务器上

1、四台服务器都要安装nginx服务(本次使用yum安装)

yum官方源安装方法:
第一个历程: 更新nginx官方yum源

#vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key

    
第二个历程: yum安装nginx软件
 #yum install -y nginx
 第三个历程: 启动nginx服务,检查服务是否安装正确
 #systemctl start nginx
 #systemctl enable nginx
 测试访问nginx服务

 

2、两个 LNMP服务器 安装php

见LNMP安装 https://www.cnblogs.com/linux985/p/11769672.html

 

3、(反向代理)负载均衡的概念说明

    什么是集群?
    完成相同任务或工作的一组服务器 (web01 web02 web03 -- web集群)
    
    什么是负载均衡?
    1) 实现用户访问请求进行调度分配
    2) 实现用户访问压力分担
    
    什么是反向代理?
    反向代理:     外网 ---> (eth0外网) 代理服务器 (eth1内网) ---> 公司网站服务器web(内网)
                外网用户(客户端)   ---  代理服务器 (服务端)
                代理服务器(客户端) ---  web服务器(服务端)    
    正向代理:   内网(局域网主机)      --- (内网)代理服务器(外网) --- 互联网 --- web服务器(日本)

 

4、两台lb服务器配置

[root@lb01 ~]# cd /etc/nginx/
[root@lb01 nginx]# ls
conf.d  fastcgi_params  koi-utf  koi-win  mime.types  modules  nginx.conf  scgi_params  uwsgi_params  win-utf
[root@lb01 nginx]# cp nginx.conf{,.bak}
[root@lb01 nginx]# grep -Ev \'^$|#\' nginx.conf
user  nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  \'$remote_addr - $remote_user [$time_local] "$request" \'
                      \'$status $body_bytes_sent "$http_referer" \'
                      \'"$http_user_agent" "$http_x_forwarded_for"\';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
    include /etc/nginx/conf.d/*.conf;
}
[root@lb01 nginx]# grep -Ev \'^$|#\' nginx.conf.bak > nginx.conf
[root@lb01 nginx]# 
[root@lb01 nginx]# cd conf.d/
[root@lb01 conf.d]# grep -Ev \'^$|#\' default.conf > lb.conf
[root@lb01 conf.d]# mv  default.conf default.conf.bak

ngx_http_upstream_module   --- upstream   负载均衡  #具体配置可见官网
ngx_http_proxy_module       --- proxy_pass  反向代理

[root@lb01 ~]# cat /etc/nginx/conf.d/lb.conf

upstream mxxl {
    server 192.168.1.8:80 max_fails=3 ail_timeout=10s;
    server 192.168.1.10:80 max_fails=3 ail_timeout=10s;
}

server {
    listen       80;
    server_name  www.mxxl.com;

    location / {
    
    proxy_pass http://mxxl;
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr;  
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; 
    
    }
}
这几个的参数的作用是向后端转发的时候添加头信息;
proxy_set_header   Host    $host:$server_port;
proxy_set_header   X-Real-IP   $remote_addr;
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
解释:
proxy_set_header Host $host;  #获取客户端真实求的主机(网址) 如果不设置客户端请求http://www.mxxl.com  会变成 http://mxxl 
proxy_set_header X-Real-IP $remote_addr;  #表示将客户端的地址,加入到http请求头部中, 而不是代理服务器IP ;
proxy_set_header X-Real-PORT $remote_port;  #设置客户端真实端口 而不是代理服务器端口
X-Forwarded-For $proxy_add_x_forwarded_for:表示如果中间经过多级代理,则将所有代理的IP全部加入请求头部中;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; #出现这些错误会跳转到其它机器上
配置参数解释

配置参数解释参考网址:https://www.jianshu.com/p/cc5167032525/


5、实现负载功能测试

 搭建集群测试环境:
LNMP01: echo "LNMP01 192.168.1.8">  html/index.html
LNMP02: ech0 "LNMP02 192.168.1.10">  html/index.html
 修改windows解析文件
192.168.1.4   www.mxxl.com
    
负载均衡访问网站异常排错思路
    第一步: 负载均衡 测试后端web节点服务器是否能够正常访问
    [root@lb01 conf.d]# curl -H host:www.mxxl.com 192.168.1.8
    LNMP01 192.168.1.8
    [root@lb01 conf.d]# curl -H host:www.mxxl.com 192.168.1.10
    LNMP01 192.168.1.10
    第二步: 负载均衡 利用curl命令访问负载均衡服务器      查看两个配置文件
    第三步: 打开一个xshell连接  ping www.mxxl.com
    第四步: 配置文件编写不正确
    

 

 

以下参考老男孩教育
6、负载均衡配置模块详细说明     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. 实现热备功能(备胎功能,其它的都down机了 启用)

upstream oldboy {
    server 10.0.0.7:80;
    server 10.0.0.8:80;
    server 10.0.0.9:80 backup;
}

 


    4. 定义最大失败次数                     健康检查参数
       max_fails=5  #超过五次不再健康检查
    5. 定义失败之后重发的间隔时间            健康检查参数
       fail_timeout=10s  #失败后10秒 会给失败的服务器一次机会 与上面次数合用
    
实现不同调度算法
    1. rr  轮询调度算法
    2. wrr 权重调度算法
    3. ip_hash 算法  (出现反复登录的时候)  # 方法一  ip_hash 算法 (有可能造成负载不均)方法二 当提交账号密码时(所以session一般存在缓存服务器)

    4. least_conn  根据服务器连接数分配资源

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



    
  

7、反向代理配置模块详细说明    ngx_http_proxy_module       --- proxy_pass


    01. 访问不同的网站地址,不能显示不同的网站页面 
    proxy_set_header Host $host;   #将代理服务器的请求头文件 http://oldboy  改成用的www.oldboy.com

 

 

 


    02. 访问网站用户地址信息无法进行分析统计       

    proxy_set_header X-Forwarded-For $remote_addr;  #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP  方便日志查看分析

 

 


    03. 访问负载均衡会出现错误页面,影响用户体验


    proxy_next_upstream error timeout http_404 http_502 http_403;
    

 

 



  
   

以上是关于Nginx负载均衡的主要内容,如果未能解决你的问题,请参考以下文章

Nginx负载均衡

Nginx反向代理实现负载均衡配置图解

OpenResty 动态负载均衡

nginx反向代理访问很慢,我做了负载均衡,现在几乎无法访问,有谁能帮我解决一下,万分感谢。

nginx--❤️图解及代码实现正向代理反向代理及负载均衡(非常实用,建议收藏❤️)

分布式部署与NGINX负载均衡