nodejs如何高可靠的连接Elasticsearch

举报
xiaoming 发表于 2020/02/12 17:48:44 2020/02/12
【摘要】 nodejs 高可靠 Elasticsearch

在nodejs中连接Elasticsearch的快速入门,推荐看https://www.npmjs.com/package/@elastic/elasticsearch,下面描述如何可靠的连接Elasticsearch

先上最终客户端的初始化代码,再解释


  1. function clientNodeFilter (node) {      

  2.   // avoid master only nodes      

  3.   if (node.roles.master === true &&      

  4.       node.roles.data === false &&      

  5.       node.roles.ingest === false) {      

  6.     return false      

  7.   }      

  8.   // avoid data only nodes      

  9.   if (node.roles.master === false &&      

  10.       node.roles.data === true &&      

  11.       node.roles.ingest === false) {      

  12.     return false      

  13.   }    

  14.   return true      

  15. }      

  16.     

  17. const { Client } = require('@elastic/elasticsearch')      

  18. const client = new Client({ node: ['http://x.x.x.x:9200','http://y.y.y.y:9200','http://z.z.z.z:9200'],      

  19. sniffInterval: 30000,      

  20. sniffOnStart: true,      

  21. sniffOnConnectionFault: true,  

  22. nodeFilter: clientNodeFilter})    


说明:

  1. 使用es集群的多个ip来初始化client,以免节点故障。代码18行

  2. 打开嗅探后,集群新扩容的节点也能被client自动发现。此项配置默认为false,可以显式设置嗅探间隔时间(ms)来打开。代码19行

  3. 客户端启动便嗅探一次。代码20行

  4. 连接故障后,嗅探一次。代码21行

  5. 大规模Elasticsearch集群通常配置角色分离(华为云css服务提供界面配置角色分离)。如果(最好)有独立的client,请求也最好只发给client,默认的nodeFilter设置还会发给data节点,需要覆盖默认实现。代码22行


还有一件事

Elasticsearch的nodejs客户端在版本6.8.3/7.4.0之前有个bug,会给嗅探出来的所有节点(包括独立的master)发请求,如果你用了老版本,赶紧升级吧。

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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