nodejs如何高可靠的连接Elasticsearch
在nodejs中连接Elasticsearch的快速入门,推荐看https://www.npmjs.com/package/@elastic/elasticsearch,下面描述如何可靠的连接Elasticsearch
先上最终客户端的初始化代码,再解释
function clientNodeFilter (node) {
// avoid master only nodes
if (node.roles.master === true &&
node.roles.data === false &&
node.roles.ingest === false) {
return false
}
// avoid data only nodes
if (node.roles.master === false &&
node.roles.data === true &&
node.roles.ingest === false) {
return false
}
return true
}
const { Client } = require('@elastic/elasticsearch')
const client = new Client({ node: ['http://x.x.x.x:9200','http://y.y.y.y:9200','http://z.z.z.z:9200'],
sniffInterval: 30000,
sniffOnStart: true,
sniffOnConnectionFault: true,
nodeFilter: clientNodeFilter})
说明:
使用es集群的多个ip来初始化client,以免节点故障。代码18行
打开嗅探后,集群新扩容的节点也能被client自动发现。此项配置默认为false,可以显式设置嗅探间隔时间(ms)来打开。代码19行
客户端启动便嗅探一次。代码20行
连接故障后,嗅探一次。代码21行
大规模Elasticsearch集群通常配置角色分离(华为云css服务提供界面配置角色分离)。如果(最好)有独立的client,请求也最好只发给client,默认的nodeFilter设置还会发给data节点,需要覆盖默认实现。代码22行
还有一件事
Elasticsearch的nodejs客户端在版本6.8.3/7.4.0之前有个bug,会给嗅探出来的所有节点(包括独立的master)发请求,如果你用了老版本,赶紧升级吧。
- 点赞
- 收藏
- 关注作者
评论(0)