TBase-手工创建数据多活

2020-12-07 10:01:30 浏览数 (1)

今天这篇文章主要是实操,给大家演示如何利用SQL语句手工创建数据多活。

实验描述:

利用数据多活同步mc.public.test_repl到postgres.public.test_repl的数据。

实验步骤:

1 首先我们连接到CN节点,创建实验用的数据库mc和实验用的表test_repl,并向test_repl插入10000条数据。

[tbase@VM-64-14-centos ~]$ psql -h 172.21.64.4 -U tbase -d postgres -p 11345

psql (10.6, server 10.0 TBase V2)

Type "help" for help.

postgres=# create database mc;

CREATE DATABASE

postgres=# c mc

psql (10.6, server 10.0 TBase V2)

You are now connected to database "mc" as user "tbase".

mc=# create table test_repl(id int primary key,name varchar(20));

CREATE TABLE

mc=# insert into test_repl select generate_series(1,10000),'test';

INSERT 0 10000

2 连接到cn节点的postgres数据库,创建与test_repl表(与mc.test_repl表结构相同)

[tbase@VM-64-14-centos ~]$ psql -h 172.21.64.4 -U tbase -d postgres -p 11345

创建test_repl表。

create table test_repl(id int primary key,name varchar(20));

3 在postgres数据库中创建订阅。

注意: 有几个DN节点,就要创建几个subscription。因为数据是从DN上通过逻辑复制过来的。

CREATE TBASE SUBSCRIPTION sub_test_4

CONNECTION 'host = 172.21.64.4 port = 11000 user = tbase dbname = mc'

PUBLICATION p_mc_public_test_repl WITH

(connect=true, enabled=true, create_slot=true, copy_data=true, synchronous_commit=on,

ignore_pk_conflict = true, parallel_number= 4 );

CREATE TBASE SUBSCRIPTION sub_test_5

CONNECTION 'host = 172.21.64.5 port = 11000 user = tbase dbname = mc'

PUBLICATION p_mc_public_test_repl WITH

(connect=true, enabled=true, create_slot=true, copy_data=true, synchronous_commit=on,

ignore_pk_conflict = true, parallel_number= 4 );

1. 检验

查看postgres.public.test_repl表,1w条数据已经成功复制过来。

在mc.public.test_repl端做dm操作,验证是否同步到postgres.public.test_repl

--查询postgres.public.test_repl

数据均已经同步到postgres.public.test_repl。

问题整理:

1 新建发布,发布表,报错如下:

select c.relname from pg_class c where c.oid =

( select indexrelid from pg_index where indrelid = ( select x.oid from pg_class x, pg_namespace n where n.nspname = 'public' and x.relname = 't1' and c.relnamespace = n.oid) and (indisunique = true or indisprimary = true ))

原因:

--数据多活使用的是逻辑复制原理,要求发布的表上必须有主键或者唯一索引,或者定义复制键,为了性能考虑,最好发布表上带有主键。

2 postgres.public.test_repl数据不完整,只同步一部分数据过来。

检查是否为所有DN节点都创建了subscription。比如有2个节点,那么在第三步的时候,就应该创建2个subscription。

0 人点赞