`
wbj0110
  • 浏览: 1609459 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

elasticsearch更改node id生成方法

阅读更多
集群中节点的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
分享到:
评论

相关推荐

    最新版windows elasticsearch-8.1.1-windows-x86_64.zip

    - 修改`elasticsearch.yml`中的`cluster.name`设置集群名,避免与其他Elasticsearch实例冲突。 - 设置环境变量`JAVA_HOME`指向JDK的安装路径,确保Elasticsearch能识别Java运行环境。 3. **启动与管理**: - ...

    elasticsearch-7.6.2.zip

    - **节点(Node)**:每个运行Elasticsearch实例的服务器称为一个节点。 - **索引(Index)**:类似于数据库中的表,用于存储具有相似特征的数据。 - **文档(Document)**:索引中的单个记录,以JSON格式存在。 - **...

    Node.js-Node.js的简单路由器ES7装饰器

    装饰器是一种元编程特性,允许我们在不修改源代码的情况下,为对象、类或方法添加额外的行为或属性。 ### ES7装饰器简介 装饰器是JavaScript的一个提案,目前处于Stage 2阶段,它们在代码执行前被应用,可以用来...

    Elasticsearch技术解析与实战 ,朱林(完整板)

    4. **ID(ID)**:每个文档都有唯一的ID,可自定义或由Elasticsearch自动生成。 三、API与RESTful操作 1. **CRUD操作**:Elasticsearch通过HTTP RESTful API实现创建(Create)、读取(Read)、更新(Update)和...

    elasticsearch配置优化文档

    默认情况下,Elasticsearch 会使用随机生成的 UUID 的前 7 个字符作为节点 ID。然而,这个 ID 在节点重启后不会改变。因此,建议为节点配置更有意义的名称,以便在重启节点后该名称仍然存在: ``` node.name: prod-...

    Elasticsearch 28道面试题和答案.docx

    在 Elasticsearch 中,倒排索引是一种特殊的数据结构,用于高效地支持全文搜索。它将每个词项(token)与包含该词项的文档列表关联起来,而不是像传统的索引那样将文档与关键词关联。这样,当查询词项时,搜索引擎只...

    elasticsearch 第一篇(入门篇)1

    一个集群可以由一个或多个服务器(节点,Node)组成,它们通过共享相同的 `cluster.name`(默认为 "elasticsearch")来形成同一个集群。每个节点通过 `node.name` 进行区分,这个名字在默认情况下会在节点启动时自动...

    es学习笔记.zip

    《Elasticsearch(ES)深度解析与实战应用》 Elasticsearch(ES)是一种基于Lucene的开源全文搜索引擎,以其高效、可扩展性以及实时分析能力,在大数据时代中扮演着重要角色。它不仅是一个搜索引擎,更是一个分布式...

    report-toolkit:适用于Node.js诊断报告使用者的工具包

    适用于Node.js诊断报告使用者的工具包 特征 针对诊断报告运行启发式(“规则”)以发现需要注意的问题 带有一组内置规则和“推荐”配置 自定义,可扩展和共享的规则 专用“智能”诊断报告差异 “与上次报告相比,...

    一个基于IPFS的全球分布式文件系统,也是一个简单的MQ中间件,可用于直播本地推流,全球实时同步,多区域内网融合等

    启动ipfs-client,相当于启动了一个ipfs节点,节点间文件自动切割分发,多个区域内,可通过ipfs-client实现文件互通,并保证文件不可篡改, 如果启用了ipfs-search-es模块,可针对文件类型、名称、大小等信息,进行...

    js代码-NodeTraverse

    1. **遍历AST**:NodeTraverse提供了一种深度优先搜索(DFS,Depth-First Search)的方式来遍历AST的各个节点。这使得我们可以访问和修改代码的每一个细节,例如: ```javascript NodeTraverse.traverse(ast, { ...

    React+Webpack+babel项目搭建

    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` 文件...

    vue-forum-api:论坛接口

    - 创建/更新/删除论坛:如`/api/forum/create`,`/api/forum/update/:id`,`/api/forum/delete/:id`。 - 发布/回复话题:如`/api/topic/post`,`/api/reply/add`。 - 搜索话题:如`/api/topic/search`。 - 用户...

    React_TypeScript_Webpack:使用TypeScript和Webpack进行React的基本模板设置

    exclude: /node_modules/ // 排除 node_modules 目录 } ] }, plugins: [ new HtmlWebpackPlugin({ template: './public/index.html', // HTML 模板文件 favicon: './public/favicon.ico' // 可选:设置图标 ...

    rex-jwt-client

    - 引入:在JavaScript文件中引入库,例如`const jwt = require('rex-jwt-client')`或ES模块导入`import jwt from 'rex-jwt-client'`。 - 使用示例:创建JWT,`jwt.sign({ payload: { user_id: 1 }, secret: 'your_...

Global site tag (gtag.js) - Google Analytics