ElasticSearch使用最佳实践-写入规范

网友投稿 1165 2022-05-29

1.客户端的使用规范

1)客户端禁止配置EsMaster节点的IP和Port:EsMaster实例为重要的管理进程,为确保ES集群稳定性,不允许配置EsMaster节点IP和Port在客户端的IP列表中。EsMaster默认端口为24148,检查客户端不允许配置此端口。

2)若未规划EsClient角色,则客户端配置多个EsNode实例的IP和Port列表:客户端需要配置多个EsNode实例的IP和Port列表,实现负荷分担和负载均衡,避免单EsNode性能瓶颈。建议所有的EsNode实例的IP和Port都配置在客户端IP列表中。各EsNode默认端口如下:

EsNode1:24100

EsNode2:24102

EsNode3:24104

EsNode4:24106

EsNode5:24108

EsNode6:24110

EsNode7:24112

EsNode8:24114

EsNode9:24116

若集群中存在以上某些EsNode角色,则根据以上端口对应关系,检查是否配置了这些端口。若规划了EsClient端口,则建议客户端配置上所有EsClient的IP和Port,减轻EsNode的内存压力。

ElasticSearch使用最佳实践-写入规范

EsClient默认端口为24118,检查客户端是否配置了此端口

3)在应用程序结束时需要调用Client的close()方法。任务运行过程中不要频繁创建和关闭Client。建议一个进程或者一个线程创建一个Client。

2. 多线程并发写入

1)使用多线程方式并发索引数据:应用程序使用多线程并发索引数据,推荐的并发线程数为主机CPU核数的1~2倍。比如32核的主机,可设置线程数为30~60个。

2)运行多个客户端并发执行任务:运行多个客户端并发执行索引/查询任务,提升性能。

3. Bulk批量提交请求

1)使用批量请求,设置合理的数据条数:使用bulk命令进行批量索引数据时,每批次提交的数据大小为5~15MB;比如每条数据大小为1k,那么建议批量提交的数据条数为5000条;当前集群的最佳批量请求大小,可以从5MB开始测试,缓慢增加这个大小,直到写入性能不能提升为止。

2)每个批量请求中只处理一个索引的数据:一个bulk请求只写入一个索引的数据,不建议一个bulk请求同时写入多个索引的数据,不同索引的数据分多个bulk请求提交。

4. 提升写入速度参数设置

1)修改索引刷新时间:默认为1s,可修改为60s。

直接设置:

curl -XPUT "http://ip:httpport/index/_settings?pretty" -H 'Content-Type: application/json' -d'

{

"refresh_interval" : "60s"

}'

通过索引模板设置:

curl -XPUT --tlsv1.2 --negotiate -k -u : "https://127.0.0.1:24100/_template/template_1" -H 'Content-Type: application/json' -d'

{

"template": "index*",

"settings": {

"refresh_interval": "60s"

}

}'

其中"template": "index*"表示索引的匹配模式,表示以index开头的索引都会通过此模板生效。

2)修改Translog策略参数:

直接设置(设置此参数时需要先关闭索引,设置成功后再打开索引,会影响业务运行,建议走变更流程):

Curl –XPUT “http://ip:httpport/index/_settings?pretty” –H ‘Content-Type: application/json' -d'

{

"translog. durability ":" async ",

"sync_interval": "180s",

"translog.flush_threshold_size":"5gb"

}'

通过索引模板设置:

curl -XPUT --tlsv1.2 --negotiate -k -u : "https://127.0.0.1:24100/_template/template_1" -H 'Content-Type: application/json' -d'

{

"template": "index*",

"settings": {

"index": {

"translog": {

"flush_threshold_size": "500mb",

"sync_interval": "120s",

"durability": "async"

}

}

}

}'

其中"template": "index*"表示索引的匹配模式,表示以index开头的索引都会通过此模板生效。

3)针对于5机器节点以上,为了让各个实例上的分片均匀分布,添加如下参数,设置每个索引在单个实例上的分片个数,如下所示为每个索引在每个实例上的分片为2个。

直接设置:

curl -XPUT 'http://http:httpport/myindex/_settings?pretty' -H 'Content-Type:application/json' -d '

{

"index.routing.allocation.total_shards_per_node":"2"

}'

通过索引模板设置:

curl -XPUT --tlsv1.2 --negotiate -k -u : "https://127.0.0.1:24100/_template/template_1" -H 'Content-Type: application/json' -d'

{

"template": "index*",

"settings": {

"index.routing.allocation.total_shards_per_node":"2"

}

}'

其中"template": "index*"表示索引的匹配模式,表示以index开头的索引都会通过此模板生效。

5. Indexing Buffer

indexing buffer在为doc建立索引时使用,当缓冲满时会刷入磁盘,生成一个新的 segment,这是除refresh_interval外另外一个刷新索引,生成新segment的机会。每个 shard有自己的indexing buffer,下面的关于这个buffer大小的配置需要除以这个节点上所有的shard数量。

indices.memory.index_buffer_size

默认为整个堆的10%,如30GB堆内存,约占300M,在大量的索引操作时,可以考虑适当增大,但不要超过20%。

EI企业智能 elasticsearch FusionInsight

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:AIOps产品与架构浅析
下一篇:集成深度学习与CAD/CAD系统
相关文章