EDB EPAS 通过 PostgreSQL 连接器同步数据到 Elasticsearch

作者:来自 新智锦绣 靳海峰

PostgreSQL 通过 Connector 连接 Elasticsearch 的主要作用是实现关系型数据库与搜索引擎之间的数据同步,将 PostgreSQL中的数据实时或准实时地复制到 ES 中,以利用 ES 强大的全文检索和分析能力。EDB EPAS 除了其高级功能外,原生完全兼容 postgresql。所以通过 Elastic Integrations 中的 PostgreSQL Connector 是可以实现 EDB 与 ES 的数据连接与同步的。

PostgreSQL 到 ES 的连接器核心价值在于打破数据孤岛,在保留 PG 事务能力的同时,充分发挥ES的检索与分析优势,且集成连接器支持低代码、近实时和高可靠性,是企业构建搜索中台和实时数据平台的重要组件。

一、PG 与 ES 数据同步优势

  • 提升搜索性能:PostgreSQL 虽然支持全文搜索,但在处理复杂搜索、模糊匹配和高并发查询时,Elasticsearch 表现更加出色。
  • 实现数据分析与搜索分离:将搜索压力从业务数据库中分离出来,保证 OLTP 业务的稳定性。
  • 充分利用 Elasticsearch生态:通过 ES 强大的聚合分析、可视化功能,为数据挖掘和业务监控提供支持。

二、常见的数据同步方案

目前主流的数据同步方法主要有以下几种:

  1. 应用层双写 - 在业务代码中同时写入 PG 和 ES
  2. 日志解析 - 通过解析 PG 的 WAL 日志实现数据同步
  3. 定时任务 - 通过定时扫描数据库来同步数据
  4. 使用 CDC 工具 - 如 Debezium 等变更数据捕获工具
  5. 原生 Connector - 使用 Elasticsearch 官方提供的集成方案

今天我们将重点介绍最后一种方案 —— 使用 Elastic Integrations 的 PostgreSQL Connector。

三、Elastic 原生 PG Connector 配置指南

环境准备

在开始之前,请确保您已准备好:

  • Elasticsearch 集群(本例 8.17.2)
  • PostgreSQL 数据库(本例 Enterprisedb EPAS 17)

配置 PostgreSQL 连接器

在 Kibana 界面中操作:

1)进入 管理 → 集成

2)搜索 PostgreSQL

这里有两个 postgresql 集成选项,一个主要是 postgresql 的日志及审计集成,另一个是数据内容同步,这里我们选择第二个。

3)点击 PostgreSQL 进入添加界面,新建 enterprisedb 连接器名称

4)选择部署方式 - docker 方式

5)自动生成为 docker 运行连接器生成索引及密钥,后续在 config.yml 配置中做相应调整。并提示 docker 运行命令,等待连接器接入。

Docker(podman)环境下连接器的安装和启动配置

1)选择任意一台安装好 docker 运行环境的机器,按上面提示进行连接器配置。

我们以已经配好的一个连接器为参考来进行配置(主要是 api_key 等的差别)

[nuser@epas-1 elastic-connectors]$ mkdir -p "$HOME/elastic-connectors"
[nuser@epas-1 elastic-connectors]$ cd $HOME/elastic-connectors
[nuser@epas-1 elastic-connectors]$ touch config.yml
[nuser@epas-1 elastic-connectors]$ mkdir certs
[nuser@epas-1 elastic-connectors]$ sudo cp /etc/elasticsearch/certs/http_ca.crt ./certs/ca.crt
[nuser@epas-1 elastic-connectors]$ chmod 644 $HOME/elastic-connectors/certs/ca.crt

添加相应配置内容到 config.yml,从 Elastic 8.0 版本开始,安全功能(包括 TLS)是自动配置并默认开启的,所以我们要添加 tls 安全认证证书。可以从 elasticsearch cluster 的配置目录下拷贝 http_ca.crt 证书到当前目录下。并添加 ssl 字段内容。


[nuser@epas-1 elastic-connectors]$ cat config.yml 

connectors:
-
  connector_id: "K8Fcv5oBs306iAMqUdoW"
  service_type: "postgresql"
  api_key: "TE1GY3Y1b0JzMzA2aUFNcVV0b3U6TTZ6Z1hvOGlTS2FYSmlScUIybC1YUQ=="
elasticsearch:
  host: "https://192.168.31.11:9200"
  api_key: "TE1GY3Y1b0JzMzA2aUFNcVV0b3U6TTZ6Z1hvOGlTS2FYSmlScUIybC1YUQ=="
  ssl:
    certificate_authorities: ["/config/certs/ca.crt"]

2)运行并启动 docker 连接器

  • 运行 docker 的环境是 Oracle Linux Server release 8.5,默认系统已用 podman 替代 docker engine,所以环境需要做一些配置。当前网络环境是192.168.31.0/255

    • Podman 默认的 “podman” 网络(CNI bridge)不会自动路由到主机所在 LAN,所以容器无法访问 192.168.31.x。所以在容器启动时,最好通过–  network=host 使容器直接用主机网络。

  • 镜像里 elastic-ingest 使用 Python venv,内部 SSL 初始化逻辑硬编码了 CA 加载方式,所以即使正确指定了证书位置,启动后还是会报 “Cannot connect to host 192.168.31.11:9200 ssl:True [SSLCertVerificationError: (1, ’[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate in certificate chain (_ssl.c:1006)’)]”这样的错误,所以需要重构一个 update 证书的 image

在 elastic-connectors 目录下,创建 Dockerfile 文件,以便重新 build 新的 image

[nuser@epas-1 elastic-connectors]$ cat Dockerfile 
FROM docker.elastic.co/integrations/elastic-connectors:8.17.2

# 拷贝 CA
COPY certs/ca.crt /usr/local/share/ca-certificates/ca.crt
COPY certs/ca.crt /etc/ssl/certs/ca.crt
RUN apk add --no-cache ca-certificates \
    && update-ca-certificates
[nuser@epas-1 elastic-connectors]$ sudo podman build -t elastic-connectors-ssl 
  • 启动 docker

[nuser@epas-1 elastic-connectors]$ sudo podman run --network host -v "$HOME/elastic-connectors:/config" elastic-connectors-ssl /app/bin/elastic-ingest -c /config/config.yml
[FMWK][10:16:05][INFO] Running connector service version 8.17.2
[FMWK][10:16:05][INFO] Loading config from /config/config.yml
[FMWK][10:16:05][INFO] Running preflight checks
[FMWK][10:16:05][INFO] Waiting for Elasticsearch at https://192.168.31.11:9200 (so far: 0 secs)
[FMWK][10:16:05][INFO] Elasticsearch 8.17.2and Connectors 8.17.2 are compatible
[FMWK][10:16:05][INFO] Extraction service is not configured, skipping its preflight check.
[FMWK][10:16:05][INFO] [job_scheduling_service] Job Scheduling Service started, listening to events from https://192.168.31.11:9200
[FMWK][10:16:05][INFO] [content_sync_job_execution_service] Content sync job execution service started, listening to events from https://192.168.31.11:9200
[FMWK][10:16:05][INFO] [access_control_sync_job_execution_service] Access control sync job execution service started, listening to events from https://192.168.31.11:9200
[FMWK][10:16:06][INFO] [Connector id: K8Fcv5oBs306iAMqUdoW, index name: connector-postgresql-fce3] Connector is not configured yet. Finish connector configuration in Kibana to make it possible to run a sync.
[FMWK][10:16:36][INFO] [Connector id: K8Fcv5oBs306iAMqUdoW, index name: connector-postgresql-fce3] Connector is not configured yet. Finish connector configuration in Kibana to make it possible to run a sync.
[FMWK][10:17:06][INFO] [Connector id: K8Fcv5oBs306iAMqUdoW, index name: connector-postgresql-fce3] Connector is not configured yet. Finish connector configuration in Kibana to make it possible to run a sync.
[FMWK][10:17:36][INFO] [job_scheduling_service] Connector is configured correctly and can reach the data source
[FMWK][10:18:06][INFO] [Connector id: K8Fcv5oBs306iAMqUdoW, index name: connector-postgresql-fce3, Sync job id: A9Crv5oBs306iAMqUws7] Executing full sync
[FMWK][10:18:06][INFO] [Connector id: K8Fcv5oBs306iAMqUdoW, index name: connector-postgresql-fce3, Sync job id: A9Crv5oBs306iAMqUws7] Filtering validation starte

成功启动并连接到 ES。

3)在连接成功的 connector 下,配置 edb epas 连接信息

Kibana下进行同步或设置同步计划

至此,通过 postgresql 连接器连接 enterprisedb 到 ES 的数据同步就成功了。接下来就可以在 ES 下进行数据分析和可视化操作了。

三、在 ES 下测试导入的数据及可视化操作

在 EPAS 下的显示:

edb=# select version();
                                                                    version                                                                    
-----------------------------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 17.6 (EnterpriseDB Advanced Server 17.6.0) on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.020210514 (Red Hat 8.5.0-26), 64-bit
(1 行记录)

edb=# \dt
                                 关联列表
 架构模式 |                 名称                  |  类型  |    拥有者    
----------+---------------------------------------+--------+--------------
public   | credit_card_transactions              | 分区表 | enterprisedb
public   | credit_card_transactions_2025_09      | 数据表 | enterprisedb
public   | credit_card_transactions_heap_2025_09 | 数据表 | enterprisedb
public   | dept                                  | 数据表 | enterprisedb
public   | emp                                   | 数据表 | enterprisedb
public   | items                                 | 数据表 | enterprisedb
public   | jobhist                               | 数据表 | enterprisedb
public   | maps                                  | 数据表 | enterprisedb
public   | reservation_slots                     | 数据表 | enterprisedb
public   | reservations                          | 数据表 | enterprisedb
public   | restaurant_tables                     | 数据表 | enterprisedb
public   | t1                                    | 数据表 | enterprisedb
public   | test                                  | 数据表 | enterprisedb
(13 行记录)

edb=# select sum(sal) from emp;
   sum    
----------
30025.00
(1 行记录)

在连接器的下的文档页可以看到同步的内容:

为了方便在 discover 下观测和分析,可以把该索引创建 datastream。我们创建了enterprisedb的datastream。

在 Discover下查看索引文档信息:

还可以基于数据进行可视化编排和处理:

在开发控制台下进行 DSL/SQL 查询:

四、总结

通过 Elastic Integrations 的 PostgreSQL Connector,我们可以实现从 Enterprise EPAS 到 Elasticsearch 的数据同步,既保留了 PostgreSQL 在事务处理上的优势,又充分发挥了 Elasticsearch 在搜索和分析方面的强大能力。

这种方案特别适合需要实时搜索、复杂分析和数据可视化的场景,为业务提供更加完善的数据支持。

感谢您关注新智锦绣科技(北京)有限公司!作为 Elastic 的 Elite 合作伙伴及 EnterpriseDB 在国内的唯一代理和服务合作伙伴,我们始终致力于技术创新和优质服务,帮助企业客户实现数据平台的高效构建与智能化管理。无论您是关注 Elastic 生态系统,还是需要 EnterpriseDB 的支持,我们都将为您提供专业的技术支持和量身定制的解决方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值