O2OA(翱途)开发平台-如何基于nginx上下文分发的方式快速集群部署

news2024/11/27 10:23:16

O2OA(翱途)开发平台[下称O2OA开发平台或者O2OA]使用分布式架构设计,提供灵活的扩展方案用于对服务器的负载能力进行扩展,保障系统的高可用性。本篇主要介绍如何基于nginx上下文分发的方式快速集群部署。

O2OA平台应用结构

O2OA服务器默认启动5个服务,分别为:

  • Application 应用服务器,默认端口:80

  • Center 中心服务器,默认端口:80

  • Web    web资源服务器,默认端口:80

  • Data 数据库服务器,默认端口20050(默认情况下同时提供一个Web GUI管理界面,默认端口 20051)

  • Storage 默认文件存储服务器,默认端口20040

其中 Data和Storage在生产环境中建议使用商用产级品。

Application,Center和Web三个服务器同时对外提供http服务,在集群和网络转发环境中需要对这些服务端口进转发。

O2OA集群配置方案

此配置适合O2OA集群部署或者外网访问o2server服务(如移动端h5方式访问o2)

主机信息(举例)

主机1:172.16.98.8(linux)
主机2:172.16.98.9(linux)

集群需求

 

172.16.98.8:WEB服务器,应用服务器,文件存储服务器,中心服务器
172.16.98.9:WEB服务器,应用服务器,文件存储服务器,中心服务器

数据库

MySQL数据库

Nginx访问域名及端口

域名:qmx.o2oa.net(可以用ip,如果域名没有解析需要配置hosts)

端口:80(o2web服务器、o2应用服务器、o2中心服务器)

分发规则

(下文中描述的上下文(如:/dev/web)不是固定的,可以根据自身需要需改,但第一层/dev在3个上下文中必须是一致的。在此我们暂时定义上下文为/o2oa):

nginx80端口匹配的上下文

o2端口服务

/o2oa

8080(web服务器、应用服务器、中心服务器)

配置步骤

配置节点标识

1、在主机172.16.98.8的o2server/local目录中修改或者新增文件node.cfg,修改内容为主机的域名或者IP;

主机172.16.98.8的节点标识文件配置

172.16.98.8

2、在主机172.16.98.9的o2server/local目录中修改或者新增文件node.cfg,修改内容为主机的域名或者IP;

主机172.16.98.9的节点标识文件配置

172.16.98.9

配置node文件

1、从172.16.98.8主机的o2server/configSample目录中copy文件node_127.0.0.1.json到o2server/config目录,命名为node_172.16.98.8.json,再拷贝一份命名为node_172.16.98.9.json;

2、修改node_172.16.98.8.json文件如下(#井号部分需关注):

 

{
 "enable": true,
 "center": {
   "enable": true,
   "order": 1.0,                  ######
   "sslEnable": false,
   "redeploy": true,
   "port": 8080.0,                ######
   "httpProtocol": "",
   "proxyHost": "",
   "proxyPort": 8080.0
 },
 "application": {
   "enable": true,
   "port": 8080.0,                ######
   "sslEnable": false,
   "proxyHost": "",
   "proxyPort": 8080.0,
   "includes": [],
   "excludes": []
 },
 "web": {
   "enable": true,
   "port": 8080.0,                    ######
   "sslEnable": false,
   "proxyHost": ""
 },
 "data": {
   "enable": false,                   ######
   "tcpPort": 20050.0,
   "webPort": 20051.0,
   "includes": [],
   "excludes": [],
   "jmxEnable": false,
   "cacheSize": 512.0,
   "logLevel": "WARN",
   "maxTotal": 50.0,
   "maxIdle": 0.0,
   "statEnable": true,
   "statFilter": "mergeStat",
   "slowSqlMillis": 2000.0
 },
 "storage": {
   "enable": true,
   "port": 20040.0,
   "sslEnable": false,
   "name": "251",                  ######
   "accounts": [],
   "prefix": "",
   "deepPath": false
 },
 ...
}

3、修改node_172.16.98.9.json文件如下(#井号部分需关注):

 

{
 "enable": true,
 "center": {
   "enable": true,
   "order": 2.0,                  ######
   "sslEnable": false,
   "redeploy": true,
   "port": 8080.0,                ######
   "httpProtocol": "",
   "proxyHost": "",
   "proxyPort": 8080.0
 },
 "application": {
   "enable": true,
   "port": 8080.0,                ######
   "sslEnable": false,
   "proxyHost": "",
   "proxyPort": 8080.0,
   "includes": [],
   "excludes": []
 },
 "web": {
   "enable": true,
   "port": 8080.0,                    ######
   "sslEnable": false,
   "proxyHost": ""
 },
 "data": {
   "enable": false,                   ######
   "tcpPort": 20050.0,
   "webPort": 20051.0,
   "includes": [],
   "excludes": [],
   "jmxEnable": false,
   "cacheSize": 512.0,
   "logLevel": "WARN",
   "maxTotal": 50.0,
   "maxIdle": 0.0,
   "statEnable": true,
   "statFilter": "mergeStat",
   "slowSqlMillis": 2000.0
 },
 "storage": {
   "enable": true,
   "port": 20040.0,
   "sslEnable": false,
   "name": "252",                  ######
   "accounts": [],
   "prefix": "",
   "deepPath": false
 },
 ...
}

4、从172.16.98.8主机的o2server/configSample目录中copy文件externalDataSources_mysql.json到o2server/config目录,命名为externalDataSources.json,然后修改配置文件中数据库相应的配置信息;

5、从172.16.98.8上复制修改好的node_172.16.98.8.json、node_172.16.98.9.json和externalDataSources.json文件到172.16.98.9的o2server/config目录。

配置路径映射

1、分别从172.16.98.8和172.16.98.9主机的o2server/configSample目录中copy文件portal.json到o2server/config目录。

2、修改portal.json(修改urlMapping的内容,其他保持不变)

 

{
  "indexPage": {
    "enable": false,
    "portal": "",
    "page": ""
  },
  "loginPage": {
    "enable": false,
    "portal": "",
    "page": ""
  },
  "urlMapping": {
    "qmx.o2oa.net/": "qmx.o2oa.net/o2oa/"
  },
  "###indexPage": "定制首页面设置.###",
  "###loginPage": "定制登录页面设置.###"
}

启动服务器

1、进入o2server目录,执行./start_linux.sh,当显示出o2命令信息时输入start启动服务,观察center服务、app服务器、web服务启动是否正常;

2、当两台服务器都启动正常后进入nginx服务器,telnet这两台服务器3个服务的端口,确保nginx到o2服务器网络正常;

配置Nginx转发规则

进入nginx的nginx.conf文件,修改配置(参考如下),然后重启nginx。

 

http {
   include       mime.types;
   default_type  application/octet-stream;
   charset  utf-8;
   #access_log  logs/access.log  main;
   client_max_body_size 100m;       # 数据包大小限制
   sendfile        on;
   tcp_nopush     on;
   keepalive_timeout  65;
   #gzip  on;
   upstream o2Server {             # Server: 分发名
       server 172.16.98.8:8080;        # 分发地址1
       server 172.16.98.9:8080;        # 分发地址2
   }
   server {
       listen       80;
       server_name  localhost;
       proxy_http_version 1.1;
        proxy_read_timeout 300s;
        proxy_set_header Upgrade $http_upgrade;  # 支持websocket连接
        proxy_set_header Connection "upgrade";    # 支持websocket连接
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       location /o2oa/ {
           root   html;
           index  index.html;
           proxy_pass http://o2Server/;
       }
   }
}

测试验证

1、浏览器访问地址:http://qmx.o2oa.net/  使用 xadmin/o2登录;

2、进入172.16.98.8主机的o2server目录,键入./stop_linux.sh ,刷新页面正常访问(服务被转发到172.16.98.9);

3、进入172.16.98.9主机的o2server目录,键入./stop_linux.sh ,刷新页面出现502 Bad Gateway(两台服务器均停止服务,无内容可被请求);

4、进入172.16.98.8主机的o2server目录,键入./start_linux.sh进入命令行后键入start ,刷新页面正常访问(172.16.98.8服务器启动完成,向外提供服务能力);

logo_all@1.5x.png

以上是使用Nginx以上下文转发机制的形式实现O2OA集群的介绍,希望对您有帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1582228.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

51单片机 DS1302

DS1302 实现流程 将提供的ds1302底层参考程序拷贝到工程下 注意在ds1302.c中可能硬件引脚没有定义,注意去看一下。还有头文件什么的在ds1302中记得加上 参考代码: #include "reg52.h" #include "ds1302.h"unsigned char Write_…

Linux网络名称空间与网络协议栈:区别、联系与理解

在深入探讨Linux网络名称空间和网络协议栈之间的区别和联系之前,重要的是先明确这两个概念的定义。网络名称空间是Linux提供的一种虚拟化技术,允许在同一物理机器上运行的不同进程组拥有独立的网络环境🏢。而网络协议栈是操作系统用于实现网络…

【趣味学算法】14_梅森素数

注: 本系列仅为个人学习笔记,学习内容为《算法小讲堂》(视频传送门),通俗易懂适合编程入门小白,需要具备python语言基础,本人小白,如内容有误感谢您的批评指正 梅森数(Me…

从“执行SQL”到“返回结果”,数据库到底发生了什么?

SQL 全称是 Structured Query Language 结构化查询语言。由于其简单易学、完整安全、灵活且具备高可扩展性,SQL 如今已经成为标准的关系型数据库管理语言。 当连接到数据库,写下一条 SQL 语句,点击“执行”, SELECT name, compa…

1.Spring的核心思想 —— IOC和DI

1. Spring是什么? 简单的说,Spring其实指的是Spring Framework(Spring框架),是一个开源框架。 如果要用一句话概括:它是包含众多工具方法的IOC(Inverse of Control控制反转)容器。…

STC89C52学习笔记(四)

STC89C52学习笔记(四) 综述:本文讲述了在STC89C51中数码管、模块化编程、LCD1602的使用。 一、数码管 1.数码管显示原理 位选:对74HC138芯片的输入端的配置(P22、P23、P24),来选择实现位选&…

相机模型浅析

相机模型 文章目录 相机模型四个坐标系针孔相机模型世界坐标系到相机坐标系相机坐标系到图像坐标系图像坐标到像素坐标 四个坐标系 ①世界坐标系:是客观三维世界的绝对坐标系,也称客观坐标系。因为数码相机安放在三维空间中,我们需要世界坐标…

Java springmvc 参数名用is开头导致为null

因为最近在整理一些源码和编写规范,这里写一下只是记录几年前自己遇到的问题,好久都忘了,还是写下来比较好。 问题记录:由于变量使用了boolean,并且变量名是is开头的,由于java机制boolean默认是false&#…

网络学习学习笔记

NETEBASE学习笔记 一.VRP系统1.四种视图模式2.基础命令 二.TCP/IP1.五层模型 一.VRP系统 1.四种视图模式 (1)< Huawei > 用户视图 【查看运行状态】 (2)[Huawei] 系统视图 【配置设备的系统参数】 system-view /sys 进入系统视图 CtrlZ/return 直接返回用户视图 (3)[Hua…

十六进制前缀为Ox还是0x???

16进制的前缀是0x&#xff0c;数字零和英文字母X。 十六进制&#xff08;英文名称&#xff1a;Hexadecimal&#xff09;&#xff0c;是计算机中数据的一种表示方法。同我们日常生活中的表示法不一样。它由0-9&#xff0c;A-F组成&#xff0c;字母不区分大小写。与10进制的对应…

qq过期文件怎么恢复?3招精准找回丢失的QQ文件

当我们使用QQ进行文件传输时&#xff0c;有时候会遇到一个普遍的问题&#xff1a;过期文件。这些文件由于时间限制或其他原因而在一定时间后自动删除&#xff0c;让人感到烦恼。 然而&#xff0c;对于那些重要的文件&#xff0c;我们可能希望能够恢复并重新获取。qq过期文件怎…

Docker安装及开启远程访问

这几天有人问我docker是怎么开启远程服务的&#xff1f; 正好之前我做过这件事情&#xff0c;并且写了相关的笔记&#xff0c;现在整理为一篇博客发出来。 安装Docker 首先更新一下自己的yum版本 yum update安装一下所需要的软件包 yum-config-manager --add-repo http://…

蓝桥杯中的DFS算法

前言 和上一篇文章一样&#xff0c;这篇文章是介绍蓝桥杯中的第二种暴力算法就是DFS算法&#xff0c;在蓝桥杯中非常常用。 简单介绍 DFS算法中文名就是深度优先算法&#xff0c;在这里就不详细介绍这个算法了&#xff0c;可以自行搜索&#xff0c;网上有很多&#xff0c;或…

Bootstrap 5 保姆级教程(一):容器 网格系统

一、容器 1.1 固定宽度&#xff08;.container&#xff09; .container 类用于固定宽度并支持响应式布局的容器。 以下实例中&#xff0c;我们可以尝试调整浏览器窗口的大小来查看容器宽度在不同屏幕中等变化&#xff1a; <!doctype html> <html lang"en&quo…

线性变换在人工智能领域的深度实践与应用探索

线性变换&#xff0c;作为数学中的一种基本工具&#xff0c;在人工智能领域中发挥着举足轻重的作用。其强大的表示能力和灵活的运算特性使得线性变换成为机器学习、深度学习等多个子领域的核心组成部分。本文将详细探讨线性变换在人工智能领域中的实践应用&#xff0c;旨在揭示…

刷题DAY50 | LeetCode 123-买卖股票的最佳时机III 188-买卖股票的最佳时机IV

123 买卖股票的最佳时机III&#xff08;hard&#xff09; 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意&#xff1a;你不能同时参与多笔交易&#xff08;你必须在再…

Misplaced alignment tab character . | latex .bib文件有引发报错

报错如下&#xff1a; Misplaced alignment tab character &. 这是由于bibtex里面可能会含有&符号 解决办法&#xff1a; 将.bib文件&#xff0c;也就是放参考文献的地方所有的&替换成$\&$ 替换成

【群智能算法改进】一种改进的鹦鹉优化算法 改进鹦鹉优化器 IPO算法【Matlab代码#73】

文章目录 【获取资源请见文章第5节&#xff1a;资源获取】1. 原始鹦鹉优化算法PO2. 改进后的IPO算法2.1 自适应切换因子2.2 混合柯西和高斯变异 3. 部分代码展示4. 仿真结果展示5. 资源获取 【获取资源请见文章第5节&#xff1a;资源获取】 1. 原始鹦鹉优化算法PO 鹦鹉优化算法…

上位机图像处理和嵌入式模块部署(qmacvisual实时视频)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们测试和练习的时候&#xff0c;大部分情况下都是利用图像进行测试的&#xff0c;但是实际情况下&#xff0c;或者准确一点说&#xff0c;工…

【Python使用turtle库随便画一些乱七八糟的东西】

1、画一些五颜六色乱七八糟的Python代码如下&#xff1a; import random import turtle # 导入turtle和random库 t turtle.Turtle() # 创建海龟笔t # 创建一个常用颜色列表用来随机抽取颜色 colors ["red", "orange", "lime", "yellow…