目录

1 配置说明

2 环境说明

3 配置 DMDSC 主库环境

3.1 配置 dmarch.ini

3.2 配置 dm.ini

3.3 备份 DMDSC 库

4 配置单节点备库

5  配置 dm.ini

6 配置 dmmal.ini

7 配置 dmarch.ini

8 配置 dmwatcher.ini

9 配置 dmmonitor.ini

10 配置 dmdcr.ini

11 启动主备库

12 设置 OGUID

13 修改主备库模式

14 启动守护进程

15 启动监视器

配置 DMDSC 主备环境

DMDSC 主备环境搭建和单节点主备环境搭建步骤类似,区别主要在于首先要准备DMDSC 集群环境,DM8 支持单节点和单节点、DMDSC 集群和单节点之间搭建主备环境。

配置说明

DMDSC 集群可以作为主库,也可以作为实时备库、即时备库或者异步备库,一般建议将 DMDSC 集群配置为主库,将单节点配置为备库。如果要将 DMDSC 集群作为备库配置在数据守护系统中,则要将其作为一个整体配置在源库的 dmarch.ini 中,也就是 DMDSC 集群所有节点要配置在同一个归档配置项中,每个节点实例名以“/”分隔开来。
假如 DMDSC 集群有两个节点 GRP1_RT_DSC01 和 GRP1_RT_DSC02,DMDSC 集群要作为备库进行配置,其源库为 A,则要在 A 的 dmarch.ini 文件中增加 DMDSC 集群的归档配置,这里以实时备库为例说明如下:
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RT_DSC01/GRP1_RT_DSC02

如果 DMDSC 集群要作为即时备库或者异步备库来配置,ARCH_DEST 的配置方式和示例中是相同的,ARCH_TYPE 则要分别替换为 TIMELY 或者 ASYNC,中括号内的配置项名称中包含的归档类型也建议修改和 ARCH_TYPE 一致。
而如果异步备库的源库为 DMDSC 集群,则要求 DMDSC 集群中的所有节点都将 INI 参数TIMER_INI 置为 1 并配置 dmtimer.ini。

2 环境说明

准备三台机器 DW_P、DW_S、DW_M,DW_P 和 DW_S 用来部署主备库,DW_M 用来部署确认监视器。其中 DW_P 和 DW_S 配置两块网卡,一块接入内部网络交换模块,一块接入到外部交换机,DW_M 接入内部网络。
         三台机器事先都安装了 DM,安装路径为’/dm’,执行程序保存在’/dm/bin’目录中,数据存放路径为’/dm/data’。
各主备库的实例名建议采用“组名_守护环境_序号”的方式命名,方便按组区分不同实例,注意总长度不能超过 16。本示例中组名为“GRP1”,配置为实时主备,主库 DMDSC集群的两个节点实例名分别命名为“GRP1_RT_DSC01”、“GRP1_RT_DSC02”,备库命名 为“GRP1_RT_01”。

3 配置 DMDSC 主库环境

使用 DMDSC 集群手册《DM8 共享存储集群》搭建好两节点 DMDSC 集群环 ,DMDSC 实例名分别为 GRP1_RT_DSC01、GRP1_RT_DSC02。
注意 !!dmcss 对 dmserver 的自动拉起功能先不要打开,避免影响到配置过程。
搭建完成后,正常退出 DMDSC 集群的两个 dmserver 节点实例,不需要退出 dmcss
和 dmasmsvr。

3.1 配置 dmarch.ini

分别编辑两个 DMDSC 节点的 dmarch.ini 文件,增加本地归档和远程归档,并且设置本地归档共享参数 ARCH_LOCAL_SHARE 为 1。dmarch.ini 文件放在各自 dm.ini 中指定的 CONFIG_PATH 目录下。
!!!注意:若 DMDSC 主库环境搭建时未打开本地归档共享参数 ARCH_LOCAL_SHARE 为1, 而是在后续搭建主备过程中打开该参数,并且本地归档路径发生了变化,需要保证 DMDSC主库本地归档的完整性,例如将本地归档路径发生变化前的归档文件拷至变化后的路径下,否则 DMDSC 主备环境会由于主库归档日志不完整,将备库归档状态置为 INVALID,归档同步失败(dmmonitor 执行 show arch send info EP,系统报错)。
1)配置 GRP1_RT_DSC01 dmarch.ini 文件
ARCH_LOCAL_SHARE = 1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMDATA/DSC/DSC01/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
[ARCHIVE_REMOTE]
ARCH_TYPE = REMOTE
ARCH_DEST = GRP1_RT_DSC02
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
ARCH_INCOMING_PATH = +DMDATA/DSC/DSC02/arch
2)配置 GRP1_RT_DSC02 dmarch.ini 文件
ARCH_LOCAL_SHARE = 1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMDATA/DSC/DSC02/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
[ARCHIVE_REMOTE]
ARCH_TYPE = REMOTE
ARCH_DEST = GRP1_RT_DSC01
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
ARCH_INCOMING_PATH = +DMDATA/DSC/DSC01/arch

3.2 配置 dm.ini

分别编辑两个 DMDSC 节点的 dm.ini 文件,打开归档参数:
ARCH_INI = 1

3.3 备份 DMDSC

重启 DMDSC 集群的两个 dmserver 实例,然后再正常退出。在 DMDSC 集群生成有归档日志的情况下进行脱机备份,以便后续校验日志连续性时使用。
--启动 dmrman
./dmrman use_ap=2 dcr_ini=/dm/data/DSC/conf/dmdcr1.ini--脱机备份 DMDSC 集群
RMAN>BACKUP DATABASE '/dm/data/DSC/DSC01/dm.ini' FULL BACKUPSET
'/dm/data/DSC/DSC01/bak/db_full_bak_for_DSC';

4 配置单节点备库

按照以下步骤准备单节点备库环境:
--初始化备库
./dminit path=/dm/data/EP01/--启动 dmrman
./dmrman use_ap=2--使用 DMDSC 库的备份集还原恢复到单节点备库
RMAN>RESTORE DATABASE '/dm/data/EP01/DAMENG/dm.ini' FROM BACKUPSET
'/dm/data/DSC/DSC01/bak/db_full_bak_for_DSC';RMAN>RECOVER DATABASE '/dm/data/EP01/DAMENG/dm.ini' FROM BACKUPSET
'/dm/data/DSC/DSC01/bak/db_full_bak_for_DSC';RMAN>RECOVER DATABASE '/dm/data/EP01/DAMENG/dm.ini' UPDATE DB_MAGIC;

5  配置 dm.ini

依次配置 DMDSC 主库所有节点和单节点备库的 dm.ini 文件,修改数据守护相关的参数配置。
1)配置 GRP1_RT_DSC01 dm.ini 文件
#实例名,建议使用―组名_守护环境_序号‖的命名方式,总长度不能超过 16
INSTANCE_NAME = GRP1_RT_DSC01
PORT_NUM = 8344     #数据库实例监听端口
DW_INACTIVE_INTERVAL = 60     #接收守护进程消息超时时间
ALTER_MODE_STATUS = 0     #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2     #不允许备库 OFFLINE 表空间
MAL_INI = 1     #打开 MAL 系统
ARCH_INI = 1     #打开归档配置
RLOG_SEND_APPLY_MON = 64     #统计最近 64 次的日志发送信息
2)配置 GRP1_RT_DSC02 dm.ini 文件
INSTANCE_NAME = GRP1_RT_DSC02
PORT_NUM = 8346
DW_INACTIVE_INTERVAL = 60
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1
RLOG_SEND_APPLY_MON = 64
3)配置 GRP1_RT_01 dm.ini 文件
INSTANCE_NAME = GRP1_RT_01
PORT_NUM = 9344
DW_INACTIVE_INTERVAL = 60
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2
MAL_INI = 1
ARCH_INI = 1
RLOG_SEND_APPLY_MON = 64

 6 配置 dmmal.ini

在 DMDSC 集群的 dmmal.ini 文件基础上,增加备库 GRP1_RT_01 的配置项。所有节点实例的dmmal.ini 文件内容是一致的,配置完成后,拷贝到每个节点实例dm.ini 中指定的 CONFIG_PATH 目录下。
MAL_CHECK_INTERVAL = 30 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 链路断开的时间
[MAL_INST0]MAL_INST_NAME = GRP1_RT_DSC01 #实例名,和 dm.ini 中的 INSTANCE_NAME 一致MAL_HOST = 192.168.0.141 #MAL 系统监听 TCP 连接的 IP 地址MAL_PORT = 8338 #MAL 系统监听 TCP 连接的端口MAL_INST_HOST = 192.168.1.131 #实例的对外服务 IP 地址MAL_INST_PORT = 8344 #实例的对外服务端口,和 dm.ini 中的 PORT_NUM 一致MAL_DW_PORT = 3567 #实例本地的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 4567 #实例监听守护进程 TCP 连接的端口
[MAL_INST1]MAL_INST_NAME = GRP1_RT_DSC02 MAL_HOST = 192.168.0.141MAL_PORT = 8339 MAL_INST_HOST = 192.168.1.131 MAL_INST_PORT = 8346 MAL_DW_PORT = 3568
MAL_INST_DW_PORT = 4568
[MAL_INST2]MAL_INST_NAME = GRP1_RT_01MAL_HOST = 192.168.0.142MAL_PORT = 8738MAL_INST_HOST = 192.168.1.132MAL_INST_PORT = 9344MAL_DW_PORT = 3569
MAL_INST_DW_PORT = 4569

7 配置 dmarch.ini

再次编辑各个节点的 dmarch.ini 文件,增加实时归档配置。
1)修改 GRP1_RT_DSC01 dmarch.ini 文件
ARCH_LOCAL_SHARE = 1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMDATA/DSC/DSC01/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0 [ARCHIVE_REMOTE]
ARCH_TYPE = REMOTE
ARCH_DEST = GRP1_RT_DSC02
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
ARCH_INCOMING_PATH = +DMDATA/DSC/DSC02/arch[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RT_01
2)修改 GRP1_RT_DSC02 dmarch.ini 文件
ARCH_LOCAL_SHARE = 1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = +DMDATA/DSC/DSC02/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0[ARCHIVE_REMOTE]
ARCH_TYPE = REMOTE
ARCH_DEST = GRP1_RT_DSC01
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
ARCH_INCOMING_PATH = +DMDATA/DSC/DSC01/arch[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RT_01
3)修改 GRP1_RT_01 dmarch.ini 文件
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm/data/EP01/DAMENG/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME
ARCH_DEST = GRP1_RT_DSC01/GRP1_RT_DSC02

8 配置 dmwatcher.ini

依次配置每个节点实例的 dmwatcher.ini 文件,放到各自 dm.ini 中指定的CONFIG_PATH 目录下。
另外要注意,DMDSC 集群各节点实例的自动拉起是由各自本地的 dmcss 执行的,不是由守护进程执行,如果要打开 DMDSC 集群的自动拉起,需要再去配置 dmdcr.ini 中的自动拉起参数,为避免 dmcss 在所有配置步骤完成之前提前将 dmserver 自动拉起,这里先不修改 dmdcr.ini 配置,放到后面步骤中修改。
1)配置 GRP1_RT_DSC01 dmwatcher.ini 文件
[GRP1]DW_TYPE = GLOBAL #全局守护类型DW_MODE = MANUAL #手动切换模式DW_ERROR_TIME = 60 #远程守护进程故障认定时间INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间INST_ERROR_TIME = 35 #本地实例故障认定时间INST_INI = /dm/data/DSC/DSC01/dm.ini#dm.ini 配置文件路径DCR_INI = /dm/data/DSC/conf/dmdcr1.ini #dmdcr.ini 配置文件路径INST_OGUID = 1000 #守护系统唯一 OGUID 值INST_STARTUP_CMD = /dm/bin/dmserver #命令行方式启动INST_AUTO_RESTART = 0 #关闭实例的自动启动功能RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
2)配置 GRP1_RT_DSC02 dmwatcher.ini 文件
[GRP1]DW_TYPE = GLOBALDW_MODE = MANUALDW_ERROR_TIME = 60INST_RECOVER_TIME = 60INST_ERROR_TIME = 35INST_INI = /dm/data/DSC/DSC02/dm.iniDCR_INI = /dm/data/DSC/conf/dmdcr2.iniINST_OGUID = 1000INST_STARTUP_CMD = /dm/bin/dmserverINST_AUTO_RESTART = 0RLOG_SEND_THRESHOLD = 0RLOG_APPLY_THRESHOLD = 0
3)配置 GRP1_RT_01 dmwatcher.ini 文件
[GRP1]DW_TYPE = GLOBALDW_MODE = MANUALDW_ERROR_TIME = 60INST_RECOVER_TIME = 60INST_ERROR_TIME = 35INST_INI = /dm/data/EP01/dm.iniINST_OGUID = 1000INST_STARTUP_CMD = /dm/bin/dmserverINST_AUTO_RESTART = 0 #对单节点,如果需要打开自动拉起功能,将此配置修改为 1 即可RLOG_SEND_THRESHOLD = 0RLOG_APPLY_THRESHOLD = 0

9 配置 dmmonitor.ini

编辑 dmmonitor.ini 文件,放在/dm/data 目录下:
MON_LOG_PATH = /dm/data/log
MON_LOG_INTERVAL = 60
MON_LOG_FILE_SIZE = 64
MON_LOG_SPACE_LIMIT = 0
MON_DW_CONFIRM = 0
[GRP1]
MON_INST_OGUID = 1000
MON_DW_IP = 192.168.0.141:3567/192.168.0.141:3568
MON_DW_IP = 192.168.0.142:3569

10 配置 dmdcr.ini

        DMDSC 集群中 dmserver 的自动拉起是由 dmcss 执行的,如果不需要打开 dmcss 的自动拉起功能,则可以跳过此部分。否则需要修改 dmdcr.ini 中的自动拉起配置参数,此参数修改完后,需要重启 dmcss 才可以生效,为了避免重启 dmcss 引发 dmasmsvr 被强制关闭,这里先将 dmcss和 dmasmsvr 都正常退出。
另外要注意,本示例中是用命令行方式启动,启动参数中指定以 Mount 方式拉起dmserver,如果是用服务方式启动,服务脚本中也一定要指定以 Mount 方式拉起dmserver。
1. 打开 GRP1_RT_DSC01 的自动拉起参数
修改对应 dmcss 的 dmdcr.ini 文件,打开自动拉起参数。
#打开 DB 重启参数,命令行方式启动
DMDCR_DB_RESTART_INTERVAL = 60
DMDCR_DB_STARTUP_CMD = /dm/bin/dmserver path=/dm/data/DSC/DSC01/dm.ini
dcr_ini=/dm/data/DSC/conf/dmdcr1.ini mount
2. 打开 GRP1_RT_DSC02 的自动拉起参数
修改对应 dmcss 的 dmdcr.ini 文件,打开自动拉起参数。
#打开 DB 重启参数,命令行方式启动
DMDCR_DB_RESTART_INTERVAL = 60
DMDCR_DB_STARTUP_CMD = /dm/bin/dmserver path=/dm/data/DSC/DSC02/dm.ini
dcr_ini=/dm/data/DSC/conf/dmdcr2.ini mount
3. 重启 dmcss dmasmsvr
./dmcss dcr_ini=/dm/data/DSC/conf/dmdcr1.ini
./dmcss dcr_ini=/dm/data/DSC/conf/dmdcr2.ini
./dmasmsvr dcr_ini=/dm/data/DSC/conf/dmdcr1.ini
./dmasmsvr dcr_ini=/dm/data/DSC/conf/dmdcr2.ini

11 启动主备库

注意实例都要使用 Mount 方式启动。
1. 启动 DMDSC 集群的两个 dmserver 实例
        如果 dmcss 打开有自动拉起功能,也可以等待 dmcss 将本地的 dmserver 实例自动拉起(要保证以 Mount 方式拉起)。
手动启动命令如下:
./dmserver /dm/data/DSC/DSC01/dm.ini DCR_INI=/dm/data/DSC/conf/dmdcr1.ini mount
./dmserver /dm/data/DSC/DSC02/dm.ini DCR_INI=/dm/data/DSC/conf/dmdcr2.ini mount
2. 启动单节点备库
./dmserver /dm/data/EP01/dm.ini mount

12 设置 OGUID

启动命令行工具 DIsql,连接 DMDSC 集群中的任意一个节点,设置 DMDSC 主库的OGUID 值。
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);SP_SET_OGUID(1000);SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
DIsql 连接单节点备库,设置备库 OGUID。
SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);SP_SET_OGUID(1000);SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

13 修改主备库模式

启动命令行工具 DIsql,连接 DMDSC 集群中的任意一个节点,修改 DMDSC 库为 Primary 模式。
ALTER DATABASE PRIMARY;
DIsql 连接单节点备库,修改备库为 Standby 模式。
ALTER DATABASE STANDBY;

14 启动守护进程

启动 DMDSC 主库的所有守护进程:
./dmwatcher /dm/data/DSC/DSC01/dmwatcher.ini
./dmwatcher /dm/data/DSC/DSC02/dmwatcher.ini
启动备库的守护进程:
./dmwatcher /dm/data/EP01/dmwatcher.ini

15 启动监视器

启动数据守护监视器:
./dmmonitor path=/dm/data/dmmonitor.ini
监视器提供一系列命令,支持当前守护系统状态查看以及故障处理,可输入 help 命令,查看各种命令使用说明,结合实际情况选择使用。
另外,DMDSC 集群也有自己的监视器工具,需要时也可以启动:
./dmcssm ini_path=/dm/data/DSC/conf/dmcssm.ini
至此 DMDSC 集群的实时数据守护系统搭建完毕,在搭建步骤和各项配置都正确的情况下,在监视器上执行 show 命令,可以监控到所有实例都处于 Open 状态,所有守护进程也都处于 Open 状态,即为正常运行状态。
更多详细信息请参考达梦数据库官方社区:https://eco.dameng.com

达梦数据库DSC+DW集群搭建相关推荐

  1. 达梦数据库数据守护集群搭建(命令行方式)

    文章目录 达梦数据守护集群介绍 一.前提 二.环境准备 1.数据守护集群搭建 2.配置过程 达梦数据守护集群介绍 达梦数据守护集群软件(DM Data Watch)是一种集成化的高可靠性解决方案,该方 ...

  2. 达梦数据库数据守护集群搭建

    目录 数据守护 集群搭建 备份还原 dm.ini文件修改 配置dmmal.ini文件 配置dmarch.ini归档文件 配置dmwatcher.ini文件 监视器文件配置 mount启动数据库,设置o ...

  3. 【与达梦同行】达梦数据库主备集群搭建

    达梦数据库主备集群----高性能模式-搭建 文章连接:https://eco.dameng.com/community/post/20221213145437YQ30VJ0HDLCFUV2UMW 环境 ...

  4. 国产数据库之达梦数据库 - DM7 MPP集群安装配置

    武汉达梦数据库作为国产数据库较有代表性的企业,在数据库研发方面投入了大量的精力,其自主研发的达梦数据库DM7,除了具有单机版可与Oracle相媲美的能力外,同时也研发了一款无共享MPP架构的数据库软件 ...

  5. 【达梦数据库】DM 集群简介

    文章目录 前言 一.数据守护 (Data Watch) 1.1 概念介绍 1.2 实现原理 1.3 组成构件 1.4 配置文件 1.5 系统特性 1.6 术语定义 1.7 解决方案 二.实时主备集群 ...

  6. 达梦数据库DSC集群的搭建(DM8+CentOS7.7+dmcss+dmasm)

    达梦数据库DSC集群的搭建DM8+CentOS7.7+dmcss+dmasm 1 环境准备 2 安装DM 软件 3 共享存储环境准备(虚拟化环境配置注意) 3.1 规划6个共享磁盘如下: 3.2 VM ...

  7. 达梦数据库DSC集群安装文档

    达梦数据库DSC集群安装文档 一. DSC安装准备工作 1 1.1. 创建安装用户 2 1.2. 配置udev存储 2 二. DMDSC 搭建 8 三. 搭建DW容灾架构 39 修改dm.ini,数据 ...

  8. 达梦主备守护集群原理详解

    达梦主备集群顾名思义就是一主一备(也可以一主多备)是一种集成化的高可靠性解决方案,同时满足用户对数据安全性和高可用性的要求.解决由于硬件故障.自然灾害等原因导致的数据库服务长时间中断问题,满足用户不间 ...

  9. 达梦数据库主备集群确认监视器测试

    目录 1.测试说明 2.测试项目 3.测试结论 1.测试说明 (1) 本次测试环境 主机名 服务ip 心跳ip 数据库名 实例名 dmdb01 主 192.168.226.190 192.168.22 ...

最新文章

  1. windows下编译pcl-master源码(带GPU)
  2. 华为自研搜索引擎曝光:「花瓣」虽小,但要替代谷歌
  3. 区分 JVM 内存结构、 Java 内存模型 以及 Java 对象模型 三个概念
  4. Linux之ln命令
  5. HighNewTech:2019.08.08华为发布—面向2025十大趋势
  6. java求多项式回归_多项式回归(Polynomial Regression)(附代码)
  7. exchange服务器维护模式命令,Exchange服务器系列课程之七--维护邮件服务器(二)
  8. Spring boot Mybatis 整合(注解版)
  9. base64 转文件_PHP伪协议与文件包含
  10. redis单机安装并配置服务脚本启动
  11. JAVA蓝桥杯:杨辉三角形
  12. 【整理】3dsMax中毒了怎么办
  13. 借助百度识图爬取数据集
  14. 双管道(CreatePipe)与cmd.exe进程间通信的有关问题 完美解决
  15. matconvnet安装编译教程
  16. 爬虫国际统计局省市区
  17. python去马赛克
  18. pip 安装库出错:Defaulting to user installation because normal site-packages is not writeable
  19. 浪潮4U服务器 raid5 直通(JBOD)
  20. 数字图像处理:频域滤波-高低通滤波

热门文章

  1. echarts堆叠、渐变、圆柱、底部发光柱状图
  2. JavaScript学习笔记(1)--面向半新不新的新手
  3. realloc函数的使用
  4. 数字藏品与NFT到底有何区别?
  5. 【ACWing】713. 区间 2
  6. 专访第一代车间程序员:ET工业大脑数学博士夏分
  7. vue 是什么?webpack 是什么?
  8. 微信小程序云开发-订阅消息下发系统
  9. android广告拦截原理,android扫描带有广告应用原理
  10. 多少年后,每年招生人数达到或超过10000人