zookeeper簡介

zookeeper是分布式程序。作用是分布式協(xié)調(diào)服務。有奇數(shù)臺,有半數(shù)以上節(jié)點存活就能夠提供服務。

zookeeper是分布式場景里的第三方,主要功能是保管數(shù)據(jù),提供監(jiān)聽,要求具有非常高的可靠性。

  • 管理用戶提交的數(shù)據(jù)
  • 為用戶程序提供節(jié)點的監(jiān)聽服務

zookeeper集群的角色有:follower,leader。其內(nèi)部有自動投票選舉機制(paxos,zab算法)。選舉了leader之后,更新數(shù)據(jù)時,數(shù)據(jù)先寫入leader,再由leader讓follower更新并保持一致。

zookeeper不適合用到數(shù)據(jù)更新頻繁,要求很嚴格的地方。集群大的時候數(shù)據(jù)更新保持一致耗時較長。

zookeeper安裝配置

需要配置的是:myid,服務器

  • 安裝zookeeper
sftp 上傳zookeeper
tar -zxvf zoo^^^
rm -rf xxx
rm -rf *.xml *.txt * docs src *.asc *.md5 *.sha1 dist-maven
cd conf
cp zoo_sample.cfg zoo.cfg
      datadir = /root/zkdata
      server.1=mini1:2888:3888
      server.2=mini2:2888:3888
      server.3=mini3:2888:3888
mkdir /root/zkdata
echo 1 > myid
scp -r(拷文件夾) /apps/zookeeper root@mini2: /apps
(scp -r zookeeper-3.4.5 hadoop@mini2:$PWD)

bin/zkServer.sh start啟動zookeeper
bin/zkServer.sh status,自動投票選出leader,follower
當我再一次安裝zookeeper集群的時候,查看status時報錯:

……
Error contacting service. It is probably not running.
使用zkServer.sh start-foreground,看到錯誤信息如下:
java.net.ConnectException: 拒絕連接
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:579)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:354)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:388)
        at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:765)
        at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:716)

在網(wǎng)上看了一些方法,很久都沒有解決問題,后來修改zoo.cfg中的配置:

server.1=0.0.0.0:2888:3888
server.2=mini2:2888:3888
server.3=mini3:2888:3888
把每一臺的自己的主機名改為0.0.0.0

問題解決,賊奇怪……
jps,kill -9 1698,查看,殺死進程
前面是服務端,我們接下來啟動命令行客戶端

bin/zkCli.sh
connect mini2:2181
quit
  • zookeeper數(shù)據(jù)結(jié)構(gòu):
    其擁有樹狀的數(shù)據(jù)結(jié)構(gòu),每個節(jié)點叫znode(分為ephemeral,persistent)
    Znode有四種形式的目錄節(jié)點(默認是persistent):
    • PERSISTENT
    • PERSISTENT_SEQUENTIAL(持久序列/test0000000019 )
    • EPHEMERAL
    • EPHEMERAL_SEQUENTIAL
create [-s -e] /app-emphemeral 8888
 寫數(shù)據(jù)
get path [watch] 讀數(shù)據(jù)
set 更新
watch 監(jiān)聽
ssh mini2 "source /etc/profile;/root/apps/zookeeper-3.4.5 /bin/zkServer.sh start"
  • zookeeper自啟動腳本
echo "start zkServer"
for i in 1,2,3
do
ssh mini$i "source /etc/profile;/apps/zookeeper-3.4.5/bin/zkServer.sh start"
done
(mkdir /root/bin,vi zkstart.sh)

chmod +x
echo $path環(huán)境變量下默認就有用戶主目錄下的bin,所以無論在哪里都可以zkstart.sh

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容