Neo4j 中文資源 Chinese Guide
關於本分散式機部署
基礎觀念
各種HA規模的基本需求
錯誤轉移(Failover)
基本介紹
處理狀況
部署於雲端服務
Neo4j與Amazon Ec2
線上備份及還原
Neo4j.rb資料備份
Neo4j.rb資料還原
基礎觀念
透過這張圖,我們可以很輕易的瞭解Neo4j如何做分散式部署.
Neo4j Cluster Structure
Neo4j的HA運作大概是類似 : 由於Neo4j採用Master/Slave的Replication Model.
所以所有寫入都會進入Master而所有讀取都由Slave.
如果先寫入的是Slave,則會先將資料嘗試寫入Master. 如果成功則由Master再同步到其他所有Slave上.
比較好的作法是將寫入都丟到Slave,因為Slave會先同步到Master上,若此時Master掛掉,不至於資料遺失.
而Failover的問題,則交由ZooKeeper處理.
簡單講,如果Master死了,ZooKeeper會移除它然後自動從Slave中找出一台來當Master.
但是,如果Master的資料換了然後還沒同步到其他台就死了,而此時新的Master也有資料變更了.
而依照Neo4j的文件,如果發生這種情形,現階段我們就只能手動處理了…
各種HA規模的基本需求
要使用分散式架構. Neo4j使用的是Apache的Zookeeper來管理這些機器.
關於Zookeeper的使用教學,請看這裡. 這裡. 和這裡.
Neo4j預設有三種分散式Size :
實做小型Cluster我們需要3台的實體(虛擬)機器.
ZooKeeper需至少放置於一台機器上.
而Neo4j HA Instance在每台機器上需要一個.
實做中型Cluster我們需要5-7台的實(虛)機器.
ZooKeeper需要放置於以3台以上的機器, 需以單數 : 3,5,7.
而Neo4j HA Instance則至少需要5台以上.
實做大型Cluster我們需要8+實體機器.
ZooKeeper需要5+實體機器
而Neo4j HA Instance 則至少需要3台以上.
回到最上面
基本介紹
談到HA,一定不可避免要設計好Filover的機制.
否則一旦資料錯亂,資料不同步. 不單單是難以維護. 對於使用者以及整個服務都會造成莫大的傷害.
處理狀況
回到最上面
Neo4j與Amazon Ec2
當一切準備就緒,我們就可以嘗試將db放到雲端. 以現有雲端主機來說,若非VPS形式,或直接承租整台主機. 對於使用Jruby的Neo4j.rb來說是很難Deploy.
在於這多半主機商不容許太多的客制化,而Rails本身被支援的比例就比PHP少很多. 而Jruby使用的人口又比Rails更少了些.
所以我們需要一個可以自己裝 Amazon的EC2讓我們可以很簡單的Deploy到雲端上. 而許多好功能如Load Balance也都能很輕易的在EC2上實現.
關於Amazon EC2的更多資訊可以參考Von的Amazon Ec2簡介.
首先我們必需選擇AMI,如果大家和Von一樣懶,那麼可以直接選擇3rd party的現成AMI. 否則,build一個自己的AMI永遠是首選.
而現在Amazon也提供Ebs的import/export. 如果我們喜歡. 也可以把硬碟直接寄給Amazon. XDDDD
以jRuby來做關鍵字,搜尋到的AMI約有十多個. 但經過測試 bitnami 的jRuby AMI都不太正常?
所以我們這裡就以這個AMI來做範例. 雖然不是ebs有點可惜..
關於如何Build起EC2,可以參考這些文章 :
Starting Amazon EC2 with Mac OS X
Amazon EC2 使用操作筆記 (使用 Elasticfox)
用EC2作一朵雲
ec2 quick note
一旦將Ec2建立好後,可以將你的app丟到github或trac來做deploy. 或是直接使用ssh傳到你的server.
Von這裡提供一個以Rack製作的Server範例 讓大家試試.
當建立好後,要設定Elastic IP及Security Group.
Elastic IP的好處是讓我們可以直接對該ip做呼叫. 否則一旦重新啟動,則該Ec2 Instance則會有新的IP.
目前Elastic如果綁定Ec2是免費的. 如果我們申請了一個ElasticIP但沒有綁定,會被收費喔.
回到最上面
Neo4j.rb資料備份
實作線上備份是一件容易的事. 我們可以設定Instance定期備份,也可以設定
Neo4j.rb資料還原
看了備份那麼簡單,還原呢?
![](http://img.zemanta.com/pixy.gif?x-id=531260d7-a17e-8693-a9ee-36cf62d933b2)