集群中节点的id是由discovery定义的,默认es有两种实现方式,一种是
org.elasticsearch.discovery.local.LocalDiscovery
表示把es的节点启动在同一个jvm的环境下,这样就可以通过AtomicLong来进行数字递增的id生成。
另一种是
org.elasticsearch.discovery.zen.ZenDiscovery
它是分布式环境下的节点发现机制,由于是分布式环境,数字递增形式比较难行得通,于是在zenDiscovery里面是使用64位的uuid来作为节点id。每次节点重启其id都是会变的,重新生成一个uuid,这与我的期望不符合,所以只能通过修改源码来解决。我这的需求就是每个节点必须有唯一的一个id,并且这个id不能变,考虑了下决定通过ip+端口的方式来作为节点的id,比如127.0.0.1:9300的节点id就是1270019300。下面是修改的源码。在ZenDiscovery这个类下
@Override protected void doStart() throws ElasticSearchException { Map<String, String> nodeAttributes = discoveryNodeService.buildAttributes(); // note, we rely on the fact that its a new id each time we start, see FD and "kill -9" handling //String nodeId = UUID.randomBase64UUID();原来的方法,生成64位的uuid InetSocketTransportAddress address = (InetSocketTransportAddress)transportService.info().getAddress().publishAddress(); String host = address.address().getAddress().getHostAddress().replace( "." , "" ); //获得ip int port = address.address().getPort(); //获得端口 String nodeId = host + port; localNode = new DiscoveryNode(settings.get( "name" ), nodeId, transportService.boundAddress().publishAddress(), nodeAttributes); latestDiscoNodes = new DiscoveryNodes.Builder().put(localNode).localNodeId(localNode.id()).build(); nodesFD.updateNodes(latestDiscoNodes); pingService.start(); // do the join on a different thread, the DiscoveryService waits for 30s anyhow till it is discovered asyncJoinCluster(); } |
这样的话每次节点启动生成的nodeid都是一样的。
from internet
相关推荐
- 修改`elasticsearch.yml`中的`cluster.name`设置集群名,避免与其他Elasticsearch实例冲突。 - 设置环境变量`JAVA_HOME`指向JDK的安装路径,确保Elasticsearch能识别Java运行环境。 3. **启动与管理**: - ...
- **节点(Node)**:每个运行Elasticsearch实例的服务器称为一个节点。 - **索引(Index)**:类似于数据库中的表,用于存储具有相似特征的数据。 - **文档(Document)**:索引中的单个记录,以JSON格式存在。 - **...
装饰器是一种元编程特性,允许我们在不修改源代码的情况下,为对象、类或方法添加额外的行为或属性。 ### ES7装饰器简介 装饰器是JavaScript的一个提案,目前处于Stage 2阶段,它们在代码执行前被应用,可以用来...
4. **ID(ID)**:每个文档都有唯一的ID,可自定义或由Elasticsearch自动生成。 三、API与RESTful操作 1. **CRUD操作**:Elasticsearch通过HTTP RESTful API实现创建(Create)、读取(Read)、更新(Update)和...
默认情况下,Elasticsearch 会使用随机生成的 UUID 的前 7 个字符作为节点 ID。然而,这个 ID 在节点重启后不会改变。因此,建议为节点配置更有意义的名称,以便在重启节点后该名称仍然存在: ``` node.name: prod-...
在 Elasticsearch 中,倒排索引是一种特殊的数据结构,用于高效地支持全文搜索。它将每个词项(token)与包含该词项的文档列表关联起来,而不是像传统的索引那样将文档与关键词关联。这样,当查询词项时,搜索引擎只...
一个集群可以由一个或多个服务器(节点,Node)组成,它们通过共享相同的 `cluster.name`(默认为 "elasticsearch")来形成同一个集群。每个节点通过 `node.name` 进行区分,这个名字在默认情况下会在节点启动时自动...
《Elasticsearch(ES)深度解析与实战应用》 Elasticsearch(ES)是一种基于Lucene的开源全文搜索引擎,以其高效、可扩展性以及实时分析能力,在大数据时代中扮演着重要角色。它不仅是一个搜索引擎,更是一个分布式...
适用于Node.js诊断报告使用者的工具包 特征 针对诊断报告运行启发式(“规则”)以发现需要注意的问题 带有一组内置规则和“推荐”配置 自定义,可扩展和共享的规则 专用“智能”诊断报告差异 “与上次报告相比,...
启动ipfs-client,相当于启动了一个ipfs节点,节点间文件自动切割分发,多个区域内,可通过ipfs-client实现文件互通,并保证文件不可篡改, 如果启用了ipfs-search-es模块,可针对文件类型、名称、大小等信息,进行...
1. **遍历AST**:NodeTraverse提供了一种深度优先搜索(DFS,Depth-First Search)的方式来遍历AST的各个节点。这使得我们可以访问和修改代码的每一个细节,例如: ```javascript NodeTraverse.traverse(ast, { ...
npm install babel-core@6.26.0 babel-loader@7.1.2 babel-preset-es2015 babel-preset-react@6.24.1 babel-preset-env@1.6.1 --save-dev ``` #### 九、配置 Webpack 以使用 Babel 更新 `webpack.config.js` 文件...
- 创建/更新/删除论坛:如`/api/forum/create`,`/api/forum/update/:id`,`/api/forum/delete/:id`。 - 发布/回复话题:如`/api/topic/post`,`/api/reply/add`。 - 搜索话题:如`/api/topic/search`。 - 用户...
exclude: /node_modules/ // 排除 node_modules 目录 } ] }, plugins: [ new HtmlWebpackPlugin({ template: './public/index.html', // HTML 模板文件 favicon: './public/favicon.ico' // 可选:设置图标 ...
- 引入:在JavaScript文件中引入库,例如`const jwt = require('rex-jwt-client')`或ES模块导入`import jwt from 'rex-jwt-client'`。 - 使用示例:创建JWT,`jwt.sign({ payload: { user_id: 1 }, secret: 'your_...