1.1、ZooKeeper概述
Zookeeper是一個分布式協調服務的開源框架,有兩個最基本的功能:存儲小數據和監聽機制.,例如:分布式鎖、分布式配置管理、集群選主等。
1>相同的數據副本(數據一致)
2>全局有序和偏序 全局有序是指如果在一臺服務器上消息a在消息b前發布,則在所有Server上消息a都將在消息b前被發布;偏序是指如果一個消息b在消息a后被同一個發送者發布,a必將排在b前面。
3>一份數據,會在所有機器上都保存一份
1>eader:?Zookeeper集群工作的核心 事務請求(寫操作)的唯一調度和處理者,保證集群事務處理的順序性;集群內部各個服務器的調度者。
2>Follower:?處理客戶端非事務(讀操作)請求,轉發寫請求給Leader;參與集群Leader選舉投票。
3>Observer: 觀察者角色,觀察Zookeeper集群的最新狀態變化并將這些狀態同步過來,其對于非事務請求可以進行獨立處理,對于事務請求,則會轉發給Leader 服務器進行處理。不會參與任何形式的投票只提供非事務服務,通常用于在不影響集群事務、處理能力的前提下提升集群的非事務處理能力。
=============================================
Zookeeper集群搭建指的是ZooKeeper分布式模式安裝。通常由2n+1臺servers組成。這是因為為了保證Leader選舉(基于Paxos算法的實現)能過得到多數的支持,所以ZooKeeper集群的數量一般為奇數。
Zookeeper運行需要java環境,所以需要提前安裝jdk。
1、檢查node1、node2、node3的當前系統中,存不存在已經安裝好的java,如果有那就卸載,沒有就不用
rpm -qa|grepjava
2、安裝jdk?在node1、node2、node3機器上,創建目錄:/export/server; (上傳安裝包到FileZilla上) 上傳jdk的壓縮包到node1機器的 /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
配置完成,刷新環境變量:
source /etc/profile
node1的/etc/profile文件和jdk的解壓包,發送給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集群?對于安裝leader+follower模式的集群,過程如下:
1、把壓縮包,解壓到這個路徑:/export/server/zookeeper。 解壓后,修改解壓路徑下的conf目錄中的zoo_sample.cfg文件,把這個文件改名為zoo.cfg
2、在zoo.cfg文件的最后,添加如下內容:
dataDir=/export/data/zookeeper/dataserver.1=node1:2888:3888server.2=node2:2888:3888server.3=node3:2888:3888
3、修改環境變量
vi /etc/profileexportZOOKEEPER_HOME=/export/server/zookeeperexportPATH=$PATH:$ZOOKEEPER_HOME/bin
改完后,記得刷新
source /etc/profile
4,創建文件夾并且設置機器的myid
mkdir-p /export/data/zookeeper/dataecho1> /export/data/zookeeper/data/myid
5、以上流程,分別在node2和node3機器上,重復做一遍。
mkdir-p /export/data/zookeeper/dataecho2> /export/data/zookeeper/data/myidmkdir-p /export/data/zookeeper/dataecho3> /export/data/zookeeper/data/myid
6,以上5個步驟就可以搭建成一個集群了。
===================================================
7,技巧,如果不想每臺機器都上傳壓縮包,然后再解壓安裝。
直接把node1的解壓、配置好的zookeeper,發送到node2和node3中。命令如下:
發送給node2:
scp -r /export/server/zookeeper root@node2:/export/server/
發送給node3:
scp -r /export/server/zookeeper root@node3:/export/server/
8,啟動集群?前提:關閉所有機器的防火墻
關閉:chkconfig iptablesoff
關閉防火墻的方法為:
1.永久性生效開啟:chkconfig iptableson關閉:chkconfig iptables off2.即時生效,重啟后失效開啟:service iptablesstart關閉:service iptablesstop
啟動集群的第一種方法?1.分別啟動: node1:
zkServer.shstart
node2:
zkServer.shstart
node3:
zkServer.shstart
2,寫腳本,一鍵啟動,代碼如下: vi?start.sh
#! /bin/bashecho"start zkServer..."foriin1 2 3dossh node$i"source /etc/profile: /export/server/zookeeper/bin/zkServer.sh start"done
記得加載權限:
chmod +x start.sh
最后運行
9,驗證?1,在node1,node2,node3,分別執行:
jps
zookeeper的進程已經出來了
2,在三臺機器上分別執行:
zkServer.shstatus
發現三者的角色
10,停止集群?在3臺機器上都執行:
zkServer.shstop
=================================