ZK蔚鸥,分布式應(yīng)用間的協(xié)調(diào)調(diào)度機(jī)制,監(jiān)聽和管理分布式服務(wù)器間的連接个榕。
一坯墨、
zk的數(shù)據(jù)結(jié)構(gòu)——znode
每個Znode由3部分組成 :stat:此為狀態(tài)信息, 描述該Znode的版本, 權(quán)限等信息;data:與該Znode關(guān)聯(lián)的數(shù)據(jù)权逗;children:該Znode下的子節(jié)點(diǎn)。
znode中的數(shù)據(jù)為調(diào)度相關(guān)數(shù)據(jù)冤议,例如:配置文件信息斟薇、狀態(tài)信息等,默認(rèn)每個節(jié)點(diǎn)最大1M恕酸。
每一個節(jié)點(diǎn)都擁有自己的ACL(訪問控制列表)堪滨,這個列表規(guī)定了用戶的權(quán)限吏廉,即限定了特定用戶對目標(biāo)節(jié)點(diǎn)可以執(zhí)行的操作北启。
客戶端可以在節(jié)點(diǎn)上設(shè)置watch,我們稱之為監(jiān)視器式曲。當(dāng)節(jié)點(diǎn)狀態(tài)發(fā)生改變時(Znode的增义矛、刪发笔、改)將會觸發(fā)watch所對應(yīng)的操作。
二凉翻、ZK部署常見問題
1 下載zk安裝包了讨,在此采用從一臺主機(jī)copy到另一臺主機(jī)的方式:
scp -r zookeeper-3.4.10 hadoop@node04:/home/hadoop/
2 修改配置
/home/hadoop/zookeeper-3.4.10/conf/zoo.cfg? (/home/hadoop是我的zk安裝目錄)
在zoo.cfg添加配置:
server.1=node01:2888:3888 (主機(jī)名:心跳端口:選舉通信端口)心跳端口用于探測主機(jī)是否活著。制轰。 server后的 "1" 是主機(jī)的 機(jī)器號前计,需要在每臺主機(jī)下的myid文件里定義
server.2=node02:2888:3888
server.3=node03:2888:3888
dataDir=home/hadoop/zookeeper/data? (快照文件存放目錄,現(xiàn)在我也不知道放點(diǎn)啥.....)
dataLogDir=home/hadoop/zookeeper/logs (事務(wù)日志存放目錄)
3 補(bǔ)充文件
在?/home/hadoop/zookeeper-3.4.10/data 下創(chuàng)建 myid 文件垃杖,并寫入機(jī)器號男杈,例如1,2,3
創(chuàng)建?zookeeper/data 、/zookeeper/logs 文件夾调俘,對應(yīng)zoo.cfg中的配置伶棒。
注意:zk啟動后旺垒,會在?/zookeeper-3.4.10/data?下生成一個進(jìn)程id文件:zookeeper_server.pid,不同用戶啟動生成的文件不同,首次用root用戶啟用服務(wù)的話苞冯,再次用hadoop用戶啟袖牙,會報進(jìn)程id相關(guān)的錯,將?zookeeper_server.pid 文件刪除重啟zk即可舅锄。
4 創(chuàng)建軟連接
zk啟動腳本中通過軟連接的方式找到安裝目錄進(jìn)行啟動鞭达,所以要先配置軟連接再啟動服務(wù);
切換root用戶創(chuàng)建軟連接:ln -s /home/hadoop/zookeeper-3.4.10/ /usr/local/zookeeper
5 啟動服務(wù)
進(jìn)入 /home/hadoop/zookeeper-3.4.10/bin? 目錄下皇忿,執(zhí)行
./zkServer.sh start? 啟動服務(wù)
./zkServer.sh status? 查看狀態(tài)
./zkServer.sh stop? ?關(guān)閉服務(wù)
輸入 jps 命令查看zk進(jìn)程:QuorumPeerMain 為zk進(jìn)程
6? 配置環(huán)境變量
切換 root 用戶畴蹭,在?/etc/profile 文件中配置環(huán)境變量,添加?
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
退出鳍烁,執(zhí)行 source /etc/profile? 編譯環(huán)境變量生效
7 常見問題
有時候配置完啟動失敗叨襟,可以查看?zookeeper.out 日志來排查文件,文件默認(rèn)在?zookeeper-3.4.10/bin 目錄下幔荒。
例如: 域名解析失敗糊闽,需要檢查 /etc/hosts 文件中是否有配置該域名映射關(guān)系
三、主機(jī)間通信爹梁,SSH免密登錄設(shè)置
免密登錄設(shè)置只針對于當(dāng)前用戶右犹,用root用戶設(shè)置完,不代表其他用戶可以免密登錄姚垃。
1念链、以普通用戶hadoop為例:在A主機(jī)執(zhí)行? ssh-keygen -t rsa? 會在/home/hadoop 下生成 .ssh文件夾及秘鑰、公鑰倆文件
2积糯、將 id_rsa.pub"這個文件拷貝到 主機(jī)B 的"~/.ssh/"目錄中并改名為"authorized_keys"掂墓;注意用copy或者cat 復(fù)制內(nèi)容靠譜,用vi打開復(fù)制的話看成,可能會帶個換行符啥的君编,導(dǎo)致不好用
3、改變權(quán)限: chmod 644 authorized_keys
4绍昂、在主機(jī)A執(zhí)行 ssh node02即可登錄到主機(jī)B啦粹;(node02為主機(jī)B的名字,或者用ip窘游,注意:第一次登錄時仍需要輸入密碼唠椭,以后就不用輸入了)
簡言之:將當(dāng)前服務(wù)器的公鑰文件復(fù)制到目標(biāo)機(jī)器的.ssh目錄的authorized_keys文件中。
原理(轉(zhuǎn)):
這種方式你需要在客戶端服務(wù)器上為自己創(chuàng)建一對密匙忍饰,并把公匙放在需要登錄的服務(wù)器上贪嫂。
當(dāng)你要連接到服務(wù)器上時,客戶端就會向服務(wù)器請求使用密匙進(jìn)行安全驗(yàn)證艾蓝。
服務(wù)器收到請求之后力崇,會在該服務(wù)器上你所請求登錄的用戶的家目錄下尋找你的公匙斗塘,
然后與你發(fā)送過來的公匙進(jìn)行比較。
如果兩個密匙一致亮靴,服務(wù)器就用該公匙加密“質(zhì)詢”并把它發(fā)送給客戶端馍盟。
客戶端收到“質(zhì)詢”之后用自己的私匙解密再把它發(fā)送給服務(wù)器。
四茧吊、登錄zk查看節(jié)點(diǎn)等相關(guān)信息
zkCli.sh -server hostname:port?
不寫hostname:port 時贞岭,默認(rèn)連接本地zk。
查看路徑時搓侄,路徑必須從根節(jié)點(diǎn)開始瞄桨。