赞
踩
本文主要介绍在Linux 系统下搭建Elasticsearch运行环境相关内容. 受限于篇幅本次主要介绍elasticsearch 单集群单节点单实例、单集群单节点多实例、单集群多节点单实例 环境搭建。ES环境搭建概要参见脑图:
内容说明:
本文内容同微信公众号【凡登】,关注不迷路,学习上高速,欢迎关注共同学习。
版本说明:
Linux CentOS 7.9 64 bit
Elasticsearch-7.13.4
openjdk-16+36_linux-x64
目录
1、下载:
[root@VM-0-9-centos ~]# cd /apps
[root@VM-0-9-centos apps]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.13.4-linux-x86_64.tar.gz
2、解压
[root@VM-0-9-centos apps]# tar -zxvf elasticsearch-7.13.4-linux-x86_64.tar.gz
# 目录结构如下:
drwxr-xr-x 2 u_es root 4096 7月 15 2021 bin
drwxr-xr-x 3 u_es root 4096 4月 11 13:31 config
drwxr-xr-x 9 u_es root 4096 7月 15 2021 jdk
drwxr-xr-x 3 u_es root 4096 7月 15 2021 lib
-rw-r--r-- 1 u_es root 3860 7月 15 2021 LICENSE.txt
drwxr-xr-x 2 u_es root 4096 4月 11 18:36 logs
drwxr-xr-x 59 u_es root 4096 7月 15 2021 modules
-rw-r--r-- 1 u_es root 594150 7月 15 2021 NOTICE.txt
drwxr-xr-x 2 u_es root 4096 7月 15 2021 plugins
-rw-r--r-- 1 u_es root 2710 7月 15 2021 README.asciidoc
3、启动
#切换到u_es账户(详情参见下文创建es用户)
[root@VM-0-9-centos apps]# su u_es
# 非后台启动(ctrl + c 结束当前运行es实例)
[u_es@VM-0-9-centos apps]$ /apps/elasticsearch-7.13.4/bin/elasticsearch
4、检查是否启动
# 重启开启一个会话,验证
[root@VM-0-9-centos ~]# curl -i http://localhost:9200
#出现如下信息,即启动成功
5、以后台方式启动
[u_es@VM-0-9-centos apps]$ /apps/elasticsearch-7.13.4/bin/elasticsearch -d
6、关闭后台运行的es实例
# 查看es进程pid
[u_es@VM-0-9-centos apps]$ ps -ef|grep elasticsearch
# 干掉pid进程
[u_es@VM-0-9-centos apps]$ kill -9 24044
上述快速安装是es默认安装,开箱即用,适用于初学简单的环境搭建,但距离实际生产环境存在一些差距,比如:集群、节点名称,ip、端口绑定,集群发现,文件描述符、内存交换等问题。解决方法参见下文。
a) 内存相关配置/etc/sysctl.conf
[root@VM-0-9-centos ~]# vim /etc/sysctl.conf
# elasticsearch config start
# 禁止内存与硬盘交换
vm.swappiness=1
# 设置虚拟内存大小
# Elasticsearch使用了 NioFs(非阻塞文件系统)和 MMapFs(内存映射文件系统)。
# 配置最大映射数量,以便有足够的虚拟内存可用于mmapped文件
vm.max_map_count=262144
# 执行sysctl -p 使配置生效
[root@VM-0-9-centos /]# sysctl -p
#响应如下:
vm.swappiness = 1
vm.max_map_count = 262144
b) 文件句柄数配置/etc/security/limits.conf
[root@VM-0-9-centos ~]# vim /etc/security/limits.conf
# 文件句柄数 (限制打开文件数100001)
* soft nofile 100001
* hard nofile 100002
# 进程线程数
* soft nproc 65535
* hard nproc 65535
# 内存锁定交换
* soft memlock unlimited
* hard memlock unlimited
c) 查看配置是否生效
[root@VM-0-9-centos ~]# ulimit -a
#部分响应如下:
max memory size (kbytes, -m) unlimited
open files (-n) 100001
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
# 查看硬限制
[u_es@VM-0-9-centos /]$ ulimit -Hu
65535
# 查看软限制
[u_es@VM-0-9-centos /]$ ulimit -Su
65535
a) 配置elasticsearch.yml
[root@VM-0-9-centos ~]# vim /apps/elasticsearch-7.13.4/config/elasticsearch.yml
cluster.name: es_cluster_single_node_demo
node.name: ${HOSTNAME}-node
path.data: /es/node_9200/data
path.logs: /es/node_9200/logs
network.host: 172.21.0.9
http.port: 9200
transport.port: 9300
discovery.seed_hosts: ["172.21.0.9:9300"]
cluster.initial_master_nodes: ["172.21.0.9:9300"]
重要配置项说明:
cluster.name:集群名称,同一ES集群名称必须相同;
node.name:集群中当前节点名称。建议命名较高区分度,如:当前节点hostname,hostip等
path.data:ES实例存放数据目录;注:建议生产环境数据目录与应用程序隔离
path.logs:ES实例存放日志目录;注:建议生产环境数据目录与应用程序隔离
network.host:当前实例绑定的ip地址,注:如未绑定则无法通过ip地址访问
http.port:ES实例对外提供REST服务的端口,默认9200
transport.port:ES实例内部通信端口,默认9300
discovery.seed_hosts:数组形式存储ES集群节点信息,多个以逗号分隔
cluster.initial_master_nodes:ES集群启动时,引导默认的master节点,注:仅在集群第一次启动时候此配置有效。
b) 配置es堆内存大小 jvm.options
[root@VM-0-9-centos ~]# vim /apps/elasticsearch-7.13.4/config/jvm.options
-Xms2g
-Xmx2g
如何配置:
堆内存大小 = Min(机器内存/2, 32GB) ;
即:取当前环境内存的一半和32GB内存中最小值。但最大配置尽量不等于32G,略小于32G;原理参考文末链接引用;
[root@VM-0-9-centos /]# mkdir -p /es/node_9200/data
[root@VM-0-9-centos /]# mkdir -p /es/node_9200/logs
[root@VM-0-9-centos /]# chown -R u_es /es
[u_es@VM-0-9-centos /]$ curl -i "http://172.21.0.9:9200"
#响应如下:
{
"name" : "VM-0-9-centos-node", // 自定义 ${HOSRTNAME}-node
"cluster_name" : "es_cluster_single_node_demo", // 自定义集群名称
"cluster_uuid" : "JNrB5g6uQI2A-E8tWAO1Pw",
"version" : {
"number" : "7.13.4",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "c5f60e894ca0c61cdbae4f5a686d9f08bcefc942",
"build_date" : "2021-07-14T18:33:36.673943207Z",
"build_snapshot" : false,
"lucene_version" : "8.8.2",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
本小节演示运行3个es实例 ,步骤如下:
1、es实例启动默认需要4G内存,为了避免启动后出现内存不足异常,配置es实例2G内存。
# 配置文件:/apps/elasticsearch-7.13.4/config/vim jvm.options
## -Xms4g
## -Xmx4g
修改为:(根据实际系统内存。注:不要留空格)
-Xms2g
-Xmx2g
2、为当前3个实例分别创建数据和日志目录如:/es/node_1/data、/es/node_1/logs并授权。
# 创建/es/node_1/data、/es/node_1/logs 等目录
[root@VM-0-5-centos /]# mkdir -p /es/node_1/data
[root@VM-0-5-centos /]# mkdir -p /es/node_1/logs
# 其他node_2、node_3目录创建省略
# 目录授权
[root@VM-0-5-centos /]# chown -R u_es /es
[root@VM-0-5-centos /]# su u_es
3、运行实例
- # 运行实例
- [u_es@VM-0-9-centos apps]$ /apps/elasticsearch-7.13.4/bin/elasticsearch -d -Ecluster.name=my_cluster -Enode.name=node_1 -Epath.data=/es/node_1/data -Epath.logs=/es/node_1/logs
- [u_es@VM-0-9-centos apps]$ /apps/elasticsearch-7.13.4/bin/elasticsearch -d -Ecluster.name=my_cluster -Enode.name=node_2 -Epath.data=/es/node_2/data -Epath.logs=/es/node_2/logs
- [u_es@VM-0-9-centos apps]$ /apps/elasticsearch-7.13.4/bin/elasticsearch -d -Ecluster.name=my_cluster -Enode.name=node_3 -Epath.data=/es/node_3/data -Epath.logs=/es/node_3/logs
4、验证集群:
[u_es@VM-0-5-centos /]$ curl -i http://localhost:9200
{
"name" : "node_1",
"cluster_name" : "my_cluster",
"cluster_uuid" : "4XNVx25tRne-PHZ5FduFWA",
"version" : {
"number" : "7.13.4",
// 省略
},
"tagline" : "You Know, for Search"
}
[u_es@VM-0-5-centos /]$ curl -i http://localhost:9201
{
"name" : "node_2",
"cluster_name" : "my_cluster",
"cluster_uuid" : "4XNVx25tRne-PHZ5FduFWA",
"version" : {
"number" : "7.13.4",
// 省略
},
"tagline" : "You Know, for Search"
}
[u_es@VM-0-5-centos /]$ curl -i http://localhost:9202
{
"name" : "node_3",
"cluster_name" : "my_cluster",
"cluster_uuid" : "4XNVx25tRne-PHZ5FduFWA",
"version" : {
"number" : "7.13.4",
// 省略
},
"tagline" : "You Know, for Search"
}
注:单机运行实例的默认端口为9200,当端口占用后,实例端口依次为9201,9202……可通过-E参数动态添加,如:-Ehttp.port=9201 指定端口。
上述【单集群单节点多实例】是以动态参数演示运行ES实例,测试时很方便,时间久了便容易忘记配置参数,且启动参数过长不易维护,实际生产环境以配置文件形式搭建集群,具体参见我的另一篇文章:Elasticsearch单集群多节点单实例环境搭建
参见我的另一篇文章:《Kibana环境搭建》
浏览器扩展程序搜索 elasticsearch-head 并安装。
效果图:
解决:当前版本elasticsearch7.13.4依赖jdk16,安装jdk即可。如何知道当前es的依赖呢?参见文末的参考文档:【es依赖】、【jdk下载】
- [root@VM-0-5-centos apps]# mkdir java[root@VM-0-5-centos java]# wget https://download.java.net/openjdk/jdk16/ri/openjdk-16+36_linux-x64_bin.tar.gz
- [root@VM-0-5-centos java]# tar -zxvf openjdk-16+36_linux-x64_bin.tar.gz
- [root@VM-0-5-centos java]# vi /etc/profile
- #配置内容如下:
- ES_JAVA_HOME=/apps/java/jdk-16
- PATH=$ES_JAVA_HOME/bin:$PATH
- CLASSPATH=.:$ES_JAVA_HOME/lib/dt.jar:$ES_JAVA_HOME/lib/tools.jar
- export ES_JAVA_HOME
- export PATH
- export CLASSPATH
-
- [root@VM-0-5-centos java]# source /etc/profile
- # 检查是否安装成功
- [root@VM-0-5-centos java]# java -version
- openjdk version "16" 2021-03-16
- OpenJDK Runtime Environment (build 16+36-2231)
- OpenJDK 64-Bit Server VM (build 16+36-2231, mixed mode, sharing)
# 检查是否安装成功
[root@VM-0-5-centos java]# java -version
openjdk version "16" 2021-03-16
OpenJDK Runtime Environment (build 16+36-2231)
OpenJDK 64-Bit Server VM (build 16+36-2231, mixed mode, sharing)
说明:es出于安全考虑在高版本中不允许以root账户启动.
解决:创建一个u_es账户管理es实例。如下:
#出于安全考虑,在es高本版中已经不允许使用root账户启动,因此在启动es之前,创建一个单独的账户;
# 为es创建账户
1、创建用户
[root@VM-0-9-centos apps]# adduser u_es
2、设置密码
[root@VM-0-9-centos apps]# passwd u_es
更改用户 u_es 的密码 。
新的 密码:es123456
无效的密码:密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:es123456
passwd:所有的身份验证令牌已经成功更新。
3、授权u_es
[root@VM-0-9-centos apps]# chown -R u_es /apps/
调整es实例运行内存
# 配置文件:/apps/elasticsearch-7.13.4/config/vim jvm.options
## -Xms4g
## -Xmx4g
修改为:(根据实际系统内存,注:前后不要留空格)
-Xms2g
-Xmx2g
原因:多个es实例共用一个数据存储路径,导致冲突。es默认生成一些系统数据(索引、日志等),如果不指定es实例的数据存储路径,当启动后,默认使用 ${ES_HOME}/data存储数据;
解决:删除 elasticsearch目录下的data目录即可,指定es实例的数据的存储路径, 并以非root账户启动。
操作如下:
[root@VM-0-9-centos apps]# rm -rf /apps/elasticsearch-7.13.4/data
# 配置文件/apps/elasticsearch-7.13.4/config/elasticsearch.yml
path.data: /es01/data
path.logs: /es01/logs
1.es安装概览文档:
https://www.elastic.co/guide/en/elasticsearch/reference/7.13/install-elasticsearch.html
2.linux环境下安装es文档:
https://www.elastic.co/guide/en/elasticsearch/reference/7.13/targz.html
3.elasticsearch依赖信息,如:jdk,lucene
https://www.elastic.co/guide/en/elasticsearch/reference/7.13/dependencies-versions.html
4、open-jdk下载文档:
http://jdk.java.net/java-se-ri/16
5、es堆内存设置原理
https://blog.csdn.net/laoyang360/article/details/79998974
6、引用李猛、铭毅天下两位大佬相关文章资料
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。