教程:设置跨集群复制编辑

使用本指南在两个数据中心的集群之间设置跨集群复制 (CCR)。跨数据中心复制数据具有以下几个优势

  • 使数据更接近用户或应用程序服务器,以减少延迟和响应时间
  • 为您的关键任务应用程序提供承受数据中心或区域中断的容错能力

在本指南中,您将学习如何

  • 配置具有领导索引的远程集群
  • 在本地集群上创建跟随索引
  • 创建自动跟随模式,以自动跟随在远程集群中定期创建的时间序列索引

您可以手动创建跟随索引以复制远程集群上的特定索引,或配置自动跟随模式以复制滚动时间序列索引。

如果要在云中的集群之间复制数据,则可以在Elasticsearch Service 上配置远程集群。然后,您可以跨集群搜索并设置跨集群复制。

先决条件编辑

要完成本教程,您需要

  • 本地集群上的 manage 集群权限。
  • 两个集群上的许可证都包含跨集群复制。激活 30 天免费试用
  • 远程集群上的索引,其中包含您要复制的数据。本教程使用示例电子商务订单数据集。加载示例数据
  • 在本地集群中,所有具有 master 节点角色的节点还必须具有 remote_cluster_client 角色。本地集群还必须至少有一个节点同时具有数据角色和 remote_cluster_client 角色。用于协调复制的各个任务根据本地集群中具有 remote_cluster_client 角色的数据节点的数量进行扩展。

连接到远程集群编辑

要将远程集群 (集群 A) 上的索引复制到本地集群 (集群 B),请在集群 B 上将集群 A 配置为远程集群。

ClusterA contains the leader index and ClusterB contains the follower index

要从 Kibana 中的堆栈管理配置远程集群,请执行以下操作

  1. 根据需要设置安全连接
  2. 从侧面导航中选择远程集群
  3. 指定 Elasticsearch 端点 URL,或远程集群 (ClusterA) 的 IP 地址或主机名,后跟传输端口(默认为 9300)。例如,cluster.es.eastus2.staging.azure.foundit.no:9400192.168.1.1:9300
API 示例

您还可以使用集群更新设置 API 来添加远程集群

response = client.cluster.put_settings(
  body: {
    persistent: {
      cluster: {
        remote: {
          leader: {
            seeds: [
              '127.0.0.1:9300'
            ]
          }
        }
      }
    }
  }
)
puts response
PUT /_cluster/settings
{
  "persistent" : {
    "cluster" : {
      "remote" : {
        "leader" : {
          "seeds" : [
            "127.0.0.1:9300" 
          ]
        }
      }
    }
  }
}

指定远程集群中种子节点的主机名和传输端口。

您可以验证本地集群是否已成功连接到远程集群。

resp = client.cluster.remote_info()
print(resp)
response = client.cluster.remote_info
puts response
GET /_remote/info

API 响应表明本地集群已连接到集群别名为 leader 的远程集群。

{
  "leader" : {
    "seeds" : [
      "127.0.0.1:9300"
    ],
    "connected" : true,
    "num_nodes_connected" : 1, 
    "max_connections_per_cluster" : 3,
    "initial_connect_timeout" : "30s",
    "skip_unavailable" : false,
    "mode" : "sniff"
  }
}

本地集群连接到的远程集群中的节点数。

配置跨集群复制的权限编辑

跨集群复制用户需要在远程集群和本地集群上具有不同的集群和索引权限。使用以下请求在本地和远程集群上创建单独的角色,然后创建一个具有所需角色的用户。

远程集群编辑

在包含领导索引的远程集群上,跨集群复制角色需要 read_ccr 集群权限,以及领导索引上的 monitorread 权限。

如果使用API 密钥对请求进行身份验证,则 API 密钥需要在本地集群(而不是远程集群)上具有上述权限。

如果代表其他用户发出请求,则身份验证用户必须在远程集群上具有 run_as 权限。

以下请求在远程集群上创建 remote-replication 角色

POST /_security/role/remote-replication
{
  "cluster": [
    "read_ccr"
  ],
  "indices": [
    {
      "names": [
        "leader-index-name"
      ],
      "privileges": [
        "monitor",
        "read"
      ]
    }
  ]
}
本地集群编辑

在包含跟随索引的本地集群上,remote-replication 角色需要 manage_ccr 集群权限,以及跟随索引上的 monitorreadwritemanage_follow_index 权限。

以下请求在本地集群上创建 remote-replication 角色

POST /_security/role/remote-replication
{
  "cluster": [
    "manage_ccr"
  ],
  "indices": [
    {
      "names": [
        "follower-index-name"
      ],
      "privileges": [
        "monitor",
        "read",
        "write",
        "manage_follow_index"
      ]
    }
  ]
}

在每个集群上创建 remote-replication 角色后,使用创建或更新用户 API 在本地集群上创建一个用户,并分配 remote-replication 角色。例如,以下请求将 remote-replication 角色分配给名为 cross-cluster-user 的用户

POST /_security/user/cross-cluster-user
{
  "password" : "l0ng-r4nd0m-p@ssw0rd",
  "roles" : [ "remote-replication" ]
}

您只需要在本地集群上创建此用户。

创建跟随索引以复制特定索引编辑

创建跟随索引时,您需要在远程集群中引用远程集群和领导索引。

要从 Kibana 中的堆栈管理创建跟随索引,请执行以下操作

  1. 在侧面导航中选择跨集群复制,然后选择跟随索引选项卡。
  2. 选择包含要复制的领导索引的集群 (ClusterA)。
  3. 输入领导索引的名称,如果您正在学习本教程,则为 kibana_sample_data_ecommerce
  4. 输入跟随索引的名称,例如 follower-kibana-sample-data

Elasticsearch 使用远程恢复过程初始化跟随者,该过程将现有的 Lucene 段文件从领导索引传输到跟随索引。索引状态更改为已暂停。远程恢复过程完成后,索引跟随开始,状态更改为活动

当您将文档索引到领导索引时,Elasticsearch 会在跟随索引中复制这些文档。

The Cross-Cluster Replication page in Kibana
API 示例

您还可以使用创建跟随者 API 来创建跟随索引。创建跟随索引时,必须引用远程集群和您在远程集群中创建的领导索引。

启动跟随者请求时,响应会在远程恢复过程完成之前返回。要等待该过程完成,请将 wait_for_active_shards 参数添加到您的请求中。

PUT /server-metrics-follower/_ccr/follow?wait_for_active_shards=1
{
  "remote_cluster" : "leader",
  "leader_index" : "server-metrics"
}

使用获取跟随者统计信息 API 检查复制状态。

创建自动跟随模式以复制时间序列索引编辑

您可以使用自动跟随模式 自动为滚动时间序列索引创建新的跟随者。每当远程集群上新索引的名称与自动跟随模式匹配时,就会将相应的跟随索引添加到本地集群。请注意,只有在创建自动跟随模式后在远程集群上创建的索引才会被自动跟随:即使远程集群上的现有索引与模式匹配,也会被忽略。

自动跟随模式指定要从中复制的远程集群,以及一个或多个指定要复制的滚动时间序列索引的索引模式。

要从 Kibana 中的堆栈管理创建自动跟随模式,请执行以下操作

  1. 在侧面导航中选择跨集群复制,然后选择自动跟随模式选项卡。
  2. 输入自动跟随模式的名称,例如 beats
  3. 选择包含要复制的索引的远程集群,在本示例场景中为集群 A。
  4. 输入一个或多个索引模式,以标识要从远程集群复制的索引。例如,输入 metricbeat-* packetbeat-* 以自动为 Metricbeat 和 Packetbeat 索引创建跟随者。
  5. 输入follower- 作为应用于跟随索引名称的前缀,以便您可以更轻松地识别复制的索引。

当远程上创建了与这些模式匹配的新索引时,Elasticsearch 会自动将它们复制到本地跟随索引。

The Auto-follow patterns page in Kibana
API 示例

使用创建自动跟随模式 API 配置自动跟随模式。

PUT /_ccr/auto_follow/beats
{
  "remote_cluster" : "leader",
  "leader_index_patterns" :
  [
    "metricbeat-*", 
    "packetbeat-*" 
  ],
  "follow_index_pattern" : "{{leader_index}}-copy" 
}

自动跟随新的 Metricbeat 索引。

自动跟随新的 Packetbeat 索引。

跟随索引的名称是通过在领导索引的名称后添加后缀 -copy 来派生的。