本文檔是SymmetricDS3.6.14文檔的第1章節Quick Start Guide文檔的翻譯,的目的是幫助讀者快速搭建1個SymmetricDS集群并普及1些基本概念術語。
本文檔描寫了如何在兩個SymmetricDS節點之間同步兩個相同schema的數據庫。下面的例子構建了1個分銷業務模型,有1個中央數據庫(我們叫它root或corp節點)和多個零售商店的數據庫(我們叫它client或store節點)。對本教程,我們將只有1個store(商店)節點,以下圖。如果你愿意,可以再教程的結束后,自己擴大這個例子,配置第2個商店。
在這個例子中,我們將安裝兩個獨立的SymmetricDS代表兩個不同的服務器。1個代表store服務器,1個代表corp服務器。每個SymmetricDS安裝副本將負責1個數據庫,也就是1個SymmetricDS就是1個SymmetricDS術語中的節點。1個SymmetricDS安裝副本負責1個數據庫,代表1個節點,這類配置是最經常使用的(我們可以選擇配置1個安裝副本負責兩個節點,這叫做multi-homing,將會在教程的最后討論)。你極可能在1個機器上運行兩個SymmetricDS副本,我們將運行兩個SymmetricDS安裝副本在兩個不同的端口。我們將使用8080運行corp服務器,9090運行store服務器,以下圖。
Corp SymmetricDS安裝副本將負責捕獲store真個item(item表和item_selling_price表)的數據變化,像itemnumber,描寫和商店的價格。Store真個SymmetricDS捕獲銷售交易(sale_transaction表和sale_return_line_item表)數據的變化,比如銷售的時間和商品。價格信息只發送給與價格相干的特定的商店,從而減少發送到每一個商店的定價信息數據的數量。舉個例子,換句話說,商店001的商品的定價信息只會發送給商店001的數據庫,不會發送給商店002的數據庫。
這個簡單的配置總是使客戶端發起與root節點的通訊,這是1種相當常見的配置。在這個配置中,client將定期的從數據庫服務器中拉數據附加到root節點上,client也會將捕獲到的變化推送到root節點。
概述已足夠多了,下面我們開始,我們將依照下面的步驟行動:
1. 安裝和配置兩個SymmetricDS利用程序
2. 創建SymmetricDS配置文件和用來存儲corp數據和store數據的數據庫表。
3. 在corp數據庫中創建零售數據
4. 啟動SymmetricDS服務器,然后注冊store節點到corp節點
5. 發送數據的初始負載到store節點
6. 履行1個數據推送和數據拉取操作
7. 驗證發送和接收到的batch的信息
首先,我們將安裝兩個SymmetricDS的副本,然后分別配置其與數據庫的連接信息:
1. 下載SymmetricDS安裝文件
2. 創建兩個文件夾代表兩個機器。1個寄存Corp節點的安裝副本,另外一個寄存store節點的安裝副本。例如,你可以將這兩個文件夾命名為sym-corp和sym-store001,下面將假定你是這樣命名的。解壓上面下載的文件到兩個文件夾中。
3. 屬性文件用來寄存啟動SymmetricDS需要的最小的配置信息。復制corp樣例屬性文件到corp engine文件夾,然后復制store屬性文件到store的engine文件夾。如果你使用的是上面建議的文件夾命名,你將做下面的復制動:
和
4. 閱讀兩個屬性文件,查看不同的配置。例如,root節點給定1個值為corp的組ID,store節點給定1個值為store的組ID;root節點給定了1個值為000的外部ID,store節點給定了1個值為001的外部節點。
下面是兩個節點中engine目錄下的兩個配置文件都有的配置屬性,指定了如何連接特定的數據庫服務器(下面的值只是例子):
5. 下1步,在store-001.properties文件中設置下面的屬性,指定root節點所在的位置:
6. Tip,1個engine的URL是下面這類通用的格式:
URL中的engine.name部份來自節點的配置文件。
Important
你必須先為你的root節點和client節點創建數據庫。創建的數據庫的名字和上邊配置文件中配置必須1致。
首先,通過下面的步驟,在root節點的數據庫中創建例子的數據庫表,加載樣例數據,加載樣例配置:
1. 打開1個命令行提示符,然落后入到corp安裝副本的samples文件夾下
2. 在root節點中通過履行下面的命令為item,price和sale創建樣例表:
來自命令行的正告信息是安全的可以疏忽。
另外一個關于屬性文件的扼要描寫。在啟動階段,SymmetricDS尋覓engines文件夾中的1個或多個屬性文件。由于我們已在命令行中指定了1個―engine參數,所以SymmetricDS將會尋覓特定命名的文件,corp-000.properties。在這個例子中,由于在engines文件夾中只有1個屬性文件,所以SymmetricDS將會默許加載這個屬性文件中的配置。因此,在這個例子中,不指定―engine參數也是可以的。加上這個參數,運行這個例子是,可以減少由于啟動錯了安裝副本而致使的毛病。SymmetricDS將會抱怨丟失了你指定的屬性配置文件。
3. 下1步,在corp節點的數據庫中創建SymmetricDS特定的數據庫表。這些表將包括同步操作的配置信息。下面的命令使用自動創建的特性創建所有必要的SymmetricDS系統表:
4. 最后1步,履行下面的操作,加載樣例商品與交易數據和SymmetricDS配置信息到root節點的數據庫:
Important
上面的操作,針對MySQL,需要履行insert_sample_mysql.sql文件。針對大小寫敏感的表和列的命名,MySQL用反引號代替雙引號。
我們現在已穿件了corp數據庫表,然后填充了我們的SymmetricDS配置信息和樣例數據。下1步,我們將在store節點的數據庫中創建樣例數據庫表,準備接收數據。
5. 打開1個命令提示符,進入store節點的SymmetricDS安裝副本的samples文件夾。
6. 履行下面的命令,造store節點的數據庫中創建空的樣例表:
來自命令行的正告信息是安全的可以疏忽。你可以查看create_sample.xml文件來看看它都有甚么。
1. 找到需要從corp節點到store節點同步的item表:item和item_selling_price。
2. 找到需要從store節點到corp節點的sale表:sale_transaction和sale_return_line_item。
3. 找到SymmetricDS的系統表,這些表都以sym_作為前綴,像sym_channel,sym_trigger,sym_router和sym_trigger_router.
4. 驗證corp節點的item表是不是有樣例數據
本教程中的數據庫建立和配置現在已完成了。是時候開始使用SymmetricDS了?,F在我們啟動兩個SymmetricDS節點,然后視察它們的日志輸出。
1. 打開兩個命令行提示符,分別進入到兩個安裝副本的根目錄下的samples目錄下。
2. 在corp的samples目錄下,履行下面的命令啟動corp SymmetricDS:
在首次啟動時,corp節點將會創建樣例配置文件中所有的trigger。然后在8080端口為corp-000 engine監聽同步和注冊要求。
3. 在store001節點的samples目錄,履行下面的命令,啟動SymmetricDS:
這個命令第1次啟動store節點的服務器時,將會使用自動創建特性創建SymmetricDS的系統表。然后不斷的嘗試注冊到corp節點(通過前面配置的registration URL,可以知道corp節點的地址)。由于注冊還沒有打開,store節點將會收到認證失?。?03 HTTP響應)。我們在下面的注冊部份討論。
當1個未注冊的節點啟動時,它將嘗試注冊到registration URL指定的節點(在幾近所有的情況下,就是root節點)。通過允許注冊和為已注冊的節點返回配置信息,Registration 節點集中的管理網絡上的其他節點。在本教程中,Registration節點就是root節點,corp節點,這個節點同時參與與其他節點的同步操作。
因此,下1步,我們需要為store節點打開注冊,以使store節點可以接收到初始負載的數據,然后就能夠接收來自corp的數據,也能夠向corp節點發送數據。有幾種方式可以完成這個任務。我們將使用SymmetricDS的管理功能,在corp節點上履行1個命令(由于這個節點負責注冊管理)。
1. 前面已啟動了corp節點和store節點的SymmetricDS利用程序,下面打開1個新的命令行提示符,進入到corp節點的安裝副本的根目錄下的samples目錄。
通過履行下面的命令打開store節點的注冊功能:
現在corp的注冊功能已為group為store,external id為001的節點打開了。Group和external id信息與store節點中的store-001.properties配置文件中的配置對應。在SymmetricDS中,每個節點都被分配到1個節點組(Node Group),然后給1個external ID代表這個利用程序。在本教程中,我們命名代表商店的group為store,然后我們使用以001開始的數字標示符作為external ID(000代表corp節點)。關于節點組的更多的信息將在下1章節中介紹。
2. 查看store節點的日志輸出,看是不是成功注冊到corp節點。Store被配置為以隨機的時間間隔嘗試注冊1次,最多1分鐘。1旦注冊成功,corp和store節點將開始同步。
下1步,我們將發送1個數據的初始負載給store節點,再1次在corp節點上使用節點管理功能。
1. 打開1個命令行提示符,進入到corp安裝副本的根目錄的samples文件夾下。(注意,通常大多數系統命令在corp服務器端直接發出。例如,所有的配置文件,在corp輸入,然后同步到任意的client節點。)
2. 履行下面的命令,發送1個數據的初始負載到store節點:
使用這個命令以后,corp節點排隊各個store節點拉數據要求。數據的初始負載包括=被配置了同步的每表中的數據。
3. 視察兩個節點的日志輸出,查看數據傳輸。Store被配置為每分鐘從corp節點拉1次數據。
下1步,我們將對中央數據庫的item數據做1些修改(我們將增加1個新的商品),然后視察數據被拉到store節點。
1. 打開1個與Corp數據庫的交互式sql Session
2. 在store001和store002(本例中只有store001),增加1個新的商品:
1旦statement被提交,數據變化將被SymmetricDS捕獲,然后排隊等store節點拉數據。
4. 視察兩個節點的日志輸出,查看數據傳輸情況。Store被配置為每分鐘從corp節點拉1次數據。
5. 在本教程中,item_selling_price被配置為列匹配的Router,特定的定價數據的變化將僅發送給store_id和external ID匹配的節點。在store節點的數據庫履行SQL語句,驗證是不是有新的數據到達。在本例中,第1條記錄將僅僅被發送到store 001。
現在,我們將假冒1條交易,然后視察SymmetricDS是怎樣把交易信息推送到中央節點的。(在這我們可以發現,數據的拉取和推送都是各個從節點的事,中央節點只負責管理)
1. 對store節點的數據庫打開1個SQL會話
2. 增加1個新的交易信息到store節點的數據庫。
1旦statement被提交,數據修改將被捕獲,然后排隊等候store節點推送到中央節點。
3. 視察兩個節點的日志輸出,查看數據傳輸情況。Store節點被配置為每分鐘推送1次數據到corp節點。
前面我們演示了已推送和拉取了數據,下面我們將描寫你如何獲得數據的batch和發送的相干的信息。1個batch被用來追蹤和發送1個或多個數據變化到給定的節點。數據所在的節點創建1個batch,接收數據的節點接收到數據然后做出回應。
除此以外,在SymmetricDS中,表被分組到不同的數據通道,為了允許不同的數據類型在部份數據類型有毛病的情況下也能夠同步。例如,如果將要發向給定的channel的batch產生了毛病,這個batch將會在這個channel的每次同步操作中進行嘗試,直到這個batch不在產生毛病。只有在這個batch不在產生毛病以后,發向這個channel的其余的batch才會被發送。使用這類方式,在數據源產生的數據變化的順序能保證以一樣的順序被發送到目的地,并且在目的地以一樣的順序利用這些變化。但是,1個channel上沒有毛病的batch不會被另外一個有毛病的batch的channel阻塞。使用這類方式,1個channel上的數據變化不會被另外一個channel上的毛病阻塞。
可以通過下面的步驟查看發出的batch信息:
1. 打開1個與corp或store節點的數據庫服務器連接的會話
2. 確認已捕獲到的數據變化:
這個表中的每行數據代表1行變化的數據。Data_id是順序增長的,所以最近的1個data id應當與你的數據插入SQL相干聯。Event_type是I代表insert,U代表update,D代表delete。對插入和更新,捕獲到的數據在row_data列中,對更新和刪除,主鍵的值在pk_data列中。
3. 使用上1步得到的data_id,確認數據變化在某個batch中:
batch是基于必要的目的節點信息被創建的,稱之為Route Job。作為Route Job的1部份,數據變化使用使用batch_id被分配到1個batch,batch_id在追蹤和同步數據的時候會用到。Batch和數據之間的連接信息通過sym_data_event表被連接。
4. 使用上1步得到的batch_id,去人數據變化被batch,發送到目的地并得到響應:
初始的Batch,在剛創建和還沒有發送到1個節點的時候,有1個NE(new)的狀態。1旦收到節點的響應,成功發送時,batch狀態將會變成OK,發送失敗,將會變成ER。如果這個batch失敗,這個batch的error_flag將會被設置為1,已失敗的batch可能在它在重新嘗試時成功,這時候,這個狀態需要被改變。
理解這3個表,還有我們在下個部份討論到的第4個表,是診斷可能遇到的同步問題的關鍵。在你使用SymmetricDS的時候,不論是在實驗環境還是生產環境,花些時間監控這些表可以更好的理解SymmetricDS是如何工作的。
接收數據的節點會保持本節點響應的batch信息和加載的數據相干的統計信息。重復的batch默許是疏忽的,但是可以通過修改incoming.batches.skip.duplicates
改變這個行動。
通過下面的步驟視察接收到的batch信息:
1. 打開1個與corp或store節點的數據庫交互的SQL會話
2. 使用上個部份取得的batch_id,確認接收和響應的batch信息:
1個batch代表節點加載的數據變化的集合。表中記錄了創建和發送這個batch的節點,batch的狀態成功時是OK,失敗時是ER。
我們的快速入門指南到這就結束了。我們已成功的創建了兩個同步節點,然后在兩個數據庫中履行了同步操作。現在我們退回去,討論1下在指南的第1步討論的1個問題。也就是,在指南中,讓你安裝兩個SymmetricDS副本的那1步。
在上邊的例子中,我們在每個SymmetricDS安裝副本的engines目錄中替換了1個屬性文件。當SymmetricDS被啟動的時候,SymmetricDS被初始化,然后根據提供的配置文件創建1個SymmetricDS engine(再說1次,1個engine就是1個SymmetricDS節點,負責1個特定的數據庫)。
事實上,1個SymmetricDS利用程序可以同時啟動多個engine。當SymmetricDS啟動時,它在engines目錄中尋覓1‘.properties’結尾的文件。它將為找到的每個配置文件啟動1個SymmetricDS engine。命令行提示符中的―engine參數會覆蓋上邊的操作,將會使SymmetricDS只啟動命令行中指定的1個engine。在1個SymmetricDS安裝副本啟動多個engine的這類情況,叫做‘multi-homing’。
對上邊的例子,如果我們想改成multi-homing的架構,只要要做下面的步驟:
1. 安裝1個SymmetricDS副本代替上邊的兩個安裝副本。不在需要1個目錄代表兩個機器。
2. 從安裝副本的samples目錄拷貝兩個配置文件到engines目錄。
3. 上邊所有運行過的命令在此安裝副本的samples目錄下在運行1遍
4. 啟動SymmetricDS時,不在需要指定特定的engine,這樣將啟動兩個engine。這個命令還是從sampls目錄運行,以下:
注意使用上邊的命令,我們不在使用9090端口。SymmetricDS現在在8080端口監聽corp和store engine之間的數據交換。
5. 除啟動服務器的命令,所有其他的命令的履行還是需要使用―engine參數指定engine。由于要給特定的節點(engine)來處理命令,像打開注冊,發起從corp到store的初始負載等等。