1.1裳凸、ZooKeeper概述
Zookeeper是一個(gè)分布式協(xié)調(diào)服務(wù)的開(kāi)源框架,有兩個(gè)最基本的功能:存儲(chǔ)小數(shù)據(jù)和監(jiān)聽(tīng)機(jī)制.,例如:分布式鎖犀盟、分布式配置管理螃征、集群選主等。
1>相同的數(shù)據(jù)副本(數(shù)據(jù)一致)
2>全局有序和偏序 全局有序是指如果在一臺(tái)服務(wù)器上消息a在消息b前發(fā)布描扯,則在所有Server上消息a都將在消息b前被發(fā)布;偏序是指如果一個(gè)消息b在消息a后被同一個(gè)發(fā)送者發(fā)布趟薄,a必將排在b前面绽诚。
3>一份數(shù)據(jù),會(huì)在所有機(jī)器上都保存一份
1>eader:?Zookeeper集群工作的核心 事務(wù)請(qǐng)求(寫(xiě)操作)的唯一調(diào)度和處理者恩够,保證集群事務(wù)處理的順序性;集群內(nèi)部各個(gè)服務(wù)器的調(diào)度者羡铲。
2>Follower:?處理客戶(hù)端非事務(wù)(讀操作)請(qǐng)求蜂桶,轉(zhuǎn)發(fā)寫(xiě)請(qǐng)求給Leader;參與集群Leader選舉投票也切。
3>Observer: 觀察者角色扑媚,觀察Zookeeper集群的最新?tīng)顟B(tài)變化并將這些狀態(tài)同步過(guò)來(lái),其對(duì)于非事務(wù)請(qǐng)求可以進(jìn)行獨(dú)立處理贾费,對(duì)于事務(wù)請(qǐng)求钦购,則會(huì)轉(zhuǎn)發(fā)給Leader 服務(wù)器進(jìn)行處理。不會(huì)參與任何形式的投票只提供非事務(wù)服務(wù)褂萧,通常用于在不影響集群事務(wù)押桃、處理能力的前提下提升集群的非事務(wù)處理能力。
=============================================
Zookeeper集群搭建指的是ZooKeeper分布式模式安裝唱凯。通常由2n+1臺(tái)servers組成。這是因?yàn)闉榱吮WCLeader選舉(基于Paxos算法的實(shí)現(xiàn))能過(guò)得到多數(shù)的支持谎痢,所以ZooKeeper集群的數(shù)量一般為奇數(shù)磕昼。
Zookeeper運(yùn)行需要java環(huán)境,所以需要提前安裝jdk节猿。
1票从、檢查node1、node2滨嘱、node3的當(dāng)前系統(tǒng)中峰鄙,存不存在已經(jīng)安裝好的java,如果有那就卸載,沒(méi)有就不用
rpm -qa|grepjava
2太雨、安裝jdk?在node1吟榴、node2、node3機(jī)器上囊扳,創(chuàng)建目錄:/export/server; (上傳安裝包到FileZilla上) 上傳jdk的壓縮包到node1機(jī)器的 /export/server目錄中吩翻,并且解壓
cd /export/servertar -zxvf jdk-8u65-linux-x64.tar.gz
vi /etc/profile添加:exportJAVA_HOME=/export/server/jdk1.8.0_65exportPATH=$JAVA_HOME/bin:$PATH
配置完成,刷新環(huán)境變量:
source /etc/profile
node1的/etc/profile文件和jdk的解壓包兜看,發(fā)送給node2和node3,不要忘記在node2和node3中刷新配置
scp -r jdk1.8.0_65root@node2:/export/server/scp -r jdk1.8.0_65root@node3:/export/server/scp -r /etc/profile root@node2:/etc/scp -r /etc/profile root@node3:/etc/
3狭瞎、安裝zookeeper集群?對(duì)于安裝leader+follower模式的集群,過(guò)程如下:
1细移、把壓縮包,解壓到這個(gè)路徑:/export/server/zookeeper熊锭。 解壓后葫哗,修改解壓路徑下的conf目錄中的zoo_sample.cfg文件,把這個(gè)文件改名為zoo.cfg
2球涛、在zoo.cfg文件的最后劣针,添加如下內(nèi)容:
dataDir=/export/data/zookeeper/dataserver.1=node1:2888:3888server.2=node2:2888:3888server.3=node3:2888:3888
3、修改環(huán)境變量
vi /etc/profileexportZOOKEEPER_HOME=/export/server/zookeeperexportPATH=$PATH:$ZOOKEEPER_HOME/bin
改完后,記得刷新
source /etc/profile
4,創(chuàng)建文件夾并且設(shè)置機(jī)器的myid
mkdir-p /export/data/zookeeper/dataecho1> /export/data/zookeeper/data/myid
5亿扁、以上流程捺典,分別在node2和node3機(jī)器上,重復(fù)做一遍从祝。
mkdir-p /export/data/zookeeper/dataecho2> /export/data/zookeeper/data/myidmkdir-p /export/data/zookeeper/dataecho3> /export/data/zookeeper/data/myid
6,以上5個(gè)步驟就可以搭建成一個(gè)集群了襟己。
===================================================
7,技巧,如果不想每臺(tái)機(jī)器都上傳壓縮包牍陌,然后再解壓安裝擎浴。
直接把node1的解壓、配置好的zookeeper毒涧,發(fā)送到node2和node3中贮预。命令如下:
發(fā)送給node2:
scp -r /export/server/zookeeper root@node2:/export/server/
發(fā)送給node3:
scp -r /export/server/zookeeper root@node3:/export/server/
8,啟動(dòng)集群?前提:關(guān)閉所有機(jī)器的防火墻
關(guān)閉:chkconfig iptablesoff
關(guān)閉防火墻的方法為:
1.永久性生效開(kāi)啟:chkconfig iptableson關(guān)閉:chkconfig iptables off2.即時(shí)生效,重啟后失效開(kāi)啟:service iptablesstart關(guān)閉:service iptablesstop
啟動(dòng)集群的第一種方法?1.分別啟動(dòng): node1:
zkServer.shstart
node2:
zkServer.shstart
node3:
zkServer.shstart
2,寫(xiě)腳本,一鍵啟動(dòng),代碼如下: vi?start.sh
#! /bin/bashecho"start zkServer..."foriin1 2 3dossh node$i"source /etc/profile: /export/server/zookeeper/bin/zkServer.sh start"done
記得加載權(quán)限:
chmod +x start.sh
最后運(yùn)行
9,驗(yàn)證?1,在node1,node2,node3,分別執(zhí)行:
jps
zookeeper的進(jìn)程已經(jīng)出來(lái)了
2,在三臺(tái)機(jī)器上分別執(zhí)行:
zkServer.shstatus
發(fā)現(xiàn)三者的角色
10,停止集群?在3臺(tái)機(jī)器上都執(zhí)行:
zkServer.shstop
=================================