Es搭建——单节点——Linux
一、安装
下载安装包:
官网下载地址:https://www.elastic.co/downloads/elasticsearch
上传包到linux 切换到安装目录下
解压:tar -zxvf elasticsearch-7.17.1-linux-x86_64.tar.gz
重命名安装文件夹 mv elasticsearch-7.17.1 es
cd xxxx(es安装目录)/es
二、配置文件修改
注意:冒号后面有个空格,否则会导致配置文件格式错误,启动时报错
1、elasticsearch.yml
cd config
vi elasticsearch.yml
集群相关设置
-------------------------------Cluster-------------------------------
cluster.name: 设置你的集群名称(例es-test)
节点相关设置
-------------------------------Node----------------------------------
node.name: 设置你的节点名称(例estest-node-1)
网络相关设置
-------------------------------Network----------------------------------
network.host: 部署该节点的服务器IP
http.port: 9200 (es服务对外的端口,默认即可) (设置0.0.0.0时,允许任何ip访问)
集群发现相关设置
-------------------------------Discovery----------------------------------
#初始主节点列表,集群自动发现选举master
cluster.initial_master_nodes: Node中设置的该节点名称(例estest-node-1)
三:启动ES
1、测试启动服务
cd xxxx(es安装目录)/es/bin
./elasticsearch
2、后台启动
./elasticsearch -d
四:依次解决报错
1、es本身自带的jdk版本与服务器所安装jdk版本冲突
warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME
Future versions of Elasticsearch will require Java 11; your Java version from [xxxxx/jdk1.8.0/jre] does not meet this requirement. Consider switching to a distribution of Elasticsearch with a bundled JDK. If you are already using a distribution with a bundled JDK, ensure the JAVA_HOME environment variable is not set.
报错原因:
elasticsearch默认启动时
先找系统安装的jdk,若未安装jdk则使用es自带的jdk,系统无需再安装jdk
若系统已安装jkd且与es所需jdk版本不一致,则es启动报错jdk版本问题
见es/bin 中的elasticsearch-env 的jdk判断代码
报错信息和echo输出内容符合,说明走的是:"elif [ ! -z “$JAVA_HOME” ]; then"分支
# now set the path to java
if [ ! -z "$ES_JAVA_HOME" ]; then
JAVA="$ES_JAVA_HOME/bin/java"
JAVA_TYPE="ES_JAVA_HOME"
elif [ ! -z "$JAVA_HOME" ]; then
# fallback to JAVA_HOME
echo "warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME" >&2
JAVA="$JAVA_HOME/bin/java"
JAVA_TYPE="JAVA_HOME"
else
# use the bundled JDK (default)
if [ "$(uname -s)" = "Darwin" ]; then
# macOS has a different structure
JAVA="$ES_HOME/jdk.app/Contents/Home/bin/java"
else
JAVA="$ES_HOME/jdk/bin/java"
fi
JAVA_TYPE="bundled JDK"
fi
即:【补流程图】
解决方案:
系统不重新安装es所需jdk版本时,使用es内置jdk
方法a、配置 ES_JAVA_HOME路径
因为没有识别到ES_JAVA_HOME,故需配置ES_JAVA_HOME
#编辑配置文件
vi ~/.bashrc
#在末尾添加以下内容
export ES_JAVA_HOME=xxxx(es安装目录)/es/jdk
#使命令生效
source ~/.bashrc
#检查配置是否成功
echo $ES_JAVA_HOME
方法b、修改配置 指定系统的JAVA_HOME为es的jdk路径
cd xxxx(es安装目录)/es/bin
vi ./elasticsearch 【此处需再确认---方法是否正确】
#添加以下配置
# 将jdk修改为es中自带jdk的配置目录
export JAVA_HOME=xxxx(es安装目录)/es/jdk
export PATH=$JAVA_HOME/bin:$PATH
if [ -x "$JAVA_HOME/bin/java" ]; then
JAVA="xxxx(es安装目录)/es/jdk/bin/java"
else
JAVA=`which java`
fi
方法c、删除系统jdk的判断,直接启用Es自带的java
cd xxxx(es安装目录)/es/bin
vi elasticsearch-env 【此处需再确认---方法是否正确,修改判断后,仍然没有ES_HOME,试下会成功吗】
# now set the path to java
if [ "$(uname -s)" = "Darwin" ]; then
# macOS has a different structure
JAVA="$ES_HOME/jdk.app/Contents/Home/bin/java"
else
JAVA="$ES_HOME/jdk/bin/java"
fi
JAVA_TYPE="bundled jdk"
方法d、将启动时系统jdk路径指定为es自带的jdk
cd xxxx(es安装目录)/es/bin
vi elasticsearch-env
首行代码set -e -o pipefail下
添加JAVA_HOME指向es自带jdk的位置:export JAVA_HOME =xxxx(es安装目录)/es/jdk。
set -e -o pipefail
#添加下行配置:使用es自带的jdk
export JAVA_HOME =xxxx(es安装目录)/es/jdk
参考:
https://blog.csdn.net/smilehappiness/article/details/118466378
https://www.cnblogs.com/zhuhuibiao/p/16446105.html
2、root用户启动es失败
java.lang.RuntimeException: can not run elasticsearch as root
报错原因
es因为安全问题拒绝使用root用户启动
解决方案:
添加系统用户用来启动es
groupadd es
useradd es -g es -p password # -g 指定组 -p 密码
chown es:es -R xxxx(es安装目录)/es/ # -R 处理指定目录以及其子目录下的所有文件
#切换到es用户
su es
#启动es
./elasticsearch
参考:
https://blog.csdn.net/fwdwqdwq/article/details/124241935
3、max virtual memory areas vm.max_map_count [65530] is too low
ERROR: [1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch.
bootstrap check failure [1] of [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
报错原因:
Elasticsearch在启动时会检查操作系统的配置,若vm.max_map_count的值太低,就会报错。
vm.max_map_count是Linux系统中一个内核参数,它限制了每个进程可以拥有的内存区域(memory areas)数量。Elasticsearch可能需要比默认更多的内存区域,如果这个值太低,Elasticsearch就会报错。
注:262144是一个常用的值,可根据需求调整,评估可能对系统稳定性造成的影响
解决方案:
永久修改该配置
#切换至root用户
su root
#编辑/etc/sysctl.conf文件
vi /etc/sysctl.conf
#添加配置
vm.max_map_count=262144
#保存退出后
#刷新配置文件使改动立即生效
sudo sysctl -p
参考:
https://blog.csdn.net/jane_xing/article/details/139790289
#继续切换es用户,重新启动es
su es
cd xxxx(es安装目录)/es/bin
./elasticsearch
4、其他问题待更新
基本解决思路:先使用 ./elasticsearch 方式启动,找到日志的error关键字,百度相关报错信息
五、判断是否启动成功
方法1、检查es进程
ps -ef|grep elasticsearch
方法2、访问url
http://部署该节点的服务器IP:9200/
六、设置es的用户名密码
编辑elasticsearch.yml配置文件
vi xxxx(es安装目录)/es/config/elasticsearch.yml
#在末尾添加下面两行
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
#保存退出后,重启es(重启后配置才生效)
设置用户名密码
cd xxxx(es安装目录)/es/bin
elasticsearch-setup-passwords interactive
#依次设置elastic、kibana、logstash等的访问密码
再次url再次访问验证是否生效,出现弹窗则生效
参考:
https://blog.csdn.net/smilehappiness/article/details/118466378
七、单节点关闭es
1、若后台启动,找到对应进程号,直接杀进程即可
ps -ef|grep elasticsearch
kill -9 进程号
2、若控制台启动,直接ctrl+c