雙活版部署
雙活版部署
什么是雙活版?
雙活通常是指兩個獨立的單機(或集群),實時進行鏡像同步,它們的配置完全獨立,可以同時接收外界的寫入,每一個獨立的單機(或集群)都可以將寫入到自己的數據同步到另一個單機(或集群)中,兩個單機(或集群)的數據可達到最終一致。
- 兩個單機(或集群)可構成一個高可用組:當其中一個單機(或集群)停止服務時,另一個單機(或集群)不會受到影響。當停止服務的單機(或集群)再次啟動時,另一個單機(或集群)會將新寫入的數據同步過來。業務可以綁定兩個單機(或集群)進行讀寫,從而達到高可用的目的。
- 雙活部署方案允許在物理節點少于 3 的情況下實現高可用,在部署成本上具備一定優勢。同時可以通過電力、網絡的雙環網,實現兩套單機(或集群)的物理供應隔離,保障運行的穩定性。
- 目前雙活能力為企業版功能。

注意事項
部署時推薦優先使用
hostname進行IP配置,可避免后期修改主機ip導致數據庫無法啟動的問題。設置hostname需要在目標服務器上配置/etc/hosts,如本機ip是192.168.1.3,hostname是iotdb-1,則可以使用以下命令設置服務器的 hostname,并使用hostname配置IoTDB的cn_internal_address、dn_internal_address。echo "192.168.1.3 iotdb-1" >> /etc/hosts有些參數首次啟動后不能修改,請參考下方的"安裝步驟"章節來進行設置。
推薦部署監控面板,可以對重要運行指標進行監控,隨時掌握數據庫運行狀態,監控面板可以聯系商務獲取,部署監控面板步驟可以參考文檔
安裝步驟
我們以兩臺單機A和B構建的雙活版IoTDB為例,A和B的ip分別是192.168.1.3 和 192.168.1.4 ,這里用hostname來表示不同的主機,規劃如下:
| 機器 | 機器ip | 主機名 |
|---|---|---|
| A | 192.168.1.3 | iotdb-1 |
| B | 192.168.1.4 | iotdb-2 |
Step1:分別安裝兩套獨立的 IoTDB
在2個機器上分別安裝 IoTDB,單機版部署文檔可參考文檔,集群版部署文檔可參考文檔。推薦 A、B 集群的各項配置保持一致,以實現最佳的雙活效果。
Step2:在機器A上創建數據同步任務至機器B
在機器A上創建數據同步流程,即機器A上的數據自動同步到機器B,使用sbin目錄下的cli工具連接A上的IoTDB數據庫:
./sbin/start-cli.sh -h iotdb-1創建并啟動數據同步命令,SQL 如下:
create pipe AB with source ( 'source.forwarding-pipe-requests' = 'false' ) with sink ( 'sink'='iotdb-thrift-sink', 'sink.ip'='iotdb-2', 'sink.port'='6667' )注意:為了避免數據無限循環,需要將A和B上的參數
source.forwarding-pipe-requests均設置為false,表示不轉發從另一pipe傳輸而來的數據。
Step3:在機器B上創建數據同步任務至機器A
在機器B上創建數據同步流程,即機器B上的數據自動同步到機器A,使用sbin目錄下的cli工具連接B上的IoTDB數據庫:
./sbin/start-cli.sh -h iotdb-2創建并啟動pipe,SQL 如下:
create pipe BA with source ( 'source.forwarding-pipe-requests' = 'false' ) with sink ( 'sink'='iotdb-thrift-sink', 'sink.ip'='iotdb-1', 'sink.port'='6667' )注意:為了避免數據無限循環,需要將A和B上的參數
source.forwarding-pipe-requests均設置為false,表示不轉發從另一pipe傳輸而來的數據。
Step4:驗證部署
上述數據同步流程創建完成后,即可啟動雙活集群。
檢查集群運行狀態
#在2個節點分別執行show cluster命令檢查IoTDB服務狀態
show cluster機器A:

機器B:

確保每一個 ConfigNode 和 DataNode 都處于 Running 狀態。
檢查同步狀態
- 機器A上檢查同步狀態
show pipes
- 機器B上檢查同步狀態
show pipes
確保每一個 pipe 都處于 RUNNING 狀態。
Step5:停止雙活版 IoTDB
在機器A的執行下列命令:
./sbin/start-cli.sh -h iotdb-1 #登錄cli IoTDB> stop pipe AB #停止數據同步流程 ./sbin/stop-standalone.sh #停止數據庫服務在機器B的執行下列命令:
./sbin/start-cli.sh -h iotdb-2 #登錄cli IoTDB> stop pipe BA #停止數據同步流程 ./sbin/stop-standalone.sh #停止數據庫服務