zookeeper學習與實戰(一)環境部署

【背景】:最近須要作這樣一件事,在一臺服務器上經過客戶端生成配置文件,而後須要將該配置文件實時的傳輸到上百臺應用服務器,供應用程序讀取。同時,該配置文件是不定時更新內容,只要有更新,遠程應用服務器應該及時感知文件的變化,並進行同步到本地。php

這時,zookeeper就派上用場了。本篇只介紹zookeeper的部署安裝使用。對於zookeeper是什麼還不清楚的,請參考這裏html

1、zookeeper單機部署java

一、【環境說明】:window 7 64bit(10.249.9.19)python

二、【安裝】:mysql

2.一、下載地址:http://apache.fayea.com/zookeeper/sql

下載的安裝包放到c盤根目錄(能夠放到任意盤),減壓到本地。數據庫

2.二、配置文件apache

修改C:\zookeeper-3.4.6\conf下的zoo_sample.cfg,並重命名爲zoo.cfg,名稱隨便取。編程

內容爲:紅色部分文件夾須要手工建立api

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=C:\\zookeeper-3.4.6\\data dataLogDir=C:\\zookeeper-3.4.6\\log
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

tickTime

Zookeeper使用的基本時間,時間單位爲毫秒。它用於心跳機制,而且設置最小的session超時時間爲兩倍心跳時間

dataDir

保存內存數據庫快照信息的位置,若是沒有其餘說明,更新的事務日誌也保存到數據庫。

clientPort

監聽客戶端鏈接的端口。

安裝很是簡單,到這裏已經安裝好了,下面就是把它運行起來:

C:\zookeeper-3.4.6\bin>zkServer.cmd

到安裝目錄的bin目錄下,運行zkServer.cmd便可。

2.三、客戶端鏈接測試

上面咱們在10.249.9.19上安裝了zookeeper服務並已經啓動,下面另起一個cmd,做爲客戶端進行鏈接:

zkCli.sh  -server 10.249.9.19:2181

到這裏就已經鏈接成功了!代表咱們zookeeper server安裝正確。下面進行簡單的命令行測試:

1)添加數據:

[zk: 10.249.9.19:2181(CONNECTED) 1] create /test1 'helloworld'      
Created /test1

2)查看數據:

[zk: 10.249.9.19:2181(CONNECTED) 7] get /test1
'helloworld'
cZxid = 0x25
ctime = Thu Nov 24 18:40:52 CST 2016
mZxid = 0x25
mtime = Thu Nov 24 18:40:52 CST 2016
pZxid = 0x25
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 12
numChildren = 0

三、查看路徑

[zk: 10.249.9.19:2181(CONNECTED) 8] ls /
[zk, zookeeper, test1, db]

四、更新數據

[zk: 10.249.9.19:2181(CONNECTED) 9] set /test1 hellowzookeeper

到此爲止,咱們已經完成了第一步,至關於咱們能夠把配置文件任意的存在這個zookeeper server上了。

 

可是,還有兩個問題須要解決:

一、若是要傳輸文件到其餘服務器,怎麼傳輸呢?那麼遠程的那麼多應用服務器怎麼知道我這個zookeeper上配置文件有過更新呢?怎麼同步呢?

回答:這些問題就須要咱們利用zookeeper提供的客戶端api進行編程了。經過java或者c等客戶端語言進行編程來同步文件。具體內容下篇演示。

先來看看下面的總體結構圖:

【解釋】:

【ZooKeeper Service部分】:表示一組zookeeper server集羣,它提供服務,由於它是分佈式的,因此部署多臺防止單點故障,可以高可用。就至關於mysql數據庫的主從複製架構,主庫掛了能夠切換到從庫進行服務。固然若是業務不重要,部署一臺也是能夠的。(對應於運維人員)

【Client部分】:指咱們利用編程語言如java,c,python,經過zookeeper提供的api進行編程,對zookeeper server上的數據進行增刪改查數據,能夠理解爲php鏈接mysql服務器進行操做同樣,php做爲客戶端。(對應於開發人員)

二、咱們上面只部署了單機版本,對於業務比較重要的,如何避免單點故障?

這時就須要部署zookeeper server集羣了,zookeeper天生就是分佈式的,不用它的分佈式集羣簡直就是暴殄天物。具體咱們演示之後補上。

 

【參考文檔】

     http://www.cnblogs.com/chengxin1982/p/3997706.html

     http://zookeeper.majunwei.com/document/3.4.6/GettingStarted.html

   (原理)http://cailin.iteye.com/blog/2014486/

相關文章
相關標籤/搜索