使用 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. uni-app 使用 iconfont 图标 自定义图标

      uni-app 的uni-ui 的 Icon 图标组件,裡面的图标只是移动端常见的图标,对于一些其他需求所 […]...

  2. WebStorm 使用

    Sublime 很强大,但是在项目越来越大而复杂的时候,会显得力不从心。比如函数追踪功能的确实,找个创建函数的 […]...

  3. tensorflow 使用 cpu 而不使用 gpu 问题

    查看 tensorflow 版本   conda list 例如发现 tensorflow 1.10.0    […]...

  4. docker hub 使用

    Dockerhub 使用步骤官网地址 https://hub.docker.com/1、注册网页最下方点击si […]...

  5. 使用 Flux,Helm v3,Linkerd 和 Flagger 渐进式交付 Kubernetes

    介绍 本指南将引导您在 Kubernetes 集群上设置渐进式交付 GitOps 管道。 GitOps Hel […]...

  6. Git 学习笔记之(一) 使用 git gui 从github上下载代码

    背景:      目前一些开源代码均在 GitHub上管理的,包括自己写的代码也可以放在上面进行管理。但问题是 […]...

  7. 使用 pdf.js 在网页中加载 pdf 文件

    在网页中加载并显示PDF文件是最常见的业务需求。例如以下应用场景:(1)在电商网站上购物之后,下载电子发票之前 […]...

  8. 使用 JsPlumb 绘制拓扑图的通用方法

    实现 JsPlumb 绘制拓扑图的通用方法。 只要服务端返回一个符合指定格式的数据结构,就可以绘制相应的拓扑图 […]...

随机推荐

  1. 快贴 – 跨平台的云剪贴板

    快贴 – 跨平台的云剪贴板 跨平台的真正云剪贴板工具。 • 快贴支持主流计算平台. • 快贴独有的 […]...

  2. uml的十三种图形

    1.用例图:对系统的使用方式分类. 2.类图:显示类和它们的相互关系。 3。对象图:只显示对象及它们的相互关系 […]...

  3. DolphinScheduler搭建与采坑日记

    用于搭建ds1.3.2版本 一:需要提前安装的框架及版本 ·PostgreSQL (8.2.15+) or M […]...

  4. JS和jQuery获取节点的兄弟,父级,子级元素

    原文转自http://blog.csdn.net/duanshuyong/article/details/75 […]...

  5. 深入浅出ES6(十七):展望未来

    作者 Jason Orendorff  github主页  https://github.com/jorend […]...

  6. matlab安装步骤【转载】 – mary_l

    matlab安装步骤【转载】 matlab安装图解,2008到2010均适用,见附件   Matlab R20 […]...

  7. NO.13 利用Matlab对MSP432采集到的数据进行处理

      我们已经讲过MSP432开发板串口的应用。对于我们来说,我们很需要通过一些数据采集模块将采集到的数据发送到 […]...

  8. IIR滤波器软件实现(Matlab+C++)

    使用C++来写一个IIR滤波器 我们首先要在MATLAB中设计一个IIR滤波器,并生成一个头文件,这个头文件中 […]...

展开目录

目录导航