2.5. 多发比对网关部署说明
本章节介绍比对服务网关的部署方法,以及微服务伪多发的配置注意事项。
2.5.1. 多发比对网关简介
多发比对网关是基于 OpenResty 的服务,支持将请求发送给多个对接不同数据库的微服务;这些微服务正确集成了伪多发后,将 SQL 执行数据汇报给比对服务,实现多个异构库微服务的数据比对。
多发网关支持的特性包括:
支持配置多个目标端
支持多目标端 Session 保持
以业务请求为维度生成 TraceID
2.5.2. 多发比对网关部署
部署时需要的物料包括:
网关的发布物
Openresty-1.13.6.2 程序
部署时需要的步骤包括:
建立目录结构,复制资源
修改端口与 host 配置
修改配置文件
2.5.2.1. 网关的发布物
网关的发布物中包含一个 conf 配置,以及一系列 lua 文件。以 SEE 网关为例,发布物中会有如下目录结构:
see
- config.lua
- file_persist.lua
- log_csv.lua
- nginx-see-tenant.conf
- README
- html
- multiplex-gateway.html
- papaparse-5.4.1.min.js
- tailwindcss-3.4.17.js
2.5.2.2. Openresty-1.13.6.2 程序
需要下载 Openresty-1.13.6.2 源码包,并编译安装。
下载地址: https://openresty.org/download/openresty-1.13.6.2.tar.gz
编译方式:
yum install pcre-devel openssl-devel gcc curl zlib-devel
tar -xvf openresty-1.13.6.2.tar.gz
cd openresty-1.13.6.2/
./configure --prefix=/path/to/install -j2
make -j2
sudo make install
需要将 /path/to/install
改为您需要安装 Openresty 程序的位置,推荐放在 /opt/openresty-1.13.6.2
;这样编译完成后,
二进制程序会在 /opt/openresty-1.13.6.2/nginx/sbin/nginx
。
如果对编译方式仍有疑问,可参考官方构建文档 https://openresty.org/en/installation.html#building-from-source 。
2.5.2.3. 建立目录结构
网关的配置与 Openresty 是不放在一起的,需要建立一个独立的目录,如 multiplex-gateway ,然后将发布物复制进去,步骤:
将网关配置复制进来
设置 run.sh 启动脚本
首先创建目录结构:
mkdir -p data conf
然后将发布物中的内容全部复制到 conf 目录下。
然后处理 run.sh ,发布物中的 run.sh 脚本复制到 multiplex-gateway 目录下,并修改启动脚本中的 NGINX_BIN 路径,例如:
#!/bin/bash
#
# nginx 管理脚本模板
#
# ======= 可配置部分 =======
NGINX_BIN="/opt/openresty-1.13.6.2/nginx/sbin/nginx" # Nginx 二进制路径
WORK_DIR="$(readlink -f $(dirname $0))" # 工作路径
CONF_DIR="$WORK_DIR/conf" # 配置目录(默认在 WORK_DIR/conf)
LOGS_DIR="$WORK_DIR/logs"
CONF_FILE="$CONF_DIR/nginx-see-tenant.conf" # 配置文件
PID_FILE="$WORK_DIR/logs/nginx.pid" # PID 文件路径
# ==========================
start() {
echo "Starting nginx with config: $CONF_FILE"
mkdir -p "$LOGS_DIR"
$NGINX_BIN -p "$WORK_DIR" -c "$CONF_FILE"
}
stop() {
if [ -f "$PID_FILE" ]; then
echo "Stopping nginx..."
kill -QUIT $(cat "$PID_FILE")
else
echo "No PID file found at $PID_FILE"
fi
}
reload() {
if [ -f "$PID_FILE" ]; then
echo "Reloading nginx config..."
kill -HUP $(cat "$PID_FILE")
else
echo "No PID file found, nginx may not be running"
fi
}
status() {
if [ -f "$PID_FILE" ]; then
if ps -p $(cat "$PID_FILE") > /dev/null 2>&1; then
echo "nginx is running (PID: $(cat "$PID_FILE"))"
else
echo "nginx PID file exists but process not found"
fi
else
echo "nginx is not running"
fi
}
case "$1" in
start) start ;;
stop) stop ;;
reload) reload ;;
status) status ;;
restart) stop; sleep 1; start ;;
*)
echo "Usage: $0 {start|stop|reload|restart|status}"
exit 1
esac
再为启动脚本增加可执行权限即可: chmod +x run.sh
最终完整的目录结构类似于:
├── conf
│ ├── config.lua
│ ├── file_persist.lua
│ ├── html
│ │ ├── multiplex-gateway.html
│ │ ├── papaparse-5.4.1.min.js
│ │ └── tailwindcss-3.4.17.js
│ ├── log_csv.lua
│ └── nginx-see-tenant.conf
├── data
└── run.sh
2.5.2.4. 修改端口与 host 配置
用户需要编辑 conf/nginx-see-tenant.conf
,以修改以下配置:
监听地址
监听端口
要使用网关,一定需要一个 host ,否则与各个微服务的 Session 会无法处理。假设用户使用 example.com
为 host ,需要找到 server {
下面的 server_name
进行修改。
备注
如果没有 DNS 服务,则可能需要配置 hosts 才可以访问网关,需要将 example.com
绑定到网关所在的地址。
方法示例 (Windows):编辑 C:WindowsSystem32driversetchosts 文件,添加如下内容:
10.20.30.40 example.com
默认端口为 8081 ,如果用户需要修改端口,需要找到 server {
下面的 listen 8081;
,修改为对应端口即可。
2.5.2.5. 修改配置文件
修改 conf/config.lua
,在网关上配置多发到哪些节点,以及 UUID 处理服务的请求地址。
配置示例:
-- 主节点
_M.PRIMARY_NODE = { scheme = "http", host = "10.20.191.231", port = 8081 }
-- 多发节点列表 shadow_servers
_M.SHADOW_NODES = {
{ scheme = "http", host = "10.20.30.217", port = 8081 },
{ scheme = "http", host = "10.20.199.58", port = 8081 },
}
-- UUID 插入类功能 uri 清单
_M.UUID_SERVICE_TIMEOUT_MILLIS = 10000
_M.UUID_SERVICE_ADDR = "http://10.20.191.231:9091/ukagent/getLastSyncUuidStatus"
_M.UUID_INSERT_FUNCTIONS = {
{ uri = "/acm/dssp/script/save.json" },
{ uri = "/acm/dssp/product/mulUploads.json" },
}
用户需要修改 PRIMARY_NODE
SHADOW_NODES
UUID_SERVICE_ADDR
这三项配置。
PRIMARY_NODE
: 主节点配置,推荐配置为连 MySQL 或 Oracle 的微服务的地址SHADOW_NODES
: 多发节点列表,配置为需要多发到节点的微服务地址UUID_SERVICE_ADDR
: UUID 处理服务地址,配置为 UUID 处理服务地址;UUID 服务的部署方式参考下一节的说明
2.5.3. 伪多发配置注意事项
微服务需要配置伪多发,才能与网关正确配合,实现数据比对;配置伪多发时有一些注意事项:
需要在 jrescloud.properties 中配置 UUID 服务地址,参数为
multi.uuidServiceUrl
,如multi.uuidServiceUrl=http://10.20.191.231:9091/ukagent/putSyncUuid
需要注意
unisql.conf
中配置正确的元数据 Schema ,否则伪多发可能因无法找到元数据而失败;配置参数为unisql.table.column.metadata.schemas
,如 SEE 需要配置unisql.table.column.metadata.schemas = 'acm','acm_job','sys'
备注
由于业务系统可能采用自动生成的 UUID 作为主键插入到数据库中,所以引入了 UUID 服务专门来处理这种情况,使得主库微服务与所有其他目标库微服务的数据保持 ID 一致,避免后续业务无法进行。
2.5.4. 多发比对网关启动
完成上述部署步骤后,可执行 ./run.sh start
进行启动。
启动后,如果界面上没有提示错误信息,则网关启动成功。正常情况下,只会有一句 Starting nginx with config:
的日志打印出来。
之后可以在浏览器上输入网关的地址来访问网关,以 SEE 为例,可访问 http://example.com:8081/acm/app.htm
。
启动后,Openresty 会自动创建一些目录,最终结构如下:
├── client_body_temp
├── conf
│ ├── config.lua
│ ├── file_persist.lua
│ ├── html
│ │ ├── multiplex-gateway.html
│ │ ├── papaparse-5.4.1.min.js
│ │ └── tailwindcss-3.4.17.js
│ ├── log_csv.lua
│ └── nginx-see-tenant.conf
├── data
│ └── multiplex-status.csv
├── fastcgi_temp
├── logs
│ ├── body.log
│ ├── debug.log
│ ├── error.log
│ ├── nginx.pid
│ └── primary_biz_access.log
├── proxy_temp
├── run.sh
├── scgi_temp
└── uwsgi_temp