2015-09-04 64 views
4

我試圖在3臺服務器上安裝。舉例來說,我是 試圖設置一個類「客戶端」,有3個集羣「client_1」, 「client_2」和「client_3」。我的服務器稱爲node1,node2和 node3。我想簇佈置成使得我有每個 簇的2個拷貝,因此,如果1個節點關閉我仍然可以訪問所有的數據,所以對於 例如:設置分片的orientdb

  • 節點1是主對的Client_1和具有client_2的副本。
  • node2是client_2的主服務器,並具有client_3的副本。
  • node3是client_3的主服務器,並具有client_1的副本。

我試着用下面的步驟設置它: 1.下載OrientDB 2.1.1社區並提取到3臺服務器上。 2.從每個服務器的 的數據庫目錄中刪除GratefulDeadConcerts數據庫。 3.編輯默認分佈式-DB-config.json在node1如下:

{ 
"autoDeploy": true, 
"hotAlignment": false, 
"executionMode": "undefined", 
"readQuorum": 1, 
"writeQuorum": 2, 
"failureAvailableNodesLessQuorum": false, 
"readYourWrites": true, 
"clusters": { 
"internal": { 
}, 
"index": { 
}, 
"client_1": { 
"servers" : [ "node1","node2" ] 
}, 
"client_2": { 
"servers" : [ "node2","node3" ] 
}, 
"client_3": { 
"servers" : [ "node3","node1" ] 
}, 
"*": { 
"servers" : [ "<NEW_NODE>" ] 
} 
} 
} 
與dserver.sh
  • 開始節點1。
  • 創建使用在node1控制檯一個數據庫: 連接遠程:本地主機根密碼 遠程創建數據庫:本地主機/ TESTDB根密碼plocal圖表
  • 創建類和重命名默認羣集: 創建類的客戶端延伸v ALTER集羣客戶端名稱client_1與
  • 啓動節點2與dserver.sh,等待數據庫自動部署,然後 啓動節點3,等待部署
  • 在這一點上我有3個節點的數據庫,用一個名爲「客戶端」 的類只有一個集羣「client_1」。

  • 在節點2中添加的Client_2羣集: ALTER類客戶addcluster client_2的
  • 類似地,在節點3: ALTER類客戶addcluster client_3
  • 如果我重新連接所有控制檯會話並執行「列表羣集」我現在在每個節點上看到所有3個羣集的客戶端類的 。我還會在每個節點上看到3個羣集中的每一個的.cpm和 .pcl文件。然而,它似乎 我的意圖在默認分佈式db-config.json被採取到 帳戶,如果我等了幾分鐘,然後從每個 節點插入一個記錄我看到時間戳和文件大小隻更改文件 與假設存在於每個節點上的羣集 (如果文件不存在於錯誤的 節點上,但它不是世界的盡頭)會更好,更不易混淆。

    因此......現在看來我的數據庫設置是按照我的意圖完成的,但是 這樣做的目的是爲了讓我們能夠在服務器停機的情況下生存下來,所以我使用ctrl-c關閉了node3。我仍然可以看到來自節點1和節點2的每個記錄(我插入了 3,每個羣集一個) - 迄今爲止非常好。

    如果我看一看distirbuted-db.json對節點1或節點2, 內容我現在看到我的「客戶」類集羣已重新配置 - 沒有 節點3在配置不再:

    "client_3": { "servers": [ "node1" ], "@version": 0, "@type": "d" }, 
    "client_2": { "servers": [ "node2" ], "@version": 0, "@type": "d" }, 
    "client_1": { "servers": [ "node1", "node2" ], "@version": 0, 
    "@type": "d" } 
    

    現在我重新啓動node3。這個配置是沒有得到再次更新:

    "client_3": { "servers": [ "node1" ], "@version": 0, 
    "@type": "d" }, 
    "client_2": { "servers": [ "node2" ], "@version": 0, "@type": "d" }, 
    "client_1": { "servers": [ "node1", "node2" ], "@version": 0, 
    "@type": "d" } 
    

    有什麼錯在我創建的方式/配置數據庫或這是一個錯誤?

    回答

    0

    我認爲這裏的問題是需要在文件「default-distributed-db-config.json」中將「hotAlignment」設置爲「true」。根據OrientDB 2.2.x sharding doc,「如果設置了hotAlignment = false,當節點重新加入集羣時(發生故障或完全不可達),節點上的數據庫完整副本可能沒有關於碎片的所有信息。」請注意,changes between 2.1.x to 2.2.x的這個項目符號如下:「刪除hotAlignment設置:服務器加入羣集後,一直保留在配置中,直到它們被手動刪除。」