目錄
正文 ZooKeeper 軟件安裝須知鑒于 ZooKeeper 本身的特點(diǎn),服務(wù)器集群的節(jié)點(diǎn)數(shù)推薦設(shè)置為奇數(shù)臺。我這里我規(guī)劃為三臺, 為別為 hadoop1,hadoop2,hadoop3 ZooKeeper 的集群安裝ZooKeeper 的下載下載地址:http://mirrors./apache/ZooKeeper/ 此處使用的是3.4.10版本 解壓安裝到自己的目錄[hadoop@hadoop1 ~]$ tar -zxvf zookeeper-3.4.10.tar.gz -C apps/
ZooKeeper 運(yùn)行最重要的四個(gè)東西 修改配置文件[hadoop@hadoop1 zookeeper-3.4.10]$ cd conf/ [hadoop@hadoop1 conf]$ mv zoo_sample.cfg zoo.cfg [hadoop@hadoop1 conf]$ vi zoo.cfg 基本配置tickTime 心跳基本時(shí)間單位,毫秒級,ZK基本上所有的時(shí)間都是這個(gè)時(shí)間的整數(shù)倍。 initLimit tickTime的個(gè)數(shù),表示在leader選舉結(jié)束后,followers與leader同步需要的時(shí)間,如果followers比較多或者說leader的數(shù)據(jù)灰常多時(shí),同步時(shí)間相應(yīng)可能會增加,那么這個(gè)值也需要相應(yīng)增加。當(dāng)然,這個(gè)值也是follower和observer在開始同步leader的數(shù)據(jù)時(shí)的最大等待時(shí)間(setSoTimeout) syncLimit tickTime的個(gè)數(shù),這時(shí)間容易和上面的時(shí)間混淆,它也表示follower和observer與leader交互時(shí)的最大等待時(shí)間,只不過是在與leader同步完畢之后,進(jìn)入正常請求轉(zhuǎn)發(fā)或ping等消息交互時(shí)的超時(shí)時(shí)間。 dataDir 內(nèi)存數(shù)據(jù)庫快照存放地址,如果沒有指定事務(wù)日志存放地址(dataLogDir),默認(rèn)也是存放在這個(gè)路徑下,建議兩個(gè)地址分開存放到不同的設(shè)備上。 clientPort 配置ZK監(jiān)聽客戶端連接的端口 在配置文件末尾添加 server.serverid=host:tickpot:electionport server:固定寫法 高級配置dataLogDir 將事務(wù)日志存儲在該路徑下,比較重要,這個(gè)日志存儲的設(shè)備效率會影響ZK的寫吞吐量。 globalOutstandingLimit (Java system property: zookeeper.globalOutstandingLimit)默認(rèn)值是1000,限定了所有連接到服務(wù)器上但是還沒有返回響應(yīng)的請求個(gè)數(shù)(所有客戶端請求的總數(shù),不是連接總數(shù)),這個(gè)參數(shù)是針對單臺服務(wù)器而言,設(shè)定太大可能會導(dǎo)致內(nèi)存溢出。 preAllocSize (Java system property: zookeeper.preAllocSize)默認(rèn)值64M,以KB為單位,預(yù)先分配額定空間用于后續(xù)transactionlog 寫入,每當(dāng)剩余空間小于4K時(shí),就會又分配64M,如此循環(huán)。如果SNAP做得比較頻繁(snapCount比較小的時(shí)候),那么請減少這個(gè)值。 snapCount (Java system property: zookeeper.snapCount)默認(rèn)值100,000,當(dāng)transaction每達(dá)到snapCount/2+rand.nextInt(snapCount/2)時(shí),就做一次SNAPSHOT,默認(rèn)情況下是50,000~100,000條transactionlog就會做一次,之所以用隨機(jī)數(shù)是為了避免所有服務(wù)器可能在同一時(shí)間做snapshot. traceFile (Java system property: requestTraceFile) maxClientCnxns 默認(rèn)值是10,一個(gè)客戶端能夠連接到同一個(gè)服務(wù)器上的最大連接數(shù),根據(jù)IP來區(qū)分。如果設(shè)置為0,表示沒有任何限制。設(shè)置該值一方面是為了防止DoS攻擊。 clientPortAddress 與clientPort匹配,表示某個(gè)IP地址,如果服務(wù)器有多個(gè)網(wǎng)絡(luò)接口(多個(gè)IP地址),如果沒有設(shè)置這個(gè)屬性,則clientPort會綁定到所有IP地址上,否則只綁定到該設(shè)置的IP地址上。 minSessionTimeout 最小的session time時(shí)間,默認(rèn)值是2個(gè)tick time,客戶端設(shè)置的session time 如果小于這個(gè)值,則會被強(qiáng)制協(xié)調(diào)為這個(gè)最小值。 maxSessionTimeout 最大的session time 時(shí)間,默認(rèn)值是20個(gè)tick time. ,客戶端設(shè)置的session time 如果大于這個(gè)值,則會被強(qiáng)制協(xié)調(diào)為這個(gè)最大值。 集群配置選項(xiàng)electionAlg 領(lǐng)導(dǎo)選舉算法,默認(rèn)是3(fast leader election,基于TCP),0表示leader選舉算法(基于UDP),1表示非授權(quán)快速選舉算法(基于UDP),2表示授權(quán)快速選舉算法(基于UDP),目前1和2算法都沒有應(yīng)用,不建議使用,0算法未來也可能會被干掉,只保留3(fast leader election)算法,因此最好直接使用默認(rèn)就好。 initLimit tickTime的個(gè)數(shù),表示在leader選舉結(jié)束后,followers與leader同步需要的時(shí)間,如果followers比較多或者說leader的數(shù)據(jù)灰常多時(shí),同步時(shí)間相應(yīng)可能會增加,那么這個(gè)值也需要相應(yīng)增加。當(dāng)然,這個(gè)值也是follower和observer在開始同步leader的數(shù)據(jù)時(shí)的最大等待時(shí)間(setSoTimeout) syncLimit tickTime的個(gè)數(shù),這時(shí)間容易和上面的時(shí)間混淆,它也表示follower和observer與leader交互時(shí)的最大等待時(shí)間,只不過是在與leader同步完畢之后,進(jìn)入正常請求轉(zhuǎn)發(fā)或ping等消息交互時(shí)的超時(shí)時(shí)間。 leaderServes (Java system property: zookeeper.leaderServes) 如果該值不是no,則表示該服務(wù)器作為leader時(shí)是需要接受客戶端連接的。為了獲得更高吞吐量,當(dāng)服務(wù)器數(shù)三臺以上時(shí)一般建議設(shè)置為no。 cnxTimeout (Java system property: zookeeper.cnxTimeout) 默認(rèn)值是5000,單位ms 表示leaderelection時(shí)打開連接的超時(shí)時(shí)間,只用在算法3中。 ZK的不安全配置項(xiàng)skipACL (Java systemproperty: zookeeper.skipACL) 默認(rèn)值是no,忽略所有ACL檢查,相當(dāng)于開放了所有數(shù)據(jù)權(quán)限給任何人。 forceSync (Java systemproperty: zookeeper.forceSync) 默認(rèn)值是yes, 表示transactionlog在commit時(shí)是否立即寫到磁盤上,如果關(guān)閉這個(gè)選項(xiàng)可能會在斷電時(shí)丟失信息。 jute.maxbuffer (Java system property: jute.maxbuffer)默認(rèn)值0xfffff,單位是KB,表示節(jié)點(diǎn)數(shù)據(jù)最多1M。如果要設(shè)置這個(gè)值,必須要在所有服務(wù)器上都需要設(shè)置。 授權(quán)認(rèn)證配置項(xiàng) DigestAuthenticationProvider.superDigest (Java system property only: zookeeper.DigestAuthenticationProvider.superDigest) 設(shè)置這個(gè)值是為了確定一個(gè)超級用戶,它的值格式為 super:<base64encoded(SHA1(idpassword))> ,一旦當(dāng)前連接addAuthInfo超級用戶驗(yàn)證通過,后續(xù)所有操作都不會checkACL. 將配置文件分發(fā)到集群其他機(jī)器中[hadoop@hadoop1 apps]$ scp -r zookeeper-3.4.10/ hadoop2:$PWD [hadoop@hadoop1 apps]$ scp -r zookeeper-3.4.10/ hadoop3:$PWD 然后是最重要的步驟,一定不能忘了。 去你的各個(gè) ZooKeeper 服務(wù)器節(jié)點(diǎn),新建目錄 dataDir=/home/hadoop/data/zkdata,這個(gè) 目錄就是你在 zoo.cfg 中配置的 dataDir 的目錄,建好之后,在里面新建一個(gè)文件,文件 名叫 myid,里面存放的內(nèi)容就是服務(wù)器的 id,就是 server.1=hadoop01:2888:3888 當(dāng)中的 id, 就是 1,那么對應(yīng)的每個(gè)服務(wù)器節(jié)點(diǎn)都應(yīng)該做類似的操作 拿服務(wù)器 hadoop1 舉例: [hadoop@hadoop1 ~]$ mkdir /home/hadoop/data/zkdata [hadoop@hadoop1 ~]$ cd data/zkdata/ [hadoop@hadoop1 zkdata]$ echo 1 > myid 當(dāng)以上所有步驟都完成時(shí),意味著我們 ZooKeeper 的配置文件相關(guān)的修改都做完了。 配置環(huán)境變量[hadoop@hadoop1 ~]$ vi .bashrc
#Zookeeper export ZOOKEEPER_HOME=/home/hadoop/apps/zookeeper-3.4.10 export PATH=$PATH:$ZOOKEEPER_HOME/bin 保存退出 [hadoop@hadoop1 ~]$ source .bash
啟動軟件,并驗(yàn)證安裝是否成功命令 啟動:zkServer.sh start 注意:雖然我們在配置文件中寫明了服務(wù)器的列表信息,但是,我們還是需要去每一臺服務(wù) 器去啟動,不是一鍵啟動集群模式 每啟動一臺查看一下狀態(tài)再啟動下一臺 啟動hadoop1[hadoop@hadoop1 ~]$ zkServer.sh start ZooKeeper JMX enabled by default Using config: /home/hadoop/apps/zookeeper-3.4.10/bin/../conf/zoo.cfg Starting zookeeper ... STARTED [hadoop@hadoop1 ~]$ zkServer.sh status ZooKeeper JMX enabled by default Using config: /home/hadoop/apps/zookeeper-3.4.10/bin/../conf/zoo.cfg Error contacting service. It is probably not running. [hadoop@hadoop1 ~]$ 啟動hadoop2[hadoop@hadoop2 ~]$ zkServer.sh start ZooKeeper JMX enabled by default Using config: /home/hadoop/apps/zookeeper-3.4.10/bin/../conf/zoo.cfg Starting zookeeper ... STARTED [hadoop@hadoop2 ~]$ zkServer.sh status ZooKeeper JMX enabled by default Using config: /home/hadoop/apps/zookeeper-3.4.10/bin/../conf/zoo.cfg Mode: leader [hadoop@hadoop2 ~]$ 此時(shí)在查看hadoop1的狀態(tài) 啟動hadoop3[hadoop@hadoop3 ~]$ zkServer.sh start ZooKeeper JMX enabled by default Using config: /home/hadoop/apps/zookeeper-3.4.10/bin/../conf/zoo.cfg Starting zookeeper ... STARTED [hadoop@hadoop3 ~]$ zkServer.sh status ZooKeeper JMX enabled by default Using config: /home/hadoop/apps/zookeeper-3.4.10/bin/../conf/zoo.cfg Mode: follower [hadoop@hadoop3 ~]$ 查看進(jìn)程3臺機(jī)器上都有QuorumPeerMain進(jìn)程 [hadoop@hadoop1 ~]$ jps 2499 Jps 2404 QuorumPeerMain [hadoop@hadoop1 ~]$
|
|