当前位置: 首页 > news >正文

PGSync安装使用教程(PostgreSQL数据实时同步至Elasticsearch)

说明

pgsync项目有两个,一个是ankane/pgsync,用于pgsql之间的数据同步,另一个是toluaina/pgsync,用于pgsql的数据同步至es,本教程适用于第二个项目。

pgsync应该是目前为止唯二支持es8的数据同步工具,另一个是canal,但是canal数据源只支持mysql。另外还有个flink cdc,数据源同时支持mysql和pgsql,但是只支持到es7,前几个月更新了es8的流驱动,flink sql es8的驱动应该也快了(GitHub - apache/flink-connector-elasticsearch: Apache Flink connector for ElasticSearch)。

使用pgsync的前置条件

首先需要正确安装和使用postgresql和elasticsearch。

PGSQL

pgsql需要contrib模块,网上很多安装教程,如果你是yum安装的,可以直接使用以下命令安装

yum install postgresql15-contrib

另外pgsql需要修改三个配置,使用yum安装的pgsql,配置文件一般在

/var/lib/pgsql/15/data/postgresql.conf

需要修改以下三个配置,这几个配置也是一般的同步工具都需要修改的

wal_level = logical
max_replication_slots = 10
max_slot_wal_keep_size = 100GB

ES

es不需要修改什么配置,只需要知道连接信息、用户名密码即可。

PYTHON

安装pgsync需要python3和pip3。

需要注意centos7不带python3环境,我在centos7里尝试装python3和pip3,要么就是pip不能用,要么就是python的ssl组件安装失败,要么就是yum不能用了,ssl组件安装失败之后,用pip安装pgsync也装不上,如果使用pip install -i参数指定镜像源,装完之后也会出现奇奇怪怪的问题。

所以本教程用的是自带python3的ubuntu22.04环境。

REDIS

pgsync还需要依赖redis,github项目上给的依赖是redis 3.1.0,redis根本就没有这个版本,纯属误导人,经测试,拿最新版的redis(7.0.15)就可以。

安装完redis别忘了修改redis.conf下的这三个配置

daemonize yes
#bind 127.0.0.1 -::1
protected-mode no

安装(Ubuntu22.04环境)

首先要安装pip3

apt install pip3

使用pip3安装pgsync

pip3 install pgsync

使用

配置环境

pgsync一共包含两个程序,boostrap和pgsync,使用pip3装完pgsync之后,这两条命令是全局的,任何路径下都可以直接使用,所以我们来建一个文件夹当作pgsync的同步主目录

mkdir /opt/pgsync_project

pgsync依赖于dotenv组件配置相关的环境变量,所以我们要创建一个.env文件来配置环境

vim /opt/pgsync_project/.env

写入以下内容(以实际情况为准),其他字段参考:Environment variables - PGSync

PG_USER=postgres
PG_HOST=192.168.100.108
PG_PORT=5432
PG_PASSWORD=postgres
ELASTICSEARCH_HOST=192.168.100.108
ELASTICSEARCH_PORT=9200
PG_SSLMODE=disable
REDIS_HOST=192.168.100.108

保存.env文件并退出。

创建DEMO

在pgsql中创建示例表和插入数据。

CREATE DATABASE testdb;CREATE TABLE student (id int4 NOT NULL,name varchar(255)
);INSERT INTO student VALUES (1, 'name1');
INSERT INTO student VALUES (2, 'name2');
INSERT INTO student VALUES (3, 'name3');

根据表结构创建pgsync的schema。

vim /opt/pgsync_project/schema.json

写入以下内容

[{"database":"testdb","index":"student","nodes":{"table":"student","schema":"public","columns":["id","name"]}}
]

注意此示例是单表同步,如果是pgsql的多个表对es的一个表,需要在pgsql的表结构中建外键,关于pgsync的scheam的详细说明,见Schema definition - PGSync和Table with multiple children - PGSync。

同步

首先需要使用bootstrap初始化,用于连接验证和创建es索引。

bootstrap --config /opt/pgsync_project/schema.json

只同步一次,同步完结束程序

pgsync --config /opt/pgsync_project/schema.json

实时同步,前台一直执行

pgsync --config /opt/pgsync_project/schema.json -d

http://www.lryc.cn/news/346006.html

相关文章:

  • 前端主题切换的多种方式
  • 使用RESTful API构建 web 应用程序
  • KaiOS Data PDN 数据建立流程
  • Mybatis-Plus常用的增删改查坑
  • 初识指针(4)<C语言>
  • pyqt 工具栏QToolBar控件
  • SystemVerilog/Verilog中的仿真延时建模之模块路径延时
  • 代码随想录算法训练营Day36 | 738.单调递增的数字、968.监控二叉树、贪心算法总结 | Python | 个人记录向
  • FME学习之旅---day26
  • JAVA学习-练习试用Java实现电话号码的字母组合
  • js代码中关于async await的滥用 async await的滥用
  • 基础算法,贪心算法,贪心策略,OJ练习
  • 一文讲透亚马逊云三层架构
  • 只需3步,使用Stable Diffusion无限生成AI数字人视频(附安装包)
  • RustGUI学习(iced)之小部件(七):如何使用图像image部件来显示图片?
  • Substrate 入门课第 14 期圆满结束,岗位内推直达知名 Web3 项目!
  • android进阶-AIDL
  • 贪心算法-活动选择问题背包问题
  • Web3工具集合 - 00
  • 分布式与集群的区别
  • 学习心得:如何开始学习一款MCU
  • 顺序表的实现(迈入数据结构的大门)(1)
  • RERCS系统-WDA+BOPF框架实战例子 PART 1-新建List UIBB(列表组件)并分配Feeder Class和Node Element
  • 如何从 iPhone 恢复已删除或丢失的联系人?
  • RISCV 外部GCC 工具链安装@FreeBSD15
  • 全栈开发之路——前端篇(9)插槽、常用api和全局api
  • 减瘦误区、雷点、陷阱和挑战怎么应对
  • Leetcode—946. 验证栈序列【中等】
  • Selenium定位方法及代码
  • GitHub搭建免费博客