下載Zookeeper
從官網或者鏡像下載對應的發(fā)行包:
我這里直接使用wget命令下載3.4.8版本:
wget http://mirror.tcpdiag.net/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz
解壓Zookeeper
下載后的發(fā)行包是tar.gz
格式的zookeeper-3.4.8.tar.gz
使用tar命令解壓:
tar zxvf zookeeper-3.4.8.tar.gz
配置Zookeeper
zookeeper支持兩種運行模式:獨立模式(standalone)和復制模式(replicated)短荐。
真正用于生產環(huán)境的Zookeeper肯定都是使用復制模式的,這樣做可以避免單點問題探熔。想要使用復制模式梢夯,但由于沒有富余的機器能夠使用,所以可以在單臺機器上通過配置來使用復制模式恳邀,從而模擬真實的集群環(huán)境懦冰。
由于Zookeeper集群是通過多數選舉的方式產生leader的,因此谣沸,集群需要奇數個Zookeeper實例組成刷钢,也就是說至少需要3臺(1臺不能算"群" :-] )。
配置zoo.conf文件
首先乳附,將zookeeper-3.4.8這個目錄copy三份内地,分別為zookeeper-3.4.8-01、zookeeper-3.4.8-02赋除、zookeeper-3.4.8-03阱缓,代表著3個實例。
然后举农,分別創(chuàng)建zoo.conf配置文件荆针,放在對應實例下的conf/目錄下,文件內容如下:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/var/lib/zookeeper-01
# the port at which the clients will connect
clientPort=2181
# servers
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
下面說明一下需要注意的幾點:
- dataDir這個是指定實例數據的存放路徑并蝗,不同的實例要區(qū)分開祭犯。并且,注釋中提醒不要設置為/tmp目錄滚停。比如可以分別設為:
/var/lib/zookeeper-01
/var/lib/zookeeper-02
/var/lib/zookeeper-03
- clientPort這個是供客戶端連接本實例的端口號沃粗,不同的實例也要區(qū)分。比如键畴,可以分別指定為:2181最盅、2182、2183起惕。
- server.{X}這個X可以取數字涡贱,用來標識集群中唯一的一個實例。配置了多少個server.{X}就表示集群中有多少個實例惹想。后面值的格式為:
{host}:{port1}:{port2}
其中问词,{host}為實例所在的主機IP,這里由于都在一臺機器上嘀粱,所以都指定為本機地址激挪;{port1}是集群中實例之間用于數據通信的端口辰狡;{port2}是集群中實例進行l(wèi)eader選舉時使用的通信端口。對于同一實例{port1}和{port2}是不可相同的垄分。對于同一臺機器部署多個實例的情況宛篇,不同實例的同一種端口也是需要區(qū)分的。
配置myid文件
前面提到的server.{X}配置項中的{X}就是一個實例的myid薄湿,它需要被寫在對應實例的{dataDir}/myid文件中叫倍。
下面需要在每一個實例指定的{dateDir}目錄下創(chuàng)建一個名為myid的文件,文件的內容就是一個數字豺瘤,對應server.{X}中的X吆倦。
比如,這里是這樣配置的:
在/var/lib/zookeeper-01/myid文件中寫入1炉奴;
在/var/lib/zookeeper-02/myid文件中寫入2逼庞;
在/var/lib/zookeeper-03/myid文件中寫入3。
創(chuàng)建啟動和停止的腳本
對于多個實例瞻赶,分別啟動和停止比較麻煩,可以寫一個腳本來自動完成這個工作派任。
start-zk-servers.sh的內容:
echo `/root/zookeeper-3.4.8-01/bin/zkServer.sh start`
echo `/root/zookeeper-3.4.8-02/bin/zkServer.sh start`
echo `/root/zookeeper-3.4.8-03/bin/zkServer.sh start`
stop-zk-servers.sh的內容:
echo `/root/zookeeper-3.4.8-01/bin/zkServer.sh stop`
echo `/root/zookeeper-3.4.8-02/bin/zkServer.sh stop`
echo `/root/zookeeper-3.4.8-03/bin/zkServer.sh stop`
啟動集群
運行啟動腳本:sh start-zk-servers.sh
默認地砸逊,在用戶目錄(~/)下面會生成Zookeeper的日志文件zookeeper.out
。從日志中可以看出leader選舉的過程和結果掌逛。
停止集群
運行停止腳本:sh stop-zk-servers.sh
連接Zookeeper
開頭提到了筆者用于實驗的Zookeeper集群部署在遠程的vps上师逸,下面用本地的Zookeeper客戶端連接一下試試。
在本地同樣下載Zookeeper的發(fā)行包豆混,并解壓篓像,進入目錄執(zhí)行下面的命令:(將{host}替換成遠程主機的IP,端口取集群中任意一個實例的clientPort)
bin/zkCli.sh -server {host}:2181
連上之后就可以對節(jié)點進行一些簡單的操作:
結語
由于剛接觸Zookeeper皿伺,對原理和配置的最佳實踐還不甚了解员辩,所以,這篇文章應當作筆者學習過程中的記錄鸵鸥,不一定適合生產環(huán)境奠滑,切記!