情况是这样的:
已有的 8 台 es 节点,出现很大的写入慢的问题,主要原因有四个:
1、有 5 台节点所在服务器的磁盘是机械盘,而且是服役了两三年的老盘,读写性能差;
2、多个服务同用一个磁盘,磁盘可用性雪上加霜;
3、服务器有多个服务在跑,CPU、内存资源也存在竞争,频繁地切换用户态和内核态,消耗大;
4、业务成长快,数据量大,数据写入量也大。
这四个原因,导致了集群处于不稳定的状态,解决不稳定要亦步亦趋。那么解决不稳定的第一步就是给现有的集群添加节点,目的是缓和集群的写入瓶颈,对现有的集群的问题进行止血。
那么,对现有的 es 集群新添节点提出三个问题:
1、新添节点会对现有的集群产生什么行为?
2、如何新添节点?
3、怎么确保新添节点的工作?
各 es 节点是如何组成集群的
添加新节点前,得先弄明白集群是如何发现新节点的,并组成集群,过程如下:
各节点组成 Elasticsearch 集群很简单的,只要cluster.name
设置一致,并且机器在同一网段下,配置好discovery.zen.ping.unicast.hosts
列表,启动后 es 节点会通过列表自动发现对方,组成集群。Elasticsearch 采用广播的方式自动发现节点,需要等一小段时间才能发现新的节点。
另外,集群重新均衡分片默认并发操作数是 2,所以新节点加入到集群,并不会对现有的服务产压力,基本上无压力。
新节点部署
这里的新节点主要指节点角色的 node.data
设置为 ture
的,含有 data 角色的节点到集群中,master 节点会触发分片重新分配的行为。
节点部署流程如下:
1、找出新节点配置需要的参数,如cluster.name
、集群其他节点的 ip、本机的ip、heapSize 、数据存储目录等等参数
2、更新系统的 ulimit 和 sysctl
3、安装 JAVA 8 包括 JDK 和 JRE
4、安装 Elasticsearch 5.6.3
5、配置 Elasticsearch
6、启动 Elasticsearch
7、检查是否成功加入到集群,是否开始重新分片
8、检查新节点已经可以工作了
部署过程不再列出来,过程全部用 ansible 写好了。
部署完后的工作
1、检查集群是否开始均衡分片
2、定时检查确定是否完成分片均衡
注意事项
1、部署前,一定要检查部署参数是否跟现有集群匹配
2、一定要检查新机器的磁盘目录等等参数是否适合部署新节点
3、均衡分片所需的时间取决于已有的分片数、分片容量、网络和磁盘IO
本文由 Chakhsu Lau 创作,采用 知识共享署名4.0 国际许可协议进行许可。
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。