SymmetricDS安裝記錄,symmetricds記錄
本安裝記錄基於SymmetricDS Quick Start Guide中的範例,安裝在兩個機器上。
安裝環境
Machine1:hadoop3.highgo.com
Machine2:hadoop4.highgo.com
安裝SymmetricDS
1. 下載SymmetricDS伺服器程式,當前是Symmetric-3.6.14,下載Symmetric-3.6.14-server.zip檔案。解壓到兩台機器的/opt/目錄下,更改SymmetricDS根目錄擁有者為highgo。
2. Hadoop4.highgo.com作為root端,負責corp資料庫,hadoop3.highgo.com作為store端,負責store001資料庫。在hadoop4端,將SymmetricDS安裝副本根目錄下的samples目錄下的corp-000.properties檔案複製到engines目錄下,在hadoop3端,將SymmetricDS安裝副本根目錄下的samples目錄下的store-001.properties檔案複製到engines目錄下。修改兩個設定檔的資料庫資訊,我的配置如下:
db.driver=org.postgresql.Driverdb.url=jdbc:postgresql://hadoop3/4.highgo.com/store001db.user=highgodb.password=highgo
3. Store端的設定檔需要配置registration.url
registration.url=http://hadoop4.highgo.com:8080/sync/corp-000
SymmetricDS層面上的主從關係,也就是這麼來的,真正運行起來,SymmetricDS就跟它的名字一樣Symmetric,各個節點是對等的。
安裝資料庫、建立業務表、匯入初始資料、建立系統資料表
1. 分別在兩台機器上安裝了一個PostgreSQL資料庫執行個體,分別建立資料庫使用者highgo,密碼為highgo。在hadoop3.highgo.com 上建立store001資料庫,owner為highgo,在hadoop4.highgo.com上建立corp資料庫,owner為highgo。
2. 在hadoop4端的SymmetricDS安裝副本的samples目錄下執行下面的命令:
../bin/dbimport --engine corp-000 --format XMLcreate_sample.xml
這是文檔上的做法,不過執行上邊的命令後,報錯,找不到create_sample.xml這個檔案。於是開啟這個檔案發現就是幾張表的定義,是以xml這種通用的格式定義的。一共四張表item,item_selling_price,sale_transaction,sale_return_line_item。索性根據xml檔案中的描述,直接寫SQL語句,寫成的SQL語句如下:
createtable item(item_id INTEGER PRIMARY KEY,name VARCHAR(100)) createtable item_selling_price(item_id INTEGER REFERENCES item(item_id),store_idVARCHAR(5),priceDECIMAL(10,2),costDECIMAL(10,2),PRIMARYKEY(item_id,store_id)) createtable sale_transaction(tran_id INTEGER PRIMARY KEY, store_id VARCHAR(5) NOT NULL,workstation VARCHAR(3) NOT NULL,day VARCHAR(10) NOT NULL,seq INTEGER NOT NULL) createtable sale_return_line_item(tran_id INTEGER PRIMARY KEY REFERENCES sale_transaction(tran_id),item_id INTEGER NOT NULL REFERENCES item(item_id),price DECIMAL(10,2) NOT NULL,quantity INTEGER NOT NULL,returned_quantity INTEGER)
這四個表是我們這個分銷業務的例子的業務表。
3. 還是在hadoop4端,執行下面的命令:
../bin/symadmin --engine corp-000create-sym-tables
這個命令是建立SymmetricDS的系統資料表,這個執行成功,沒有報錯什麼的。
4. 還是在hadoop4端,執行下面的命令:
../bin/dbimport --engine corp-000insert_sample.sql
Insert_sample.sql檔案主要分兩部分,一個是往業務表裡插入範例資料,另一部分是往SymmetricDS的系統資料表裡插入本範例的系統資料。首先建立了兩個節點,然後建立了兩個channel,又建立了6個trigger,接著建立了3個Router,最後建立了6個Trigger-Router Links,這裡所謂的建立,其實就是往系統資料表裡插入建立的資訊而已。
順便說下,這條命令執行的時候,也是報錯,找不到insert_sample.sql檔案,我是開啟這個檔案,一部分一部分,在PostgreSQL的命令列執行的。估計執行整個檔案也可以。
5. 在hadoop3端,進入到store001的SymmetricDS安裝副本的根目錄下的samples目錄,執行下面的命令:
../bin/dbimport --engine store-001 --format XMLcreate_sample.xml
這條命令跟第二條在hadoop4端執行的目的是一樣的,都是建立本範例的業務表。當然了,執行也是報錯的,找不到檔案,將上邊的SQL語句,在這在執行一遍就可以了。
啟動SymmetricDS
1. 在hadoop4端,也就是root端,corp端,在SymmetricDS安裝副本的根目錄下的samples目錄下執行下面的命令:
../bin/sym --engine corp-000 --port 8080
這個過程會根據之前的設定檔和在SymmetricDS系統資料表中插入的資料,建立必要的Trigger等等的組件。然後等待其他節點的註冊。
2. 在hadoop3端,也就是client端,store端在SymmetricDS安裝副本的根目錄下的samples目錄下執行下面的命令:
../bin/sym --engine store-001 --port 8080
這條命令,啟動hadoop3上的SymmetricDS程式。並根據配置資訊嘗試串連root節點。當然,由於這時候,root端的註冊還沒開啟,這時候,在root端可以收到hadoop3上的SymmetricDS的註冊請求,但是認證會失敗。
註冊節點
在hadoop4上的SymmetricDS安裝副本的根目錄下的samples目錄下執行下面的命令:
../bin/symadmin --engine corp-000open-registration store 001
為store 001 開啟註冊,這時候就能看到註冊成功的資訊了。為了方便,可以先把兩台機器的防火牆先關閉。
發起初始負載
開始我們在hadoop4端的資料庫的業務表上插入了幾條資料,但是hadoop3上的資料庫的業務表都是空的。既然要同步,那我們必須先把這一部分的資料同步,這一部分資料的同步就叫做同步初始負載。要發起這個初始負載同步,要執行下面的命令,還是在hadoop3的SymmetricDS安裝副本的samples目錄下執行:
../bin/symadmin --engine corp-000reload-node 001
推送資料
從上邊的insert_sample.sql檔案中往SymmetricDS系統資料表中插入的資料可以知道,item表和item_selling_price表的同步配置是從corp端(hadoop4)到store端(hadoop3),單向的,也就是說,我們從corp端插入一條資料,資料會被推送到store端,而我們從store端增加一條資料,則不會影響到corp端的資料。
下面我們在corp端的資料庫中插入兩條資料:
insert into "item" ("item_id","name") values (110000055, 'Soft Drink');insert into"item_selling_price" ("item_id", "store_id","price") values (110000055, '001', 0.65); insert into "item_selling_price"("item_id", "store_id", "price") values(110000055, '002', 1.00);
在hadoop4端執行完這兩條插入語句後,在hadoop3端的資料查看一下,資料應該已經同步了。
拉取資料
從上邊的insert_sample.sql檔案中往SymmetricDS系統資料表中插入的資料可以知道,sale_transaction表和sale_return_line_item表的同步配置是從store端(hadoop3)同步到corp端(hadoop4),單向的,也就是說,我們從store端(hadoop3)增加一條資料,資料會被推送到corp端(hadoop4),而從corp端(hadoop4)增加一條資料,則不會影響到store端(hadoop3)的資料。
下面我們在store端的資料庫中插入兩條資料:
insert into "sale_transaction" ("tran_id","store_id", "workstation", "day","seq") values (1000, '001', '3', '2007-11-01', 100);insert into"sale_return_line_item" ("tran_id", "item_id","price", "quantity") values (1000, 110000055, 0.65, 1);
在hadoop3端執行完這兩條插入語句後,在hadoop4端的資料庫查看一下,資料應該已經同步了。