Skytools安装配置管理(三)
2.3.2.3 创建root节点1[postgres@localhostconf]$ londiste3 part1.ini create-root part1_root dbname=part1 2013-09-27 14:20:10,481 28176 WARNING No host= in public connect string,bad idea 2013-09-27 14:20:11,085 28176 INFO Installing londiste 2.3.2.3 创建root节点2 [postgres@localhostconf]$ londiste3 part2.ini create-root part2_root dbname=part2 2013-09-27 14:20:30,440 28181 WARNING No host= in public connect string,538 28181 INFO plpgsql is installed 2013-09-27 14:20:31,102 28181 INFO londiste.global_add_table is installed 2.3.2.4 创建leaf节点1 [postgres@localhostconf]$ londiste3 part1_full1.ini create-leaf merge_part1_full1 dbname=full1 --provider=dbname=part1 2013-09-27 14:44:14,558 28448 WARNING No host= in public connect string,566 28448 INFO plpgsql is installed 2.3.2.5 创建leaf节点2 [postgres@localhostconf]$ londiste3 part2_full1.ini create-leaf merge_part2_full1 dbname=full1 --provider=dbname=part2 2013-09-27 14:44:31,967 28457 WARNING No host= in public connect string,974 28457 INFO plpgsql is installed 2013-09-27 14:44:32,030 28457 INFO Location registered 2.3.2.6 启动tricker [postgres@localhostconf]$ pgqd -d pgqd.ini 2013-09-27 14:39:50.675 28352 LOG Starting pgqd 3.1.5 2.3.2.7 启动worker[postgres@localhostconf]$ londiste3 -d part1_full1.ini worker [postgres@localhostconf]$ londiste3 -d part2_full1.ini worker [postgres@localhostconf]$ ps -ef | grep londiste postgres 28476 1 0 14:45 ? 00:00:00 /opt/python25/bin/python /opt/skytools/bin/londiste3 -d part1_full1.ini worker postgres 28486 1 0 14:45 ? 00:00:00 /opt/python25/bin/python /opt/skytools/bin/londiste3 -d part2_full1.ini worker postgres 28491 24970 0 14:46 pts/2 00:00:00 grep londiste 2.3.3 测试2.3.3.1 创建测试表[postgres@localhost~]$ psql -d "part1" -c "create table mydata (id int4 primary key,data text)" NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "mydata_pkey" for table "mydata" CREATE TABLE [postgres@localhost~]$ psql -d "part2" -c "create table mydata (id int4 primary key,SimSun;vertical-align:baseline;">CREATE TABLE 2.3.3.2 root节点加入同步表[postgres@localhostconf]$ londiste3 part1.ini add-table mydata 2013-09-27 14:49:04,577 28534 INFO Table added: public.mydata [postgres@localhostconf]$ londiste3 part2.ini add-table mydata 2013-09-27 14:49:12,833 28539 INFO Table added: public.mydata [postgres@localhostconf]$ psql -d "full1" -c "select * from londiste.table_info order by queue_name" nr | queue_name | table_name | local | merge_state | custom_snapshot | dropped_ddl | table_attrs | dest_table ----+------------+---------------+-------+-------------+-----------------+-------------+-------------+------------ 1| l3_part1_q | public.mydata | f | | | | | 2| l3_part2_q | public.mydata | f | | | | | (2 rows) {看到两个queue已经添加} 2.3.3.3 插入测试数据[postgres@localhost~]$ psql part1 psql (9.0.4) Type "help" for help. part1=# INSERT INTO mydata VALUES (1,'lianshunke1'); INSERT 0 1 part1=# c part2 You are now connected to database "part2". part2=# INSERT INTO mydata VALUES (2,'lianshunke2'); INSERT 0 1 2.3.3.4 在full1中创建并合并同步表[postgres@localhostconf]$ londiste3 part1_full1.ini add-table mydata --create --merge-all 2013-09-27 14:53:21,861 28611 INFO Creating public.mydata 2013-09-27 14:53:22,063 28611 INFO Creating mydata_pkey 【以下为两个queue在同步过程中的状态变化】 1| l3_part1_q | public.mydata | t | | | | | 2| l3_part2_q | public.mydata | t | | | | | 1| l3_part1_q | public.mydata | t | in-copy | | | | 2| l3_part2_q | public.mydata | t | in-copy | | | | ----+------------+---------------+-------+-------------+-----------------+------------------------------------------------------+-------------+------------ 1| l3_part1_q | public.mydata | t | catching-up | 2669:2669: | ALTER TABLE public.mydata ADD CONSTRAINT mydata_pkey+| | | | | | | | PRIMARYKEY (id); | | 2| l3_part2_q | public.mydata | t | catching-up | 2681:2681: | | | 1| l3_part1_q | public.mydata | t | catching-up | 2669:2669: | | | ----+------------+---------------+-------+---------------+-----------------+-------------+-------------+------------ 1| l3_part1_q | public.mydata | t | wanna-sync:27 | 2669:2669: | | | 1| l3_part1_q | public.mydata | t | ok | 2669:2669: | | | 2| l3_part2_q | public.mydata | t | wanna-sync:24 | 2681:2681: | | | 2| l3_part2_q | public.mydata | t | ok | 2681:2681: | | | {merge_state为ok时表明同步完成} 2.3.3.5 测试同步情况[postgres@localhost~]$ psql full1 full1=# SELECT * from mydata; id | data ----+------------- 1| lianshunke1 2| lianshunke2 {数据已经同步} 【向part1中插入数据】 full1=# c part1 You are now connected to database "part1". part1=# INSERT INTO mydata VALUES (11,'lianshunke11'); 【向part2中插入数据】 part2=# INSERT INTO mydata VALUES (22,'lianshunke22'); 【在full1中查看同步情况】 part2=# c full1 You are now connected to database "full1". ----+-------------- 11 | lianshunke11 22 | lianshunke22 (4 rows) 【在full1中删除测试数据】 full1=# DELETE FROM mydata ; ERROR: Table 'public.mydata' to queue 'l3_part1_q': change not allowed (D) {同步表禁止在子节点上更改数据} 【在part1中删除数据】 part1=# SELECT * from mydata ; part1=# DELETE FROM mydata where id=11; DELETE 1 【在full1中查看】 part1=# c full1 full1=# SELECT * from mydata ; (3 rows) {数据被删除} 2.3.4 拓扑情况[postgres@localhostconf]$ londiste3 part1.ini status Queue: l3_part1_q Local node: part1_root part1_root (root) | Tables:1/0/0 | Lag:1m0s,Tick: 33,NOT UPTODATE +--:merge_part1_full1 (leaf) Tables:1/0/0 Lag:1m0s,Tick: 33 [postgres@localhostconf]$ londiste3 part2.ini status Queue: l3_part2_q Local node: part2_root part2_root (root) | Lag:50s,Tick: 31,SimSun;vertical-align:baseline;"> +--:merge_part2_full1 (leaf) Lag:50s,Tick: 31 2.3.5 同步表状态[postgres@localhostconf]$ londiste3 part1.ini tables Tables on node table_name merge_state table_attrs --------------- --------------- --------------- public.mydata ok [postgres@localhostconf]$ londiste3 part2.ini tables public.mydata ok 2.3.6 node状态[postgres@localhostconf]$ londiste3 part1.ini members Member info on part1_root@l3_part1_q: node_name dead node_location ----------------- --------------- --------------- merge_part1_full1 False dbname=full1 part1_root False dbname=part1 [postgres@localhostconf]$ londiste3 part2.ini members Member info on part2_root@l3_part2_q: merge_part2_full1 False dbname=full1 part2_root False dbname=part2 2.3.7 同步状态比较[postgres@localhostconf]$ londiste3 part1.ini compare 2013-10-11 10:53:32,097 18193 INFO Checking if part1_root can be used for copy 2013-10-11 10:53:34,713 18193 INFO Counting public.mydata {此处可以看到源端与目标端的同步行数以及校验值,执行compare操作会对当前queue所针对的表进行一次同步} [postgres@localhostconf]$ londiste3 part2.ini compare 2013-10-11 10:53:39,763 18203 INFO Checking if part2_root can be used for copy 2013-10-11 10:53:42,331 18203 INFO Counting public.mydata 2.4、分割复制模式
2.4.1 前期准备2.4.1.1 创建数据库postgres=# create database part_root; CREATE DATABASE postgres=# create database part_part0; postgres=# create database part_part1; CREATE DATABASE 2.4.1.2 创建配置模式与配置表【part_part0】 part_part0=# create schema partconf; CREATE SCHEMA part_part0=# CREATE TABLE partconf.conf ( part_part0(# part_nr integer, part_part0(# max_part integer,SimSun;font-weight:bold;vertical-align:baseline;">part_part0(# db_code bigint,SimSun;font-weight:bold;vertical-align:baseline;">part_part0(# is_primary boolean,SimSun;font-weight:bold;vertical-align:baseline;">part_part0(# max_slot integer,SimSun;font-weight:bold;vertical-align:baseline;">part_part0(# cluster_name text part_part0(# ); part_part0=# insert into partconf.conf(part_nr,max_part) values(0,1); 【part_part1】 part_part1=# CREATE SCHEMA partconf; part_part1=# CREATE TABLE partconf.conf ( part_part1(# part_nr integer,SimSun;font-weight:bold;vertical-align:baseline;">part_part1(# max_part integer,SimSun;font-weight:bold;vertical-align:baseline;">part_part1(# db_code bigint,SimSun;font-weight:bold;vertical-align:baseline;">part_part1(# is_primary boolean,SimSun;font-weight:bold;vertical-align:baseline;">part_part1(# max_slot integer,SimSun;font-weight:bold;vertical-align:baseline;">part_part1(# cluster_name text part_part1(# ); part_part1=# insert into partconf.conf(part_nr,max_part) values(1,SimSun;font-size:14px;vertical-align:baseline;">【part_root】 part_root=# create schema partconf; CREATE SCHEMA (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |