Elasticsearch 跨集群复制(CCR)的使用

2023-11-12

什么是 Elasticsearch 的跨集群复制

CCR - Cross Cluster Replication - 跨集群复制是 Elasticsearch v6.5 发布的一个新的特性,这个特性可以让你将一个集群的索引数据同步复制到远程的另外一个集群上面去。或者反过来,将一个远程的集群的索引数据同步的复制到本地 Elasticsearch 集群中来。集群复制类似于数据订阅的方式,一个集群的数据可以被多个集群订阅,也就是可以被复制到多个集群上面去。CCR 有两个角色,一个是 Leader,表示数据的源头,另外一个Follower,表示数据的订阅方,得到的是数据副本。CCR 工作在索引层面,使用 Pull 的模式,Follower 索引主动的去 Pull Leader 的数据。这个特性是 Elasticsearch 的商业特性,需要白金订阅

典型应用场景

如今,多集群的方式越来越普遍,一个公司或者一个团队,往往需要维护多套 Elasticsearch 集群,关于多集群的治理可以用 Elastic Cloud Enterprise 9 ,这里就先不展开了。另外很多公司的业务可能已经是遍布整个国家,甚至全球化。借助 CCR 刚好就可以解决下面的几个场景的问题:

  • 集群高可用以及灾难恢复
  • 实现数据的就近访问(地理)
  • 集中式的报告集群

第一个场景,关于保证 Elasticsearch 集群的高可用和灾难恢复,通过部署多套 Elasticsearch 集群,并且分布在不同地域的数据中心,然后接着 CCR,将数据做一个实时的同步,假如其中一个数据中心失联或者因为不可抗力的因素,如台风、地震,我们照样还能通过访问剩下的集群来获取完整的数据,如下图示意:

 

当 Production DC 失联之后,我们可以立即切换到 Disaster Recovery DC。

第二个场景,数据的就近访问,假设是一个大集团,有总公司和分公司,通过按地理位置来划分分公司自己的业务集群,不同城市的业务数据可以使用各自的集群,这样能够更快的进行当地业务的处理,不过也有一些数据,可能是总公司下发的数据,各个分公司都只能读,比如一些元数据,我们借助 CCR,可以把这部分数据下发到各个分公司的 Elasticsearch 集群,这样每个分公司都能实时的获取到最新的数据,并且直接访问各自的本地集群就可以了,大大提升访问速度。

上图中,Central DC 借助 CCR 实时的同步下发数据到 Singapore DC、Canada DC 和 Ireland DC。另外一个场景就是做集中式的报告分析,接上面的案例,我们反过来处理我们的业务数据,我们将每个分公司的业务数据实时的同步到总公司的 Elasticsearch 集群,这样总公司就有了每个分公司的完整数据,这样进行报告分析的时候,就可以直接的在总公司的 Elasticsearch 集群里面进行快速的可视化分析了。

 

 

如何使用

说了这么多 CCR 的适用场景,那接下来我们来看一下具体如何使用吧。

假设我有两个机器,北京集群(192.168.1.100:9300)和深圳集群(192.168.3.100:9300),这俩个集群之间的网络是互通的。现在我们希望把北京集群的销售数据同步到深圳集群上去。

第一步,在北京集群上,设置 Leader 索引

这个 Leader Index 需要设置好允许 Soft Deletes,这个参数非常重要,CCR 依赖这个特性来,如果这个索引之前没有开启过这个参数,需要重新创建索引才行。
比如,我创建一个 bj_sales 这个索引:

PUT bj_sales
{
  "settings": {
    "index.soft_deletes.retention.operations": 2000,
    "index.soft_deletes.enabled": true
  }
}

现在,这个 bj_sales 就已经具备跨集群复制的能力了。

第二步,北京集群,创建几条销售数据。

POST bj_sales/doc/
{
  "name":"Jack Ma",
  "age":40
}

POST bj_sales/doc/
{
  "name":"Pony Ma",
  "age":40
}

第三步,在深圳集群上,把北京集群的信息加到远程集群里面去。

PUT _cluster/settings
{
  "persistent": {
    "cluster": {
      "remote": {
        "bj": {
          "seeds": [
            "192.168.1.100:9300"
          ]
        }
      }
    }
  }
}

bj 是我们能够在深圳集群里面访问北京集群的命名空间。

第四步,我们在深圳集群里面通过 CCR API 创建一个索引,并订阅北京机器的 bj_sales 这个索引。

PUT /bj_sales_replica/_ccr/follow
{
  "remote_cluster" : "bj",
  "leader_index" : "bj_sales"
}

bj_sales_replica 是我们将要创建在深圳集群上的索引名称,remote 集群是 bj,订阅了对方的 bj_sales 索引。

第五步,验证

如果不出意外,我们在深圳集群上,应该就会创建一个新的 bj_sales_replica 的索引,并且里面会有两条数据,我们可以验证一下,如下:

GET bj_sales_replica/_search

返回结果如下:

{
  "took" : 6,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 2,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "bj_sales_replica",
        "_type" : "doc",
        "_id" : "iNZYymcBGbeu9hnEe7-G",
        "_score" : 1.0,
        "_source" : {
          "name" : "Pony Ma",
          "age" : 40
        }
      },
      {
        "_index" : "bj_sales_replica",
        "_type" : "doc",
        "_id" : "QdZYymcBGbeu9hnEJb-Z",
        "_score" : 1.0,
        "_source" : {
          "name" : "Jack Ma",
          "age" : 40
        }
      }
    ]
  }
}

果然,自动将远程集群的数据复制过来了。

继续验证,数据同步

我们在北京集群上,继续新增数据和删除数据,看看深圳集群是否都能正常同步。

POST bj_sales/doc/5
{
  "name":"Tony",
  "age":30
}
DELETE bj_sales/doc/5

这里就留给读者你自己去测试了。应该立马就能同步完成。

小结

经过我们简单的测试,我们已经能够感受到 CCR 的威力了,并且集群间同步的速度非常快。
大家如果有兴趣的话,可以进一步尝试它的 Auto Follow 17 的功能,对于一些自动创建的时序性索引更加方便,比如Metricbeat 或者 Logstash 产生的索引,也都能自动的进行跨集群的复制。
不过,目前 CCR 还处于 Beta 阶段,欢迎大家测试,如有发现任何 Bug,还请帮忙反馈。
文章来源:https://discuss.elastic.co/t/dec-22nd-2018-cn-elasticsearch-ccr/161626

https://www.elastic.co/cn/blog/cross-datacenter-replication-with-elasticsearch-cross-cluster-replication

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Elasticsearch 跨集群复制(CCR)的使用 的相关文章

随机推荐

  • 新型的刷脸支付方式给人们生活带来很多便利

    随着科技的飞速发展 人们的支付方式发生了巨大的改变 从传统的现金支付逐渐演变到移动支付 出门可以身无分文 仅仅揣上一台手机就能走天下 如今最流行的两大支付端是支付宝和微信支付 新型的支付方式给人们生活带来诸多的便利 就比如说 如果你不想在家
  • Unity 创建模型并让模型动态运动

    最近项目要实现一个做正弦运动的线条 我想到的方案是改变模型的顶点 利用函数y aSin bx C 让模型顶点的Y坐标 根据X坐标运动 这样就实现如下图的运动 废话不多说 是骡子是马拿出来遛一遛 来看一张效果图 好 开始说如何实现 首先新建一
  • opencv答题卡识别

    最近做了一个答题卡识别项目 主要是利用opencv图像处理方法识别答题卡 登录界面 主界面 图片 识别结果 代码部分 主程序main py import sys cv2 from PyQt5 QtGui import from PyQt5
  • 机器学习四 KNN算法

    KNN算法 前言 一 距离常量 二 KNN算法步骤 三 算法优点 四 算法缺点 五 代码示例 前言 KNN解决的是分类问题 k Nearest Neighbor算法 也叫K最近邻算法 K近邻算法KNN就是给定一个训练数据集 对新的输入实例
  • 三款程序员必备神器,爆炸!

    精致 简洁 极客范 想必是每个程序员的终生追求 从此篇文章中您将得到三款免费神器 良心到爆炸 第一 二款 哎 为啥是第一 二款呢 因为这两款神器配合使用的话效果增益 Android WIFI ADB Vysor 最近经常听同学们 即将毕业的
  • deep feature flow

    因为如果将图片识别的网络直接引入视频中的帧 就会发现计算量就会很大 作者提出的这个网络利用的是 1 fowl estimetion feature propagation 比一般的卷积计算速度快很多 2 在空间上找一个关键帧做图像识别 然后
  • 基于协同过滤算法和深度学习的音乐推荐

    基于协同过滤算法和深度学习的音乐推荐 协同过滤 音乐推荐 深度学习 音乐检索 文章目录 基于协同过滤算法和深度学习的音乐推荐 Github 地址 微信小程序版实现 介绍 参考项目 技术栈 Docker 部署 如用此方式部署 后面的手动安装步
  • SpringBoot中整合fastjson,自定义jackson、gson

    如今炒的火热的前后端分离项目 大多数开发人员选择RESTful设计风格 Java Web 人员经常要设计 RESTful API 这种设计通常使用 json 数据进行交互 那么前端传入的 json 数据如何序列化成 Java 对象 后端返回
  • Shell编程规范

    目录 1 Shell脚本概述 1 1shell的作用 1 2Shell脚本应用场景 1 3Shell脚本概念及构成 1 4脚本执行逻辑及执行方式 1 4 1指定路径去执行文件 需要有执行权限 1 4 2指定解释器去执行 不需要权限 1 4
  • PHP实现阿里云金融级实人认证人脸识别h5案例源码,带签名

    PHP部分 本代码段为项目中的代码 部分参数接收方式和路径请自行更改
  • linux hook

    http www codeproject com Articles 33340 Code Injection into Running Linux Application
  • 软件测试面试,一定要准备的7个高频面试题

    问题1 请自我介绍下 核心要素 个人技能优势 工作背景 经验亮点 参考回答 第一种 基本信息 离职理由 面试官您好 我叫张三 来自番茄市 在软件测试行业有 3 年的工作经验 做过 Web APP及小程序项目的测试工作 有独立负责整个项目的测
  • java -jar运行程序,但是断开服务器连接,就会关闭问题

    1 nohup java jar XXX jar gt log out 解析 把此进程作为后台进程运行 且把日志输出到log out文件中 2 指定jdk 进行项目启动 JAVA HOME bin java Xms 256m Xmx 102
  • vue面试题

    1 vue子组件调用父组件方法 方法1 直接在子组件中通过this parent event来调用父组件的方法 方法2 在子组件里用 emit向父组件触发一个事件 父组件监听这个事件就可以了 方法3 在父组件把方法传入子组件中 在子组件里直
  • JAVA开发运维(关于渗透测试与漏洞修复)

    对于C端的网站 H5 小程序或者app都需要进行渗透测试 渗透测试是模拟真实黑客的攻击手段 对目标网站或主机进行全面的安全评估 与黑客攻击不同 渗透测试的目的是尽可能多地发现安全漏洞 而真正的黑客只需要找到一种入侵 点击进入目标系统 一个好
  • Ubuntu18+ 使用redshift调色温 夜间闪烁

    问题描述 在Ubuntu 18 的系统上 使用redshift色温调节软件时 每到晚上 在切换软件时 还有其他奇怪的场景中 屏幕会有频闪现象 症状看来就像redshift反复开启和关闭 原因与解决方案 原因很可能是Ubuntu 18 的系统
  • chrome浏览器fitler中的XHR作用是什么

    chrome浏览器fitler中的XHR作用是什么 记录ajax中的请求 什么是 AJAX AJAX 异步 JavaScript 和 XML AJAX 是一种用于创建快速动态网页的技术 通过在后台与服务器进行少量数据交换 AJAX 可以使网
  • SpringBoot集成LayuiAdmin的简单使用

    SpringBoot LayuiAdmin的简单使用 分享一下SpringBoot集成LayuiAdmin的一些心得体会 刚开始网上找了半天没找到集成教程 鼓捣了一阵只好自己上手了 快速开始 1 准备一份LayuiAdmin 源码压缩包解压
  • js——修改对象里面的属性名

    代码 var e avatar uploads 20230816 b30044ba6735c83bdea9d43b85c4ae15 jpeg mobile code 111 nickname 小土豆 e aaa e avatar delet
  • Elasticsearch 跨集群复制(CCR)的使用

    什么是 Elasticsearch 的跨集群复制 CCR Cross Cluster Replication 跨集群复制是 Elasticsearch v6 5 发布的一个新的特性 这个特性可以让你将一个集群的索引数据同步复制到远程的另外一