Elasticsearch(简称 ES)的装置和部署,将会从以下几个方面进行阐
述:
- 环境筹备
- 零碎级别参数配置
- 下载、装置及启动
- 常见问题及解决方案
环境筹备
环境抉择策略
操作系统
绝大部分 ES 集群的部署环境都是基于私有云 Linux 的。抉择 CentOS 7 作为根底零碎有以下一些思考:
- ES 尽管是基于 JVM 上运行的 Java 我的项目,但它在启动、运行时会对一些环境参数,如虚拟内存数、文件句柄等有所要求。
- 国内的 ES 应用和部署中,以 CentOS 和 Debian 为主,存在大量的 Ubuntu 和 极少量的 Windows 的服务器。
官网团队对 64 位零碎进行了稳定性测试和系统性兼容,其中除了以下一些版本以
外都能够较好的反对:
- Debian 家族(7~10)中,Debian 7 从 5.x 版本开始不反对。
- Ubuntu 家族(14、16、18)中,Ubuntu 14.04 从 7.x 版本开始不反对,但 Ubuntu 16,18 都反对 7.x
-
Windows 家族(Windows server 2012/R2、2016、2019)中,只有 Windows server 2019 对 ES 7.7 之前的版本兼容性无限。
再联合通用云厂商和自建服务器的操作系统选型中,CentOS 7 失去了较好的反对 和保护,所以此处咱们抉择以 CentOS 7 作为首选操作系统。
内存、CPU
ES 节点启动的默认需要为 1C2G(1 核 CPU,2GB 内存)
通过调整 $ES_HOME/config/jvm.options 文件中的堆栈配置,也能够让 ES 实例 在 1C1G 甚至更小资源的服务器上启动。
留神: 更小的可用资源意味着更差的性能和节点稳定性,甚至节点启动失败。
理论生产中,更大的内存意味着更高的数据处理能力,更多的 CPU 核数能够反对 更多的外部线程,然而无可避免的,更多的资源也意味着更高的零碎开销。个别状况,内存和 CPU 的配比大抵为 1:2 到 1:4 用以反对绝大部分数据存取、聚合等操作的使 用,然而理论的内存、CPU 的用量和配比还须要用实在数据模仿实在生产环境的压测结 果为准。
个别的内存、CPU 配置策略大抵为以下几种:
- master 节点须要适当大小的内存
- coordination 节点须要较大的内存和 CPU
- ingest 节点须要较大的 CPU
- data 节点须要较大的内存和硬盘
理论生产中,须要通过压测来确定最佳的内存、CPU 配比,个别状况服务器的内存 除了零碎占用的固定内存之外,会倡议设置为服务器可用内存的一半。
除了 ES 实例之外,ES 所保护的 Lucene 也是 Java 库,也须要占用相应的内存。此时,ES 的最大 / 小堆栈内存倡议不超过 31G,否则会因为指针压缩的起因白白浪费内存资源,甚至可能呈现数据存取更慢的问题。如果指标服务器的可用内存超过 64G 的话,能够思考通过端口的配置部署多个 ES 实例。
磁盘
- 没做非凡配置的话,ES 会在写入及一直的查问过程中,将数据集中存在最新批改 和召回的数据缓存在节点 / 集群的各级内存(缓存)中。同时将绝大部分数据存在磁盘中的各种索引文件中,仅在内存中保留一部分索引文件的索引以减速数据的读 写。
- 不同于内存中的文件,ES 搁置在磁盘中的文件的读写是随机的不是程序的,所以 更快的随机读写速度将使 ES 提供更快的数据存取速度。
- 在在线搜寻等高频存取的场景中,更倡议应用固态硬盘以反对数据的高速读写。
- 在离线的日志存储等低频读取的场景中,则能够思考用机械硬盘来节约老本。
JDK
- ES 作为一个 Java 利用,也须要运行在与之相匹配的 JVM 上。
- 绝对于低版本的 ES,高版本的 ES 部署包会自带 JDK,所以只须要绝对于低版本的 ES,高版本的 ES 部署包会自带 JDK,所以只须要保障部署 ES 的零碎能够反对对应的 JDK 就好。
- 目前 ES 7.10 所对应的 JDK 是 JDK11 至 15,所以部署的零碎只有能反对 JDK11 以上的 JDK 版本都能够用来做部署。
- ES 的部署倡议尽量应用 ES 自带的 OpenJDK,因为 Elastic 团队会在每个版本中对对应的 OpenJDK 版本进行适配和调教,贸然应用其余版本的 JDK 可能会带来不可预感的问题。
理论系统配置
批改源并装置必要工具
sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \ -e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/ centos|g' \ -i.bak \ /etc/yum.repos.d/CentOS-Base.repo && \ yum makecache && \ yum update -y && \ yum install -y epel-release && \ yum install -y curl wget htop unzip && \ yum install -y docker docker-compose
开启 docker 服务
systemctl start docker
systemctl enable docker
零碎级别参数配置
配置策略
ES 作为一个简单的零碎,对于服务器资源的要求相较于个别的服务要更严格,这样也可能保障,ES 节点能够更好的施展其作用。本节将从各种零碎级别的参数要求及批改意义方面进行论述。
-
线程数配置 :ES 外部会启动包含而不仅限于 query 线程池、数据写入线程池、数据 refresh 线
程池、segment merge 线程池等等。在启动时 ES 会要求零碎中单个过程可用线程数
超过 65535。
- 文件具柄数 :在 Linux 里万物皆文件,线程也能够看作一种非凡的文件。在启动时 ES 会要求零碎中可关上的文件句柄数超过 65535。
- 缓存替换 :在运行时,ES 会倡议防止在运行过程中因为零碎的缓存替换而产生的性能损耗。大部分操作系统有可能会将零碎缓存中的数据交换到硬盘中。在 ES 节点部署的时候倡议禁止这一替换行为。
- 内存锁定 :在运行时,ES 会占用大量的内存进行一系列的数据处理。倡议开启内存锁定的配置,将它所占用的内存进行锁定。
配置流程
调整机器中每个过程能够领有的 VMA(虚拟内存区域) 的数量
- 批改文件:/etc/sysctl.conf
- 增加 / 批改一行:vm.max_map_count=655360
- 否则可能会遇到报错:max virtual memory areas vm.max_map_count [65530]
is too low, increase to at least [262144]
调整机器中每个过程可关上的文件句柄数量
- 批改文件:/etc/security/limits.conf
-
增加 / 批改两组:(* 作用于所有用户,次要用于服务器间接部署 ES;elasticsearch 作用于 elasticsearch 用户,次要用于服务器 rpm 包部署)
soft nofile 65535 => * soft nofile 655350
hard nofile 65535 => * hard nofile 655350
elasticsearch soft nofile 65535 => elasticsearch soft nofile 655350
elasticsearch hard nofile 65535 => elasticsearch hard nofile 655350
否则可能遇到报错:max file descriptors [65535] for elasticsearch process
is too low, increase to at least [65536]
开启内存锁定配置
- 批改文件:/etc/security/limits.conf
-
增加 / 批改两组:
- soft memlock 65535 => * soft memlock unlimited
- hard memlock 65535 => * hard memlock unlimited
- elasticsearch soft memlock 65535 => elasticsearch soft memlock unlimited
- elasticsearch hard memlock 65535 => elasticsearch hard memlock unlimited
- 否则可能在开启了内存锁定时(bootstrap.memory_lock: true)遇到报错:memory locking requested for elasticsearch process but memory is not locked
敞开内存替换区
$. swapoff -a
创立 ES 应用账号
-
ES 在启动时默认不容许应用 root 账户,所以须要事后创立 ES 本人的账户
- useradd -m elasticsearch
而后通过命令切换到 elasticsearch 账户中进行后续操作
su elasticsearch
装置实战
咱们查问:https://www.elastic.co/cn/dow…
tar 包装置
下载链接(前面以 ES_DOWNLOAD_URL 指代):
https://artifacts.elastic.co/…
如果网络比拟迟缓的话能够应用国内镜像:
https://mirrors.huaweicloud.c…
下载并解压:
- mkdir -p /usr/local/elasticsearch
- cd /usr/local/elasticsearch
- wget -c https://mirrors.huaweicloud.c…
- tar vxf elasticsearch-7.13.4-linux-x86_64.tar.gz
总用量 620
README.asciidoc–> 我的项目阐明文档
LICENSE.txt–> 协定
NOTICE.txt–> 一些协定 的阐明以及违反结果的正告
plugins–> 插件文件夹,目前为空,自定义插件会搁置在这里
logs–> 日志文件夹
lib–> 根底依赖库
bin–>ES 内置的命令行工具,包含启动、明码生成等
jdk–>ES 自带的 jdk
modules–>ES 内置的各种功能模块,包含 Xpack 等
config–>ES 的配置目录
最简启动
- 确认本人处于 非 root 用户,否则后续启动会报错
- cd elasticsearch-7.13.4
- ./bin/elasticsearch
-
如果要后盾启动,只需在启动命令前面加上 -d
- ./bin/elasticsearch -d
- 残缺门路 ./usr/local/elasticsearch/elasticsearch-7.13.4/bin/elasticsearch-d
在呈现相似这些日志的时候,代表节点启动实现
如果下面应用 elasticsearch 用户还报如下谬误:
咱们能够应用 chown 命令,ch 这里代表 change(扭转)的意思,own 代表英文单词的 owner(拥有者),连在一起就是 change owner , 扭转某个文件或者文件夹的拥有者; 咱们应用 chown 受权此 es 所在目录给用户 elasticsearch:
chown -R elasticsearch elasticsearch-7.13.4
ES 启动状态校验
You Know, for Search.
[root@host-10-10-10-4 elasticsearch-7.13.4]# curl http://localhost:9200
{
"name" : "host-10-10-10-4",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "bIHS7CueRTOE4ijhrrarRQ",
"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"
}
集群状态
[root@host-10-10-10-4 elasticsearch-7.13.4]# curl localhost:9200/_cat/health?v
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1643447017 09:03:37 elasticsearch green 1 1 0 0 0 0 0 0 - 100.0%
节点停机
- ps -ef | grep elasticsearch | grep -v grep | awk ‘{print$2}’ | xargs kill -15
- 没有后盾启动的话,间接 ctrl + c 会输入相似以下的日志
Docker 装置
先确保 Centos 机器上曾经装置了 docker engine 并且曾经启动。
下载对应镜像
docker pull elasticsearch:7.13.4
如果指标机器无奈上网,能够尝试通过其余机器下载并导入镜像
- 在宿主机下载镜像 docker pull elasticsearch:7.13.4
- 把镜像导出为文件 docker save -o elasticsearch-7.13.4-image.tar docker.io/elasticsearch:7.13.4
- 把导出的文件拷贝到指标机器 scp elasticsearch-7.13.4-image.tar root@192.168.1.100:/tmp
- 登陆指标机器 ssh root@192.168.1.100
- 导入指标镜像 docker load < elasticsearch-7.13.4-image.tar.
镜像校验
docker images
最简启动
docker network create elastic
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.14.3
docker run -it -d --rm --name es01-test --net elastic -p 127.0.0.1:9200:9200 -p 127.0.0.1:9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.14.3
如果须要开启包含禁止替换区、文件句柄限度等设置:
- 内存锁定:–ulimit memlock=-1:-1
- 关上文件下限:–ulimit nofile=655350:655350
- 敞开替换区:-e “bootstrap.memory_lock=true”
- 后盾运行:-d
-
残缺命令:
docker run -it -d --rm --ulimit memlock=-1:-1 --ulimit nofile=655350:655350 --name es01-test --net elastic -p 127.0.0.1:9200:9200 -p 127.0.0.1:9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.14.3
通过命令查看日志:docker logs -f es01-test
呈现以下日志内容代表启动胜利
ES 启动状态校验
同上
节点停机
通过命令 docker ps -as 找到对应的 docker container
xiexinming@bogon ~ % docker ps -as
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
03eca81f7874 docker.elastic.co/kibana/kibana:7.13.4 "/bin/tini -- /usr/l…" 2 weeks ago Up 11 days 127.0.0.1:5601->5601/tcp kib01-test 36B (virtual 1.35GB)
cb71f81b72b7 docker.elastic.co/elasticsearch/elasticsearch:7.13.4 "/bin/tini -- /usr/l…" 2 weeks ago Up 2 weeks 127.0.0.1:9200->9200/tcp, 127.0.0.1:9300->9300/tcp es01-test 96.5MB (virtual 1.12GB)
关掉对应的 container docker stop es01-test
开发模式 VS 生产模式
本节中的 ES 是最简装置、启动,所以是以单节点(single-node)的形式启动。单节点启动默认是开发模式,会疏忽绝大部分的启动校验。在不确定生产模式的强制校验项有哪些时,倡议所有的部署节点的初始化流程都按上文中的配置流程逐个进行配置。
生产模式启动强制校验项:
配置文件 | 阐明 | 配置项 | 默认值 | 期望值 |
---|---|---|---|---|
conf/jvm.options | 最大 / 小内存 | -Xmx -Xms | -Xmx1g -Xms1g | 部署节点可用内存的一半 |
elasticsearch.yml | 内存锁定 | bootstrap.memory_lock | NA | True |
/etc/sysctl.conf | 虚拟内存区域 | vm.max_map_count | 65530 | >262144 |
/etc/security/limits.conf | 文件可关上具柄数 | soft/hard nofile | 65536 | 655350 |
/etc/security/limits.conf | 内存锁定 | soft/hard memlock | NA | unlimited |
/etc/security/limits.conf | 虚拟内存 | soft/hard as | NA | unlimited |
/etc/security/limits.conf | 最大过程数 | soft/hard nproc | NA | soft/hard nproc NA 10240 |
/etc/security/limits.conf | 最大文件空间 | soft/hard fsize | NA | unlimited |
集群的组建
单个的 ES 节点能够反对一般的测试,然而对于生产的应用,特地是对数据安全性、可靠性、性能等维度有要求的应用中,应思考应用 ES 集群反对生产的应用。本节将依据装置形式的不同,别离对集群的组建配置等进行论述。
参考:
https://www.jianshu.com/p/ced…