必须创建专用用户es并赋权目录、调优vm.max_map_count和limits参数、配置elasticsearch.yml禁用xpack与绑定network.host、禁用swap并设置JVM堆内存、通过systemd托管服务并开放9200端口。

在银河麒麟操作系统(Kylin V10 SP1/SP2,aarch64 或 x86_64 架构)上安装 Elasticsearch,必须避开 root 直接运行、内核参数不足、JVM 内存锁定失败、network.host 未放开、xpack 安全模块与信创环境不兼容等典型报错,否则服务启动即退出或无法远程访问。
创建专用用户并准备安装目录
ES 禁止以 root 身份启动,强制使用隔离用户是信创合规前提,否则启动时直接报错「max virtual memory areas vm.max_map_count is too low」或「cannot run elasticsearch as root」。
执行命令创建组与用户:groupadd es && useradd -m -g es -s /bin/bash es
为新用户设置登录密码:passwd es
创建独立安装路径并递归赋权:mkdir -p /opt/es && chown -R es:es /opt/es
【必须切换用户验证权限】 运行 su - es -c "ls -ld /opt/es",确认输出中 owner 和 group 均为 es,否则后续解压将因权限拒绝失败。
调优系统内核与资源限制
麒麟V10默认的 vm.max_map_count(65536)和文件句柄数远低于 ES 最低要求(262144),不修改会导致启动卡在「bootstrap checks failed」阶段。
方法一:永久写入内核参数
执行 echo "vm.max_map_count=655360" >> /etc/sysctl.conf && sysctl -p
方法二:配置用户级资源上限
向 /etc/security/limits.conf 追加四行:* soft nofile 65536* hard nofile 65536* soft nproc 4096* hard nproc 4096
确保 PAM 模块启用 limits:向 /etc/pam.d/common-session 添加 session required pam_limits.so
完成上述后,必须退出当前终端并重新以 es 用户登录,否则 limits 不生效,JVM 启动时会因 nofile 不足报错。
解压并配置 elasticsearch.yml
这一步操作起来很简单,直接把文件拖进去就行——但前提是已用 es 用户登录且目录权限正确。
第一步:以 es 用户身份解压安装包su - es -c "tar -zxvf /tmp/elasticsearch-8.16.4-linux-x86_64.tar.gz -C /opt/es/"
第二步:进入 config 目录编辑主配置文件su - es -c "vi /opt/es/elasticsearch-8.16.4/config/elasticsearch.yml"
第三步:写入以下关键配置(注意冒号后必须有空格,否则解析失败):cluster.name: kylin-esnode.name: node-1path.data: /opt/es/datapath.logs: /opt/es/logsnetwork.host: 0.0.0.0http.port: 9200discovery.type: single-nodexpack.security.enabled: falseingest.geoip.downloader.enabled: false
特别提醒:若部署在 aarch64 麒麟系统,请务必下载 elasticsearch-*-linux-aarch64.tar.gz 版本,混用 x86 包会导致 tar 解压失败或 JVM 启动报「Illegal instruction」。
启动服务并验证连通性
切换到 es 用户,进入 bin 目录执行后台启动:su - es -c "/opt/es/elasticsearch-8.16.4/bin/elasticsearch -d"
检查进程是否存活:ps -u es | grep elasticsearch
等待约 20 秒后,用 curl 验证本地 HTTP 接口:curl -X GET "http://127.0.0.1:9200/?pretty"
如需从局域网其他机器访问,需额外开放防火墙端口:sudo firewall-cmd --permanent --add-port=9200/tcp && sudo firewall-cmd --reload

















