马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
Elasticsearch 用来做日志 检索和站内搜索都很常见,它对运行环境的要求比一般服务多一些:不能用 root 启动、要单独调内核参数、还要处理自带 JDK 与系统 JDK 的冲突。本文以 7.15.2 版本、x86_64 环境为例,把从下包到启动成功的过程完整记录,并把启动失败的两类经典报错的解法写清。
一、先确认系统架构
uname -a
uname -m
第二条输出 x86_64 就对应 x86_64 的包,aarch64 要换成 ARM 的包,装错架构解压后二进制跑不起来。
二、下载对应版本
从 Elastic 官方的制品仓库取包,把版本号和架构替换成你要的:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.15.2-linux-x86_64.tar.gz
生产上建议锁定具体版本而不是总下最新的,升级 ES 属于需要评估的动作,别让一次下载把版本换了。
三、解压到目标目录
tar -zxvf elasticsearch-7.15.2-linux-x86_64.tar.gz
四、创建专用运行用户
ES 出于安全考虑不允许用 root 启动,必须建一个普通用户:
useradd es
passwd es
# 建错了可以删掉重来
userdel -r es
然后把目录属主改给 es:
chown -R es:es /pzy/es/elasticsearch-7.15.2
用 ll 逐层确认目录和文件的属主是不是 es,只要有一层还是 root,启动就会在写日志 或建索引目录时失败。
五、改 elasticsearch.yml
vim /pzy/es/elasticsearch-7.15.2/config/elasticsearch.yml
需要写的关键项:
cluster.name: elasticsearch
path.data: ./data
path.logs: /pzy/es/elasticsearch-7.15.2/data/logs
node.name: node-1
network.host: 172.16.0.10
http.port: 9200
cluster.initial_master_nodes: ["node-1"]
这里要重点说明 network.host:网上大量教程直接写 0.0.0.0,意思是监听所有网卡。ES 早期版本默认没有认证,一旦这样配置又开在公网上,等于把一个可以任意读写数据的服务直接暴露出去,历史上大量数据泄漏事件就是这么来的。正确做法是:只绑内网 IP,用防火墙限制 9200 的来源,生产环境开启 ES 自带的安全认证(xpack security)并设置账号密码。
六、处理 ES 与系统 JDK 的冲突
ES 压缩包里自带一份 JDK,但如果你系统里已经装了 JDK,ES 启动时会优先去找系统那个,版本不一致就会启动失败。改 bin/elasticsearch,显式指定用它自带的 JDK:
export ES_JAVA_HOME=/pzy/es/elasticsearch-7.15.2/jdk
export PATH=$ES_JAVA_HOME/bin PATH
if [ -x "$ES_JAVA_HOME/bin/java" ]; then
JAVA="/pzy/es/elasticsearch-7.15.2/jdk/bin/java"
else
JAVA=`which java`
fi
记住这个规律:系统里没装 JDK 时反而不会报错(直接用自带的),装了 JDK 而不指定就会报错。
七、调 JVM 内存
切到 es 用户,改 config/jvm.options:
su es
vim /pzy/es/elasticsearch-7.15.2/config/jvm.options
把 -Xms 和 -Xmx 设成相同值(推荐物理内存的一半以内,且别超过 31G),两者不一致会引起堆震荡。
八、启动并处理两类经典报错
后台启动:
bin/elasticsearch -d
报错一:
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
解决:改 /etc/security/limits.conf,末尾加两行:
es soft nofile 65536
es hard nofile 65536
报错二:
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决:改 /etc/sysctl.conf,加一行后生效:
vm.max_map_count=262144
sysctl -p
这两个参数改完需要重新登录 es 用户才会读到新的 limits。
九、验证与后续
curl http://127.0.0.1:9200
返回一段带 cluster_name、version 的 JSON 就说明起来了。后续建议做的:加 systemd 单元托管(避免用 nohup)、配快照仓库做定期备份、开慢查询日志 、把 9200 限制在内网。ES 最怕的不是起不来,是「起来了但谁都能连」。
qidao123.com企服评测-应用市场 编辑提示
|