0%

SequoiaDB-PostgreSql元数据同步

元数据同步

  • 元数据同步指在两个或多个 PostgreSQL 实例之间,完成元数据(如:建外部表等 DDL 操作)的同步。元数据同步工具主要用于定时解析主 SSQL 日志中新增的 DDL 操作语句并下发到各备 SSQL 执行,同时能过滤日志中执行失败的 DDL 操作语句。以两个 PostgreSQL 实例为例(一主一备),在主 PostgreSQL 实例中创建数据库和外部表,并通过元数据同步工具,实现将新创建的数据库和外部表同步到备 PostgreSQL 实例中,完成元数据同步。

创建 PostgreSQL 实例 myinst 和 myinst1

1)切换到 SequoiaSQL-PostgreSQL 安装目录;

1
cd /opt/sequoiasql/postgresql

2)添加实例;

添加实例 myinst(作为主 PostgreSQL 实例);

1
bin/sdb_sql_ctl addinst myinst -D database/5432/ -p 5432

添加实例 myinst1(作为备 PostgreSQL 实例);

1
bin/sdb_sql_ctl addinst myinst1 -D database/5433/ -p 5433

Note:

指定实例名为 myinst,该实例名映射相应的数据目录和日志路径,用户可以根据自己需要指定不同的实例名,实例默认端口号为 5432。

3)查看实例,可以看到实例名为 myinst 的数据和日志目录信息;

1
bin/sdb_sql_ctl listinst

4)启动实例;

启动实例 myinst;

1
bin/sdb_sql_ctl start myinst

启动实例 myinst1;

1
bin/sdb_sql_ctl start myinst1

5)查看实例状态;

1
bin/sdb_sql_ctl status

配置 PostgreSQL 实例免密登录

若 PostgreSQL 实例开启了用户鉴权,需要创建元数据同步用户以及配置免密登录。

1)进入 sdbadmin 的 home 目录;

1
cd /home/sdbadmin

2)同步工具已提前放置在 sdbadmin 的 home 目录,解压同步工具;

1
tar xvf SsqlDisseminateDDL.tar

3)进入解压目录;

1
cd SsqlDisseminateDDL

4)拷贝免密文件到 home 目录;

1
cp .pgpass /home/sdbadmin/

5)将文件权限设置为0600;

1
chmod 0600 /home/sdbadmin/.pgpass

PostgreSQL 实例日志设置

1)进入 myinst 实例的数据目录,修改部分配置;

1
cd /opt/sequoiasql/postgresql/database/5432

2)为了配合元数据同步,需要对应修改 postgresql.conf 配置文件的参数;

1
2
3
4
5
6
7
echo "log_destination = 'csvlog'" >> postgresql.conf
echo "logging_collector = on" >> postgresql.conf
echo "log_directory = '/opt/sequoiasql/postgresql/database/5432/pg_log'" >> postgresql.conf
echo "log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'" >> postgresql.conf
echo "log_rotation_age = 28d" >> postgresql.conf
echo "log_rotation_size = 20MB" >> postgresql.conf
echo "log_statement = 'ddl'" >> postgresql.conf

Note:

  • log_destination:设置输出的日志类型;
  • logging_collector:是否开启日志功能,默认为关闭(off),开启为 on;
  • log_directory:日志输出目录;
  • log_filename:日志文件名称命名规则;
  • log_rotation_age:单个日志文件的保存周期,默认保存 1 天(1d);
  • log_rotation_size:单个日志文件的大小, 若超过指定大小,那么将新生成一个日志文件;
  • log_statement:控制记录哪些 SQL 语句;

工具配置

将元数据同步程序及 config 配置文件拷贝到本地,并查看 config 文件内容。

1)拷贝元数据同步工具到数据目录;

1
cp /home/sdbadmin/SsqlDisseminateDDL/SsqlDisseminateDDL ./

2)拷贝元数据同步工具配置到数据目录;

1
cp /home/sdbadmin/SsqlDisseminateDDL/config ./

3)查看 config 配置内容;

1
more config

操作截图:

图片描述

注:配置文件中参数包括:目标 PostgreSQL 实例 myinst1 运行的服务器名,端口号;源 PostgreSQL 实例 myinst 的安装目录,数据目录,解析日志目录;PostgreSQL 同步用户;以及元数据同步程序的执行时间间隔、执行日志目录,执行日志文件前缀。

重启 myinst 实例

创建配置文件指定的解析日志目录和执行日志目录,重启源 PostgreSQL 实例 myinst,使配置生效;

1)创建日志目录;

1
2
mkdir /opt/sequoiasql/postgresql/database/5432/pg_log
mkdir /opt/sequoiasql/postgresql/database/5432/log

2)重启 myinst 实例;

1
/opt/sequoiasql/postgresql/bin/sdb_sql_ctl restart myinst

启动元数据同步工具

元数据同步工具在启动后会一直常驻后台运行,主要用于定时解析主 PostgreSQL 实例日志中新增的 DDL 操作语句并下发到各备 PostgreSQL 实例中执行。

1
nohup python /opt/sequoiasql/postgresql/database/5432/SsqlDisseminateDDL &

在 SequoiaDB 中建立集合空间和集合

进入 SequoiaDB Shell,在 SequoiaDB 巨杉数据库引擎中创建 company 集合空间和 employee 集合。

1)使用 Linux 命令进入 SequoiaDB Shell 命令行;

1
sdb

2)使用 JavaScript 语法,连接协调节点,获取数据库连接;

1
var db = new Sdb("localhost", 11810);

3)创建 company_domain 数据域;

1
db.createDomain("company_domain", [ "group1", "group2", "group3" ], { AutoSplit: true } );

4)创建 company 集合空间;

1
db.createCS("company", { Domain: "company_domain" } );

5)创建 employee 集合;

1
db.company.createCL("employee", { "ShardingKey": { "_id": 1 }, "ShardingType": "hash", "ReplSize": -1, "Compressed": true, "CompressionType": "lzw", "AutoSplit": true, "EnsureShardingIndex": false } );

6)写入数据;

1
db.company.employee.insert( { "empno": 1, "ename": "Jack", "age": 35 } );

7)关闭 db 数据库连接;

1
db.close();

8)退出 SequoiaDB Shell;

1
quit;

验证元数据同步

在主 PostgreSQL 实例中创建 company 数据库并配置连接信息创建 employee 外部表,然后登录备 PostgreSQL 实例查看是否已经创建了数据库和外部表。

在 myinst 实例中创建数据库

1)在 PostgreSQL 的 myinst 实例创建数据库 company;

1
/opt/sequoiasql/postgresql/bin/sdb_sql_ctl createdb company myinst

2)查看数据库;

1
/opt/sequoiasql/postgresql/bin/psql -l

操作截图:

图片描述

加载 SequoiaDB 连接驱动

1)登录 PostgreSQL Shell 连接 myinst 实例的 company 数据库;

1
/opt/sequoiasql/postgresql/bin/psql -p 5432 company

2)加载 SequoiaDB 连接驱动;

1
CREATE EXTENSION sdb_fdw;

3)在 PostgreSQL 实例中配置 SequoiaDB 连接参数;

1
2
3
4
5
6
7
8
9
10
CREATE SERVER sdb_server FOREIGN DATA WRAPPER sdb_fdw 
OPTIONS
(
address '127.0.0.1',
service '11810',
user '',
password '',
preferedinstance 'A',
transaction 'on'
);

实例与数据引擎中集合关联

将 PostgreSQL 实例中的外部表与 SequoiaDB 中的集合空间、集合关联。

1)创建 employee 表;

1
2
3
4
5
6
7
8
CREATE FOREIGN TABLE employee 
(
empno INT,
ename VARCHAR(128),
age INT
)
SERVER sdb_server
OPTIONS ( collectionspace 'company', collection 'employee', decimal 'on' );

2)查询 myinst 实例 employee 表中的数据;

1
SELECT * FROM employee;

3)退出 myinst 实例;

1
\q

查询 myinst1 实例是否已经建表成功

1)登录 PostgreSQL Shell 连接 myinst1 实例的 company 数据库;

1
/opt/sequoiasql/postgresql/bin/psql -p 5433 company

2)查询 myinst1 实例 employee 表中的数据;

1
SELECT * FROM employee;

3)退出 myinst1 实例;

1
\q
-------------本文结束感谢您的阅读-------------