一年又一年,字節(jié)跳動(dòng) Lark(飛書(shū)) 研發(fā)團(tuán)隊(duì)又雙叒叕開(kāi)始招新生啦!
【內(nèi)推碼】:GTPUVBA
【內(nèi)推鏈接】:https://job.toutiao.com/s/JRupWVj
【招生對(duì)象】:20年9月后~21年8月前 畢業(yè)的同學(xué)
【報(bào)名時(shí)間】:6.16-7.16(提前批簡(jiǎn)歷投遞只有一個(gè)月抓住機(jī)會(huì)哦>氪骸)
【畫(huà)重點(diǎn)】:提前批和正式秋招不矛盾!面試成功,提前鎖定Offer谭胚;若有失利哮翘,額外獲得一次面試機(jī)會(huì)颈嚼,正式秋招開(kāi)啟后還可再次投遞。
1 ZooKeeper簡(jiǎn)介
ZooKeeper是一個(gè)開(kāi)源分布式應(yīng)用程序協(xié)調(diào)服務(wù)饭寺,最初是作為Hadoop的一個(gè)副產(chǎn)品阻课,但現(xiàn)在已經(jīng)成為分布式應(yīng)用的一個(gè)重要組件,像Hadoop艰匙、Dubbo限煞、Kafka都是基于ZooKeeper構(gòu)建的。
官方文檔
ZooKeeper 3.4 Documentation
2 ZooKeeper安裝
Mac安裝
brew install zookeeper
啟動(dòng)和關(guān)閉
ZooKeeper提供了zkServer
來(lái)管理ZooKeeper员凝,默認(rèn)使用/usr/local/etc/zookeeper/zoo.cfg
配置文件中的配置來(lái)啟動(dòng)署驻,主要命令如下:
- 啟動(dòng):
zkServer start [配置文件]
- 關(guān)閉:
zkServer stop [配置文件]
- 重啟:
zkServer restart [配置文件]
- 查看狀態(tài):
zkServer status [配置文件]
# 其他命令如下
Using config: /usr/local/etc/zookeeper/zoo.cfg
Usage: ./zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}
配置文件詳解
# 心跳時(shí)間
# Leader與Follower之間發(fā)送消息時(shí),請(qǐng)求和應(yīng)答時(shí)間長(zhǎng)度健霹。
tickTime=2000
# Follower與Leader初始連接時(shí)能容忍的最多心跳數(shù)
initLimit=10
# Follower與Leader請(qǐng)求和答應(yīng)最多能容忍的心跳數(shù)
syncLimit=5
# 存放myid旺上、版本、日志等信息
dataDir=/usr/local/var/run/zookeeper/data
# 客戶端連接的端口
clientPort=2181
# 最大連接數(shù)
# maxClientCnxns=60
# 指定了需要保留的文件數(shù)目糖埋。默認(rèn)是保留3個(gè)宣吱。
# autopurge.snapRetainCount=3
# 3.4.0及之后版本,ZK提供了自動(dòng)清理事務(wù)日志和快照文件的功能
# 這個(gè)參數(shù)指定了清理頻率瞳别,單位是小時(shí)征候,需要配置一個(gè)1或更大的整數(shù),默認(rèn)是0祟敛,表示不開(kāi)啟自動(dòng)清理功能倍奢。
# autopurge.purgeInterval=1
3 ZooKeeper集群搭建
修改配置文件
- 在zoo.cfg的目錄下增加3個(gè)配置文件,分別命名為cluster_zoo1.cfg垒棋、cluster_zoo2.cfg卒煞、cluster_zoo3.cfg(隨便起名字也可以)。
- 編輯配置文件叼架,分別修改其端口和dataDir畔裕,保證三個(gè)文件使用不同的端口和dataDir目錄。
- 增加集群配置乖订。
# cluster_zoo1.cfg配置文件內(nèi)容
dataDir=/usr/local/var/run/zookeeper/cluster_data_1
clientPort=2182
# server.A=B:C:D
# A:其中 A 是一個(gè)數(shù)字扮饶,表示這個(gè)是服務(wù)器的編號(hào);
# B:是這個(gè)服務(wù)器的 ip 地址乍构;
# C:Leader選舉的端口甜无;
# D:Zookeeper服務(wù)器之間的通信端口。
server.1=localhost:2881:3881
server.2=localhost:2882:3882
server.3=localhost:2883:3883
# cluster_zoo1.cfg配置文件內(nèi)容
dataDir=/usr/local/var/run/zookeeper/cluster_data_2
clientPort=2183
# server.A=B:C:D
# A:其中 A 是一個(gè)數(shù)字,表示這個(gè)是服務(wù)器的編號(hào)岂丘;
# B:是這個(gè)服務(wù)器的 ip 地址陵究;
# C:Leader選舉的端口;
# D:Zookeeper服務(wù)器之間的通信端口奥帘。
server.1=localhost:2881:3881
server.2=localhost:2882:3882
server.3=localhost:2883:3883
# cluster_zoo3.cfg配置文件內(nèi)容
dataDir=/usr/local/var/run/zookeeper/cluster_data_3
clientPort=2184
# server.A=B:C:D
# A:其中 A 是一個(gè)數(shù)字铜邮,表示這個(gè)是服務(wù)器的編號(hào);
# B:是這個(gè)服務(wù)器的 ip 地址寨蹋;
# C:Leader選舉的端口松蒜;
# D:Zookeeper服務(wù)器之間的通信端口。
server.1=localhost:2881:3881
server.2=localhost:2882:3882
server.3=localhost:2883:3883
配置myid的文件
myid文件配置在dataDir的目錄下已旧,該文件里面只有一個(gè)數(shù)據(jù)就是server.A=B:C:D
中A的值秸苗,ZooKeeper啟動(dòng)時(shí)會(huì)讀取這個(gè)文件,拿到里面的數(shù)據(jù)與zoo.cfg里面的配置信息比較從而判斷到底是那個(gè)server运褪。
/usr/local/var/run/zookeeper > echo 1 > cluster_data_1/myid
/usr/local/var/run/zookeeper > echo 2 > cluster_data_2/myid
/usr/local/var/run/zookeeper > echo 3 > cluster_data_3/myid
使用三個(gè)配置文件分別啟動(dòng)
/usr/local/etc/zookeeper > zkServer start cluster_zoo1.cfg
/usr/local/etc/zookeeper > zkServer start cluster_zoo2.cfg
/usr/local/etc/zookeeper > zkServer start cluster_zoo3.cfg
查看集群狀態(tài)
# 節(jié)點(diǎn)1
/usr/local/etc/zookeeper master > zkServer status cluster_zoo1.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/cluster_zoo1.cfg
Mode: follower
# 節(jié)點(diǎn)2
/usr/local/etc/zookeeper master > zkServer status cluster_zoo2.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/cluster_zoo2.cfg
Mode: leader
# 節(jié)點(diǎn)3
/usr/local/etc/zookeeper master > zkServer status cluster_zoo3.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/cluster_zoo3.cfg
Mode: follower
連接集群
/usr/local/etc/zookeeper > zkCli -server localhost:2182,localhost:2183,localhost:214
Connecting to localhost:2182,localhost:2183,localhost:214
Welcome to ZooKeeper!
JLine support is enabled
[zk: localhost:2182,localhost:2183,localhost:214(CONNECTING) 0]
WATCHER::
WatchedEvent state:SyncConnected type:None path:null