nginx跨多个应用程序实例的负载均衡介绍
admin
2023-02-23 18:20:05
0

下文给大家带来,希望能够给大家在实际运用中带来一定的帮助,负载均衡涉及的东西比较多,理论也不多,网上有很多书籍,今天我们就用在行业内累计的经验做一个解答。 

环境介绍

配置nginx负载均衡器因会用到多台云服务器来进行,所以下面我会用到docker,具体docker的使用请移步docker实战

  • 系统环境:

    root@ubuntu:~# lsb_release  -a          #查看系统版本
    No LSB modules are available.
    Distributor ID: Ubuntu
    Description:    Ubuntu 19.10
    Release:    19.10
    Codename:   eoan
    root@ubuntu:~# uname -a         #查看系统是多少位
    Linux ubuntu 5.3.0-18-generic #19-Ubuntu SMP Tue Oct 8 20:14:06 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
  • nginx跨多个应用程序实例的负载均衡介绍

  • docker版本和相关操作系统版本

    docker版本:
    root@ubuntu:~# docker --version         #查看docker版本
    Docker version 19.03.3, build a872fc2f86
    
    操作系统版本:
    [root@57b669db1de1 /]# cat /etc/redhat-release      #查看系统版本
    CentOS Linux release 8.0.1905 (Core) 
    [root@57b669db1de1 /]# uname -a
    Linux 57b669db1de1 5.3.0-18-generic #19-Ubuntu SMP Tue Oct 8 20:14:06 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
  • 软件版本:

    nginx版本:
    root@ubuntu:~# nginx  -v        查看nginx版本
    nginx version: nginx/1.16.1 (Ubuntu)
    
    docker中nginx版本:
    [root@57b669db1de1 /]# nginx -v     #查看nginx版本
    nginx version: nginx/1.14.1

安装nginx

具体nginx的安装请参考nginx安装部署

  • 安装依赖软件

    更新软件包:
    root@ubuntu:~# apt-get update
    
    安装依赖软件:
    root@ubuntu:~# apt -y install openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev make gcc
  • 编译安装nginx

    下载nginx:
    root@ubuntu:~# wget http:#nginx.org/download/nginx-1.17.6.tar.gz
    
    解压:
    root@ubuntu:/opt# tar zxf nginx-1.17.6.tar.gz 
    root@ubuntu:/opt# cd nginx-1.17.6/
    root@ubuntu:/opt/nginx-1.17.6# ls       #列出目录
    auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src
    root@ubuntu:/opt/nginx-1.17.6# 
    
    配置:
    root@ubuntu:/opt/nginx-1.17.6# ./configure --prefix=/usr/local/nginx
    编译以及部署:
    root@ubuntu:/opt/nginx-1.17.6# make && make install
    root@ubuntu:/opt/nginx-1.17.6# cd /usr/local/nginx/
    root@ubuntu:/usr/local/nginx# ls
    conf  html  logs  sbin
    
    启动:
    root@ubuntu:/usr/local/nginx# ln sbin/nginx /usr/local/sbin/        #创建nginx软连接,设置为命令
    root@ubuntu:/usr/local/nginx# nginx     #启动nginx
    root@ubuntu:/usr/local/nginx# netstat -anpl | grep nginx        #查看nginx端口是否开启
    root@ubuntu:/usr/local/nginx# lsof -i:80            #查看80端口是否开启

    docker安装nginx

  • 创建容器

    下载镜像:
    root@ubuntu:~# docker pull registry.cn-beijing.aliyuncs.com/blxt/centos
    
    创建容器并启动:
    root@ubuntu:~# 
    root@ubuntu:~# docker run -itd --name nginx1 --privileged  registry.cn-beijing.aliyuncs.com/blxt/centos /sbin/init
    root@ubuntu:~# docker ps -a     #查看容器是否创建并启动
    CONTAINER ID        IMAGE                                          COMMAND             CREATED             STATUS                       PORTS               NAME
    6801d55682a3        registry.cn-beijing.aliyuncs.com/blxt/centos   "/sbin/init"        5 minutes ago       Up 5     minutes                            nginx1
    
    相同方法创建第二个容器:
    root@ubuntu:~# docker run -itd --name nginx2 --privileged  registry.cn-beijing.aliyuncs.com/blxt/centos /sbin/init
    root@ubuntu:~# docker ps -a 
    root@ubuntu:~# 
    root@ubuntu:~# docker ps -a
    CONTAINER ID        IMAGE                                          COMMAND             CREATED             STATUS                       PORTS               NAMES
    1d31d3fc0ec1        registry.cn-beijing.aliyuncs.com/blxt/centos   "/sbin/init"        4 minutes ago       Up 4     minutes                            nginx2
    6801d55682a3        registry.cn-beijing.aliyuncs.com/blxt/centos   "/sbin/init"        5 minutes ago       Up 5     minutes                            nginx1
    
    连接到容器:
    root@ubuntu:~# docker exec -it nginx1 /bin/bash
    root@ubuntu:~# docker exec -it nginx2 /bin/bash     
    [root@6801d55682a3 /]# hostname nginx1          #更改主机名称
    [root@6801d55682a3 /]# bash         #使更改的名称生效
    [root@1d31d3fc0ec1 /]# hostname nginx2
    [root@1d31d3fc0ec1 /]# bash
  • 安装nginx

    更新软件包:
    [root@nginx1 /]# yum clean all      #清空缓存
    [root@nginx1 /]# yum makecache      #更新软件包
    
    安装nginx:
    [root@nginx1 /]# yum -y install nginx
    [root@nginx1 /]# rpm -qa | grep nginx       #查看是否已经安装
    
    启动nginx:
    [root@nginx1 /]# systemctl start nginx
    [root@nginx1 /]# netstat -anpl | grep nginx     #查看nginxnn端口是否开启
    [root@nginx1 /]# lsof -i:80     #查看80端口是否开启
    安装第二个nginx使用相同方法即可!此处省略!!!
    
    访问nginx:
    [root@nginx1 /]# curl 127.0.0.1
  • 修改网页内容

    查看网页存在目录:
    [root@nginx1 nginx]# more nginx.conf        #查看配置文件
    在配置文件中找到下面root行,后面目录即网页文件存放目录
    root         /usr/share/nginx/html;
    [root@nginx1 html]# cd /usr/share/nginx/html/
    [root@nginx1 html]# ls      #列出目录内容
    404.html  50x.html  index.html  nginx-logo.png  poweredby.png
    [root@nginx1 html]# echo nginx1 > index.html        #清空nginx主页文件内容,并重新写入内容为nginx1
    nginx2如同,注意不要设置一样的主页内容
    
    访问nginx:
    [root@nginx1 html]# curl  127.0.0.1
    nginx1
    [root@nginx2 ~]# curl 127.0.0.1
    nginx2
  • 修改配置文件

    nginx1修改内容如下:
     server {
    listen       80;
    server_name  www.nginx1.com;            //设置域名
    
    #charset koi8-r;
    
    #access_log  logs/host.access.log  main;
    
    location / {
        root   html;
        index  index.html index.htm;
        }
    }
    
    nginx2修改内容如下:
     server {
    listen       80;
    server_name  www.nginx2.com;            //设置域名
    
    #charset koi8-r;
    
    #access_log  logs/host.access.log  main;
    
    location / {
        root   html;
        index  index.html index.htm;
        }
    }

配置http负载均衡器

要开始使用NGINX Plus或NGINX开源对一组服务器的HTTP流量进行负载均衡,使用upstream指令定义该组,该指令放置在http上下文中,proxy_pass指令用来转发请求到后端一般指定在loction上下文中
基本配置方法:

http {
    upstream nginx {            #test为组名
        server www.nginx1.com ;     #server用来指定后端服务器的访问地址,一般指定域名、ip、端口,域名和ip二选一,端口可忽略
        server www.nginx2.com weight=5;     #weight指定权重值
        server www.nginx3.com down;         #down用来停止对此服务器的转发
        ......省略其他配置
    }
    server{
        location / {
            proxy_pass http://nginx;        #http://nginx为转发那个组的后端服务器
            ......省略其他配置
        }
        ......省略其他配置
    }
}

nginx做负载均衡官方提供了4种方法,下面逐一介绍这四种方法:

  • Round Robin

    请求在服务器之间平均分配,同时考虑了服务器权重。默认情况下使用此方法(没有启用它的指令)
    默认配置就是Round Robin,配置方法:

    http {
    upstream nginx {            #test为组名
        server www.nginx1.com ;     #server用来指定后端服务器的访问地址
        server www.nginx2.com ;     #weight指定权重值
        ......省略其他配置
    }
    server{
        location / {
            proxy_pass http://nginx;        #http://nginx为转发那个组的后端服务器
            ......省略其他配置
        }
        ......省略其他配置
    }
    }
  • 最少连接

    将活动连接最少的请求发送到服务器,也是在考虑到服务器的权重问题才设置的这种方法
    配置方法:

    http {
    upstream nginx {            #test为组名
           less_conn ; 
        server www.nginx1.com ;     #server用来指定后端服务器的访问地址
        server www.nginx2.com ;     #weight指定权重值
        ......省略其他配置
    }
    server{
        location / {
            proxy_pass http://nginx;        #http:#nginx为转发那个组的后端服务器
            ......省略其他配置
        }
        ......省略其他配置
    }
    }
  • ip_hash

    从客户端IP地址确定向其发送请求的服务器。在这种情况下,可以使用IPv4地址的前三个八位位组或整个IPv6地址来计算哈希值。该方法保证了来自同一地址的请求将到达同一服务器,除非它不可用。
    配置方法:

    http {
    upstream nginx {            #test为组名
           ip_hash ; 
        server www.nginx1.com ;     #server用来指定后端服务器的访问地址
        server www.nginx2.com ;     #weight指定权重值
        ......省略其他配置
    }
    server{
        location / {
            proxy_pass http://nginx;        #http:#nginx为转发那个组的后端服务器
            ......省略其他配置
        }
        ......省略其他配置
    }
    }
  • hash

    向其发送请求的服务器是根据用户定义的键确定的,该键可以是文本字符串,变量或组合。
    配置方法:

    http {
    upstream nginx {            #test为组名
          hash $request_uri consistent;
        server www.nginx1.com ;     #server用来指定后端服务器的访问地址
        server www.nginx2.com ;     #weight指定权重值
        ......省略其他配置
    }
    server{
        location / {
            proxy_pass http://nginx;        #http://nginx为转发那个组的后端服务器
            ......省略其他配置
        }
        ......省略其他配置
    }
    }
  • 看了以上关于nginx跨多个应用程序实例的负载均衡介绍,如果大家还有什么地方需要了解的可以在行业资讯里查找自己感兴趣的或者找我们的专业技术工程师解答的,技术工程师在行业内拥有十几年的经验了。

     

     

相关内容

热门资讯

今天,我们想的不仅是“上天”的... (一) 一箭5星!再传捷报! 7月24日,我国使用力箭一号遥十五运载火箭,成功将5颗卫星发射升空,卫...
携程被罚没51.79亿元 7月25日,市场监管总局依法对携程集团有限公司(以下简称携程)滥用市场支配地位实施垄断行为作出行政处...
多地停运停航停课,台风“红霞”... 中央气象台7月25日06时继续发布台风橙色预警:今年第12号台风“红霞”已于今天(25日)早晨由强热...
“直-20家族”全亮相 近日,在陆军某旅直升机分队演训中,直-20与直-20T表现亮眼。075型两栖攻击舰日前也搭载直-20...
蒋万安借“725上凯道”成蓝营... 中国国民党25日将于台北凯道举办“我是人,我反毒台”集会,向民进党当局抗议中联毒油案。对此,资深媒体...
波轮式全自动洗衣机脱水时波轮转 波轮式全自动洗衣机脱水时波轮转1、衣物放置不平导致;2、排水系统发生阻塞。3、顶部的安全开关损坏;4...
洗衣机不出水怎么查原因 当洗衣机不出水时,一定是出了问题。下面就是一些可能的原因及其解决方法:1. 电源问题洗衣机不能正常工...
半自动洗衣机放不出水是什么原因... 1、检查过滤网是否堵塞。若堵塞了需要将脏东西取出来,然后再用清水将过滤网清洗干净。2、检查一下是不是...
全自动洗衣机不出水是什么原因 1、进水口的滤网被水中的杂质堵住。2、控制板上的进水继电器坏了。3、电路故障,进水电磁阀有故障或者插...
抽油烟机只通电不转怎么回事 只通电不转的故障原因和解决方法:1、电容量减小或损坏。解决方法:抽油烟机电机不转,还有嗡嗡声,一般是...