3.4.入门篇
3.4.1.Elastic Stack 安装部署
3.4.1.1.安装Elasticsearch(本地及docker)
创作人:陈晨
审稿人:刘帅
本章介绍 Elasticsearch (简称 ES )的安装和部署,将会从以下几个方面进行阐述:
l 环境准备
l 系统级别参数配置
l 下载、安装及启动
l 常见问题及解决方案
环境准备
ES 和其他的服务一样,也是部署在服务器上进行使用的系统,为了能够让它更好的支持我们的实际使用,ES 节点/集群的部署环境就显得尤为重要。本节将从系统环境的选择,必须基础应用的安装等方面进行阐述。
环境选择策略
操作系统
由于绝大部分 ES 集群的部署环境都是基于公有云 Linux 的,所以本文主要以 CentOS7 为基础进行阐述,同时也会针对 Windows 和 MacOS 环境的安装部署进行简要描述。
选择 CentOS 7 作为基础系统有以下一些考虑:
l ES 虽然是基于JVM 上运行的 Java 项目,但它在启动、运行时会对一些环境参数,如虚拟内存数、文件句柄等有所要求。
l 国内的 ES 使用和部署中,以 CentOS 和 Debian 为主,存在少量的 Ubuntu 和 极少量的 Windows 的服务器。
官方团队对 64 位系统进行了稳定性测试和系统性兼容,其中除了以下一些版本以外都可以较好的支持:
l CentOS 家族(6、7、8)中,CentOS6 不支持 7.9.2 版本捆绑的 JDK15+ 。
l Debian 家族(7~10)中, Debian 7 从 5.x 版本开始不支持。
l Ubuntu 家族(14、16、18)中,Ubuntu 14.04 从 7.x 版本开始不支持,但 Ubuntu 16,18 都支持 7.x 。
l Windows 家族(Windows server 2012/R2、2016、2019)中,只有 Windows server 2019 对 ES 7.7 之前的版本兼容性有限。
再结合通用云厂商和自建服务器的操作系统选型中,CentOS7 得到了较好的支持和维护,所以此处我们选择以 CentOS7 作为首选操作系统。
内存、CPU
ES 节点启动的默认需求为1C2G (1 核 CPU,2GB 内存)
通过调整 $ES_HOME/config/jvm.options 文件中的堆栈配置,也可以让 ES 实例在 1C1G 甚至更小资源的服务器上启动。
注意:更小的可用资源意味着更差的性能和节点稳定性,甚至节点启动失败。
实际生产中,更大的内存意味着更高的数据处理能力,更多的 CPU 核数可以支持更多的内部线程,但是无可避免的,更多的资源也意味着更高的系统开销。一般情况,内存和 CPU 的配
比大致为 1:2 到 1:4 用以支持绝大部分数据存取、聚合等操作的使用,但是实际的内存、CPU的用量和配比还需要用真实数据模拟真实生产环境的压测结果为准。
一般的内存、CPU 配置策略大致为以下几种:
l master 节点需要适当大小的内存
l coordination 节点需要较大的内存和 CPU
l ingest 节点需要较大的 CPU
l data 节点需要较大的内存和硬盘
实际生产中,需要通过压测来确定最佳的内存、CPU 配比,一般情况服务器的内存除了系统占用的固定内存之外,会建议设置为服务器可用内存的一半。
除了 ES 实例之外,ES 所维护的 Lucene 也是 Java 库,也需要占用相应的内存。此时,ES的最大/小堆栈内存建议不超过 31G,否则会因为指针压缩的原因白白浪费内存资源,甚至可能出现数据存取更慢的问题。如果目标服务器的可用内存超过 64G 的话,可以考虑通过端口的配置部署多个 ES 实例。
磁盘
l 没做特殊配置的话,ES 会在写入及不断的查询过程中,将数据集中存在最新修改和召回的数据缓存在节点/集群的各级内存(缓存)中。同时将绝大部分数据存在磁盘中的各种索引文件中,仅在内存中保留一部分索引文件的索引以加速数据的读写。
l 不同于内存中的文件,ES 放置在磁盘中的文件的读写是随机的不是顺序的,所以更快的随机读写速度将使 ES 提供更快的数据存取速度。
l 在在线搜索等高频存取的场景中,更建议使用固态硬盘以支持数据的高速读写。
l 在离线的日志存储等低频读取的场景中,则可以考虑用机械硬盘来节约成本。
JDK
l ES 作为一个 Java 应用,也需要运行在与之相匹配的 JVM上。
l 相对于低版本的 ES,高版本的 ES 部署包会自带 JDK,所以只需要保证部署 ES 的系统可以支持对应的 JDK 就好。
l 目前 ES 7.10 所对应的 JDK 是 JDK11 至 15,所以部署的系统只要能支持 JDK11 以上的 JDK 版本都可以用来做部署。
l 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 服务
l systemctl start docker
l systemctl enable docker
《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.1.Elastic Stack 安装部署—— 3.4.1.1.安装Elasticsearch(本地及docker)(2) https://developer.aliyun.com/article/1231512