zookeeper簡(jiǎn)介
Zookeeper是一個(gè)分布式協(xié)調(diào)服務(wù);就是為用戶的分布式應(yīng)用程序提供協(xié)調(diào)服務(wù)
A、zookeeper是為別的分布式程序服務(wù)的
B、Zookeeper本身就是一個(gè)分布式程序(只要有半數(shù)以上節(jié)點(diǎn)存活,zk就能正常服務(wù))
C、Zookeeper所提供的服務(wù)涵蓋:主從協(xié)調(diào)、服務(wù)器節(jié)點(diǎn)動(dòng)態(tài)上下線、統(tǒng)一配置管理、分布式共享鎖、統(tǒng)一名稱服務(wù)……
D、雖然說可以提供各種服務(wù),但是zookeeper在底層其實(shí)只提供了兩個(gè)功能:
管理(存儲(chǔ),讀取)用戶程序提交的數(shù)據(jù);
并為用戶程序提供數(shù)據(jù)節(jié)點(diǎn)監(jiān)聽服務(wù);
Zookeeper集群的角色: Leader 和 follower (Observer)
只要集群中有半數(shù)以上節(jié)點(diǎn)存活,集群就能提供服務(wù)
1、zookeeper的安裝
這里我準(zhǔn)備了一個(gè)純凈的linux來進(jìn)行安裝,另外zookeeper是java開發(fā)的所以先裝好jdk(1.7及以上)。
1、將zookeeper-3.4.6.tar.gz上傳到/root目錄下。
2、創(chuàng)建apps文件夾,將zookeeper-3.4.6.tar.gz解壓到apps文件夾下。
[root@localhost ~]# ll
總用量 17312
-rw-------. 1 root root 1131 9月 12 03:59 anaconda-ks.cfg
-rw-r--r--. 1 root root 12526 9月 12 03:59 install.log
-rw-r--r--. 1 root root 3482 9月 12 03:59 install.log.syslog
-rw-r--r--. 1 root root 17699306 6月 20 15:55 zookeeper-3.4.6.tar.gz
[root@localhost ~]# mkdir apps
[root@localhost ~]# tar -zxvf zookeeper-3.4.6.tar.gz -C apps/
3、進(jìn)入apps/zookeeper-3.4.6.tar.gz/conf文件夾,復(fù)制zoo_example.cfg改名為zoo.cfg
[root@localhost apps]# ll
總用量 4
drwxr-xr-x. 10 1000 1000 4096 2月 20 2014 zookeeper-3.4.6
[root@localhost apps]# cd zookeeper-3.4.6/conf
[root@localhost conf]# ll
總用量 12
-rw-rw-r--. 1 1000 1000 535 2月 20 2014 configuration.xsl
-rw-rw-r--. 1 1000 1000 2161 2月 20 2014 log4j.properties
-rw-rw-r--. 1 1000 1000 922 2月 20 2014 zoo_sample.cfg
[root@localhost conf]# cp zoo_sample.cfg zoo.cfg
[root@localhost conf]# ll
總用量 16
-rw-rw-r--. 1 1000 1000 535 2月 20 2014 configuration.xsl
-rw-rw-r--. 1 1000 1000 2161 2月 20 2014 log4j.properties
-rw-r--r--. 1 root root 922 9月 12 18:05 zoo.cfg
-rw-rw-r--. 1 1000 1000 922 2月 20 2014 zoo_sample.cfg
4、修改配置文件zoo.cfg,這里只修改數(shù)據(jù)存儲(chǔ)文件夾位置

5、創(chuàng)建文件夾 /root/zkdata
[root@localhost conf]# cd /root
[root@localhost ~]# mkdir zkdata
[root@localhost ~]# ll
總用量 17320
-rw-------. 1 root root 1131 9月 12 03:59 anaconda-ks.cfg
drwxr-xr-x. 3 root root 4096 9月 12 18:04 apps
-rw-r--r--. 1 root root 12526 9月 12 03:59 install.log
-rw-r--r--. 1 root root 3482 9月 12 03:59 install.log.syslog
drwxr-xr-x. 2 root root 4096 9月 12 18:12 zkdata
-rw-r--r--. 1 root root 17699306 6月 20 15:55 zookeeper-3.4.6.tar.gz
6、進(jìn)入/root/zookeeper-3.4.6/bin,啟動(dòng)zookeeper并且查看是否啟動(dòng)成功。
[root@localhost bin]# ll
總用量 36
-rwxr-xr-x. 1 1000 1000 238 2月 20 2014 README.txt
-rwxr-xr-x. 1 1000 1000 1937 2月 20 2014 zkCleanup.sh
-rwxr-xr-x. 1 1000 1000 1049 2月 20 2014 zkCli.cmd
-rwxr-xr-x. 1 1000 1000 1534 2月 20 2014 zkCli.sh
-rwxr-xr-x. 1 1000 1000 1333 2月 20 2014 zkEnv.cmd
-rwxr-xr-x. 1 1000 1000 2696 2月 20 2014 zkEnv.sh
-rwxr-xr-x. 1 1000 1000 1084 2月 20 2014 zkServer.cmd
-rwxr-xr-x. 1 1000 1000 5742 2月 20 2014 zkServer.sh
[root@localhost bin]# ./zkServer.sh start
JMX enabled by default
Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@localhost bin]# ./zkServer.sh status
JMX enabled by default
Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: standalone
到這就說明啟動(dòng)成功了。但是實(shí)際有可能會(huì)出現(xiàn)一些問題。比如查看狀態(tài)就經(jīng)??吹轿磫?dòng)成功
[root@itheima32 bin]# ./zkServer.sh status
JMX enabled by default
Using config: /usr/zookeeper-3.4.6/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
先關(guān)閉防火墻試試
[root@itheima32 bin]# service iptables stop
iptables:清除防火墻規(guī)則: [確定]
iptables:將鏈設(shè)置為政策 ACCEPT:filter [確定]
iptables:正在卸載模塊: [確定]
或者
chkconfig iptables off(永久關(guān)閉(開機(jī)不啟動(dòng)防火墻))
如果不行,那么查看日志吧。
[root@localhost bin]# cat zookeeper.out
如果出現(xiàn)了java.net.BindException: Address already in use
地址被占用,那么先查看是否被占用,占用了則殺死進(jìn)程再啟動(dòng),建議去/root/zkdata下刪除zookeeper_server.pid。

2、zookeeper的集群
zookeeper的安裝很簡(jiǎn)單,zookeeper的集群也不難,主要還是改配置,準(zhǔn)備三個(gè)純凈版的linux,還是得裝好jdk配置好環(huán)境
可以使用前面用的linux,把a(bǔ)pps文件夾和zkdata文件夾都刪了即可。然后克隆兩個(gè),克隆了一定需要修改ip地址。但是可能會(huì)出現(xiàn)下面的問題。
(1)、查看ip的話看不到eth0只顯示127.0.0.1,出現(xiàn)這種情況使用以下命令
ifup eth0 ifconfig up eth0
(2)、如果使用上面的命令出現(xiàn)了device eth0 does not seem to be present, delaying initialization問題。可以使用下面兩個(gè)步驟解決。
第一步:刪除mac地址


第二步:刪除70-persistentce-net.rules

這個(gè)文件綁定了網(wǎng)卡和mac地址,所以換了網(wǎng)卡以后MAC地址變了,然后直接刪除重啟,它會(huì)自動(dòng)生成個(gè)。
重啟后再用ifup eth0 ifconfig up eth0命令就能看到了。
zookeeper的集群
1、首先使用的是192.168.25.126這臺(tái)服務(wù)器,前面6步與zookeeper安裝一致,唯一區(qū)別就是配置文件修改不一樣

注:2888是leader與follower之間通信的端口,3888是投票使用的端口(數(shù)字不做要求,但應(yīng)避免沖突)。
2、將配置好的apps下的zookeeper傳到另外兩臺(tái)linux
[root@localhost ~]# scp -r apps 192.168.25.127:/root
root@192.168.25.127's password:
...
[root@localhost ~]# scp -r apps 192.168.25.125:/root
root@192.168.25.127's password:
...
3、zkdata文件夾下創(chuàng)建myid文件設(shè)置值為2
[root@localhost zkdata]# echo 2 > myid
[root@localhost zkdata]# cat myid
2
4、分別切換至192.168.25.127和192.168.25.125兩臺(tái)服務(wù)器,同樣創(chuàng)建zkdata,zkdata下創(chuàng)建myid文件設(shè)置值分別為1,3。
注意:myid里面設(shè)置的值一定要與配置文件里設(shè)定的一致。
5、再分別啟動(dòng)三條服務(wù)器,查看是否啟動(dòng)成功
[root@localhost bin]# ./zkServer.sh status
JMX enabled by default
Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower
[root@localhost bin]# ./zkServer.sh status
JMX enabled by default
Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: leader
[root@localhost bin]# ./zkServer.sh status
JMX enabled by default
Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower
一個(gè)leader兩個(gè)follower
如果啟動(dòng)的了查看狀態(tài)發(fā)現(xiàn)沒有啟動(dòng)成功。除了zookeeper安裝時(shí)候出現(xiàn)的問題,這里主要的問題就是zkdata文件夾下的myid的值寫的跟配置文件里面不一致,這個(gè)時(shí)候會(huì)出現(xiàn)ConnectionException:拒絕連接的異常,檢查修改一下。如果是地址被占用那么就用上面介紹的方法。