做推广又能做网站,英文网站定制哪家好,网站的建设与管理暂行办法,网站设计的公司选哪家说明
pgsync项目有两个#xff0c;一个是ankane/pgsync#xff0c;用于pgsql之间的数据同步#xff0c;另一个是toluaina/pgsync#xff0c;用于pgsql的数据同步至es#xff0c;本教程适用于第二个项目。
pgsync应该是目前为止唯二支持es8的数据同步工具#xff0c;另一…说明
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还需要依赖redisgithub项目上给的依赖是redis 3.1.0redis根本就没有这个版本纯属误导人经测试拿最新版的redis7.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_USERpostgres
PG_HOST192.168.100.108
PG_PORT5432
PG_PASSWORDpostgres
ELASTICSEARCH_HOST192.168.100.108
ELASTICSEARCH_PORT9200
PG_SSLMODEdisable
REDIS_HOST192.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