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

举报
FI小粉丝 发表于 2021/05/21 14:18:48 2021/05/21
【摘要】 1.客户端的使用规范1)客户端禁止配置EsMaster节点的IP和Port:EsMaster实例为重要的管理进程,为确保ES集群稳定性,不允许配置EsMaster节点IP和Port在客户端的IP列表中。EsMaster默认端口为24148,检查客户端不允许配置此端口。2)若未规划EsClient角色,则客户端配置多个EsNode实例的IP和Port列表:客户端需要配置多个EsNode实例的I...

1.客户端的使用规范

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

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

EsNode1:24100

EsNode2:24102

EsNode3:24104

EsNode4:24106

EsNode5:24108

EsNode6:24110

EsNode7:24112

EsNode8:24114

EsNode9:24116

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

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

3)在应用程序结束时需要调用Clientclose()方法。任务运行过程中不要频繁创建和关闭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%

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。