使用 amazonriver将postgres 数据实时同步 至elasticsearch (基于pg的逻辑复制功能)

wangzhen-fly 2020-03-19 原文

使用 amazonriver将postgres 数据实时同步 至elasticsearch (基于pg的逻辑复制功能)

amazonriver elasticsearch 实时同步, 逻辑复制 go 哈罗单车 开源

amazonriver

 

一、    简介

amazonriver 是一个将postgresql的增、删、改实时同步到es或kafka的服务(基于pg的逻辑复制功能),go语言实现,哈罗单车开源的一个项目。

git地址https://github.com/hellobike/amazonriver

也有java版本https://github.com/hellobike/tunnel(需依赖zookeeper)

版本支持

  • Postgresql 9.4 or later
  • Kafka 0.8 or later
  • ElasticSearch 5.x

 

amazonriver 利用pg内部的逻辑复制功能,通过在pg创建逻辑复制槽,接收数据库的逻辑变更,通过解析test_decoding特定格式的消息,得到逻辑数据,与es的通讯是发布订阅的方式,

效果要比触发器好的多,并且配置简易

 

 

安装

下载最新版本

https://github.com/hellobike/amazonriver/releases

 

 

压缩包中amazonriver是可执行文件,放到/opt/amazonriver目录下

 

二、    配置

amazonriver 配置

在该目录下新增一个配置文件 config.json

 

 

config.json配置内容为

{

    “pg_dump_path”: “”,

“subscribes”: [{

       #历史数据导入的功能,测试发现无法使用

        “dump”: false,

              #若有多个amazonriver实例,这里要配置成不一样的

        “slotName”: “slot_for_es1”,

        “pgConnConf”: {

            #pg数据库配置

            “host”: “10.168.4.91”,

            “port”: 5321,

            “database”: “xzdssituation”,

            “schema”: “public”,

            “user”: “postgres”,

            “password”: “postgres”

        },

        “rules”: [

            {

                #表名

                “table”: “ds_command”,

                 #表的主键

                “pks”: [“command_id”],

                 #es中的主键

                “esid”: [“command_id”],

                “index”: “ds_command”,

                 #固定为data, 禁止以下划线开头

                “type”: “data”

            },

            {

                “table”: “ds_alarm”,

                “pks”: [“command_id”],

                “esid”: [“command_id”],

                “index”: “ds_alarm”,

                “type”: “data”

            }

        ],

        “esConf”: {

            #elasticsearch 地址

            “addrs”: “http://10.168.4.60:9200/”,

            “user”: “”,

            “password”: “”

        },

         #失败重试0为不重试,-1会一直重试直到成功

        “retry”: -1

}],

# 填”:8080″会开启端口,供普罗米修斯监控,这里不配置

    “prometheus_address”: “”

}

 

PostgreSQL 配置

1.修改/app/pgsql_data/postgresql.conf

wal_level = 'logical';
max_replication_slots = 5; #该值要大于1

修改后需要重启才能生效

2.创建有replication权限的用户

CREATE ROLE syn_rep LOGIN  ENCRYPTED PASSWORD 'postgres' REPLICATION;
GRANT CONNECT ON DATABASE xzdssituation to syn_rep;
COMMIT;

3.修改白名单配置

在 /app/pgsql_data/pg_hba.conf 中增加配置:

 host replication syn_rep all md5

修改后需要reload才能生效

4.重启pg

su – postgres

./stop-pgsql.sh

./start-pgsql.sh

三、      启停

先给amazonriver加可执行权限

chmod +x /opt/amazonriver/amazonriver

启动(指定配置 和 日志)

已写成脚本:/opt/amazonriver/start.sh

nohup /opt/amazonriver/amazonriver -config /opt/amazonriver/config.json -level debug > /opt/amazonriver/logfile.log 2>&1 & echo $! > /opt/amazonriver/pid

停止

已写成脚本:/opt/amazonriver/stop.sh

kill `cat /opt/amazonriver/pid`

四、          日志查看

tail -200f /opt/amazonriver/logfile.log

 

附录:

/app/pgsql/bin/pg_ctl 控制pg启停

pg_ctl start [-w] [-s] [-D datadir] [-l filename] [-o options] [-p path]
pg_ctl stop
[-W] [-s] [-D datadir]
[-m s[mart] | f[ast] | i[mmediate] ]
pg_ctl restart
[-w] [-s] [-D datadir]
[-m s[mart] | f[ast] | i[mmediate] ] [-o options]
pg_ctl reload
[-s] [-D datadir]
pg_ctl status
[-D datadir]
pg_ctl kill
[signal_name]
[process_id]
pg_ctl register
[-N servicename]
[-U username]
[-P password]
[-D datadir]
[-w] [-o options]
pg_ctl unregister
[-N servicename]

 

发表于
2020-03-19 11:28 
wangzhen_fly 
阅读(
评论(
编辑 
收藏

 

版权声明:本文为wangzhen-fly原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/wangzhen-fly/p/12522944.html

使用 amazonriver将postgres 数据实时同步 至elasticsearch (基于pg的逻辑复制功能)的更多相关文章

  1. 使用 Github Action 进行前端自动化发布

    说起自动化,无论是在公司还是我们个人的项目中,都会用到或者编写一些工具来帮助我们去处理琐碎重复的工作,以节约时 […]...

  2. asp.net core 使用 signalR(一)

    asp.net core 使用 signalR(一) Intro SignalR 是什么? ASP.NET C […]...

  3. 使用 openssl 生成证书

    一、openssl 简介 openssl 是目前最流行的 SSL 密码库工具,其提供了一个通用、健壮、功能完备 […]...

  4. 快速使用 Docker 上手 Sentry-CLI – 玩转 Source Maps 使用 (create-react-app)

    系列 快速使用 Docker 上手 Sentry-CLI – 创建版本 入门 使用 sentry- […]...

  5. mysql 子查询中 使用 limit

      如果sql语句中的子查询包含limit  例如: select * from a where id in […]...

  6. 使用 Django 项目中的 ORM 编写伪造测试数据脚本

    作者:HelloGitHub-追梦人物 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team […]...

  7. JS match() 方法 使用

     javascript中的match函数是使用正则表达式对字符串进行查找,并将查找的结果作为数组返回,在实际开 […]...

  8. 使用 Python 编写脚本并发布

    使用 Python 编写脚本并发布 P1: 脚本 通常在 Linux 服务器上会遇到在命令行中输入命令的操作, […]...

随机推荐

  1. bash

    bash 是一个为GNU计划编写的Unix shell。它的名字是一系列缩写:Bourne-Again SHe […]...

  2. Linux就该这么学28期——Day02 2.1-2.3

    本文记录必须掌握的Linux命令,部分内容引用自https://www.linuxprobe.com/basi […]...

  3. shp文件转dwg并创建文本标注

    不得不说,ArcGIS 和 CAD 之间的兼容性非常差,shapefile文件和dwg文件之间互相转换会丢失各 […]...

  4. 思路分享 | 指纹考勤机实现远程打卡测试

    0×00 指纹考勤机被越来越多的使用在企业中, 实现了人、地、时三者合一,为企业职员的出勤考察提供了极大的方便 […]...

  5. 机械硬盘换到SSD后系统引导报错代码0xc000000e的解决办法

    由于机械硬盘IO不够用,系统使用起来非常的缓慢,特意购买了新的SSD进行了替换。 机械硬盘的IO在70左右,S […]...

  6. 创建用户(adduser和useradd)和删除用户(userdel) 创建用户(adduser和useradd)和删除用户(userdel)及

    一  用户创建命令:  # adduser  用户名 # useradd  用户名 1) useradd 与 […]...

  7. Angular开发实践(五):深入解析变化监测

    什么是变化监测 在使用 Angular 进行开发中,我们常用到 Angular 中的绑定——模型到视图的输入绑 […]...

  8. Kettle7.1 spoon启动报错【A Java Exception has occurred】

    这个报错是因为JDK版本问题,7.1版本的Kettle需要JDK1.8,而我本机装的JDK1.7,需要升级JD […]...

展开目录

目录导航