zookeeper簡介

zookeeper是分布式程序。作用是分布式協調服務。有奇數臺,有半數以上節點存活就能夠提供服務。

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

  • 管理用戶提交的數據
  • 為用戶程序提供節點的監聽服務

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

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

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)

在網上看了一些方法,很久都沒有解決問題,后來修改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數據結構:
    其擁有樹狀的數據結構,每個節點叫znode(分為ephemeral,persistent)
    Znode有四種形式的目錄節點(默認是persistent):
    • PERSISTENT
    • PERSISTENT_SEQUENTIAL(持久序列/test0000000019 )
    • EPHEMERAL
    • EPHEMERAL_SEQUENTIAL
create [-s -e] /app-emphemeral 8888
 寫數據
get path [watch] 讀數據
set 更新
watch 監聽
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環境變量下默認就有用戶主目錄下的bin,所以無論在哪里都可以zkstart.sh

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容