Centos安装Elasticsearch教程
网上相关的安装教程有很多,基本是官网下载、解压、启动完事了,本文主要记录个人在实际安装过程终于到的问题,如果你刚好也刷到了这篇文档,希望对你有所帮助。
操作系统版本:Centos7
Elasticsearch版本:7.9.3
为了方便启动,这里我添加了启动脚本start-elasticsearch.sh
,将启动日志输出到指定的日志文件中,内容如下:
#!/bin/bash
cd /opt/software/elasticsearch/elasticsearch-7.9.3/bin
nohup ./elasticsearch>/opt/software/elasticsearch/logs/start-elasticsearch.log 2>&1 &
问题1:can not run elasticsearch as root
执行脚本后,日志文件输出了错误提示:
[2024-11-14T14:45:03,392][ERROR][o.e.b.ElasticsearchUncaughtExceptionHandler] [node-1] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
这意思很明显了,不能使用root账户启动,ok,那我们通过如下添加子用户并给其赋予权限:
adduser elasticsearch
passwd elasticsearch
密码:rootes
chown -R elasticsearch /opt/software/elasticsearch/
问题2:提示日志文件目录不存在
切换到子账户继续启动后提示日志目录不存在,这个比较好解决。通过mkdir
创建即可。修改后我们继续尝试启动,结果日志文件里仍然存在错误提示。
问题3:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]]
文件描述符是操作系统用来追踪打开文件和网络连接的资源。Elasticsearch 作为一个需要处理大量文件和网络连接的服务,对文件描述符的需求可能会非常高,我们通过如下命令增加文件描述符的限制。
vim /etc/security/limits.conf
# 在文件的最后加上两行,关闭保存文件重启ES
elasticsearch soft nofile 65535
elasticsearch hard nofile 65535
问题4: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
错误信息提示你的系统虚拟内存区域的最大数量(vm.max_map_count)设置过低,这可能会影响 Elasticsearch 的性能,因为它需要创建大量的内存映射来存储其数据。vm.max_map_count 参数限制了进程可以拥有的虚拟内存区域(VMA)的数量,这包括内存映射文件和其他类型的VMA。
我们通过如下命令进行修改:
vim /etc/sysctl.conf
# 在文件最后添加一行
vm.max_map_count = 262144
# 应用该配置
sysctl -p
# 验证配置是否生效
sysctl vm.max_map_count
# 这里会输出262144
问题5: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
这个错误信息是 Elasticsearch 在启动时的一个警告,提示你当前的发现设置不适合生产环境使用。在生产环境中,你需要配置集群发现设置,以确保 Elasticsearch 节点能够相互发现并形成集群。以下是一些关键的配置项,你需要至少配置其中之一:
- discovery.seed_hosts:这是一个列表,包含用于发现的初始节点的地址。这些节点将被用来启动集群发现过程。
- discovery.seed_providers:这是一个列表,包含用于发现的种子提供者。种子提供者可以是云服务提供商,如AWS、GCE 或 Azure。
- cluster.initial_master_nodes:这是一个列表,包含初始的主节点(master-eligiblenodes)的地址。这些节点将被选举为集群的初始主节点。
我这里只是单机测试,所以将配置文件精简如下:
# 节点名称
node.name: node-1
# 集群名称
cluster.name: my-application
# 禁用自动发现
discovery.type: single-node
# 单节点发现设置
discovery.seed_hosts: ["localhost", "127.0.0.1"]
cluster.initial_master_nodes: ["node-1"]
# HTTP 端口
http.port: 9200
# 绑定到所有接口
network.host: 0.0.0.0
# 禁用跨集群请求
cluster.remote.connect: false
修改后再执行启动脚本,日志没有错误提示了,这时打开浏览器,输入对应ip:9200,会看到如下信息
{
"name": "node-1",
"cluster_name": "my-application",
"cluster_uuid": "lKSKlOoQT0SHUVv0Lnfv0g",
"version": {
"number": "7.9.3",
"build_flavor": "default",
"build_type": "tar",
"build_hash": "c4138e51121ef06a6404866cddc601906fe5c868",
"build_date": "2020-10-16T10:36:16.141335Z",
"build_snapshot": false,
"lucene_version": "8.6.2",
"minimum_wire_compatibility_version": "6.8.0",
"minimum_index_compatibility_version": "6.0.0-beta1"
},
"tagline": "You Know, for Search"
}