亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2413 | 回復(fù): 0
打印 上一主題 下一主題

[Zookeeper] zookeeper使用 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-12-22 08:52 |只看該作者 |倒序瀏覽
<span style="font: 7pt 'Times New Roman';"><span style="font-size: 10pt;"><font size="3"><strong>zookeeper</strong>
</font><span style=""><strong><font size="3">介紹</font><br></strong>
</span>
zookeeper<span style="">是一個為分布式應(yīng)用提供一致服務(wù)的軟件,它是開源的</span>
Hadoop<span style="">項目中的一個子項目,并且根據(jù)</span>
google<span style="">發(fā)表的</span> 《<font color="#0000F0">The Chubby lock service for loosely-coupled distributed systems</font>》<span style="">論文來實現(xiàn)的,接下來我們首先來安裝使用下這個軟件,然后再來探索下其中比較重要一致性算法。</span>
&nbsp; <br><br></span></span><strong style="font-size: 10pt;">zookeeper<span style="">安裝和使用<br></span>
</strong>
<span style="font-size: 10pt;">zookeeper<span style="">的安裝基本上可以按照</span><br>http://hadoop.apache.org/zookeeper/docs/current/zookeeperStarted.html <span style="">這個頁面上的步驟完成安裝,這里主要介紹下部署一個集群的步驟,因為這個官方頁面似乎講得并不是非常詳細(xì)</span>
(Running Replicated Zookeeper)<span style="">。</span></span><br><br><span style="font-size: 10pt;"><span style="">由于手頭機(jī)器不足,所以在一臺機(jī)器上部署了</span>
3<span style="">個</span>
server,<span style="">如果你手頭也比較緊,也可以這么做。那么我建了</span>
3<span style="">個文件夾,如下<br></span>
</span>
<strong><span style="font-size: 10pt;"><strong>server1&nbsp;&nbsp; server2&nbsp;&nbsp; server3<br></strong>
</span>
</strong>
<span style=""><span style="font-size: 10pt;"><span style=""><br>
然后每個文件夾里面解壓一個</span>
zookeeper<span style="">的下載包,并且還建了幾個文件夾,總體結(jié)構(gòu)如下</span>
,<span style="">最后那個是下載過來壓縮包的解壓文件<br></span>
</span>
</span>
<strong><span style="font-size: 10pt;"><strong>data&nbsp;dataLog&nbsp;logs&nbsp;zookeeper-3.3.3<br></strong>
</span>
<br></strong>
<span style=""><span style="font-size: 10pt;"><span style="">那么首先進(jìn)入</span>
data<span style="">目錄,創(chuàng)建一個</span>
<font color="#0000F0">myid</font><span style="">的文件,里面寫入一個數(shù)字,比如我這個是</span>
server1,<span style="">那么就寫一個</span>
1<span style="">,</span>
server2<span style="">對應(yīng)</span>
myid<span style="">文件就寫入</span>
2<span style="">,</span>
server3對應(yīng)myid文件就<span style="">寫個</span>
3<br></span>
</span>
<br><span style=""><span style="font-size: 10pt;"><span style="">然后進(jìn)入</span>
<strong>zookeeper-3.3.3/conf</strong>
<span style="">目錄,那么如果是剛下過來,會有</span>
3<span style="">個文件,</span>
<strong>configuration.xml, log4j.properties,zoo_sample.cfg</strong>
,<span style="">這</span>
3<span style="">個文件我們首先要做的就是在這個目錄創(chuàng)建一個</span>
zoo.cfg<span style="">的配置文件,當(dāng)然你可以把</span>
zoo_sample.cfg<span style="">文件改成</span>
zoo.cfg<span style="">,配置的內(nèi)容如下所示:</span>
</span>
</span>
&nbsp;<br><span style="color: red;"><span style="font-size: 10pt;"><span style="color: red;">tickTime=2000<br></span>
<span style="color: red;">initLimit=5<br></span>
<span style="color: red;">syncLimit=2<br></span>
<span style="color: red;">dataDir=xxxx/zookeeper/server1/data<br></span>
<span style="color: red;">dataLogDir=xxx/zookeeper/server1/dataLog<br></span>
<span style="color: red;">clientPort=<font color="#0000F0">2181</font><br></span>
</span>
</span>
<span style="font-size: 10pt;">server.1=127.0.0.1:2888:3888<br>
server.2=127.0.0.1:2889:3889<br>
server.3=127.0.0.1:2890:3890<span style=""><br></span>
</span>
<br><span style=""><span style="font-size: 10pt;"><span style="">標(biāo)紅的幾個配置應(yīng)該官網(wǎng)講得很清楚了,只是需要注意的是</span>
clientPort<span style="">這個端口如果你是在</span>
1<span style="">臺機(jī)器上部署多個</span>
server,<span style="">那么每臺機(jī)器都要不同的</span>
clientPort<span style="">,比如我</span>
server1<span style="">是</span>
2181,server2<span style="">是</span>
2182<span style="">,</span>
server3<span style="">是</span>
2183<span style="">,</span>
dataDir<span style="">和</span>
dataLogDir<span style="">也需要區(qū)分下。</span>
<br><br><span style="">最后幾行唯一需要注意的地方就是</span>
server.X <span style="">這個數(shù)字就是對應(yīng)</span>
data/myid<span style="">中的數(shù)字。你在</span>
3<span style="">個</span>
server<span style="">的</span>
myid<span style="">文件中分別寫入了</span>
1<span style="">,</span>
2<span style="">,</span>
3<span style="">,那么每個</span>
server<span style="">中的</span>
zoo.cfg<span style="">都配</span>
server.1,server.2,server.3<span style="">就</span>
OK<span style="">了。因為在同一臺機(jī)器上,后面連著的</span>
2<span style="">個端口</span>
3<span style="">個</span>
server<span style="">都不要一樣,否則端口沖突,其中第一個端口用來集群成員的信息交換,第二個端口是在</span>
leader<span style="">掛掉時專門用來進(jìn)行選舉</span>
leader<span style="">所用。<br><br></span>
</span>
</span>
<span style=""><span style="font-size: 10pt;"><span style="">進(jìn)入</span>
zookeeper-3.3.3/bin <span style="">目錄中<span style="">,<strong>./</strong></span></span></span></span><span style=""><span style="font-size: 10pt;"><strong>zkServer.sh start</strong>
</span>
</span>
<span style=""><span style="font-size: 10pt;"><span style="">啟動一個</span>
server,<span style="">這時會報大量錯誤?其實沒什么關(guān)系,因為現(xiàn)在集群只起了</span>
1<span style="">臺</span>
server<span style="">,</span>
zookeeper<span style="">服務(wù)器端起來會根據(jù)</span>
zoo.cfg<span style="">的服務(wù)器列表發(fā)起選舉</span>
leader<span style="">的請求,因為連不上其他機(jī)器而報錯,那么當(dāng)我們起第二個</span>
zookeeper<span style="">實例后,</span>
leader<span style="">將會被選出,從而一致**開始可以使用,這是因為</span>
3<span style="">臺機(jī)器只要有</span>
2<span style="">臺可用就可以選出</span>
leader<span style="">并且對外提供服務(wù)</span>
(2n+1<span style="">臺機(jī)器,可以容</span>
n<span style="">臺機(jī)器掛掉</span>
)<span style="">。<br><br></span>
</span>
</span>
<span style=""><span style="font-size: 10pt;"><span style="">接下來就可以使用了,我們可以先通過</span>
zookeeper<span style="">自帶的客戶端交互程序來簡單感受下</span>
zookeeper<span style="">到底做一些什么事情。進(jìn)入</span>
zookeeper-3.3.3/bin<span style="">(</span>
3<span style="">個</span>
server<span style="">中任意一個)下,</span>
<strong>./zkCli.sh&nbsp;–server&nbsp;127.0.0.1:2182</strong>
,<span style="">我連的是開著</span>
2182<span style="">端口的機(jī)器。</span></span></span><strong><span style="font-size: 10pt;"><strong><br><br></strong></span></strong><span style=""><span style="font-size: 10pt;"><span style="">那么,首先我們隨便打個命令,因為</span>
zookeeper<span style="">不認(rèn)識,他會給出命令的</span>
help,<span style="">如下圖</span>
</span>
</span>
&nbsp;&nbsp;<br>
&nbsp;&nbsp; <img src="http://www.blogjava.net/images/blogjava_net/bucketli/dddd.jpg" alt="" border="0"><br><span style="font-size: 10pt;">ls(<span style="">查看當(dāng)前節(jié)點數(shù)據(jù)</span>
),<br>
ls2(<span style="">查看當(dāng)前節(jié)點數(shù)據(jù)并能看到更新次數(shù)等數(shù)據(jù)</span>
) ,<br>
create(<span style="">創(chuàng)建一個節(jié)點</span>
) ,<br>
get(<span style="">得到一個節(jié)點,包含數(shù)據(jù)和更新次數(shù)等數(shù)據(jù)</span>
),<br>
set(<span style="">修改節(jié)點</span>
)<br>
delete(<span style="">刪除一個節(jié)點</span>
)<br></span>
<span style=""><br><span style="font-size: 10pt;"><span style="">通過上述命令實踐,我們可以發(fā)現(xiàn),</span>
zookeeper<span style="">使用了一個類似文件系統(tǒng)的樹結(jié)構(gòu),數(shù)據(jù)可以掛在某個節(jié)點上,可以對這個節(jié)點進(jìn)行刪改。另外我們還發(fā)現(xiàn),當(dāng)改動一個節(jié)點的時候,集群中活著的機(jī)器都會更新到一致的數(shù)據(jù)。</span>
<br></span>
</span>
<br><span style="font-size: 10pt;"><strong>zookeeper</strong>
<span style=""><strong>的數(shù)據(jù)模型<br></strong>
</span>
</span>
<span style=""><span style="font-size: 10pt;"><span style="">在簡單使用了</span>
zookeeper<span style="">之后,我們發(fā)現(xiàn)其數(shù)據(jù)模型有些像操作系統(tǒng)的文件結(jié)構(gòu),結(jié)構(gòu)如下圖所示<br></span>
</span>
</span>
<img src="http://www.blogjava.net/images/blogjava_net/bucketli/XX.jpg" alt="" border="0"><br><br><br><span style="font-size: 10pt;">(1)<span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp; </span>
<span style="">每個節(jié)點在</span>
zookeeper<span style="">中叫做</span>
znode,<span style="">并且其有一個唯一的路徑標(biāo)識,如</span>
/SERVER2<span style="">節(jié)點的標(biāo)識就為</span>
/APP3/SERVER2<br>
(2)<span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp; </span>
Znode<span style="">可以有子</span>
znode<span style="">,并且</span>
znode<span style="">里可以存數(shù)據(jù),但是</span>
EPHEMERAL<span style="">類型的節(jié)點不能有子節(jié)點<br></span>
(3)<span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp; </span>
Znode<span style="">中的數(shù)據(jù)可以有多個版本,比如某一個路徑下存有多個數(shù)據(jù)版本,那么查詢這個路徑下的數(shù)據(jù)就需要帶上版本。<br></span>
(4)<span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp; </span>
znode <span style="">可以是臨時節(jié)點,一旦創(chuàng)建這個</span>
znode <span style="">的客戶端與服務(wù)器失去聯(lián)系,這個</span>
znode <span style="">也將自動刪除,</span>
Zookeeper <span style="">的客戶端和服務(wù)器通信采用長連接方式,每個客戶端和&nbsp; 服務(wù)器通過心跳來保持連接,這個連接狀態(tài)稱為</span>
session<span style="">,如果</span>
znode <span style="">是臨時節(jié)點,這個</span>
session <span style="">失效,</span>
znode <span style="">也就刪除了<br></span>
(5)<span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp; </span>
znode <span style="">的目錄名可以自動編號,如</span>
App1 <span style="">已經(jīng)存在,再創(chuàng)建的話,將會自動命名為</span>
App2&nbsp;<br>
(6)<span style="line-height: normal; font-variant: normal; font-style: normal; font-family: 'Times New Roman'; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp; </span>
znode <span style="">可以被監(jiān)控,包括這個目錄節(jié)點中存儲的數(shù)據(jù)的修改,子節(jié)點目錄的變化等,一旦變化可以通知設(shè)置監(jiān)控的客戶端,這個功能是</span>
zookeeper<span style="">對于應(yīng)用最重要的特性,通過這個特性可以實現(xiàn)的功能包括配置的集中管理,集群管理,分布式鎖等等。</span>
</span>
&nbsp; <br>
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP