- Elasticsearch在生产中使用cluster之前必须考虑许多事项:
- Path设置
- Cluster name设置
- Node name设置
- Network host设置
- Discovery设置
- Heap size设置
- JVM heap dump path设置
- GC logging设置
- Temporary directory设置
- JVM fatal error log设置
- Cluster备份
11.1 路径设置
- 如果正在使用 .zip 或 .tar.gz 归档, data 和 logs 目录在都在 $ES_HOME 下
- 如果这些比较重要的文件夹保留在默认位置,则 Elasticsearch 升级到新版本时,很有可能被删除
path:
logs: /var/log/elasticsearch
data: /var/data/elasticsearch
- RPM 和 Debian 发行版已经为 data 和 logs 使用了自定义路径。
- path.data 可以设置为多个路径,在这种情况下,所有路径将用于存储数据
- 属于单个shard的文件将全部存储在同一数据路径上:
path:
data:
- /mnt/elasticsearch_1
- /mnt/elasticsearch_2
- /mnt/elasticsearch_3
11.2 cluster名称
- 当node与cluster中的所有其他node共享 cluster.name 时,该node就能加入cluster
- 默认名称是 elasticsearch,但可将其更改为描述cluster用途的适当名称
cluster.name: logging-prod
- 确保不要在不同的环境中重复使用相同的cluster名称,否则最终可能会导致node加入错
误的cluster
11.3 node名称
- Elasticsearch 使用 node.name 作为 Elasticsearch 特定 instance 的可读标识符,因此它被包含在许多 API 的响应中
- 它默认机器在 Elasticsearch 启动时的主机名,但可以在 elasticsearch.yml 中更改配置,如下所示:
node.name: prod-data-2
11.4 Network host设置
- 默认情况下, Elasticsearch 仅绑定回送地址
- 例如 127.0.0.1 和 [::1]
- 这样足以在服务器上运行单nodecluster
- 实际上,可以从单node上相同的 $ ES_HOME 位置启动多个node
- 这对于测试 Elasticsearch 形成cluster的能力很有用,但不建议在生产中使用此配置
- 为了与其他服务器上的node形成cluster,node将需要绑定到非回送地址
- 尽管有许多网络设置方式,但通常需要配置的只是 network.host:
network.host: 192.168.1.10
- network.host 还可以设置一些特殊值
- 例如local,site,global 以及诸如 :ip4 和 :ip6
11.5 重要的discovery和cluster初始化设置
- 在投入生产之前,应配置如下2个参数,以便cluster中的node可以彼此发现并选举一个主node:
- discovery.seed_hosts
- cluster.initial_master_nodes
- discovery.seed_hosts
- 开箱即用,无需任何网络配置,Elasticsearch 将绑定到可用的回送地址,并将扫描 Local 端口9300 至 9305
- 如果要与其他主机上的node组成cluster,则必须设置 discovery.seed_hosts
discovery.seed_hosts:
- 192.168.1.10:9300
- 192.168.1.11
- seeds.mydomain.com
- [0:0:0:0:0:ffff:c0a8:10c]:9301
- cluster.initial_master_nodes
- 重新启动cluster或者有新node加入cluster时,不应使用此设置
discovery.seed_hosts:
- 192.168.1.10:9300
- 192.168.1.11
- seeds.mydomain.com
cluster.initial_master_nodes:
- master-node-a
- master-node-b
- master-node-c
11.6 Heap size设置
- 默认情况下,Elasticsearch 会告诉 JVM 使用最大和最小 1 GB 的堆
- Elasticsearch 将通过 [jvm.options]中指定整个堆
- Xms(最小堆大小) 和 Xmx(最大堆大小) 设置,应该让这 2 个参数相等
- Elasticsearch 将通过 [jvm.options]中指定整个堆
- Xmx 和 Xms 设置不应该超过宿主机内存的 50%
- Xmx 和 Xms 设置不超过 JVM 用于压缩对象指针(压缩 oops ), 确切的值会有有所不同,但是接近 32G,可以通过在日志中查找验证是否在阈值之下:
[1.9gb], compressed ordinary object pointers [true]
- 下面是通过 jvm.options 文件设置堆大小的示例:
1. -Xms2g
2. -Xmx2g
- 也可以通过环境变量设置堆大小
- 这可以通过在 jvm.options 文件,并通过 ES_JAVA_OPTS 设置以下值:
- 将最小和最大堆大小设置为 2 GB
- 将最小和最大堆大小设置为 4000 MB
- 这可以通过在 jvm.options 文件,并通过 ES_JAVA_OPTS 设置以下值:
ES_JAVA_OPTS="-Xms2g -Xmx2g" ./bin/elasticsearch
ES_JAVA_OPTS="-Xms4000m -Xmx4000m" ./bin/elasticsearch
11.7 VM heap dump 文件路径
- Elasticsearch 配置 JVM 的默认配置,将内存不足异常时生成的 heap dump 文件保存到data 目录
- 当以 RPM 和 Debian 的方式安装时,在 /var/lib/elasticsearch 目录下
- 当以 tar 和 zip 压缩包的方式安装时,data 目录在 Elasticsearch 的根目录下
- 如果此路径不适合存储 heap dump 文件,应该修改 jvm.options 的配置项 -
XX:HeapDumpPath=...- 当指定的是一个目录,那么 JVM 将以正在运行 instance 的 PID 作为 heap dump 的文件名
- 如果指定的是一个文件而不是一个目录,当出现内存不足异常时,必须确保这个文件不存在,否则 heap dump 将会生成失败
11.8 GC logging设置
- 默认情况下,Elasticsearch 启用 GC 日志
- 这些是在 jvm.options 中配置的,默认为与 Elasticsearch 日志相同的默认位置
- 默认配置每 64 MB 轮换一次日志,最多可消耗 2 GB 磁盘空间
11.9 临时文件
- 默认情况下,Elasticsearch 启动脚本在系统临时目录下立即创建私有临时目录
- 在某些 Linux 发行版上,如果最近未访问过文件和目录,则系统程序将从 / tmp 中清除文件和目录
- 如果长时间不使用需要临时目录的功能,这可能会导致在运行时, Elasticsearch 删除私有临时目录
- 如果随后使用需要临时目录的功能,则将导致问题
- 如果使用.deb 或.rpm 软件包安装 Elasticsearch 并在 systemd 下运行它,则定期清理计划将排除 Elasticsearch 使用的私有临时目录
- 但如果打算长时间在 Linux 上运行.tar.gz 发行版,则应考虑为 Elasticsearch 创建专用的临时目录,该临时目录不在将清除旧文件和目录的路径下
- 该目录应该设置权限,以便只有运行 Elasticsearch 的用户才能访问它
- 然后在启动 Elasticsearch 之前将 $ ES_TMPDIR 环境变量指向它
11.10 JVM 致命错误日志
- 默认情况下,Elasticsearch 将 JVM 配置为将致命错误日志写入默认日志目录
- 在RPM和Debian软件包上,这个目录是/var/log/elasticsearch.
- 在Linux 和 MacOS以及Windows发行版上,该logs 目录位于 Elasticsearch 安装的根目录下
- 这些是 JVM 在遇到致命错误(例如分段错误)时生成的日志
- 如果此路径不适合接收日志,则应将参数修改成备用路径 -XX:ErrorFile=... 在 jvm.options
11.11 cluster备份
- 在灾难中,快照可以防止永久性数据丢失
- 快照生命周期管理是对cluster进行定期备份的最简单方法
大数据视频推荐:
腾讯课堂
CSDN
ELK入门精讲
AIOps智能运维实战
ELK7 stack开发运维
大数据语音推荐:
ELK7 stack开发运维
企业级大数据技术应用
大数据机器学习案例之推荐系统
自然语言处理
大数据基础
人工智能:深度学习入门到精通
网友评论