在写本文时就在想,如果让你负责一个elasticsearch集群,从零开始,你会从哪些方面考虑?我们也知道es基本都是开箱即用,而且也很好用,配置参数也用默认的就好,只是这么简单的用不难,但是要想更好的用好es集群,那要怎么去做设计呢?我们知道想要用es集群,首先要安装es集群,当然es安装需要硬件,也就是服务器的支撑,如果安装好了es集群,也不能空跑吧,所以要有数据,所以要写入数据,当然写入数据是为了后期有所用,比如查询数据,做分析等。用是可以了,如果数据量增大,业务更加复杂,还要考虑如何更好的用,怎么用可以提高效率?一个集群也不可能只有一个人用呀,如果很多人用,就会存在不安全,需要考虑权限吧,想想也算健全了,但是万一哪天机器出问题了,数据丢失了怎么办?是不是需要做可靠的备份呢?如果整个集群完完了,又怎么办呢?当然这样的情况基本不可见,但是是不是要考虑进来呢?就算从安全和容错,以及性能方面都考虑清除了,集群正常运行了,很多时候都难免天有不测风云,是不是要经常关注整个集群或者索引的一些状态信息呢?不能时时刻刻盯着集群的健康状态吧,所以这里需要监控一下集群吧,当然到这里位置整个集群算是很好的运行起来了,但是后期随着数据量的增加,业务的增长,运维难度就会越来越大,所以前期的设计很重要,规范化管理很重要。大概就想了这么多,本文的内容也是围绕着这些问题进行展开的。有兴趣的请继续往下读。声明:本文是elasticsearch的版本为7.8.1
一、如何对机器进行选择1、内存
如果有一种资源是最先被耗尽的,它可能是内存。排序和聚合都很耗内存,所以有足够的堆空间来应付它们是很重要的。即使堆空间是比较小的时候, 也能为操作系统文件缓存提供额外的内存。因为 Lucene 使用的许多数据结构是基于磁盘的格式,Elasticsearch 利用操作系统缓存能产生很大效果。
64 GB 内存的机器是非常理想的, 但是32 GB 和16 GB 机器也是很常见的。
2、磁盘
硬盘对所有的集群都很重要,对大量写入的集群更是加倍重要(例如那些存储日志数据的)。硬盘是服务器上最慢的子系统,这意味着那些写入量很大的集群很容易让硬盘饱和,使得它成为集群的瓶颈。
如果你负担得起 SSD,它将远远超出任何旋转介质(注:机械硬盘,磁带等)。 基于 SSD 的节点,查询和索引性能都有提升。如果你负担得起,SSD 是一个好的选择,如果使用了机械磁盘,使用 RAID 0 是提高硬盘速度的有效途径,对机械硬盘和 SSD 来说都是如此。没有必要使用镜像或其它 RAID 变体,因为高可用已经通过 replicas 内建于 Elasticsearch 之中,再不济,一台机器也多弄几个磁盘,这样在配置的可以指定多几个目录,这样能降低一个磁盘的io压力。
3、cpu
大多数 Elasticsearch 部署往往对 CPU 要求不高。因此,相对其它资源,具体配置多少个(CPU)不是那么关键。但是还是建议16核以上作为生产环境,因为elasticsearch的thread pool和这个配置直接相关。如果你要在更快的 CPUs 和更多的核心之间选择,选择更多的核心更好。多个内核提供的额外并发远胜过稍微快一点点的时钟频率。
4、网络
快速可靠的网络显然对分布式系统的性能是很重要的。 低延时能帮助确保节点间能容易的通讯,大带宽能帮助分片移动和恢复。现代数据中心网络(1 GbE, 10 GbE)对绝大多数集群都是足够的。Elasticsearch 假定所有节点都是平等的—并不会因为有一半的节点在150ms 外的另一数据中心而有所不同。更大的延时会加重分布式系统中的问题而且使得调试和排错更困难。
参考《ES权威指南》:https://www.elastic.co/guide/cn/elasticsearch/guide/current/hardware.html
二、集群安装要怎么配置和设计 2.1、系统设置官网:https://www.elastic.co/guide/en/elasticsearch/reference/7.8/system-config.html
1、设置系统配置 ulimit #暂时修改,切换到该用户es,ulimit -n 65535 /etc/security/limits.conf #永久修改 es - nofile 65535 ulimit -a #查看当前用户的资源限制 2、禁用sawpping 方式一: swapoff -a #临时禁用所有的swap文件 vim /etc/fstab #注释掉所有的swap相关的行,永久禁用 方式二: cat /proc/sys/vm/swappiness #查看该值 sysctl vm.swappiness=1 #临时修改该值为1 vim /etc/sysctl.conf #修改文件 永久生效 vm.swappiness = 1 #如果有该值,则修改该值,若没有,则追加该选项,sysctl -p生效命令 方式三: 配置elasticsearch.yml文件,添加如下配置: bootstrap.memory_lock: true GET _nodes?filter_path=**.mlockall #检查如上配置是否成功 注意:如果试图分配比可用内存更多的内存,mlockall可能会导致JVM或shell会话退出! 3、配置文件描述符 ulimit -n 65535 #临时修改 vim /etc/security/limits.conf #永久修改 es soft nproc 65535 es hard nproc 65535 4、配置虚拟内存 sysctl -w vm.max_map_count=262144 #临时修改该值 vim /etc/sysctl.conf #永久修改 vm.max_map_count=262144 5、配置线程数 ulimit -u 4096 #临时修改 vim /etc/security/limits.conf #永久修改