用户手册
# 前言
本文档为金蝶Apusic服务网关软件v2.0.2软件的使用说明,为用户介绍金蝶Apusic服务网关产品,帮助用户快速上手。
# 面向对象
本用户手册主要面向对象为适用金蝶Apusic服务网关的开发人员,以及相关的管理人员和运维人员。
# 版本更新说明
本文根据实际情况进行更新,最新版本包含历史修改记录。
| 日期 | 手册版本 | 适用产品 | 更新说明 |
|---|---|---|---|
| 2024年12月 | V2.0.2 | ASG V2.0.2 软件 | 修改ASG高可用和授权认证使用文档 |
# 用户手册
# 基本介绍
金蝶Apusic服务网关软件(Apusic Service Gateway,ASG)是一款具备高性能、高可用性和可扩展性的流量治理软件。ASG能够应对大规模的集群、云平台在面向客户端提供服务时,对客户端访问请求和流量管理的需求,实现访问请求的验证、处理、转换和分发等操作,从而隔离客户端访问对提供服务的应用系统、平台以及资源的直接影响,达到对服务集群访问流量控制、访问管理和负载均衡的目的。
# 产品功能架构
ASG软件的功能如下图所示:

# 产品安装
# 安装说明
相关资源
针对不同的操作系统及CPU架构平台,金蝶Apusic服务网关软件提供不同的安装包。更多产品介质相关信息,可以访问金蝶天燕官方网站http://www.apusic.com获取。
基本概念
在正确使用应用服务器来部署、管理应用之前,需要先理解以下几个基本概念:
ASG:Apuisc Service Gateway,金蝶Apusic服务网关软件。
- 安装与使用
- 安装前准备
- 获取安装包
从http://www.apusic.com/下载金蝶Apusic服务网关软件v2.0安装包,或从金蝶Apusic服务网关软件产品光盘中获得相应的安装包文件。
支持的环境
| 平台类型 | 系统类型 |
|---|---|
| 芯片类型 | 鲲鹏、飞腾、兆芯等通用x86或arm架构cpu |
| 国产操作系统 | OpenEuler、统信UOS、银河麒麟系列、深度等 |
| 其他Linux系列 | RedHat系列、CentOS、Suse Linux系列等 |
# 安装包说明
ASG软件产品安装包名称结构是:
ASG-版本号-SE-构建日期-CPU架构.tar.gz,
目前仅支持linux平台下arm64和amd64架构:
- Linux平台arm64架构安装包:
ASG-V2.0.2-SE-构建日期-arm64.tar.gz - Linux平台amd64(x86_64)架构安装包:
ASG-V2.0.2-SE-构建日期-amd64.tar.gz
注:构建日期为ASG产品包具体构建日期,同一个版本可能存在多个构建日期,获取安装包以最新日期为准。本手册全部演示内容中的安装包名称移除了构建日期。
# 安装介质
- tar.gz压缩包:
ASG-版本号-SE-构建日期-CPU架构.tar.gz解压到目标机器任意路径即可使用。 - RPM包:
ASG-版本号-SE-构建日期-CPU架构.rpm,使用rpm -ivh 安装包名安装,安装完成后,其安装路径为/opt/ASG-SE-版本号 - docker镜像:
ASG-版本号-SE-构建日期-CPU架构-docker.tar.gz或 或ASG-版本号-SE-Docker-构建日期-CPU架构-基础操作系统.tar.gz。
# ASG安装部署
下面以ARM架构下Kylin系统上安装ASG为例,下载好安装文件ASG-V2.0.2-SE-arm64.tar.gz后,其安装步骤有:
- 解压安装包
- 导入license
- 启动ASG
# 解压安装包到指定目录
- 上传asg安装包至安装服务器的任意安装目录,(推荐/opt目录)。
- 解压安装包:
tar -zvxf ASG-V2.0.2-SE-arm64.tar.gz获得ASG-V2.0.2-SE-arm64文件夹。 - 进入解压后的文件夹:
cd ASG-V2.0.2-SE-arm64。
备注:下面演示的安装路径为/opt/目录(支持安装在任意目录)。
# 导入license
- 将金蝶KBC授权或本地授权,把授权文件放置在
安装目录/asg-standard文件夹下,
# 启动、停止、重新加载
- 启动:
./bin/start-asg.sh,如下图表示成功启动ASG
- 停止:
./bin/stop-asg.sh - 重新加载:
./bin/reload.sh
# Docker部署
asg软件提供arm和x86的Docker系统安装包,可通过asg Docker安装包直接部署asg.
# 安装包说明
- ASG压缩安装包名称
ASG-V2.0.2-SE-docker-amd64.tar.gz或ASG-V2.0.2-SE-Docker-20250227-amd64-kylin.tar.gzASG-V2.0.2-SE-docker-arm64.tar.gz或ASG-V2.0.2-SE-Docker-20250227-arm64-kylin.tar.gz
注: 安装包日期可能不同,请根据实际情况选择。
安装包目录结构
tree -l 1 ASG-V2.0.2-SE-Docker-20250227-amd64-kylin ASG-V2.0.2-SE-Docker-20250227-amd64-kylin # docker安装包解压后目录 |-- ASG-V2.0.2-SE-Docker-20250227-amd64-kylin.tar.gz # docker镜像文件 |-- alb # ASG启动配置文件、授权文件、日志等挂载目录 | |-- alb.conf # ASG配置文件 | |-- license.xml # 授权文件 -- asg-standard-docker-compose.yaml # docker compose配置文件1
2
3
4
5
6
7
# 安装步骤
下面的操作以ASG-V2.0.2-SE-Docker-20250227-amd64-kylin.tar.gz为例
- 解压和导入镜像
解压
tar -zxvf ASG-V2.0.2-SE-Docker-20250227-amd64-kylin.tar.gz进入解压后的文件夹
cd ASG-V2.0.2-SE-Docker-20250227-amd64-kylin加载镜像:
docker load < ASG-V2.0.2-SE-Docker-20250227-amd64-kylin.tar.gz
- 修改授权文件
ASG授权文件需要挂载到容器内部安装目录,当前样例是alb/license.xml,在启动容器前,请更换授权文件。
授权文件挂载说明:
- license.xml支持旧授权
- license.xml支持KBC授权(如果是KBC授权,把kbc授权内容复制写入license.xml即可)
- acls.properties统一授权配置文件需要添加挂载到容器路径:
/opt/ASG-V2.0.2-SE/asg-standard
- 镜像启动与停止
启动命令:
docker-compose -f asg-standard-docker-compose.yaml up -d停止命令:
docker-compose -f asg-standard-docker-compose.yaml down
asg-standard-docker-compose.yaml配置说明version: '3' services: alb: image: harbor.apusic.com/apusic/alb:V2.0.2-se.20250227-kylin-amd64 #ASG镜像名称 ports: - 8080:80 # ASG件动态代理端口映射 - 9443:443 # ASG动态代理端口映射 - 9000:9000 # ASG软件管理控制台端口映射 volumes: - ./alb/config.yaml:/opt/ASG-V2.0.2-SE/asg-standard/conf/config.yaml # ALASG配置文件映射 - ./alb/license.xml:/opt/ASG-V2.0.2-SE/asg-standard/license.xml # ASGASG权文件映射 - ./alb/logs:/opt/ASG-V2.0.2-SE/asg-standard/logs # ASG ASG文件映射 command: bash /opt/ASG-V2.0.2-SE/bin/start-asg.sh # 启动命令1
2
3
4
5
6
7
8
9
10
11
12
13
# K8s部署
alb软件支持通过Kubernetes进行部署,以下是详细的部署步骤。
# 准备工作
环境要求
- 已安装 kubectl 并配置好 Kubernetes 集群访问权限。
- 若使用私有镜像仓库(如Harbor),确保集群有权限拉取镜像。
镜像准备
将 Docker 镜像上传至镜像仓库(以 AMD64 镜像为例)
# 解压安装包 tar -zxvf ASG-V2.0.2-SE-Docker-20250227-amd64-kylin.tar.gz # 切换到解压后的安装包 cd ASG-V2.0.2-SE-Docker-20250227-amd64-kylin # 导入ASG镜像 docker load < ASG-V2.0.2-SE-Docker-20250227-amd64-kylin.tar.gz # 重新标记镜像,请根据自己镜像仓库地址进行修改 docker tag [镜像ID] harbor.apusic.com/apusic/alb:V2.0.2-se.20250227-kylin-amd64 # 推送镜像至镜像仓库 docker push [镜像ID]1
2
3
4
5
6
7
8
9
10# 配置文件与授权管理
创建 ConfigMap 将
config.yaml配置文件挂载至容器:kubectl create configmap asg-config --from-file=./alb/config.yaml1创建 Secret 将
license.xml授权文件以 Secret 形式存储(敏感信息建议使用 Secret):kubectl create secret generic asg-license --from-file=./alb/license.xml1
# 部署ASG服务
创建 Deployment 编写 asg-deployment.yaml 文件:
apiVersion: apps/v1 kind: Deployment metadata: name: alb spec: replicas: 1 selector: matchLabels: app: alb template: metadata: labels: app: alb spec: containers: - name: alb image: harbor.apusic.com/apusic/alb:V2.0.2-se.20250227-kylin-amd64 # 请根据仓库地址进行修改 command: ["bash", "/opt/ASG-V2.0.2-SE/bin/start-asg.sh"] ports: - containerPort: 80 - containerPort: 443 - containerPort: 9000 volumeMounts: - name: asg-config mountPath: "/opt/ASG-V2.0.2-SE/asg-standard/conf/config.yaml" subPath: "config.yaml" - name: asg-license mountPath: "/opt/ASG-V2.0.2-SE/asg-standard/license.xml" subPath: "license.xml" - name: asg-logs mountPath: "/opt/ASG-V2.0.2-SE/asg-standard/logs" volumes: - name: asg-config configMap: name: asg-config - name: asg-license secret: secretName: asg-license - name: asg-logs hostPath: path: "/var/alb/logs" type: DirectoryOrCreate1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42参数说明
- image: 替换为实际镜像地址。
- hostPath: 日志目录挂载路径,可按需改为 PVC(如使用云存储)。
创建 Service
apiVersion: v1 kind: Service metadata: name: asg-service spec: type: NodePort selector: app: alb ports: - name: http port: 80 targetPort: 80 nodePort: 30080 - name: https port: 443 targetPort: 443 nodePort: 30443 - name: console port: 9000 targetPort: 9000 nodePort: 309001
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21参数说明
- nodePort 默认范围为 30000-32767,若省略端口则由系统自动分配
- 若在云环境,可将 type 改为 LoadBalancer 直接获取外部 IP
应用配置
kubectl apply -f asg-deployment.yaml kubectl apply -f asg-service.yaml1
2# 部署验证
检查 Pod 状态
kubectl get pods -l app=alb1访问服务
- HTTP 服务:
http://<节点IP>:30080 - HTTPS 服务:
http://<节点IP>:30080 - 管控台:
http://<节点IP>:30900
# 停止与清理
删除部署
kubectl delete -f asg-deployment.yaml -f asg-service.yaml1清理配置
kubectl delete configmap asg-config kubectl delete secret asg-license1
2
# 产品license使用说明
ASG支持本地授权和统一授权,其中本地授权采用把授权文件拷贝到产品安装目录进行授权,而统一授权则是通过在产品指定统一授权中心的连接信息进行连接授权。
# 本地授权
获取本机特征码
./bin/asg-authcode1获取授权码后,请与金蝶天燕联系,将特征码发回金蝶天燕进行授权文件获取,或者登录金蝶天燕授权平台获取授权文件。
将获取到的授权文件修改为文件名license.xml,然后放到ASG安装目录/asg-standard/目录下。
# 统一授权
统一授权中心必须包含ASG软件的有效授权信息。(请登录授权中心进行查看,若没有有效的产品授权信息,请参考授权中心手册,导入有效的产品授权信息。)
产品配置连接授权中心的连接方式:
acls.properties配置文件: acls.properties配置文件放置在ASG安装目录/asg-standard目录下。
apusic_acls_enable=false # 开启变量统一授权 apusic_acls_authUrls=192.168.101.34 # 统一授权中心地址 apusic_acls_ns=public # 命名空间 apusic_acls_tenant=public # 租户名称1
2
3
4系统环境变量配置
export apusic_acls_enable=true # 开启变量统一授权 export apusic_acls_authUrls=172.24.3.116:6869 # 统一授权中心地址 export apusic_acls_ns=后付费 # 命名空间 export apusic_acls_tenant=user_env中文 # 租户名称1
2
3
4
注: 2种授权方式如果都进行了配置,则优先级为系统环境变量配置 > acls.properties文件配置;如果同时配置了本地授权方式和统一授权方式,则使用统一授权方式,若授权验证失败,将不会执行后续的授权验证。
# 产品快速入门
本快速入门指南介绍了金蝶Apusic服务网关软件v2.0产品的功能和使用,为用户快速使用本产品提供指导。
# 登录管理控制台
打开浏览器(推荐Chrome、firefox),输入地址 http://serverIP:serverPort/ 进入到管理控制台登录页面。
例如:将ASG部署在172.20.140.137端口默认为9000,登录地址则为:http://172.20.140.137:9000

输入用户名密码登录管理控制台。
- 用户名为:
admin - 初始密码为:
apusic$asg
# 使用ASG创建反向代理
前提条件:
- 已经部署好的ASG
- 已经部署好的后端服务
操作步骤:
- 登录ASG管理页面,点击“创建路由”按钮。
- 填写路由信息,包括路由名称、代理url前缀等信息,点击下一步
- 填写后端服务信息,包括节点地址和端口、负载均衡算法等信息,点击下一步
- 插件配置这块点击下一步
如: 配置代理url前缀为/api/apusic,后端服务地址为http://172.21.32.42:8000,其配置过程如下:
1、点击创建路由

2、填写路由信息,并点击下一步

3、填写后端服务信息,并点击下一步

4、插件跳过,点击下一步

5、预览点击提交即可

6、使用ASG代理入口测试访问后端
注:当前演示环境的ASG代理的入口修改为8080端口。
# 产品功能介绍
# 路由
路由(Route)是请求的入口点,它定义了客户端请求与服务之间的匹配规则。路由可以与服务(Service)、上游(Upstream)关联,一个服务可对应一组路由,一个路由可以对应一个上游对象(一组后端服务节点),因此,每个匹配到路由的请求将被网关代理到路由绑定的上游服务中。
路由列表如下图所示:

# 创建路由
可通过两种方式创建路由:
- 界面创建
- 使用编辑器创建
分为四个步骤:
- 定义API请求
- 定义API后端服务
- 插件配置
- 预览




# 界面创建路由
以界面创建为例介绍路由的创建过程
设置路由信息:
填写路由基本信息

- 名称:必输项,自定义路由名称,不允许配置重名路由
- 发布:默认开启,开启状态下路由才会生效
填写请求信息:

- 域名:asg服务器域名
- 路径:必输项,默认所有路径/*,可以是路由的详细路径或者泛路径(以/*结尾)
- 客户端地址:允许访问的客户端IP或IP网段
- 优先级:必输项,默认为0,路由配置相同时取优先级高的路由
- 请求改写:对客户端的请求的协议、路径、域名、请求头进行改写
# 定义API后端服务
配置上游信息:

- 选择上游服务:选择已经添加的上游服务时不可编辑上游,手动填写才能编辑上游服务
- 负载均衡算法:必选项,默认带权轮询
- 上游类型:必选项,默认为节点
- 目标节点:必输项,输入目标服务器主机名或者IP地址、端口
- 权重:必输项,输入上游服务器的权重,权重高的节点承受的流量多,权重配置为0时熔断该节点
- 协议类型:必选项,选择客户端请求的类型
- 超时时间:必输项,默认超时时间为6S
# 插件配置
插件配置根据自定义可选择普通方式或插件编排方式选择插件:

启用插件:

# 预览

# 查看路由
点击路由列表右侧【查看】操作按钮,通过JSON格式或YAML格式查看创建的路由详细信息

示例Json数据:
{
"uri":"/\*",
"name":"testASG",
"methods":[
"GET",
"POST",
"PUT",
"DELETE",
"PATCH",
"HEAD",
"OPTIONS",
"CONNECT",
"TRACE"
],
"upstream":{
"nodes":{
"172.18.100.159":1
},
"timeout":{
"connect":6,
"send":6,
"read":6
},
"type":"roundrobin",
"scheme":"http",
"pass_host":"pass",
"keepalive_pool":{
"idle_timeout":60,
"requests":1000,
"size":320
}
},
"status":1
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 路由操作
在路由列表中实现对路由的发布、下线、编辑、查看、删除、复制

- 编辑:编辑路由基本信息或上游服务节点信息,动态生效无需重启
- 查看:通过JSON格式或YUML格式查看路由
- 复制:复制路由所有信息,名称不可与原名称相同
- 下线\发布:路由下线和发布动态生效,无需重启ASG
- 删除:删除路由信息不保存
# 上游
上游列表包含了已创建的上游服务(即后端服务),可以对上游服务的多个目标节点进行负载均衡和健康检查。
# 上游列表

# 创建上游
可以通过两种方式进行上游的创建:
- 界面创建
- 使用编辑器创建
下图是使用界面创建:

下图是使用编辑器创建:

# 服务
服务由路由中公共的插件配置、上游目标信息组合而成。服务与路由、上游关联,一个服务可对应一组上游节点、可被多条路由绑定。
服务列表

创建服务
可通过两种方式创建服务。
- 界面创建
- 使用编辑器创建



# 插件
已启用插件的列表
- 内置插件:
- 认证:keycloak鉴权、openID连接
- 通用:批量请求、回显、重定向、前后附加函数等
- 日志:错误日志、HTTP日志、kafka日志、阿里云日志、TCP日志等
- 监控:节点状态、prometheus、skywalking等
- 协议转换:dubbo代理
- 安全:启用CORS、ip黑白名单、referer限制、请求拦截等
- 流量控制:API熔断、限制并发连接、限制请求次数等
- 报文转换:故障注入、gPRC转码、响应信息重写等
- 自定义插件:
可以根据实际业务编写插件,插件允许在常见阶段进行挂载生效,例如init, rewrite,access,balancer,header filter,body filter 和 log 阶段。
插件列表

启用插件
在配置列表中可以选择插件进行启用

# 证书
证书被网关用于处理加密请求,它将与 SNI 关联,并与路由中主机名绑定。
** 证书列表**

创建证书
- 输入证书

- 上传证书

- 预览

# 系统信息
显示控制台以及ASG节点的信息。
信息页

# 密码与安全
密码修改说明:为了保证系统的安全,要求密码长度需6位及以上,并且必须包含特殊字符。
管控台密码修改
点击右上角头像,选择修改密码,输入登录用户名和新密码即可。

忘记密码
若忘记密码,则需要通过修改配置文件中的密码设置项进行修改,修改步骤为:
- 用编辑器打开配置文件:
安装目录/asg-dashboard/conf/conf.yaml - 跳转至57行,修改password为新密码项,如下图示:

# 产品使用介绍
# 产品端口修改
若系统已有服务占用了80、443、9000端口,会导致alb启动失败,可以通过配置修改端口。
# 修改http或https的端口
修改配置文件:
安装目录/asg-standard/conf/config.yaml修改配置文件内容:
soft:ASG/2.0.1 alb: admin_key: - name: "admin" key: edd1c9f034335f136f87ad84b625c8f1 # using fixed API token has security risk, please update it when you deploy to production environment role: admin node_listen: 80 # http默认的网关访问入口 ssl: listen_port: 443 # https访问网关的入口1
2
3
4
5
6
7
8
9
10如上,修改对应的
node_listen、ssl.listen_port端口即可。重新启动ASG:
./bin/start-asg.sh
# 修改WEB管理控制台端口
修改配置文件:
安装目录/asg-dashboard/conf/config.yaml修改配置文件内容:
conf: listen: host: 0.0.0.0 port: 9000 # WEB管理控制台默认端口1
2
3
4如上,修改对应的
listen.port端口即可。重新启动ASG:
./bin/start-asg.sh
# ASG迁移nginx配置文件
ASG支持兼容nginx的server、upstream等配置内容,可以直接把对应匹配提取问单独的配置,并开启asg导入nginx配置,进行导入即可。
# 开启支持导入nginx的配置文件
修改配置文件,支持导入nginx配置文件
nginx_config_include: nginx_config_include_enable: true # 开启nginx配置导入 nginx_config_include_path: "安装目录/asg-standard/conf/nginx_conf/*.conf" #待导入的nginx配置文件存放文件夹1
2
3创建
安装目录/asg-standard/conf/nginx_conf目录,mkdir conf/nginx_conf
# 导入nginx配置文件
根据上面创建的nginx配置存放文件夹:安装目录/asg-standard/conf/nginx_conf/,把nginx的upstream或者server块内容的配置文件即可。如下配置
nginx_test.conf
server {
listen 4545; #监听端口
server_name 127.0.0.1; #监听地址
location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
#root path; #根目录
#index vv.txt; #设置默认页
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
}
}
2
3
4
5
6
7
8
9
10
11
注:
- 配置文件仅支持server和upstream块内容。
# 国密支持
国密算法仅可通过Nginx配置文件实现,具体操作方法为:
- 开启ASG支持Nginx Server配置块导入
- 编写国密证书的Server内容文件并放入配置文件夹
- 重启ASG
# 开启ASG支持Nginx Server配置块导入
- 进入ASG安装目录,编辑
安装目录/asg-standard/conf/config.yaml文件,设置nginx_conf_include_enable 修改为true,并确定nginx配置文件目录
nginx_config_include:
nginx_config_include_enable: true #开启nginx配置导入
nginx_config_include_path: "/opt/ASG-V2.0.2-SE-arm64/asg-standard/conf/nginx_conf/*.conf" #nginx配置导入的位置
2
3
- 创建配置导入目录:
mkdir 安装目录/asg-standard/conf/nginx_conf
# 编写国密证书的Server内容文件并放入配置文件夹
编写国密双证书的server.conf文件,并放入安装目录/asg-standard/conf/nginx_conf,如下图为样例:

导入完后,重启ASG生效
# 非root启动ASG
ASG软件支持通过修改程序权限,使得在普通用户下可以监听80端口。ASG软件提供两种方式实现非root用户监听80端口,一种是使用ASG自带脚本,一种是使用shell命令。
# 使用ASG自带脚本开启非root监听80端口
- 切花到root用户。
- 切换到ASG安装目录下的utils/normal-user目录
- 执行
./set-normal-user-listen80.sh - 使用vim修改文件:
vim 安装目录/asg-standard/conf/config-default.yaml
- 执行完后,切换到普通用户启动ASG即可。
# 使用shell命令
- 在普通用户下,切换到ASG安装目录。
- 使用ASG软件自带工具patchelf添加动态连裤地址:
./alb-deps/bin/patchelf --add-rpath ./alb-deps/luajit/lib ./alb-deps/asg-core/sbin/alb - 切换到root用户,并切换到ASG安装目录。
- 授权监听80端口:
setcap cap_net_bind_service=+eip ./alb-deps/alb-core/sbin/alb - 切换回普通用户
- 使用vim修改文件:
vim 安装目录/asg-standard/conf/config-default.yaml
- 执行完后后,启动ASG即可。
# ASG开机自启动和系统服务
ASG默认不开启开机自动启动,如需开机启动,切换到安装目录,执行
cd /opt/ASG-V2.0.2-SE-amd64 # 进入安装目录
bash utils/systemd/enable_startup.sh # 自动设置开机启动项。
2
上述命令脚本执行后,可以通过systemctl start alb.service启动ASG,或者通过systemctl stop alb.service停止ASG。
# Prometheus监控
ASG软件提供Prometheus监控功能,默认不启用,如需启用,请切换到utils/exporter目录,执行:./start-exporter.sh,启动ASG的exporter。
# 启动说明
启动ASG的exporter必须要在alb配置文件中开启stub_status功能,如下:
server {
listen 8080; # node_status的端口
location /node_status { # 必须要使用node_status
stub_status on; # 开启stub_status
access_log off;
allow 127.0.0.1;
}
}
2
3
4
5
6
7
8
在执行start-exporter脚本后,要求输入
- node_status对应的server监听端口,默认为8080.
- exporter监听端口,默认为9113
如下为输入过程:
root@root:/utils/expoter$ ./start-exporter.sh
input alb server listening port(请输入node_status监听端口):
alb server listening port(ASG node_status端口): 8080
input exporter listening port(请输入监听端口):
exporter listening port is 9113
exporter are running now!(exporter启动成功)
2
3
4
5
6
# Prometheus监控数据获取
通过start-exporter成功后,可以通过浏览器或者prometheus访问:
http://IP:9113/metrics获取监控数据。
注: 如果上面修改了exporter的监听端口,上面url中的9113也一并修改。
# ASG主备搭建
ASG支持原生高可用和keepalived两种高可用方式,搭建高可用集群,当集群节点发生故障时,自动将流量切换至备节点。
# 前提准备
- 两台服务器,一台作为主节点(Master),一台作为备用节点(Backup)。
- 在两台服务器上部署ASG服务。(安装过程忽略)
- 在两台服务器的局域网中,准备一个未使用的IP地址作为虚拟IP(VIP)。
- 确保两台服务器之间的网络通信正常。
- 确保两台服务器上的防火墙允许 keepalived 和ASG 服务的通信。
- 安装并配置 keepalived。
- 验证VIP漂移。
下面以两台服务器(172.21.32.118、172.21.32.119)为例,选择VIP为172.21.32.198。
如上图,通过搭建两套ASG,并配置VIP,实现客户端通过VIP访问ASG,当VIP指向的ASG节点宕机的时候,VIP自动切换至备节点。
# 原生高可用
ASG自带高可用组件,可一键部署和启动ASG。
# 查看物理网卡名称
- 在主节点和备用节点上执行以下命令,查看当前机器IP的物理网卡名称:
ip addr show
- 记录物理网卡名称,例如:eth0。
# 配置asg-ha
主节点
- 角色配置为: master
- 修改VIP地址
- 修改网卡名称
备节点
- 角色配置为: backup
- 修改VIP地址
- 修改网卡名称
# 主节点
- 切换至utils/asg-ha目录,编辑config.yaml文件,如下样例
keepalived:
# 虚拟路由ID
vroute_id: 239
# 虚拟IP绑定网卡名称
interface: eth0
# 虚拟IP地址
vip: 172.21.32.198
# 协议类型, 可选值为ipv4和ipv6
protocol: ipv4
# 是否抢占模式
#如果启用了抢占模式(Preempt Mode),当一个更高优先级的路由器加入到 VRRP 组中时,它可以取代当前的活动路由器成为新的活动路由器。
#如果未启用抢占模式,则即使有更高优先级的路由器加入,当前的活动路由器也不会被取代
preempt: true
# 发送消息间隔(毫秒)
msg-send-interval: 800
# 优先级, 0-255
priority: 100
# 角色,可选值为master和backup
role: master
asg-checker:
# 检查alb的状态时间间隔(毫秒)
check-interval: 1000
# 重试次数
retry-count: 3
# 重试间隔(毫秒)
retry-interval: 2000
# 当前alb状态检查url,用于检查alb是否健康
health-url: http://localhost:8080/node_status
# 自定义健康检查返回的url状态码
health-codes:
- 200
- 404
# 当节点故障时候,是否尝试重启alb(默认为false)
restart-asg-on-failure: false
asg-ha:
# 日志文件路径
log-file: asg-ha.log
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# 备节点
keepalived:
# 虚拟路由ID
vroute_id: 239
# 虚拟IP绑定网卡名称
interface: eth0
# 虚拟IP地址
vip: 172.21.32.198
# 协议类型, 可选值为ipv4和ipv6
protocol: ipv4
# 是否抢占模式
#如果启用了抢占模式(Preempt Mode),当一个更高优先级的路由器加入到 VRRP 组中时,它可以取代当前的活动路由器成为新的活动路由器。
#如果未启用抢占模式,则即使有更高优先级的路由器加入,当前的活动路由器也不会被取代
preempt: true
# 发送消息间隔(毫秒)
msg-send-interval: 800
# 优先级, 0-255
priority: 100
# 角色,可选值为master和backup
role: backup
asg-checker:
# 检查alb的状态时间间隔(毫秒)
check-interval: 1000
# 重试次数
retry-count: 3
# 重试间隔(毫秒)
retry-interval: 2000
# 当前alb状态检查url,用于检查alb是否健康
health-url: http://localhost:8080/node_status
# 自定义健康检查返回的url状态码
health-codes:
- 200
- 404
# 当节点故障时候,是否尝试重启alb(默认为false)
restart-asg-on-failure: false
asg-ha:
# 日志文件路径
log-file: asg-ha.log
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# 注册系统服务并启动系统服务
主备节点均需要执行以下操作:
- 切换到sys-service目录
- 执行:
./setup-asg-ha-service.sh自动注册系统服务 - 启动:
systemctl start alb_ha.service
# 验证VIP是否自动飘逸测试步骤
- 使用VIP 172.21.32.198 访问ASG正常。
- 停掉主节点所在的ASG,继续使用VIP访问ASG,验证是否正常。
# 其他配置说明:
- 自定义健康检查URL: 修改配置文件中的health-url: http://localhost:8080/node_status
- 自定义URL的健康HTTP状态码: 修改配置中的:health-codes: 200, 404
- 配置asg-ha日志文件路径: 修改配置文件中的log-file: asg-ha.log
# 使用keepalived实现高可用
# 操作步骤汇总
- 修改ASG启动⽅式和数据库连接
- 配置keepalived软件
- 启动ASG、和keepalived
# 修改A节点启动方式脚本
切换到安装⽬录 /opt/ASG-V2.0.2-SE-arm64,编辑start.sh脚本,如下所⽰,修改150⾏为下⾯注释所示
上⾯的IP地址:172.21.32.118需要改为主节点的IP地址。
# 修改AB两个节点的数据库配置
- 修改alb连接数据库的配置
vim 安装目录/asg-dashboard/conf/config.yaml,在⽂件结尾加⼊下⾯三⾏:
- 修改alb管控台的数据库配置
vim 安装目录/asg-dashboard/conf/conf.yaml, 修改第10⾏的配置:为节点A的IP地址,如下所示
修改完成后,执行stop.sh然后start.sh启动两个alb节点
# 主节点配置keepalived(A节点)
创建/etc/keepalived/keepalived.conf⽂件,在主节点A节点添加下⾯内容(附件⽂件keepalivedmaster.conf)
- interface enp0s31f6这个网卡enp0s31f6修改为当前节点物理网卡名称。
- 在virtual_ipaddrss中,把虚拟IP填上。
! Configuration File for keepalived
global_defs {
router_id alb
}
vrrp_script chk_http_port {
script "/etc/keepalived/checkalb.sh"
interval 2 #(检测脚本执⾏的间隔)
weight 2
}
vrrp_instance VI_1 {
# state BACKUP
state MASTER
# 备份服务器上将 MASTER 改为 BACKUP
interface enp0s31f6
virtual_router_id 51
# 主、备机的 virtual_router_id 必须相同
priority 100
# 主、备机取不同的优先级,主机值较⼤,备份机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.21.32.198 # 请根据需要,修改这个虚拟IP地址
}
track_script {
chk_http_port
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 主节点(A节点)创建健康检测脚本
创建健康检查脚本/etc/keepalived/checkalb.sh,并添加下⾯内容
#!/bin/bash
alb_count=$(ps -ef|grep "alb: main process" | grep -v grep |wc -l)
#1.判断ASG是否存活,如果不存活停⽌keepalived
if [ $alb_count -eq 0 ];then
sleep 3
#2.等待3秒后再次获取⼀次alb状态
alb_count=$(ps -ef|grep "alb: main process" | grep -v grep |wc -l)
#3.再次进⾏判断, 如alb还不存活则停⽌Keepalived,让地址进⾏漂移,并退出脚本
if [ $alb_count -eq 0 ];then
echo "alb is down"
exit 1
fi
fi
2
3
4
5
6
7
8
9
10
11
12
13
# 从节点B配置keepavlied(B节点)
创建/etc/keepalived/keepalived.conf ⽂件,在从节点B节点添加下⾯内容(附件⽂件keepalived-backup.conf)
- 注: interface enp0s31f6这个网卡enp0s31f6修改为当前节点物理网卡名称。
! Configuration File for keepalived
global_defs {
router_id alb
}
vrrp_script chk_http_port {
script "/etc/keepalived/checkalb.sh"
interval 2 #(检测脚本执⾏的间隔)
weight 2
}
vrrp_instance VI_1 {
state BACKUP
# state MASTER
# 备份服务器上将 MASTER 改为 BACKUP
interface enp0s31f6
virtual_router_id 51
# 主、备机的 virtual_router_id 必须相同
priority 90
# 主、备机取不同的优先级,主机值较⼤,备份机值较小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.21.32.198 # 请根据需要,修改这个虚拟IP地址
}
track_script {
chk_http_port
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 备节点创建健康检测脚本
创建健康检查脚本/etc/keepalived/checkalb.sh,并添加下⾯内容
#!/bin/bash
alb_count=$(ps -ef|grep "alb: main process" | grep -v grep |wc -l)
#1.判断ASG是否存活,如果不存活停⽌keepalived
if [ $alb_count -eq 0 ];then
sleep 3
#2.等待3秒后再次获取⼀次alb状态
alb_count=$(ps -ef|grep "alb: main process" | grep -v grep |wc -l)
#3.再次进⾏判断, 如alb还不存活则停⽌Keepalived,让地址进⾏漂移,并退出脚本
if [ $alb_count -eq 0 ];then
echo "alb is down"
exit 1
fi
fi
2
3
4
5
6
7
8
9
10
11
12
13
# 启动keepalived
- 在A、B两个节点使用命令启动keepalived: keepalived -f /etc/keepalived/keepalived.conf
- 使用虚拟IP访问ASG的管理控制台和代理地址。
# 常见问题与解决
# 启动错误: ETCD连接失败
当执行start脚本后,出现以下etcd连接失败问题,可以通过修改启动脚本,延时启动alb。

# 问题解决
1、修改启动脚本start.sh,等待etcd启动完成。
如上图所示,在338行插入sleep 15,保存退出后,重启ASG
# 启动错误:DNS is Empty(缺失dns服务器)
所在机器环境无DNS,则需要手动开启内置的DNS配置。
配置文件地址:
安装目录/asg-standard/conf/config.yaml
去掉前面的注释,即可开启DNS。
注意dns_resolver对齐到上面的enable_control
alb:
enable_control: false #开启会监听9090端口。
# 如果出现 local DNS is empty,那么把下面三行注释去掉即可,注意对齐到上面的enable_control。
dns_resolver:
- 8.8.8.8
- 114.114.114.114
php:
php_enable: false
2
3
4
5
6
7
8
9
# 启动错误: getgrnam("nobody") failed
root@user-PC:/opt/ASG-V2.0.2-SE-arm64# ./bin/start-asg.sh
alb: [emerg] : getgrnam("nobody") failed
./bin/start-asg.sh: line 29: 11777 Killed nohup ./manager-api >> dashboard.log 2>&1 (wd: /opt/ASG-V2.0.2-SE-arm64/asg-dashboard)
StartASG failed, please check ASG-stardard-2.0/logs/error.log
2
3
4
出现上面错误,是ASG进程的启动用户授权失败导致。
# 问题解决
修改alb配置文件:安装目录/asg-standard/conf/config-default.yaml的第115行,将user: nobody改为user: root
nginx_config
user: root # 取消注释,并且修改为root
2
修改完成后,重启ASG即可。