Elasticsearch远程访问配置失败求助:修改设置后服务启动报错
问题描述
我有个Elasticsearch数据库,本地用http://localhost:5601通过Kibana访问。现在想配置成能分享链接给其他人访问,已经做了这些操作:
- 执行
sudo ufw allow 5601/tcp开放端口 - 修改Kibana配置里的
server.host: <我的IP> - 修改Elasticsearch配置里的
network.host: <我的IP>
但Elasticsearch启动失败,错误日志如下:
elasticsearch.service - Elasticsearch
Loaded: loaded (/lib/systemd/system/elasticsearch.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Tue 2023-03-14 15:51:48 +07; 18s ago
Docs: https://www.elastic.co
Process: 5083 ExecStart=/usr/share/elasticsearch/bin/systemd-entrypoint -p ${PID_DIR}/elasticsearch.pid --quiet (code=exited, status=78)
Main PID: 5083 (code=exited, status=78)
CPU: 25.605sThg 3 14 15:51:38 congthanhcomputer systemd[1]: Starting Elasticsearch...
Thg 3 14 15:51:48 congthanhcomputer systemd-entrypoint[5083]: ERROR: [1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch.
Thg 3 14 15:51:48 congthanhcomputer systemd-entrypoint[5083]: bootstrap check failure [1] of [1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
Thg 3 14 15:51:48 congthanhcomputer systemd-entrypoint[5083]: ERROR: Elasticsearch did not exit normally - check the logs at /var/log/elasticsearch/elasticsearch.log
Thg 3 14 15:51:48 congthanhcomputer systemd[1]: elasticsearch.service: Main process exited, code=exited, status=78/CONFIG
Thg 3 14 15:51:48 congthanhcomputer systemd[1]: elasticsearch.service: Failed with result 'exit-code'.
Thg 3 14 15:51:48 congthanhcomputer systemd[1]: Failed to start Elasticsearch.
Thg 3 14 15:51:48 congthanhcomputer systemd[1]: elasticsearch.service: Consumed 25.605s CPU time.
问题原因
当你把network.host设为非localhost的IP时,Elasticsearch会自动切换到生产模式,触发严格的bootstrap检查。其中一项要求就是必须配置集群发现相关参数,否则启动失败。
解决步骤
1. 调整Elasticsearch集群配置
打开Elasticsearch的配置文件(默认路径/etc/elasticsearch/elasticsearch.yml),添加或修改以下参数:
# 单节点环境下,指定初始主节点为当前机器的主机名或IP cluster.initial_master_nodes: ["<你的主机名或IP地址>"] # 启用单节点发现模式,避免多节点集群的检查 discovery.type: single-node
2. 确认Elasticsearch网络配置
确保network.host配置正确,可以设为你的局域网/公网IP,或者用0.0.0.0允许所有地址访问:
network.host: <你的IP地址> # 例如:192.168.1.100 或者 0.0.0.0
3. 配置Kibana连接地址
打开Kibana的配置文件(默认路径/etc/kibana/kibana.yml),修改以下参数:
server.host: <你的IP地址> # 允许外部机器访问Kibana elasticsearch.hosts: ["http://<你的IP地址>:9200"] # 让Kibana连接到外部可访问的Elasticsearch地址
4. 重启服务并验证
- 重启Elasticsearch:
sudo systemctl restart elasticsearch - 重启Kibana:
sudo systemctl restart kibana - 检查Elasticsearch状态:
sudo systemctl status elasticsearch,确认显示active (running) - 从其他机器访问
http://<你的IP地址>:5601,验证Kibana能否正常打开
5. 额外注意事项
- 如果是公网环境,除了ufw,还要确保云服务商的安全组开放了5601(Kibana)和9200(Elasticsearch)端口
- 生产环境一定要开启身份验证,避免未授权用户访问你的数据
- 如果还是有问题,查看
/var/log/elasticsearch/elasticsearch.log日志文件,里面会有更详细的错误信息
内容的提问来源于stack exchange,提问作者Thành Phạm Công

