本文包含兩個部分,首先是對zookeeper的乙個簡單介紹,之後會描述zookeeper集群搭建的詳細過程,為以後的實驗做準備。
隨著業務規模發展得越來越大,將所有的業務單元全部放到乙個計算實體上已經不能滿足業務發展的要求。按照不同的業務領域或功能職責將整個系統拆分成多個子系統,各個子系統通過網路進行協作共同完成一項任務,這就是分布式系統。
在分布式系統中,通常將乙個計算任務分解成多個計算單元並分派到多個計算機中,然後對各個計算結果進行彙總得到最終結果。分布式系統需要解決的核心任務是如何把眾多的計算機協同起來完成計算任務。如果多個計算機之間不能很好的協作,那麼即使增加再多的計算裝置,也不會提高計算效能,還可能會產生錯誤的結果。zookeeper可以幫助我們解決分布式系統中的協作問題。
zookeeper是源**開放的分布式協調服務,是乙個高效能的分布式資料一致性解決方案。它將那些複雜的、容易出錯的分布式一致性服務封裝起來。構成乙個可靠的原語集,並提供一系列簡單易用的介面給使用者使用。
zookeeper可以解決下面這些分布式資料一致性問題:
順序一致性。zk可以保證從乙個客戶端發起的一系列事務請求,會嚴格按照事務發起的順序被應用到zk伺服器中。
原子性。所有事務請求的處理結果,在整個集群中所有機器的應用情況是一致的。
單一檢視。無論客戶端連線的是集群中的哪個zk伺服器,看到的資料都是一樣的。
可靠性。乙個事務所引起的服務端狀態變更會一直保留下來,直到另外乙個事務再對其進行修改。
實時性。zk保證在一段時間內客戶端一定能從服務端讀取到最新的資料狀態。
高效能。zk具有很高的吞吐量,乙個包含3節點的集群可以達到12w~13w的qps。
我們可以通過呼叫zookeeper提供的介面解決分布式中遇到的實際問題。
如下圖所示,我用virtualbox構建了三個fedora虛擬機器,這三個虛擬機器的ip分別是192.168.1.107、192.168.1.108和192.168.1.109。
使用命令tar -zxvf zookeeper-3.3.6.tar.gz
解壓軟體,並用命令mv zookeeper-3.3.6 zookeeper
對解壓後的目錄重新命名。
cd進入到zookeeper目錄下的conf目錄中,裡面包含了乙個zookeeper的樣例配置檔案——zoo_sample.cfg。不要直接修改zoo_sample.cfg的內容,在其基礎上拷貝乙份新的檔案zoo.cfg作為zookeeper的配置檔案。
下面是zookeeper預設配置檔案的內容:
其中datadir是zookeeper伺服器儲存快照檔案的目錄,clientport是zookeeper伺服器對外提供的埠號。其它配置項我們後續再做解釋。
除了基本的配置項外,要配置zookeeper的集群,還需要在配置檔案中增加所有zk伺服器節點的資訊。zk伺服器節點的配置項格式:server.id=host:aport:bport
。其中id是乙個整數,代表乙個zk伺服器的id。host是zk伺服器的ip位址。aport是follower伺服器和leader伺服器的通訊埠。bport是在選舉leader伺服器投票過程中的通訊埠。
我這裡配置的zk集群共有3個節點,配置資訊如下圖所示。其中三颱zk伺服器的id分別是1、2、3,follower伺服器和leader伺服器的通訊埠是2888,選取leader伺服器投票時使用的埠是3888。除了增加zk集群的配置資訊外,我還修改了datadir配置項的目錄位址。
完成上述配置之後還要到datadir配置項指定的目錄中新建乙個myid檔案,myid檔案的內容就是zk集群配置中指定的伺服器id。例如對於192.168.1.109這台機器,它的id是1,那麼它的myid檔案中的內容就是1。另外兩台機器的myid檔案內容分別是2和3。
現在就已經完成了乙個zk集群的所有配置,可以啟動zk伺服器了。使用zookeeper下bin目錄中的zkserver.sh指令碼執行啟動命令。./zkserver.sh start
為啟動zk伺服器,./zkserver.sh stop
為停止zk伺服器。
為了驗證zk集群是否啟動成功,我們可以通過telnet這個工具進行驗證,使用它的stat命令可以檢視zk伺服器的狀態。
從stat命令的輸出結果中可以看出,這個zookeeper例項沒有對外提供服務。這是因為我們的zk集群中一共有3個節點,但是目前才只啟動了乙個節點。現在我們再啟動另外乙個zk節點看看執行結果。
我又啟動了另外乙個zk伺服器,現在zk集群中已經有2個存活的zk伺服器節點了。可以看到stat的輸出結果發生了變化,192.168.1.109這個zk節點已經可以對外提供服務了。在乙個zk集群中,只要有超過一半的zk節點可以正常工作,那麼整個集群就可以正常對外提供服務。因為我們這個集群一共有3臺機器,目前已經有2臺機器正常工作,已經超過了半數,所以整個集群可以正常對外提供服務。
到此為止,我們就配置好了乙個簡單的zk集群。
Mac下TensorFlow安裝及環境搭建
在學習了一段時間台大李巨集毅關於deep learning的課程,以及一些其他機器學習的書之後,終於打算開始動手進行一些實踐了。隨著深度學習日趨火熱,技術的逐漸興起,各種深度學習框架也層出不窮。目前使用普遍的框架有tensorflow caffe pytorch theano cntk等,那麼在這麼...
github pages Jekyll環境搭建
通過jekyll可以搭建 簡單理解成網頁生成規則,就是通過配置能自動幫你生成靜態網頁的東西。如何配置,請看 首先要更新ruby,系統倉庫裡最新的是1.9.3,而jekyll要求 2.0 最終版本資訊 ruby v ruby 2.3.3p222 2016 11 21 revision 56859 x8...
iOS WebDriverAgent 環境搭建
webdriveragent是facebook 在去年的 seleniumconf 大會上推出了一款新的ios移動測試框架。當時的推文申明,還只支援模擬器,不過在今年4月更新的版本中,官方宣稱支援真機測試了,大家可以檢視官方github 的介紹 下面摘錄一段官方對於webdriveragent的介紹...