前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记一次公有云ES通过配置CCR访问私有云ES的实践过程

记一次公有云ES通过配置CCR访问私有云ES的实践过程

原创
作者头像
南非骆驼说大数据
修改2020-11-29 20:47:36
1.8K0
修改2020-11-29 20:47:36
举报

一、前言

某大客户需求:

想要将不同VPC下的私有云ES集群通过CCR的方式远程拷贝到云上ES集群;

客观条件:

不同VPC网络底层网络已经打通,在各自VPC下能Curl到彼此的ES VIP;

该用户的ES集群创建于近期,具备节点外访的功能;

目前遇到的问题:

客户在进行remote cluster设置的时候,报错如下:

代码语言:javascript
复制
“handshake failed because connection reset”

二、论证测试

按理说,基于以上条件,通过配置CCR应该是可以将远程集群上的索引复制到云上集群的,那为何会不通呢?基于此,我们自己走一波测试,看能否复现客户问题,具体如下图:

公有云、私有云跨VPC CCR访问
公有云、私有云跨VPC CCR访问

准备条件:

私有云, ES 7.2 集群 基础版

公有云 ,ES 7.5.1 白金版

我们知道,CCR的前提是必须要配置 Remote Cluster,那么我们是云上配置远程集群为私有云,可以如下配置:

代码语言:javascript
复制
PUT _cluster/settings
  {
    "persistent": {
      "cluster": {
        "remote":{
          "hezhenserver":{
            "seeds":[
              "172.16.15.11:9300"       //在云上配置自建集群为远程集群,需要配置节点的transport端口
              ]
          }
        }
      }
    }
  }

随后我们可以使用,GET /_remote/info 查看远程集群信息,返回如下:

代码语言:javascript
复制
{
  "hezhenserver" : {
    "seeds" : [
      "172.16.15.11:9300"   
    ],
    "connected" : false,          //链接失败,无法与远程节点取得联系。
    "num_nodes_connected" : 0,
    "max_connections_per_cluster" : 3,
    "initial_connect_timeout" : "30s",
    "skip_unavailable" : false
  }
}

无法建立,远程连接,也就是无法与远程集群建立通信,自然CCR无法正常工作。随后,相关检查展开,包括从私有云 telnet 公有云 transport 端口、安全组设置等,仍无法通信。那么我们去查看云ES集群的日志,看看是否有发现呢?

错误截图如下:

云ES集群错误日志
云ES集群错误日志
云ES集群错误日志
云ES集群错误日志

从日志记录来看,我们复现了客户的问题。日志的意思,大概就是“从云上访问你本地的cvm端口不通”。

三、排查结论

云上的集群节点间的通信都是加密过的,这个证书是私密的;你自建的集群默认没有开启transport SSL加密,即便开启了,因为证书的原因也不能直接连接云上的集群,云上集群的SSL密钥也不能直接公开。因为通信加密的原因,所以只有云上的集群可以互联不通。

结论:目前腾讯云ES白金版无法通过设置远程集群的方式配置CCR实现私有云到公有云的数据同步。

四、替代解决办法

前面我们知道ES集群开启安全认证后,节点之间的通信是加密的,称为TLS.这个里边会生产一个CA证书。这个证书是不对外开放的。那么既然知道这个原因后,我们可以新申请一个基础版ES,同时不开启安全认证,那么这样我们就能绕开这个证书不同步的问题。

第一步,申请一个同VPC下的集群,ES 7.5.1 基础版 不开启安全认证;

第二步 ,在该集群上配置私有云集群为远程集群,比如这里远程集群地址为:172.16.15.11:9300,配置如下:

添加远程集群
添加远程集群

发现结果是成功的。

远程集群连接成功
远程集群连接成功

第三步,开启该集群,白金版 trial试用功能,尝试能否使用 CCR 拷贝远程集群的索引。

开启白金版试用
开启白金版试用

第四步,配置并验证CCR功能,如下图所示:

在本地集群上创建一个Follower索引
在本地集群上创建一个Follower索引

第五步,去远程集群上创建Leader索引,“hezhenserver" ,如下:

代码语言:javascript
复制
PUT hezhenserver/_doc/1
  {
    "name":"eric",
    "age":29,
    "job":"bigdatasever maintance"
  }
  
  PUT hezhenserver/_doc/2
  {
    "name":"steven",
    "age":30,
    "job":"bigdata engineer development"
    
  }

第六步,验证local 集群上,Follower索引是否自动同步?发现是可以的。如下图:

验证Follower索引数据
验证Follower索引数据

Ok,经过上面的测试,我们通过绕过节点加密通信,有效规避了这个问题。

值得注意的是:基础版试用CCR功能,时间只有1个月的时间,因此我们建议用户将数据同步到云上集群后,及时升级版本到白金版。以免很多Api都报过期,控制台的监控数据都没法获取。

五,总结

本节基于大客户需求作了一定的测试,并就相关问题提出了解决方案并给出了验证,总结一下:

1,CCR是白金版功能,白金版ES集群不支持与自建集群建立通信;

2 ,云上集群要建立远程通信,也需要条件一致,需要一致的TLS加密环境。

3,可以通过基础版集群作为桥梁,将自建集群的索引复制到云上,再开启云上集群的CCR。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
    • 某大客户需求:
      • 客观条件:
        • 目前遇到的问题:
        • 二、论证测试
          • 准备条件:
          • 三、排查结论
            • 结论:目前腾讯云ES白金版无法通过设置远程集群的方式配置CCR实现私有云到公有云的数据同步。
            • 四、替代解决办法
            • 五,总结
            相关产品与服务
            Elasticsearch Service
            腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档