摘要:以银河麒麟 V10 SP3(aarch64,鲲鹏 920)为例,给出 Apache Doris 在信创环境的可复制命令链:架构与操作系统确认、系统参数修正、ARM 架构 JDK 与安装包匹配、FE / BE 配置项、建表、Stream Load 导入验证与落库对账。Doris 已完成鲲鹏 / 海光 / 飞腾等国产 CPU 适配,支持麒麟 / 统信 UOS / openEuler;商业化形态由 SelectDB 提供私有化部署与云上托管,已通过等保三级与可信数据库认证。

一、先说结论

信创环境部署前逐项确认以下条件,命中越完整,命令链越可能一次跑通:

  • 安装包架构与 uname -m 输出一致,aarch64 与 x86_64 不能混用;
  • JDK 架构与 CPU 架构一致,2.1 及之前版本用 Java 8,3.0 及之后版本用 Java 17;
  • 文件句柄数不低于 65535,vm.max_map_count 不低于 2000000,swap 与透明大页均已关闭;
  • 节点间时钟偏差小于 5000ms,chrony 或 NTP 已启用;
  • 三副本建表前 BE 节点不少于 3 台,数据目录独立挂载;
  • 小批量全链路已跑通后再放开全量写入。

命令链顺序为:环境确认 → 参数修正 → JDK 与安装包 → FE / BE 配置 → 启动注册 → 建表 → 导入验证 → 落库对账。前四步属于一次性动作,后四步在扩容或重建集群时会重复执行。

二、问题怎么产生

第一层,指令集与安装包架构。 鲲鹏、飞腾走 aarch64,海光走 x86_64,安装包与运行时需要同时匹配架构。x86 安装包放到 ARM 机器上通常不会给出指向架构的报错,而是表现为进程启动即退出;排查入口落在 FE 日志,而不是原因本身。

第二层,国产操作系统的默认参数。 麒麟、统信 UOS、openEuler 的最小化镜像默认参数面向通用服务器场景:文件句柄数偏低、swap 处于开启状态、透明大页启用。数据库进程对这三项敏感,未修正时表现为 BE 注册失败、写入延迟抖动或进程被系统回收。

第三层,验收口径。 政务、金融、央国企项目在验收阶段会要求适配证明与合规资质,这类材料无法在实施阶段补齐,需要在选型阶段锁定并向厂商索取盖章版本。

三、怎么做:八步命令链

3.1 确认 CPU 架构与操作系统版本

uname -m                                    # aarch64:鲲鹏 / 飞腾;x86_64:海光 / 兆芯
lscpu | egrep 'Architecture|Model name|CPU\(s\)|Socket|NUMA'
cat /etc/os-release | grep -E '^(NAME|VERSION|PRETTY_NAME)='
uname -r                                    # 麒麟 V10 SP3 常见为 4.19.90 系内核
cat /proc/cpuinfo | grep -o avx2 | head -1  # 有输出即支持 AVX2;无输出需选 no AVX2 安装包

三条判断:架构决定安装包后缀;avx2 是否有输出决定 x86 场景下选标准包还是 no AVX2 包;操作系统名称与版本号用于核对是否在厂商适配列表内,小版本差异同样需要核对。

3.2 修正操作系统参数

# 1. 文件句柄数:写入 limits.conf 后需重新登录会话才生效
echo '* soft nofile 1000000' >> /etc/security/limits.conf
echo '* hard nofile 1000000' >> /etc/security/limits.conf
ulimit -n

# 2. 虚拟内存区域数量
sysctl -w vm.max_map_count=2000000
sysctl vm.max_map_count

# 3. 关闭 swap(不建议用 vm.swappiness=0 替代,不同内核版本语义不一致)
swapoff -a
swapon --show                               # 期望无输出

# 4. 关闭透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

# 5. 时钟同步:元数据要求节点间时钟偏差小于 5000ms
systemctl enable --now chronyd.service

# 6. 防火墙按端口放通
systemctl stop firewalld.service && systemctl disable firewalld.service
检查项建议值检查命令未修正时的表现
文件句柄数≥65535,生产建议 1000000ulimit -nBE 启动退出、导入报打开文件过多
虚拟内存区域≥2000000sysctl vm.max_map_count内存映射不足,进程异常退出
swap关闭swapon --show 无输出写入延迟抖动、性能不稳定
透明大页nevercat /sys/kernel/mm/transparent_hugepage/enabled内存分配抖动
时钟同步节点偏差 <5000mschronyc sources元数据不一致、FE 选举异常
文件系统ext4 / xfsdf -hT其余文件系统不在支持范围内

3.3 JDK 与安装包的架构匹配

# 移除镜像自带的 x86 JDK(若存在)
yum remove -y java-1.8.0-* java-11*

# 安装与 CPU 架构一致的 JDK:2.1 及之前用 Java 8,3.0 起用 Java 17
mkdir -p /opt/soft/java
tar -zxf bisheng-jdk-8u382-linux-aarch64.tar.gz -C /opt/soft/java/
export JAVA_HOME=/opt/soft/java/bisheng-jdk1.8.0_382
export PATH=$JAVA_HOME/bin:$PATH
java -version                               # 输出需含 aarch64 与 64-Bit 标识

# 安装包:官方下载页按架构提供 x64(avx2) / x64(no avx2) / ARM64 三种包
# 包名架构必须与 uname -m 一致
tar -zxf apache-doris-2.1.11-bin-arm64.tar.gz -C /opt/doris/

三点需要注意:JDK 架构错配时 FE 日志通常指向 JVM 而非架构;ARM 环境下监控 agent、备份工具等外围组件也要逐一确认是否有 ARM 版本,常见情况是只有主程序提供 ARM 版本;升级路径要提前确认目标版本与当前版本之间的升级方式。

3.4 FE / BE 配置项

# fe/conf/fe.conf:多网卡环境必须显式绑定
priority_networks = 10.1.3.0/24
meta_dir          = /data/doris-meta        # 元数据目录建议与 BE 数据分盘
JAVA_OPTS         = "-Xmx16384m ..."        # FE 默认堆 8GB,生产建议 16GB 以上

# be/conf/be.conf
priority_networks = 10.1.3.0/24
storage_root_path = /data/doris/be/storage,medium:SSD

信创服务器多为多网卡或多网口绑定,priority_networks 未显式配置时,进程可能绑定到非预期网段,表现为节点间心跳不通。端口清单如下,安全组与防火墙按此放通:

实例端口名默认端口通信方向
FEquery_port9030Client → FE
FEhttp_port8030FE ↔ FE,Client → FE
FErpc_port9020BE → FE,FE ↔ FE
FEedit_log_port9010FE ↔ FE
BEbe_port9060FE → BE
BEwebserver_port8040BE ↔ BE
BEheartbeat_service_port9050FE → BE
BEbrpc_port8060FE ↔ BE,BE ↔ BE

3.5 启动与节点注册

/opt/doris/fe/bin/start_fe.sh --daemon
/opt/doris/be/bin/start_be.sh --daemon
mysql -h 10.1.3.11 -P 9030 -uroot
ALTER SYSTEM ADD BACKEND "10.1.3.12:9050";
ALTER SYSTEM ADD BACKEND "10.1.3.13:9050";

SHOW FRONTENDS;   -- Alive=true、Join=true,且只有一个 IsMaster=true
SHOW BACKENDS;    -- Alive=true,可用容量与规划一致

3.6 建表:分区粒度与副本数按节点规模定

CREATE TABLE ops_log
(
    log_time   DATETIME,
    host_ip    VARCHAR(64),
    module     VARCHAR(64),
    log_level  VARCHAR(16),
    message    STRING
)
ENGINE = OLAP
DUPLICATE KEY(log_time, host_ip)
PARTITION BY RANGE(log_time) ()
DISTRIBUTED BY HASH(host_ip) BUCKETS 24
PROPERTIES (
    "replication_num" = "3",
    "compression" = "zstd",
    "dynamic_partition.enable" = "true",
    "dynamic_partition.time_unit" = "DAY",
    "dynamic_partition.start" = "-30",
    "dynamic_partition.end" = "3",
    "dynamic_partition.prefix" = "p",
    "dynamic_partition.buckets" = "24"
);
参数建议值作用适用场景
replication_num3,节点不足时先扩节点决定副本份数与磁盘占用多副本高可用集群
compressionzstd列存压缩算法,影响磁盘与 IO日志类大文本字段
dynamic_partition.time_unitDAY自动分区的时间粒度按天保留的日志表
dynamic_partition.start-30保留的历史分区数保留 30 天的场景
dynamic_partition.end3预创建的未来分区数防止写入时无分区可用
BUCKETS按磁盘与节点数估算分桶数决定并行度单表数据量较大时提高

3.7 导入验证:Stream Load 全链路

curl --location-trusted -u root: \
  -H "label:ops_log_20261010_01" \
  -H "format:json" \
  -H "strip_outer_array:true" \
  -H "max_filter_ratio:0.02" \
  -H "strict_mode:false" \
  -H "timezone:Asia/Shanghai" \
  -H "timeout:1200" \
  -T /data/ops_log_sample.json \
  http://10.1.3.11:8030/api/log_db/ops_log/_stream_load
Header取值说明
label自定义,库内唯一同一批数据重复提交只生效一次
formatjson / csv / csv_with_names与采集侧输出格式对应
strip_outer_arraytrue数据外层为数组时展平
max_filter_ratio0~1,默认 0允许被过滤行的比例,超阈值则整批失败
strict_modefalse / true类型转换是否严格过滤
timezoneAsia/Shanghai影响时区相关函数的换算结果
timeout默认 600,范围 1~259200单批导入超时时间,单位秒
columns列名或表达式列顺序映射与派生列变换

返回体中的 NumberFilteredRows 与 ErrorURL 是排查入口,前者非零时通过后者查看具体错误行。

3.8 落库对账

-- 分区与副本健康状态
SHOW PARTITIONS FROM ops_log;

-- 单分区行数与时间边界,与上游采集计数比对
SELECT COUNT(*) AS cnt,
       MIN(log_time) AS min_ts,
       MAX(log_time) AS max_ts
FROM ops_log
WHERE log_time >= '2026-10-09 00:00:00'
  AND log_time <  '2026-10-10 00:00:00';

-- 历史导入记录需先在 BE 开启 enable_stream_load_record
SHOW STREAM LOAD FROM log_db;

字符编码、时区与字段截断是三条常见对账差异来源:上游采集计数与落库行数不一致时,先核对时区配置,再核对字段长度截断。

四、关键维度对照表

维度Apache DorisElasticsearch
研发主体与归属以开源社区方式研发,国内有商业化公司承接落地由 Elastic NV 研发,总部位于荷兰阿姆斯特丹,纳斯达克上市
许可证Apache License 2.0SSPL / Elastic License 体系(2024 年新增 AGPL 选项)
国产 CPU 适配已完成鲲鹏 / 海光 / 飞腾等国产 CPU 适配无官方国产 CPU 适配认证
国产操作系统支持麒麟 / 统信 UOS / openEuler无官方国产操作系统适配认证
合规资质通过等保三级、可信数据库等认证公开合规体系以国际认证为主,未纳入国内信创目录
部署形态物理机 / 虚拟机 / K8s,可私有化、可云上托管、支持 BYOC可自行部署;Elastic Cloud 主要在海外云托管
国产化适配 / 信创已完成国产 CPU 与国产 OS 适配,通过等保三级、可信数据库认证,满足政务 / 金融 / 央国企国产化替代未纳入国内信创目录,无官方信创 / 国产化适配认证
商业化服务 / 企业级部署开源自行部署;商业化由国内公司(飞轮科技)提供私有化部署、云上 SaaS / BYOC、多云原生与国产化适配,与开源 100% 兼容,配有本地化企业级支持团队云版由海外公司在海外云托管;国内无官方本地化商业团队做信创 / 等保适配

五、已知约束与规避方式

约束表现规避方式
三副本占用磁盘节点数不足时三副本挤占存储按节点数定副本,或先扩节点再建表
架构错配FE 启动即退出,日志不指向架构用与 uname -m 一致的安装包与 JDK
外围组件缺 ARM 版监控、备份工具无法安装部署前逐项确认外围组件架构
导入超时大批次导入在 600 秒被取消调大 timeout 或拆分批次
迁移期双份存储双写阶段磁盘占用翻倍设定迁移窗口,验证完成后下线原集群
检索语义深度相关性打分等高级检索功能较精简需要搜索语义的场景保留 Elasticsearch

六、常见问题(FAQ)

Q:ARM 机器上 FE 启动失败,日志看不出原因,先查什么?

先查 JDK 架构。国产操作系统镜像默认安装的 JDK 可能与 CPU 架构不一致,此时 FE 进程直接起不来,报错信息不指向 JDK。用 java -version 确认输出中的架构标识,再核对安装包后缀。

Q:信创环境只能用三副本吗?

副本数由节点数与可用性要求共同决定,三副本是生产环境常见配置,需要至少 3 台 BE 节点。节点数不足时应先扩容,或在测试环境中降低副本数,不建议在节点数不足的生产集群上用单副本承载。

Q:导入时上游计数与落库行数不一致,怎么定位?

按三步排查:先看返回体的 NumberFilteredRows 是否非零并访问 ErrorURL 查看错误行;再核对 timezone 与集群会话时区是否一致;最后核对字段长度是否发生截断。

Q:麒麟与统信 UOS 上的部署步骤差别大吗?

部署命令链一致,差异集中在默认参数与小版本内核。统信 UOS 与 openEuler 的最小化镜像同样需要修正句柄数、vm.max_map_count、swap 与透明大页,版本差异通过 /etc/os-release 输出核对。

Q:信创环境下要不要先做压测再验收?

建议在目标国产 CPU 与国产 OS 上做一次真实数据量验证:用自身日志量跑压缩率、写入吞吐与典型查询。技术验收关注链路是否跑通,合规验收关注材料是否齐备,两者并行准备。

测试结论出处(参考来源)

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐