十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
zookeeper 是一個(gè)分布式協(xié)調(diào)系統(tǒng)
成都一家集口碑和實(shí)力的網(wǎng)站建設(shè)服務(wù)商,擁有專業(yè)的企業(yè)建站團(tuán)隊(duì)和靠譜的建站技術(shù),十年企業(yè)及個(gè)人網(wǎng)站建設(shè)經(jīng)驗(yàn) ,為成都上千余家客戶提供網(wǎng)頁(yè)設(shè)計(jì)制作,網(wǎng)站開(kāi)發(fā),企業(yè)網(wǎng)站制作建設(shè)等服務(wù),包括成都營(yíng)銷型網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),同時(shí)也為不同行業(yè)的客戶提供成都網(wǎng)站建設(shè)、成都做網(wǎng)站的服務(wù),包括成都電商型網(wǎng)站制作建設(shè),裝修行業(yè)網(wǎng)站制作建設(shè),傳統(tǒng)機(jī)械行業(yè)網(wǎng)站建設(shè),傳統(tǒng)農(nóng)業(yè)行業(yè)網(wǎng)站制作建設(shè)。在成都做網(wǎng)站,選網(wǎng)站制作建設(shè)服務(wù)商就選成都創(chuàng)新互聯(lián)。
下載鏈接:http://mirror.cogentco.com/pub/apache/zookeeper/
1.zookeeper集群結(jié)構(gòu)
(1) leader
是zk集群的主節(jié)點(diǎn),客戶端向zk注冊(cè)數(shù)據(jù)時(shí),都要通過(guò)leader來(lái)對(duì)整個(gè)集群中的所有從節(jié)點(diǎn)做數(shù)據(jù)同步
(2)follower
是zk集群的從節(jié)點(diǎn),保留數(shù)據(jù),接收l(shuí)eader的請(qǐng)求,參與leader的選舉
(3)observer
是zk集群的從節(jié)點(diǎn),保留數(shù)據(jù),接收l(shuí)eader的請(qǐng)求,不參與leader的選舉
2.zookeeper的選舉機(jī)制
(1)集群?jiǎn)?dòng)的時(shí)候
server1啟動(dòng),先查看集群中有沒(méi)有l(wèi)eader,如果沒(méi)有,則選舉自己為leader;
server2啟動(dòng),先查看集群中有沒(méi)有l(wèi)eader,如果沒(méi)有,則選舉自己為leader,
第二輪投票,server1j和server2投id較大為leader, server2當(dāng)選為leader;
(2)集群運(yùn)行的時(shí)候
運(yùn)行中,如果leader宕機(jī),剩余的機(jī)器會(huì)進(jìn)入選舉狀態(tài),重新選舉的依據(jù):
優(yōu)先考慮節(jié)點(diǎn)所持有的數(shù)據(jù)的版本號(hào),最新的作為leader;
如果每個(gè)節(jié)點(diǎn)的數(shù)據(jù)都一樣新,那就選舉id大的為leader;
3.安裝配置
解壓安裝
[root@Darren2 zookeeper-3.4.10]# tar -zxvf zookeeper-3.4.10.tar.gz
[root@Darren2 zookeeper-3.4.10]# mkdir -p /usr/local/zookeeper-3.4.10/data
[root@Darren2 zookeeper-3.4.10]# echo 1 > data/myid
修改配置文件
其中server.1中的1對(duì)應(yīng)文件myid內(nèi)容,每個(gè)zookeeper都要有myid文件
[root@Darren2 zookeeper-3.4.10]# cd /usr/local/zookeeper-3.4.10/conf/
[root@Darren2 conf]# cp zoo_sample.cfg zoo.cfg
[root@Darren2 conf]# vim zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-3.4.10/data
clientPort=2181
server.1=Darren2:2888:3888
server.2=Darren3:2888:3888
server.3=Darren4:2888:3888
#啟動(dòng)zookeeper
[root@Darren2 bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.10/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@Darren2 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: Leader
[root@Darren3 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: Follower
4.zookeeper命令
zookeeper中數(shù)據(jù)本質(zhì)是key-value,zookeeper中一個(gè)數(shù)據(jù)被稱為一個(gè)znode,一個(gè)znode不能太大,通常在10K以內(nèi),官方要求最大不要超過(guò)1M,如果太大,會(huì)導(dǎo)致zookeeper集群個(gè)節(jié)點(diǎn)的數(shù)據(jù)無(wú)法實(shí)時(shí)同步 ,數(shù)據(jù)保持一致性。
key使用路徑表示,如:/dir1 value
znode類型
(1) persistent:默認(rèn)的節(jié)點(diǎn)類型,一旦創(chuàng)建就會(huì)一直存在,除非手動(dòng)刪除數(shù)據(jù);
(2)ephemeral:短暫節(jié)點(diǎn),創(chuàng)建該數(shù)據(jù)節(jié)點(diǎn)的客戶端如果和zk服務(wù)失去聯(lián)系,該數(shù)據(jù)節(jié)點(diǎn)會(huì)被zk服務(wù)自動(dòng)刪除;
(3)sequential:帶自增序號(hào)的節(jié)點(diǎn),在同一個(gè)節(jié)點(diǎn)下創(chuàng)建sequential子節(jié)點(diǎn),zk會(huì)給子節(jié)點(diǎn)名字自動(dòng)拼接一個(gè)自增的序列號(hào);
#登錄zk client
[root@Darren2 bin]# ./zkCli.sh
[zk: localhost:2181(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
stat path [watch]
set path data [version]
ls path [watch]
delquota [-n|-b] path
ls2 path [watch]
setAcl path acl
setquota -n|-b val path
history
redo cmdno
printwatches on|off
delete path [version]
sync path
listquota path
rmr path
get path [watch]
create [-s] [-e] path data acl
addauth scheme auth
quit
getAcl path
close
connect host:port
[zk: localhost:2181(CONNECTED) 13] create /dir1 a1
[zk: localhost:2181(CONNECTED) 16] ls /
[dir1, zookeeper]
[zk: localhost:2181(CONNECTED) 15] get /dir1
a1
cZxid = 0x7
ctime = Sun Nov 26 13:05:34 CST 2017
mZxid = 0x7
mtime = Sun Nov 26 13:05:34 CST 2017
pZxid = 0x7
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 2
numChildren = 0
#創(chuàng)建短暫的znode,一旦quit客戶端,則自動(dòng)刪除
[zk: localhost:2181(CONNECTED) 17] create -e /dir2 b1
#創(chuàng)建序列znode
[zk: localhost:2181(CONNECTED) 1] create -s /dir3 c1
Created /dir30000000003
[zk: localhost:2181(CONNECTED) 2] ls /
[dir1, zookeeper, dir30000000003]
[zk: localhost:2181(CONNECTED) 3] create -s /dir3 c1
Created /dir30000000004
[zk: localhost:2181(CONNECTED) 4] ls /
[dir1, zookeeper, dir30000000003, dir30000000004]
#創(chuàng)建短暫序列znode
[zk: localhost:2181(CONNECTED) 5] create -s -e /dir3 c1
#事件監(jiān)聽(tīng)
[zk: localhost:2181(CONNECTED) 4] ls /dir1 watch
WATCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/dir1
5.zookeeper的客戶端api的基本使用
package zkdemo1;
import org.apache.zookeeper.ZooKeeper;
public class TestConnection {
public static void main(String[] args) throws Exception{
ZooKeeper zk = new ZooKeeper("192.168.163.102", 2000, null);
byte[] data = zk.getData("/dir1", false, null);
System.out.println(new String(data));
zk.close();
}
}
輸出:
a1