opensearch禁止root启动,必须创建专用用户并递归赋权安装目录;需调高max file descriptors和vm.max_map_count系统限制;network.host和discovery.type必须正确配置,安全插件默认启用。

opensearch 不能直接用 root 启动,也不支持开箱即用——不调系统参数、不建专用用户、不改配置项,服务根本起不来。别被“5分钟上手”误导,真实安装卡点全在权限、内核限制和安全插件上。
为什么启动就报 can not run opensearch as root
这是硬性拒绝,不是警告。OpenSearch 启动时主动检查 UID,一旦是 0 就立刻退出。
- 必须创建专用用户(如
opensearch),不能只改配置文件,得递归赋权整个安装目录:chown -R opensearch:opensearch /opt/opensearch-2.x.x -
path.data和path.logs指向的目录也必须归属该用户,否则启动时报access denied - 切到该用户后执行
./bin/opensearch,不是sudo ./bin/opensearch
max file descriptors 和 vm.max_map_count 必须单独设
这两个值默认太低,opensearch 进程一启动就打印错误并退出,连日志都写不全。
- 在
/etc/security/limits.conf里为opensearch用户单独设限(不能只写*):opensearch soft nofile 65536opensearch hard nofile 65536 -
vm.max_map_count必须由root执行:sysctl -w vm.max_map_count=262144,且要写入/etc/sysctl.conf持久化,否则重启失效 - 验证是否生效:切到
opensearch用户,运行ulimit -n和cat /proc/sys/vm/max_map_count
外网访问不到?重点看这三项配置
默认只监听 localhost,即使 firewalld 放行了 9200 端口,curl 也连不上。
-
network.host: 0.0.0.0(或具体内网 IP),不能只写0.0.0.0却漏掉discovery.type: single-node,否则报 cluster discovery failed - 安全插件默认启用,若不想配证书和用户,加一行:
plugins.security.disabled: true(放在opensearch.yml底部) - 云服务器必须在控制台安全组里放行 9200 端口,本地防火墙只是最后一道,不是唯一一道
curl 返回 401 或连接被拒绝?先确认启动状态再查配置
别急着改认证逻辑,90% 的 401 是因为服务压根没起来,或者监听地址不对。
- 用
ps aux | grep opensearch确认进程是否存在;用netstat -tlnp | grep :9200看端口是否真在监听 - 如果进程存在但端口没监听,大概率是
network.host配错,或http.port被其他进程占了 - 401 错误只在安全插件启用且未提供凭据时出现;若已设
plugins.security.disabled: true还返回 401,说明配置没生效——检查 yml 缩进、冒号后空格、是否拼错 key 名
opensearch.yml 里那一行 discovery.type: single-node 没加,或是 vm.max_map_count 只临时改了没持久化——重启后一切归零。











