zookeeper偽集群

偽集群模式

偽集群模式就是在單機(jī)環(huán)境下模擬集群的Zookeeper服務(wù)。

在zookeeper集群配置文件中,clientPort參數(shù)用來設(shè)置客戶端連接zookeeper服務(wù)器的端口。server.1=IP1:2888:3888中,IP1指的是組成Zookeeper服務(wù)器的IP地址,2888為組成zookeeper服務(wù)器之間的通信端口,3888為用來選舉leader的端口。由于偽集群模式中,我們使用的是同一臺服務(wù)器,也就是說,需要在單臺機(jī)器上運行多個zookeeper實例,所以我們必須要保證多個zookeeper實例的配置文件的client端口不能沖突。

下面簡單介紹一下如何在單臺機(jī)器上建立偽集群模式。首先將zookeeper-3.4.9.tar.gz分別解壓到server1,server2,server3目錄下:

tar -zxvf zookeeper-3.4.9.tar.gz  /home/lv/install/zookeeper/server1
tar -zxvf zookeeper-3.4.9.tar.gz /home/lv/install/zookeeper/server2
tar -zxvf zookeeper-3.4.9.tar.gz /home/lv/install/zookeeper/server3

然后在server1/data/目錄下創(chuàng)建文件myid文件并寫入“1”,同樣在server2/data/,目錄下創(chuàng)建文件myid并寫入“2”,server3進(jìn)行同樣的操作。

下面分別展示在server1/conf/、server2/conf/、server3/conf/目錄下的zoo.cfg文件:
server1/conf/zoo.cfg文件

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/lv/install/zookeeper/server1/data
dataLogDir=/home/lv/install/zookeeper/server1/datalog
clientPort=2181
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
maxClientCnxns=60

server2/conf/zoo.cfg文件

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/lv/install/zookeeper/server2/data
dataLogDir=/home/lv/install/zookeeper/server2/datalog
clientPort=2182
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
maxClientCnxns=60

server3/conf/zoo.cfg文件

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/lv/install/zookeeper/server3/data
dataLogDir=/home/lv/install/zookeeper/server3/datalog
clientPort=2183
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
maxClientCnxns=60

從上述三個代碼清單可以發(fā)現(xiàn),除了clientPort不同之外,dataDir和dataLogDir也不同。另外,不要忘記dataDir所對應(yīng)的目錄中創(chuàng)建的myid文件來指定對應(yīng)的zookeeper服務(wù)器實例。
Zookeeper偽集群模式運行
當(dāng)上述偽集群環(huán)境安裝成功后就可以測試是否安裝成功啦,我們可以嘗嘗鮮:
首先啟動server1服務(wù)器:
cd server1/binbash zkServer.sh start

此時出現(xiàn)以下提示信息,表示啟動成功:


打開zookeeper.out文件:

2017-09-23 11:38:59,765 [myid:1] - WARN  [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumCnxManager@588] - Cannot open channel to 3 at election address /127.0.0.1:3890
java.net.ConnectException: 拒絕連接 (Connection refused)
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:562)
    at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:614)
    at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:843)
    at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:913)
2017-09-23 11:38:59,765 [myid:1] - INFO  [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumPeer$QuorumServer@167] - Resolved hostname: 127.0.0.1 to address: /127.0.0.1
2017-09-23 11:38:59,765 [myid:1] - INFO  [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:FastLeaderElection@852] - Notification time out: 60000

產(chǎn)生上述Waring信息是因為zookeeper服務(wù)的每個實例都擁有全局的配置信息,他們在啟動的時候需要隨時隨地的進(jìn)行l(wèi)eader選舉,此時server1就需要和其他兩個zookeeper實例進(jìn)行通信,但是,另外兩個zookeeper實例還沒有啟動起來,因此將會產(chǎn)生上述所示的提示信息。當(dāng)我們用同樣的方式啟動server2和server3后就不會再有這樣的警告信息了。

當(dāng)三臺服務(wù)器均成功啟動后切換至server1/bin/目錄下執(zhí)行以下命令:

bash zkServer.sh status

終端出現(xiàn)以下提示信息:



說明server1服務(wù)器此時處于follower模式,同樣切換至server2/bin目錄下執(zhí)行相同的命令,返回如下結(jié)果:



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

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

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