使用 Nginx 搭建 DELMIA Apriso 网络负载平衡集群

2021-09-27 10:47:41 浏览数 (1)

通常我们在项目中使用微软的 NLB(Network Load Balancing) 做网络负载均衡。本文将向大家展示如何使用 Nginx 来做网络负载均衡。Nginx 仅仅只是替换掉 NLB,其他服务器架构及配置和以往保持一致

Nginx介绍

Nginx (engine x) 是一款轻量级、高性能的 HTTP 和反向代理 Web 服务器,同时也提供了 IMAP/POP3/SMTP 服务,在 BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上 Nginx 的并发能力在同类型的网页服务器中表现较好,中国大陆使用 Nginx 网站用户有:百度、京东、新浪、网易、腾讯、淘宝等

Nginx也可作为负载均衡服务,Nginx 采用 C 编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多,可以使用 Nginx 作为一个非常高效的 HTTP 负载均衡器,将流量分配到多个应用服务器,并通过 Nginx 提高 Web 应用的性能、可伸缩性和可靠性

如大家所知,Microsoft Network Load Balance来搭建,不管在单播、多播和多播模式都有不同的要求,并且对网络基础结果也有不同要求(详见配置网络基础结构以支持 NLB 操作模式 - WindowsServer | Microsoft Docs 链接地址:https://docs.microsoft.com/zh-cn/troubleshoot/windows-server/networking/configure-network-to-support-nlb-operation-mode),每种模式也有不同的优缺点

本文尝试和描述通过搭建基于Nginx的Apriso Web服务器负载平衡集群,作为替换NLB集群的一种尝试,整个过程并没有经过严格测试和验证,本文仅作为一个入门式的搭建和尝试,投入正常应用前需要进行更多的测试和验证

Nginx下载和安装

下载Nginx

nginx:download(http://nginx.org/en/download.html)

下载后解压缩到本目录

Nginx几个主要的命令

nginx –t 验证配置是否正确

nginx –V 显示Nginx模块版本信息

Start Nginx 启动Nginx

nginx -s reload 重新装载配置文件

nginx -s stop 快速停止和关闭Nginx

nginx -s quit 退出Nginx

测试环境准备

配置Nginx负载平衡

修改Nginx配置文件如下 :

代码语言:javascript复制

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;


  #服务器集群名称为WebCluster
    upstream WebCluster {
    server  192.168.132.132:80; 
    server  192.168.132.129:80;
   }

    server {
        listen       80;
        server_name  ClusterServer;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

    location /Apriso/Apriso/ {
            root   html;
            index  index.html index.htm;

      #其中jq_one 对应着upstream设置的集群名称
      proxy_pass         http://WebCluster/Apriso/Apriso/; 
      #设置主机头和客户端真实地址,以便服务器获取客户端真实IP
      proxy_set_header   Host             $host;
      proxy_set_header   X-Real-IP        $remote_addr;
      proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }

    location /Apriso/Help/ {
            root   html;
            index  index.html index.htm;

      #其中jq_one 对应着upstream设置的集群名称
      proxy_pass         http://WebCluster/Apriso/Help/; 
      #设置主机头和客户端真实地址,以便服务器获取客户端真实IP
      proxy_set_header   Host             $host;
      proxy_set_header   X-Real-IP        $remote_addr;
      proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }

    location /Apriso/Start/ {
            root   html;
            index  index.html index.htm;

      #其中jq_one 对应着upstream设置的集群名称
      proxy_pass         http://WebCluster/Apriso/Start/; 
      #设置主机头和客户端真实地址,以便服务器获取客户端真实IP
      proxy_set_header   Host             $host;
      proxy_set_header   X-Real-IP        $remote_addr;
      proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }

        location /Apriso/HttpServices/ {
            root   html;
            index  index.html index.htm;

      #其中jq_one 对应着upstream设置的集群名称
      proxy_pass         http://WebCluster/Apriso/HttpServices/; 
      #设置主机头和客户端真实地址,以便服务器获取客户端真实IP
      proxy_set_header   Host             $host;
      proxy_set_header   X-Real-IP        $remote_addr;
      proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }


    location /Apriso/CentralConfiguration/ {
            root   html;
            index  index.html index.htm;

      #其中jq_one 对应着upstream设置的集群名称
      proxy_pass         http://WebCluster/Apriso/CentralConfiguration/; 
      #设置主机头和客户端真实地址,以便服务器获取客户端真实IP
      proxy_set_header   Host             $host;
      proxy_set_header   X-Real-IP        $remote_addr;
      proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
    location /Apriso/Portal/ {
            root   html;
            index  index.html index.htm;

      #其中jq_one 对应着upstream设置的集群名称
      proxy_pass         http://WebCluster/Apriso/Portal/; 
      #设置主机头和客户端真实地址,以便服务器获取客户端真实IP
      proxy_set_header   Host             $host;
      proxy_set_header   X-Real-IP        $remote_addr;
      proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

}

启动Nginx

配置 Apriso 服务器

修改三台服务器(Apriso2021App1、Apriso2021 Web1 /Web2)配置,使用在 Nginx 中定义的“webcluster”作为WebAddress,使用"Apriso2021App1" 作为 AppAddress

修改三台服务器数据库连接,使用 "Apriso2021" 作为数据库服务器:

三台服务器上的 DeploymentInfo.xml 文件中 machine 节点下添加 WebRole和 AppRole

代码语言:javascript复制
<?xml version="1.0" encoding="utf-8"?>
<FlexNetDeployment xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <global>
    <configurationVariables>
      <variable name="Scheme" value="http" />
      <variable name="AppAddress" value="APRISO2021App1" />
      <variable name="WebAddress" value="WebCluster" />
      <variable name="ProgramFilesPath" value="C:Program FilesDassault SystemesDELMIA Apriso 2021" />
      <variable name="AprisoTempPath" value="C:TempAprisoTemp" />
      <variable name="WebRootURL" value="http://${WebAddress}/Apriso" />
      <variable name="WebSitePath" value="${ProgramFilesPath}WebSite" />
    </configurationVariables>
  </global>
  <machines>
    <machine name="APRISO2021App1" role="App">
      <configurationVariables />
      <components />
      <folders />
      <webFolders />
      <services />
    </machine>
    <machine name="APRISO2021Web1" role="Web">
      <configurationVariables />
      <components />
      <folders />
      <webFolders />
      <services />
    </machine>
<machine name="APRISO2021Web2" role="Web">
      <configurationVariables />
      <components />
      <folders />
      <webFolders />
      <services />
    </machine>
  </machines>
</FlexNetDeployment>

修改 windows 服务启动模式为手动(两台Web服务器上):

修改 aprisoservices 相关 windows 服务启动模式为 “手动”;

确认"ASP.NET stateService"和 "Apriso Global Process Manager Services" 在自动状态下运行正常;

测试

重启所有3台服务器(Apriso2021 App1、Apriso2021 Web1 /Web2)

修改两台Web服务器"C:Program FilesDassault SystemesDELMIA Apriso 2021WebSiteStartdefalut.html"文件,添加相关"Web1" 、"Web2"用以区分 Nginx 访问到了不同的 web 服务

通过访问 http://webcluter/apriso/start,验证访问是否正确,多次刷新后,是否能够访问到Web1或Web2不同的服务器上。

0 人点赞