Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication

通过跨集群复制(Cross Cluster Replication - CCR),你可以跨集群将索引复制并实现:

  • 在数据中心中断时继续处理搜索请求
  • 防止搜索量影响索引吞吐量
  • 通过在距用户较近的地理位置处理搜索请求来减少搜索延迟

跨集群复制采用主动 - 被动模型。 你索引到领导者(leader)索引,并将数据复制到一个或多个只读跟随者(follower)索引。 在将跟随者索引添加到集群之前,必须配置包含领导者索引的远程集群。

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第1张图片

当领导者索引接收写入时,跟随者索引会从远程集群上的领导者索引中提取更改。 你可以手动创建跟随者索引,也可以配置自动跟随模式,为新的时间序列索引自动创建跟随者索引。

你可以在单向或双向设置中配置跨集群复制集群:

  • 在单向配置中,一个集群仅包含领导者索引,另一个集群仅包含跟随者索引。
  • 在双向配置中,每个集群都包含领导者索引和跟随者索引。

在单向配置中,包含跟随者索引的集群必须运行与远程集群相同或更新版本的 Elasticsearch。 如果较新,版本也必须兼容,如下表所示。

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第2张图片

多集群架构

使用跨集群复制在 Elastic Stack 内构建多个多集群架构:

  • 主集群故障时灾难恢复,辅助集群作为热备份
  • 数据本地性,用于维护靠近应用程序服务器(和用户)的数据集的多个副本,并减少昂贵的延迟
  • 集中式报告,可最大限度地减少查询多个地理分布式 Elasticsearch 集群时的网络流量和延迟,或通过将搜索卸载到辅助集群来防止搜索负载干扰索引编制

重要:在所有这些用例中,你必须在每个集群上独立配置安全性。 配置跨集群复制以进行灾难恢复时,不会复制安全配置。 为了确保备份 Elasticsearch 安全功能状态,请定期拍摄快照。 然后,你可以从安全配置中恢复本机用户、角色和 token。

灾难恢复和高可用性

灾难恢复为你的任务关键型应用程序提供承受数据中心或区域中断的能力。 此用例是跨集群复制的最常见部署。 你可以在不同架构中配置集群以支持灾难恢复和高可用性。它可以分为四个部分:

  • 单一灾难恢复数据中心
  • 多个容灾数据中心
  • 链式复制
  • 双向复制

单一灾难恢复数据中心

在此配置中,数据从生产数据中心复制到灾难恢复数据中心。 由于跟随者索引复制领导者索引,因此如果生产数据中心不可用,你的应用程序可以使用灾难恢复数据中心。

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第3张图片

多个容灾数据中心

你可以将数据从一个数据中心复制到多个数据中心。 此配置提供灾难恢复和高可用性,确保在主数据中心发生故障或不可用时将数据复制到两个数据中心。

在下图中,数据中心 A 的数据被复制到数据中心 B 和数据中心 C,这两个数据中心都拥有数据中心 A 的领导者索引的只读副本。

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第4张图片

链式复制

你可以跨多个数据中心复制数据以形成复制链。 在下图中,数据中心 A 包含领导者索引。 数据中心 B 从数据中心 A 复制数据,数据中心 C 从数据中心 B 中的跟随者索引复制数据。这些数据中心之间的连接形成链式复制模式。

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第5张图片

双向复制

在双向复制设置中,所有集群都有权查看所有数据,并且所有集群都有一个可写入的索引,而无需手动实施故障转移。 应用程序可以写入每个数据中心内的本地索引,并跨多个索引读取所有信息的全局视图。

当集群或数据中心不可用时,此配置不需要手动干预。 在下图中,如果数据中心 A 不可用,你可以继续使用数据中心 B,而无需手动故障转移。 当数据中心 A 上线时,集群之间的复制将恢复。

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第6张图片

此配置对于仅索引(index-only)工作负载特别有用,在这种情况下不会更新文档值。 在此配置中,Elasticsearch 索引的文档是不可变的。 客户端位于 Elasticsearch 集群旁边的每个数据中心,并且不与不同数据中心的集群进行通信。

数据局部性

让数据更接近用户或应用程序服务器可以减少延迟和响应时间。 在 Elasticsearch 中复制数据时也适用此方法。 例如,你可以将产品目录或参考数据集复制到全球 20 个或更多数据中心,以最大限度地缩短数据与应用程序服务器之间的距离。

在下图中,数据从一个数据中心复制到另外三个数据中心,每个数据中心都位于自己的区域中。 中央数据中心包含领导者索引,其他数据中心包含复制该特定区域中的数据的跟随者索引。 此配置使数据更接近访问它的应用程序。

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第7张图片

集中报告

当跨大型网络查询效率低下时,使用集中式报告集群非常有用。 在此配置中,你可以将数据从许多较小的集群复制到集中式报告集群。

例如,一家大型跨国银行可能在全球拥有 100 个 Elasticsearch 集群,这些集群分布在每个银行分行的不同区域。 使用跨集群复制,银行可以将所有 100 家银行的事件复制到中央集群,以便在本地分析和汇总事件以进行报告。 银行可以使用跨集群复制来复制特定索引,而不是维护镜像集群。

在下图中,来自不同区域的三个数据中心的数据被复制到集中式报告集群。 此配置使你能够将数据从区域中心复制到中央集群,你可以在其中本地运行所有报告。

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第8张图片

复制机制

虽然你在索引级别设置跨集群复制,但 Elasticsearch 在分片级别实现复制。 创建跟随者索引时,该索引中的每个分片都会从领导者索引中相应的分片中提取更改,这意味着跟随者索引与其领导者索引具有相同数量的分片。 Leader 上的所有操作都会被 follower 复制,例如创建、更新或删除文档的操作。 这些请求可以从领导分片的任何副本(主分片或副本分片)提供服务。

当跟随者分片发送读取请求时,领导者分片会响应任何新操作,并受到你在配置跟随者索引时建立的读取参数的限制。 如果没有可用的新操作,则领导分片将等待新操作的配置超时时间。 如果超时时间过去,领导者分片会向跟随者分片响应没有新操作。 跟随者分片更新分片统计信息,并立即向领导者分片发送另一个读取请求。 这种通信模型确保远程集群和本地集群之间的网络连接持续使用,避免被防火墙等外部源强行终止。

如果读取请求失败,则检查失败的原因。 如果故障原因被认为是可恢复的(例如网络故障),则跟随者分片将进入重试循环。 否则,跟随者分片将暂停,直到你恢复为止。

处理更新

你无法手动修改跟随者索引的映射或别名。 要进行更改,你必须更新领导者索引。 因为它们是只读的,所以跟随者索引拒绝所有配置中的写入。

注意:尽管领导者索引上的别名更改会复制到跟随者索引,但写索引(write indices)会被忽略。 跟随者索引不能接受直接写入,因此如果任何领导者别名将 is_write_index 设置为 true,则该值将被强制设置为 false。

例如,你在数据中心 A 中为名为 doc_1 的文档建立索引,该文档将复制到数据中心 B。如果客户端连接到数据中心 B 并尝试更新 doc_1,则请求将失败。 要更新 doc_1,客户端必须连接到数据中心 A 并更新领导者索引中的文档。

当跟随者分片从领导者分片接收操作时,它将这些操作放入写入缓冲区中。 跟随者分片使用写入缓冲区中的操作提交批量写入请求。 如果写入缓冲区超出其配置的限制,则不会发送其他读取请求。 此配置提供了针对读取请求的背压(back-pressure),允许跟随者分片在写入缓冲区不再满时恢复发送读取请求。

要管理如何从领导者索引复制操作,你可以在创建跟随者索引时配置设置。

领导者索引上的索引映射的更改会尽快复制到跟随者索引。 此行为也适用于索引设置,但领导者索引本地的某些设置除外。 例如,更改领导者索引上的副本数量不会被跟随者索引复制,因此可能无法检索该设置。

如果你对跟随者索引所需的领导者索引应用非动态设置更改,则跟随者索引将自行关闭,应用设置更新,然后重新打开自身。 在此周期内,跟随者索引不可用于读取,也无法复制写入。

使用远程恢复初始化跟随者

当你创建跟随者索引时,在其完全初始化之前你无法使用它。 远程恢复(remote recovery)过程通过从领导者集群中的主分片复制数据来在跟随者节点上构建分片的新副本。

Elasticsearch 使用此远程恢复过程,使用领导者索引中的数据来引导跟随者索引。 此过程为跟随者提供了领导者索引当前状态的副本,即使由于 Lucene 段合并而无法在领导者上获得完整的更改历史记录。

远程恢复是一个网络密集型过程,它将所有 Lucene 段文件从领导者集群传输到跟随者集群。 跟随者请求在领导者集群中的主分片上启动恢复会话。 然后,跟随者同时向领导者请求文件块。 默认情况下,进程同时请求五个 1MB 文件块。 此默认行为旨在支持领导者和跟随者集群之间存在高网络延迟。

提示:你可以修改动态远程恢复设置以限制传输数据的速率并管理远程恢复消耗的资源。

在包含跟随者索引的集群上使用 recovery API 来获取有关正在进行的远程恢复的信息。 由于 Elasticsearch 使用快照和恢复(snapshot 及 restore)基础设施实现远程恢复,因此运行远程恢复在 recovery API 中被标记为 snapshot 类型。

复制领导者需要软删除(soft deletes)

跨集群复制的工作原理是重播在领导索引分片上执行的各个写入操作的历史记录。 Elasticsearch 需要在领导者分片上保留这些操作的历史记录,以便跟随者分片任务可以拉动它们。 用于保留这些操作的底层机制是软删除。

每当删除或更新现有文档时都会发生软删除。 通过将这些软删除保留到可配置的限制,操作历史记录可以保留在领导者分片上,并在跟随者分片任务重播操作历史记录时可供其使用。

index.soft_deletes.retention_lease.period 设置定义分片历史保留租约在被视为过期之前保留的最长时间。 此设置决定包含你的跟随者索引的集群可以离线多长时间,默认情况下为 12 小时。 如果分片副本在其保留租约到期后恢复,但丢失的操作在领导者索引上仍然可用,则 Elasticsearch 将建立新的租约并复制丢失的操作。 然而 Elasticsearch 不保证保留未释放的操作,因此也有可能一些丢失的操作已被领导者丢弃,现在完全不可用。 如果发生这种情况,则跟随者无法自动恢复,因此你必须重新创建它。

必须为要用作领导索引的索引启用软删除。 默认情况下,在 Elasticsearch 7.0.0 或之后创建的新索引上启用软删除。

重要:跨集群复制不能用于使用 Elasticsearch 7.0.0 或更早版本创建的现有索引,其中禁用了软删除。 你必须将数据重新索引到启用软删除的新索引中。

实操

安装 Elasticsearch 及 Kibana

如果你还没有安装好自己的 Elasticsearch 及 Kibana,你可以参考如下下面的文章来进行安装:

  • 如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch

  • Kibana:如何在 Linux,MacOS 及 Windows 上安装 Elastic 栈中的 Kibana

在安装的时候,我们需要特别注意的是:我们按照 Elastic Stack 8.x 的指南来进行安装。在今天的练习中,我将使用 Elastic Stack 8.8.1 来进行展示。我们将以如下的架构来进行展示:

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第9张图片

 在上面,我们分别在两个机器上创建两个不同的集群。在安装的时候,我们需要对 config/elasticsearch.yml 做一些特殊的配置:

config/elasticsearch.yml - macOS

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第10张图片

config/elasticsearch.yml - ubuntu

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第11张图片

针对非 keystore 及 truststore 的安装

我们首先参考之前的文章 “Elasticsearch:如何在不更新证书的情况下为集群之间建立互信”。你如果不是按照默认的方式来进行 安装 Elasticsearch 集群的,比如针对非 keystore 及 trustore 的安装,参照我之前的文章 “Security:如何安装 Elastic SIEM 和 EDR” 来进行安装,那么你可以直接把另外一个集群的证书添加到相应的 config/elasticsearch.yml 的配置中去即可:

config/elasticsearch.yml

xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.key: /etc/elasticsearch/certs/elasticsearch.key
xpack.security.transport.ssl.certificate: /etc/elasticsearch/certs/elasticsearch.crt
xpack.security.transport.ssl.certificate_authorities: [ "/etc/elasticsearch/certs/ca/ca.crt", "certificate_from_another_cluster.crt ]

有关使用自定义的证书安装 Elasticsearch 集群,请参阅文章 “Elasticsearch:如何使用自定义的证书安装 Elastic Stack 8.x”。

为集群之间建立互信

针对使用 keystore 及 truststore 安装的两个 Elasticsearch 集群,我们为了能够使它们建立互信,我们需要针对它们的配置文件做一些配置。它们的证书存在于 Elasticsearch 的安装目录中:

macOS

$ pwd
/Users/liuxg/elastic/elasticsearch-8.8.1
$ ls config/certs/
http.p12      http_ca.crt   transport.p12

Ubuntu OS

parallels@ubuntu2004:~/elastic/elasticsearch-8.8.1$ pwd
/home/parallels/elastic/elasticsearch-8.8.1
parallels@ubuntu2004:~/elastic/elasticsearch-8.8.1$ ls config/certs/
http_ca.crt  http.p12  transport.p12

为了获取在默认 Elasticsearch 安装的证书信息,我们使用如下的步骤来进行获得,以 macOS 为例:

$ pwd
/Users/liuxg/elastic/elasticsearch-8.8.1
$ ./bin/elasticsearch-keystore list
keystore.seed
xpack.security.http.ssl.keystore.secure_password
xpack.security.transport.ssl.keystore.secure_password
xpack.security.transport.ssl.truststore.secure_password
$ ./bin/elasticsearch-keystore show xpack.security.transport.ssl.truststore.secure_password
ABFwaZgkTaiE-WrMvXy9Tw
$ cd config/certs/
$ openssl pkcs12 -in transport.p12 -out macOS.crt -clcerts -nokeys
Enter Import Password:
$ ls
http.p12      http_ca.crt   macOS.crt     transport.p12

在上面提示输入密码的时候,请输入在上面步骤中得到的密码即可。这样我们就得到了 macOS 上安装的 Elasticsearch 的证书。

我们把这个 macOS.crt 证书拷贝到 Ubuntu OS 中的 Elasticsearch 安装目录中:

scp macOS.crt parallels@ubuntu2004:/home/parallels/elastic/elasticsearch-8.8.1/config/certs

我们可以在 Ubuntu OS 的机器上进行查看:

parallels@ubuntu2004:~/elastic/elasticsearch-8.8.1/config/certs$ pwd
/home/parallels/elastic/elasticsearch-8.8.1/config/certs
parallels@ubuntu2004:~/elastic/elasticsearch-8.8.1/config/certs$ ls
http_ca.crt  http.p12  macOS.crt  transport.p12

按照同样的方法,我们可以得到 Ubuntu OS 上 Elasticsearch 安装的证书 ubuntu.crt:

parallels@ubuntu2004:~/elastic/elasticsearch-8.8.1$ pwd
/home/parallels/elastic/elasticsearch-8.8.1
parallels@ubuntu2004:~/elastic/elasticsearch-8.8.1$ ls config/certs/
http_ca.crt  http.p12  transport.p12
parallels@ubuntu2004:~/elastic/elasticsearch-8.8.1$ ./bin/elasticsearch-keystore list
keystore.seed
xpack.security.http.ssl.keystore.secure_password
xpack.security.transport.ssl.keystore.secure_password
xpack.security.transport.ssl.truststore.secure_password
parallels@ubuntu2004:~/elastic/elasticsearch-8.8.1$ ./bin/elasticsearch-keystore show xpack.security.transport.ssl.truststore.secure_password
Npb620rZQbuqyKvw1DT0xw
parallels@ubuntu2004:~/elastic/elasticsearch-8.8.1$ cd config/certs/
parallels@ubuntu2004:~/elastic/elasticsearch-8.8.1/config/certs$ openssl pkcs12 -in transport.p12 -out ubuntu.crt -clcerts -nokeys
Enter Import Password:
parallels@ubuntu2004:~/elastic/elasticsearch-8.8.1/config/certs$ ls
http_ca.crt  http.p12  transport.p12  ubuntu.crt

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第12张图片

从上面的输出中,我们可以看到我们已经得到了 Ubuntu OS 机器上的证书 ubuntu.crt。

我们把上面的 ubuntu.crt 证书拷贝到 macOS 的机器中的 Elasticsearch 安装目录中:

scp parallels@ubuntu2004:/home/parallels/elastic/elasticsearch-8.8.1/config/certs/ubuntu.crt .
$ pwd
/Users/liuxg/elastic/elasticsearch-8.8.1/config/certs
$ scp parallels@ubuntu2004:/home/parallels/elastic/elasticsearch-8.8.1/config/certs/ubuntu.crt .
ubuntu.crt                                                   100% 2060     3.4MB/s   00:00    
$ ls
http.p12      http_ca.crt   macOS.crt     transport.p12 ubuntu.crt

我们可以使用如下的命令来查看当前 macOS 里 transport.p12 的证书信息:

$ pwd
/Users/liuxg/elastic/elasticsearch-8.8.1
$ ./bin/elasticsearch-keystore list
keystore.seed
xpack.security.http.ssl.keystore.secure_password
xpack.security.transport.ssl.keystore.secure_password
xpack.security.transport.ssl.truststore.secure_password
$ ./bin/elasticsearch-keystore show xpack.security.transport.ssl.truststore.secure_password
ABFwaZgkTaiE-WrMvXy9Tw
$ cd config/certs/
$ ls
http.p12      http_ca.crt   macOS.crt     transport.p12 ubuntu.crt
$ keytool -keystore transport.p12 -list
Enter keystore password:  
Keystore type: PKCS12
Keystore provider: SUN

Your keystore contains 2 entries

transport, Jun 13, 2023, PrivateKeyEntry, 
Certificate fingerprint (SHA-256): BB:F1:F4:71:A3:19:0B:48:7A:E8:23:1A:DB:F1:01:3A:02:61:B7:C7:08:E1:68:1B:1E:2A:55:D1:D6:66:39:E2
transport_ca, Jun 29, 2023, trustedCertEntry, 
Certificate fingerprint (SHA-256): E8:2B:C2:5F:B2:30:30:AC:AA:C9:DE:DE:E6:FB:C2:EC:47:E7:C7:D6:21:8F:4B:63:9D:58:C1:1C:75:CF:9C:04

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第13张图片

从上面,我们可以看出来,它里面有两个证书。现在我们使用如下的方法把 ubuntu.crt 这个证书添加到 transport.p12 这个 truststore 里去。

$ pwd
/Users/liuxg/elastic/elasticsearch-8.8.1
$ ./bin/elasticsearch-keystore list
keystore.seed
xpack.security.http.ssl.keystore.secure_password
xpack.security.transport.ssl.keystore.secure_password
xpack.security.transport.ssl.truststore.secure_password
$ ./bin/elasticsearch-keystore show xpack.security.transport.ssl.truststore.secure_password
ABFwaZgkTaiE-WrMvXy9Tw
$ cd config/certs/
$ ls
http.p12      http_ca.crt   macOS.crt     transport.p12 ubuntu.crt
$ keytool -keystore transport.p12 -list
Enter keystore password:  
Keystore type: PKCS12
Keystore provider: SUN

Your keystore contains 2 entries

transport, Jun 13, 2023, PrivateKeyEntry, 
Certificate fingerprint (SHA-256): BB:F1:F4:71:A3:19:0B:48:7A:E8:23:1A:DB:F1:01:3A:02:61:B7:C7:08:E1:68:1B:1E:2A:55:D1:D6:66:39:E2
transport_ca, Jun 29, 2023, trustedCertEntry, 
Certificate fingerprint (SHA-256): E8:2B:C2:5F:B2:30:30:AC:AA:C9:DE:DE:E6:FB:C2:EC:47:E7:C7:D6:21:8F:4B:63:9D:58:C1:1C:75:CF:9C:04
$ keytool -importcert -trustcacerts -noprompt -keystore transport.p12 -storepass ABFwaZgkTaiE-WrMvXy9Tw -alias ubuntu -file ubuntu.crt
Certificate was added to keystore
$ keytool -keystore transport.p12 -list
Enter keystore password:  
Keystore type: PKCS12
Keystore provider: SUN

Your keystore contains 3 entries

transport, Jun 13, 2023, PrivateKeyEntry, 
Certificate fingerprint (SHA-256): BB:F1:F4:71:A3:19:0B:48:7A:E8:23:1A:DB:F1:01:3A:02:61:B7:C7:08:E1:68:1B:1E:2A:55:D1:D6:66:39:E2
transport_ca, Jun 29, 2023, trustedCertEntry, 
Certificate fingerprint (SHA-256): E8:2B:C2:5F:B2:30:30:AC:AA:C9:DE:DE:E6:FB:C2:EC:47:E7:C7:D6:21:8F:4B:63:9D:58:C1:1C:75:CF:9C:04
ubuntu, Jun 29, 2023, trustedCertEntry, 
Certificate fingerprint (SHA-256): 1B:69:D9:26:F2:4A:3C:91:CD:01:9F:DC:70:9D:3E:BA:97:FE:B2:67:FC:E9:62:46:AD:8A:74:41:F5:BB:CF:D3

 

按照同样的方法,我们在 Ubuntu OS 的机器上,添加 macOS.crt 证书:

parallels@ubuntu2004:~/elastic/elasticsearch-8.8.1$ pwd
/home/parallels/elastic/elasticsearch-8.8.1
parallels@ubuntu2004:~/elastic/elasticsearch-8.8.1$ ./bin/elasticsearch-keystore list
keystore.seed
xpack.security.http.ssl.keystore.secure_password
xpack.security.transport.ssl.keystore.secure_password
xpack.security.transport.ssl.truststore.secure_password
parallels@ubuntu2004:~/elastic/elasticsearch-8.8.1$ ./bin/elasticsearch-keystore show xpack.security.transport.ssl.truststore.secure_password
Npb620rZQbuqyKvw1DT0xw
parallels@ubuntu2004:~/elastic/elasticsearch-8.8.1$ cd config/certs/
parallels@ubuntu2004:~/elastic/elasticsearch-8.8.1/config/certs$ ls
http_ca.crt  http.p12  macOS.crt  transport.p12  ubuntu.crt
parallels@ubuntu2004:~/elastic/elasticsearch-8.8.1/config/certs$ keytool -keystore transport.p12 -list
Enter keystore password:  
Keystore type: PKCS12
Keystore provider: SUN

Your keystore contains 2 entries

transport, Jun 27, 2023, PrivateKeyEntry, 
Certificate fingerprint (SHA-256): 1B:69:D9:26:F2:4A:3C:91:CD:01:9F:DC:70:9D:3E:BA:97:FE:B2:67:FC:E9:62:46:AD:8A:74:41:F5:BB:CF:D3
transport_ca, Jun 29, 2023, trustedCertEntry, 
Certificate fingerprint (SHA-256): 53:ED:41:99:06:24:1D:86:37:07:0D:19:9B:7B:73:00:09:A8:D3:5D:E7:EF:DC:A4:CE:C7:26:6E:12:F2:A9:32
parallels@ubuntu2004:~/elastic/elasticsearch-8.8.1/config/certs$ ls
http_ca.crt  http.p12  macOS.crt  transport.p12  ubuntu.crt
parallels@ubuntu2004:~/elastic/elasticsearch-8.8.1/config/certs$ keytool -importcert -trustcacerts -noprompt -keystore transport.p12 -storepass Npb620rZQbuqyKvw1DT0xw -alias mac -file macOS.crt
Certificate was added to keystore
parallels@ubuntu2004:~/elastic/elasticsearch-8.8.1/config/certs$ keytool -keystore transport.p12 -list
Enter keystore password:  
Keystore type: PKCS12
Keystore provider: SUN

Your keystore contains 3 entries

mac, Jun 29, 2023, trustedCertEntry, 
Certificate fingerprint (SHA-256): BB:F1:F4:71:A3:19:0B:48:7A:E8:23:1A:DB:F1:01:3A:02:61:B7:C7:08:E1:68:1B:1E:2A:55:D1:D6:66:39:E2
transport, Jun 27, 2023, PrivateKeyEntry, 
Certificate fingerprint (SHA-256): 1B:69:D9:26:F2:4A:3C:91:CD:01:9F:DC:70:9D:3E:BA:97:FE:B2:67:FC:E9:62:46:AD:8A:74:41:F5:BB:CF:D3
transport_ca, Jun 29, 2023, trustedCertEntry, 
Certificate fingerprint (SHA-256): 53:ED:41:99:06:24:1D:86:37:07:0D:19:9B:7B:73:00:09:A8:D3:5D:E7:EF:DC:A4:CE:C7:26:6E:12:F2:A9:32

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第14张图片

我们需要重新启动在两个操作系统中的 Elasticsearch。

测试集群之间的互信

我们接下来通过 Kibana 来测试集群之间的互信。按照一下的步骤来进行操作:

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第15张图片

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第16张图片

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第17张图片

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第18张图片

上面显示我们的连接是成功的。当然,我们也可以在 Ubuntu 机器安装的 Elasticsearch 来连接 macOS 上的安装,它也应该是成功的:

 Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第19张图片

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第20张图片

从上面的显示中,我们可以看到在 Ubuntu OS 上的 Elasticsearch 集群也可以成功地连接到 macOS 的机器上。

测试 CCR 

接下来,我们来做一些简单的测试来看看 CCR 是如何工作的。我们在 macOS 里的 Kibana 进行如下的操作。由于 CCR 是收费的功能,我们需要启动白金版试用功能。这个操作需要在两个集群里分别进行。

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第21张图片

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第22张图片

我们也可以通过如下的命令来启动试用功能:

$ curl -k -u elastic -X POST "https://localhost:9200/_license/start_trial?acknowledge=true"
Enter host password for user 'elastic':
{"acknowledged":true,"trial_was_started":false,"error_message":"Operation failed: Trial was already activated."}

或者直接在 Dev Tools 里打入如下的命令:

POST _license/start_trial?acknowledge=true

我们在 macOS 的 Elasticsearch 集群里打入如下的命令:

PUT twitter/_doc/1
{
  "content": "This is Xiaoguo from Elastic"
}

我们去 Ubuntu OS 的机器上,进行如下的操作:

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第23张图片

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第24张图片

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第25张图片

经过一会儿:

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第26张图片

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第27张图片

我们去 Ubuntu OS 的 Dev Tools 里进如下操作:

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第28张图片

我们可以看到 twitter_follower 里的文档已经是和在 macOS 里的 twitter 索引是一模一样的。我们可以去 macOS 的 Elasticsearch 集群里添加另外一个文档:

PUT twitter/_doc/2
{
  "content": "Xiaoguo is doing community work in Elastic"
}

我们再在 Ubuntu OS 的 Dev Tools 里进行查看:

Elasticsearch:跨集群复制应用场景及实操 - Cross Cluster Replication_第29张图片

很显然,我们这次有两个文档了。

Hooray! 我们终于在两个集群里进行了负责。当然,你也可以尝试双向复制哦。在 macOS 里复制在 Ubuntu OS 里的索引。这个就留个开发者你们自己来尝试了。

你可能感兴趣的:(Elasticsearch,Elastic,elasticsearch,大数据,搜索引擎,全文检索,数据库,运维)