Elasticsearch:跨集群复制 Cross-cluster replication(CCR)

跨集群复制(CCR)功能支持将远程集群中的索引复制到本地集群。 可以在一些常见的生产用例中使用此功能:

  • 灾难恢复(DR)/高可用性(HA):如果主群集发生故障,则进行灾难恢复。 辅助群集可以用作热备份
  • 地理位置优越:在Elasticsearch中复制数据以更接近用户或应用程序服务器,从而减少延迟。可以在本地提供阅读服务
  • 集中报告:将数据从大量较小的集群复制回一个中央集群进行报告

请注意:CCR 是一个自6.7的一个platinum 功能。


CCR是按索引编制的

复制是针对每个索引来配置的。对于每个配置的复制,都有

  • 复制源索引称为leader索引
  • 复制目标索引称为follower索引

一个集群可以同时包含leader索引和follower索引:

Elasticsearch:跨集群复制 Cross-cluster replication(CCR)_第1张图片

 

复制是主动-被动关系

你可以使用leader索引来进行读或写,这个索引存在于远程集群里,但是你只能针对follower索引进行读操作。follower索引存在于本地的集群里。

Elasticsearch:跨集群复制 Cross-cluster replication(CCR)_第2张图片

复制是基于拉动的

关注者中的每个分片将从其领导者索引中的相应分片中拉取更改。follower的索引的分片数量与其leader索引相同

  • 所有操作均由follower复制
  • 复制几乎实时完成

           - 操作被follower分片拉动并批量建立索引

           - 多个请求同时进行,更改可以同时进行

Elasticsearch:跨集群复制 Cross-cluster replication(CCR)_第3张图片

 

CCR 的前提条件

在进行CCR之前,我们必须满足一下的一些条件:

  • 跨集群复制需要远程集群。
  • 本地集群的Elasticsearch版本必须与远程集群相同或比远程集群新。 如果较新,则这些版本还必须兼容以下矩阵中概述的版本。
  • 就像上面所讲的那样,因为CCR是一个 platinum 功能,你必须购买版权,或者你可以先尝试一个免费的测试

如果启用了弹性安全功能,那么你需要具有适当的用户权限。当我们使用elastic用户名时,需要特别注意,因为它具有超级用户的角色,你可能会无意中做了一个重大的更改。

  • 在远程群集上,您将需要具有read_ccr权限的群集用户,以及follower索引必须具有monitor及和read权限
  • 在本地群集上,同一用户将需要manage_ccr群集权限。follower 索引必须具有monitor,read, write 及manage_follow_index的权限

动手实践

在这个实验里,我们首先按照我之前的文章“Elasticsearch:跨集群搜索 Cross-cluster search (CCS)”来安装我们的两个集群。不过,这里有两个小的区别:

  1. 我们为每个集群打开安全。我们可以按照我之前的文章“Elasticsearch:设置Elastic账户安全”来对我们的两个集群设置安全。为了方便,我们将使用elastic用户来进行操作,尽管我们需要特别的小心
  2. 由于这个功能是 platinum 功能,在没有购买的情况下,我们可以进行尝试来测试这个功能。为此,我们必须安装如下的方式打开这个功能:

Elasticsearch:跨集群复制 Cross-cluster replication(CCR)_第4张图片

在上面,我们选择“Start trial”这个按钮,并接受相应的条件。接下来,我们就可以开始我们的测试了。

cluster_1

我们在cluster_1上创建如下的一个叫做twitter的索引:

POST _bulk
{"index":{"_index":"twitter","_id":1}}
{"user":"张三","message":"今儿天气不错啊,出去转转去","uid":2,"age":20,"city":"北京","province":"北京","country":"中国","address":"中国北京市海淀区","location":{"lat":"39.970718","lon":"116.325747"}, "DOB": "1999-04-01"}
{"index":{"_index":"twitter","_id":2}}
{"user":"老刘","message":"出发,下一站云南!","uid":3,"age":22,"city":"北京","province":"北京","country":"中国","address":"中国北京市东城区台基厂三条3号","location":{"lat":"39.904313","lon":"116.412754"}, "DOB": "1997-04-01"}
{"index":{"_index":"twitter","_id":3}}
{"user":"李四","message":"happy birthday!","uid":4,"age":25,"city":"北京","province":"北京","country":"中国","address":"中国北京市东城区","location":{"lat":"39.893801","lon":"116.408986"}, "DOB": "1994-04-01"}
{"index":{"_index":"twitter","_id":4}}
{"user":"老贾","message":"123,gogogo","uid":5,"age":30,"city":"北京","province":"北京","country":"中国","address":"中国北京市朝阳区建国门","location":{"lat":"39.718256","lon":"116.367910"}, "DOB": "1989-04-01"}
{"index":{"_index":"twitter","_id":5}}
{"user":"老王","message":"Happy BirthDay My Friend!","uid":6,"age":26,"city":"北京","province":"北京","country":"中国","address":"中国北京市朝阳区国贸","location":{"lat":"39.918256","lon":"116.467910"}, "DOB": "1993-04-01"}
{"index":{"_index":"twitter","_id":6}}
{"user":"老吴","message":"好友来了都今天我生日,好友来了,什么 birthday happy 就成!","uid":7,"age":28,"city":"上海","province":"上海","country":"中国","address":"中国上海市闵行区","location":{"lat":"31.175927","lon":"121.383328"}, "DOB": "1991-04-01"}

cluster_2

我们在cluster_2上进行如下的操作:

Elasticsearch:跨集群复制 Cross-cluster replication(CCR)_第5张图片

我们点击“Add a remote cluster”:

Elasticsearch:跨集群复制 Cross-cluster replication(CCR)_第6张图片

我们填入相应的名称及seed的相关信息,并点击“Save”:

Elasticsearch:跨集群复制 Cross-cluster replication(CCR)_第7张图片

当我们点击完“Save”后,就会出现上的画面,表明我们的remote_twitter已经连接成功。在上面我们点击“Close”。我们接下来点击“Cross-Cluster Replication”:

Elasticsearch:跨集群复制 Cross-cluster replication(CCR)_第8张图片

我们点击上面的“Create a follower index”:

Elasticsearch:跨集群复制 Cross-cluster replication(CCR)_第9张图片

我们填入相应的信息。注意上面我们定义一个叫做twitter_copy的follower index。当我们填入上面的信息过后,我们点击“Create”按钮:

Elasticsearch:跨集群复制 Cross-cluster replication(CCR)_第10张图片

我们可以看到刚才创建的twitter_copy的状态经过很短的时间由paused变为active,表明我们的index创建是成功的。

我们点击Dev Tools,并打入如下的命令:

Elasticsearch:跨集群复制 Cross-cluster replication(CCR)_第11张图片

我们可以看到最新创建的twitter_copy这个索引。我们可以针对这个索引进行搜索:

Elasticsearch:跨集群复制 Cross-cluster replication(CCR)_第12张图片

我们可以看到我们有7个结果。我们可以在我们的cluster_1中加入一个新的文档:

Elasticsearch:跨集群复制 Cross-cluster replication(CCR)_第13张图片

我们在cluster_1中为twitter索引新增加了一个文档。这个文档的id为8。接下来我们在cluster_2中马上来查一下:

Elasticsearch:跨集群复制 Cross-cluster replication(CCR)_第14张图片

我们可以看到我们最新添加的一个id为8的文档已经被成功在cluster_2中可见。这说明我们的自动复制功能已经在起作用。

参考:

【1】https://www.elastic.co/guide/en/elasticsearch/reference/current/xpack-ccr.html

你可能感兴趣的:(Elasticsearch:跨集群复制 Cross-cluster replication(CCR))