Nginx

nginx-负载均衡

2022-01-20  本文已影响0人  自由如风才是少年的梦

前言

  负载均衡(又称为负载分担),英文名称为Load Balance,其意思就是将负载(工作任务)进行平衡、分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

一、什么是负载均衡集群技术

二、负载均衡技术的实现

负载均衡(Load Balance)

负载均衡技术类型:基于 4 层负载均衡技术和基于 7 层负载均衡技术

负载均衡实现方式:硬件负载均衡设备或者软件负载均衡

硬件负载均衡产品:F5 、深信服 、Radware

软件负载均衡产品: LVS(Linux Virtual Server)、 Haproxy、Nginx、Ats(apache traffic server)

- 实现效果图

负载均衡展示图

三、负载均衡的分类

  负载均衡根据所采用的设备对象(软/硬件负载均衡),应用的OSI网络层次(网络层次上的负载均衡)等来分类。根据应用的 OSI 网络层次来分类的两个负载均衡类型。

负载均衡可以大概分为以下几类:

  四层负载均衡
  实现四层负载均衡的产品有:

二、操作步骤

七层负载均衡

1.首先准备三台机器,其中两台为真实服务器,一台为proxy代理服务器并且关闭防火墙及linux确保三台机器之间可以被互相访问到。

2.在webserver1和webserver2两台机器上分别部署一个简单的页面用于测试。为了能够更好的体现出负载均衡,这里的两台服务器分别设置不同的内容。
如果有需要可以参考关于nginx的文章

[root@server1 ~]# yum -y install nginx
[root@server1 ~]# systemctl start nginx
[root@server1 ~]# systemctl enable nginx
[root@server1 ~]# echo "hello world!" >/usr/share/nginx/html/index.html
[root@server1 ~]# curl 127.0.0.1
hello world!
[root@server2 ~]# yum -y install nginx
[root@server2 ~]# systemctl start nginx
[root@server2 ~]# systemctl enable nginx
[root@server2 ~]# echo "hi world!" >/usr/share/nginx/html/index.html
[root@server2 ~]# curl 127.0.0.1
hi world!

3.在ngonx-proxy 代理服务器上进行配置
upstream配置
这个配置是写一组被代理的服务器地址,然后配置负载均衡的算法.

upstream testapp { 
      server 192.168.253.178:80;
      server 192.168.253.176:80;
}
 server {
        ....
        location / {         
           proxy_pass  http://testapp;  #请求转向 testapp 定义的服务器列表         
        } 

配置实例参考
热备:如果你有两台服务器,当一台服务器发生故障时,才启用第二台服务器提供服务;

upstream myweb { 
      server 192.168.253.178:80; 
      server 192.168.253.176:80 backup;  #热备     
    }

轮询:nginx默认的就是轮询其权重默认为1,请求访问时 每台服务器访问一次;

upstream myweb { 
      server 192.168.253.176:8080;    #默认80端口可以不用写端口号
      server 192.168.253.178:8080;      
    }

加权轮询:根据配置的权重大小从而处理不同数量的访问及请求

upstream myweb { 
      server 192.168.253.176:8080 weight=1;
      server 192.168.253.178:8080 weight=2;
}

ip_hash:nginx会让相同客户端ip访问同一个服务器;

upstream myweb { 
      ip_hash;
      server 192.168.253.178:80; 
      server 192.168.253.176:80
    }
 upstream myweb { 
      server 172.17.14.2:8080 weight=2 max_fails=2 fail_timeout=2;
      server 172.17.14.3:8080 weight=1 max_fails=2 fail_timeout=1;    
    }

4.编辑nginx-proxy配置文件,如下

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    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;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;
    upstream testapp { 
      server 192.168.253.176;
      server 192.168.253.178;
    }

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
             proxy_pass  http://testapp;

        }


        error_page 404 /404.html;
        location = /404.html {
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        }
    }
}

5.接下来就可以访问测试了

[root@nginx-proxy ~]# curl 127.0.0.1
hi world!
[root@nginx-proxy ~]# curl 127.0.0.1
hello world!

修改配置文件,增加权重,重新加载配置文件生效

[root@nginx-proxy ~]# vim /etc/nginx/nginx.conf
 upstream testapp {
      server 192.168.253.176 weight=1;
      server 192.168.253.178 weight=2;
    }
...
[root@nginx-proxy ~]# curl 127.0.0.1
hello world!
[root@nginx-proxy ~]# curl 127.0.0.1
hi world!
[root@nginx-proxy ~]# curl 127.0.0.1
hi world!

在此也可以看到配置已经生效。

四层负载均衡

  nginx在1.9.0 的时候,增加了一个 stream 模块,用来实现OSI第四层协议(网络层和传输层)的转发、代理、负载均衡等。stream模块的用法跟http的用法类似,允许我们配置一组TCP或者UDP等协议的监听.

#4层tcp负载 
stream {
   upstream myweb {
      hash $remote_addr consistent;
      server 172.17.14.2:8080;
      server 172.17.14.3:8080;
}
server {
            listen 82;
            proxy_connect_timeout 10s;
            proxy_timeout 30s;
            proxy_pass myweb;
        }
}

*在这里要注意stream模块不在http的服务里边,采用的是四层的协议。
在这里就不重复操作了,可以参考官方网站学习。

总结

  负载均衡除了nginx的使用外比较常用的还有 LVS 、Haproxy等,在使用时应根据具体的场景进行使用,如果条件允许的话,还可以使用keepalived 高可用等相关技术。

  
欢迎一起交流分享!

上一篇 下一篇

猜你喜欢

热点阅读