美文网首页
nginx 负载均衡

nginx 负载均衡

作者: 暴躁程序员 | 来源:发表于2023-01-06 09:18 被阅读0次

一、nginx实现负载均衡原理

将请求通过nginx服务器分摊到多个apache服务器来减小服务器压力,利用 nginx 服务器的多并发特性和 apache 服务器的稳定和功能丰富特性,使 nginx 做反向代理服务器,apache 做终端服务器

二、nginx 常见得几种负载均衡方式

方式一:默认的轮询

将每个请求按照请求的先后顺序平均分配到不同的服务器上

http {
    upstream mypros {
        server 192.168.76.100:80;
        server 192.168.76.129:80;
    }
  
    server {
        listen 80;
        server_name localhost;
  
        location / {
            proxy_pass http://mypros; 
            proxy_set_header Host $proxy_host;
        }
    }
}
方式二:权重 - 轮询

设置轮询的访问几率,当接受到四个请求时,会分配给 192.168.76.100 服务器1个请求,192.168.76.129 服务器3个请求

http {
    upstream mypros {
        server 192.168.76.100:80 weight=1;
        server 192.168.76.129:80 weight=3;
    }
  
    server {
        listen 80;
        server_name localhost;
  
        location / {
            proxy_pass http://mypros; 
            proxy_set_header Host $proxy_host;
        }
    }
}
方式三:ip_hash - 轮询

按照客户端IP进行分配,同一个ip只能访问同一台终端服务器,解决 session 跨域不共享的问题

http {
    upstream mypros {
        ip_hash;
        server 192.168.76.100:80;
        server 192.168.76.129:80;
    }
  
    server {
        listen 80;
        server_name localhost;
  
        location / {
            proxy_pass http://mypros; 
            proxy_set_header Host $proxy_host;
        }
    }
}
方式四:least_conn - 轮询

将请求转发给连接数较少的服务器上

http {
    upstream mypros {
        least_conn;
        server 192.168.76.100:80;
        server 192.168.76.129:80;
    }
  
    server {
        listen 80;
        server_name localhost;
  
        location / {
            proxy_pass http://mypros; 
            proxy_set_header Host $proxy_host;
        }
    }
}
方式五:fair - 轮询

按照服务器端的响应时间来分配请求,响应时间短的优先分配。

http {
    upstream mypros {
        fair
        server 192.168.76.100:80;
        server 192.168.76.129:80;
    }
  
    server {
        listen 80;
        server_name localhost;
  
        location / {
            proxy_pass http://mypros; 
            proxy_set_header Host $proxy_host;
        }
    }
}
方式六:url_hash - 轮询

按照访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,需要配合缓存用

http {
    upstream mypros {
        hash $request_uri;
        server 192.168.76.100:80;
        server 192.168.76.129:80;
    }
  
    server {
        listen 80;
        server_name localhost;
  
        location / {
            proxy_pass http://mypros; 
            proxy_set_header Host $proxy_host;
        }
    }
}

三、实现默认轮询(虚拟机模拟linux服务器)

1. 准备并开启 apache 子服务器

  1. 建立一台虚拟机,ip配置为:192.168.76.100
  2. 配置apache服务器
yum install httpd                                               安装 apache
  1. 编辑/var/www/html/index.html 网页内容,插入:192.168.76.100,用于区分其他apache服务器
vim /var/www/html/index.html                  
  1. 启动apache服务,并设置开机自启
systemctl start httpd                               启动 apache 
systemctl enable httpd                              设置 apache 开机自启         
netstat -antlp | grep 80                            查看apache服务是否正常开启,检测80端口占用情况
  1. 关闭防火墙
systemctl disable firewalld                         永久关闭防火墙
systemctl stop firewalld                            临时关闭防火墙
  1. 客户端浏览器测试
http://192.168.76.100

2. 准备其他apache子服务器

  • 方式一:创建新虚拟机
    按照上述步骤配置 apache 服务器
  • 方式二:克隆第一个apache服务器
  1. 步骤
    点击虚拟机 --> 管理 --> 克隆 --> 完整克隆
    克隆出的新的虚拟机和原始虚拟机环境相同,唯一不同的是ip
  2. 查看并记录ip
    可通过 ip addr 查看新生成的随机ip,记录下来,配置负载均衡的时候需要,比如:192.168.76.129
  3. 编辑/var/www/html/index.html 网页内容,插入:92.168.76.129,用于区分其他apache服务器
vim /var/www/html/index.html           

3. 本地电脑部署nginx环境(也可用虚拟机部署nginx环境)

  1. 修改 nginx.conf 配置文件
http {
    upstream mypros {
        server 192.168.76.100:80;
        server 192.168.76.129:80;
    }
  
    server {
        listen 80;
        server_name localhost;
  
        location / {
            proxy_pass http://mypros; 
            proxy_set_header Host $proxy_host;
        }
    }
}
  1. 重启 nginx
    nginx -s reload
  2. 使用客户端访问测试
    用浏览器多次刷新访问
http://localhost

观察页面的内容变化,如果轮询则配置成功

相关文章

网友评论

      本文标题:nginx 负载均衡

      本文链接:https://www.haomeiwen.com/subject/rnurcdtx.html