一、zookeeper介紹?
一、zookeeper 簡單介紹? 1.什么是集群? // 很多台服務器保持連接通訊狀態,並且所有的服務器做同一件事就稱之為集群 2.什么是zookeeper? 注冊中心就是zookeeper(eureka,consul)的別名 zookeeper是apache開源基金會下的一個頂級項目 zookeeper是一個致力於開發和維護的開源服務器,作用於項目中的協調和控制功能 場景: 空調壞了,學生就去找班主任說空調壞了,班主任也不會修空調,班主任覺得孟老師會修空調,結果孟老師也不會,孟老師最終給售后打電話,售后假設把空調修好了,最終學生達到了預期效果 學生就是需求者,售后是服務者,孟老師和班主任就是協調者 zookeeper從logo來看是動物園管理員,這個動物園中所有的動物都由zookeeper進行管理,管理了動物的衣食住行,zookeeper在最早的時候只適用於Hadoop的生態圈,在Hadoop的生態圈中所有的框架都是動物,zookeeper對他們進行管理,管理框架的健康(心跳),服務器的調用方和服務器的生產方,也就是說最終服務的客戶端不再直接向服務的服務器發送數據,首先客戶端先找到zookeeper,根據zookeeper的反饋再找服務器端 hadoop是大象 hbase是鯨魚 pig是豬 .... 在zookeeper中存放了大量的數據(非常有用),但是這些數據開發人員看不到,並且zookeeper會按照規定的時間對已經向自己注冊服務索要心跳, 根據觀察者模式,一旦檢測到狀態發生變化,最終向zookeeper注冊過的觀察者(服務器)要應對處理措施! /* 被觀察對象是------------->zookeeper 觀察對象是---------------->服務器 */ 3.zookeeper的應用場景: 在之前只適用於大數據,但是隨着web項目越來越大,發展越來越快,zookeeper已經完全適用於整個web項目,在web項目中仍然起着協調和控制的作用 zookeeper是以集群的形式存在,也就是說三台zookeeper做同一件事, /* 在官方文檔中說明,zookeeper以奇數台為穩定,並且以中間這一台為leader,也就是說zookeeper至少需要三台(不是一台,一台稱之為單節點) */ 為什么說以奇數台為穩定?? zookeeper是以一個leader帶領很多個follower完成的集群,並且奇數和選舉機制有關
二、Linux配置 zookeeper?
二、配置zookeeper? 1. 新建三台虛擬機 五步走 vim /etc/sysconfig/network vim /etc/hosts service iptables stop chkconfig iptables off reboot 2.配置jdk 2.1導入jdkjar包。 2.2配置java環境變量。 3.配置免秘鑰登錄 生成自己的公鑰 四次回車(都不能輸入密碼) /* ssh-keygen -t rsa ssh-keygen -t rsa ssh-keygen -t rsa ssh-keygen -t rsa ssh-keygen -t rsa */ 把自己的公鑰copy其他服務器上 另外兩台都需要copy!!! /* ssh-copy-id ip地址/hostname ssh-copy-id ip ssh-copy-id 192.168.11.116 ssh-copy-id haha */ 配置成功后,ssh 連接訪問。 /** ssh +另一條虛擬機的ip地址/名字 ssh haha ssh zookeeper ssh zookeeper */ 4解壓zookeeper tar -zxvf xxxxx 5.把conf目錄下的 [zoo-sample.cfg文件改名為zoo.cfg] 修改文件的命令: mv +需要修改的文件名 空格 修改后的文件名。 /* mv zoo-sample.cfg zoo.cfg mv zoo-sample.cfg zoo.cfg mv zoo-sample.cfg zoo.cfg mv zoo-sample.cfg zoo.cfg mv zoo-sample.cfg zoo.cfg mv zoo-sample.cfg zoo.cfg */ 6.修改dataDir參數(不是必須所要修改的,但是要求修改) 指向的文件就是zookeeper每一台節點的唯一標識(id),而且這個唯一標識不能重復!!!! 1.在zookeeper目錄下中創建文件夾data 獲取data的 pwd路徑。(pwd ) /* mkdir data cd data pwd 獲取路徑 */ 2.退出 ,在conf下修改 dataDir 修改為剛才所創建的data目錄的絕對路徑把dataDir修改為剛才所創建的data目錄的絕對路徑 /* vim dataDir 把dataDir修改為剛才所創建的data目錄的絕對路徑 dataDir=/home/apps/zookeeper-3.4.6/data */ 7.在zoo.cfg文件的末尾添加 /** server.1=zookeeper01:2888:3888 server.2=zookeeper02:2888:3888 server.3=zookeeper03:2888:3888 7.1 server.的數據就是每一台zookeeper的唯一標識 7.2 zookeeper01:HOSTNAME或者可以配置IP地址 7.3 2888:zookeeper集群之間通訊所用的端口號 7.4 3888:zookeeper集群的選舉leader端口號 */ 8.在之前創建data文件夾下創建myid文件 touch myid 9.寫入myid文件 vim myid 另外兩台分別寫入 2 和 3 它們是zookeeper的標識。 1 10.通過scp發送到另外兩台服務器上 語法 scp -r /home/apps/(需要發送的路徑) 空格 zookeeper02(目標的ip/hostname):/home/ (需要發送到的目標位置) 把zookeeper01 虛擬機上的 /home/apps/ 發送到 zookeeper02 的 :home/ 目錄下。 /* scp -r /home/apps/ zookeeper02:/home/ scp -r /home/apps/ zookeeper03:/home/ scp -r /home/apps/ zookeeper02:/home/ */ 將配java的配置環境也copy過去。 scp -r /etc/profile zookeeper01:/etc/ scp -r /etc/profile zookeeper01:/etc/ scp -r /etc/proflie 需要的虛擬機的ip:/etc/ (本機需要copy的地址) (需要copy到的虛擬機的地址) /* scp -r /etc/proflie zookeeper02:/etc/ scp -r /etc/proflie zookeeper03:/etc/ scp -r /etc/proflie haha:/etc/ */ 立即生效命令 source /etc/profile 嘗試了一下 不用也可以。不敢保證。。。 4.10.根據server.的數字分別修改myid文件 把zookeeper02修改為2 把zookeeper03修改為3 4.11.啟動zookeeper 在bin目錄中啟動 /* ./zkServer.sh start ./zkServer.sh start ./zkServer.sh start ./zkServer.sh start */ 看到以下信息說明啟動成功: JMX enabled by default Using config: /home/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg Starting zookeeper ... STARTED 4.12.分別檢測三台zookeeper服務器的狀態 在bin目錄中 /* ./zkServer.sh status ./zkServer.sh status */ 關閉 /* ./zkServer.sh stop ./zkServer.sh stop ./zkServer.sh stop */ leader 和 follower 老大 小弟 5.zookeeper的選舉機制 5.1 zookeeper采用的是Paxos算法實現的選舉機制 換句話說半數選舉機制 誰的server id大 誰就是大哥!!! 半數選舉 leader產生 該節點高32位會發生改變。 5.2zid 事物的id一共有64位, 分別高32 位 和 低32 位。 當leader宕機。所有服務器的zid 會自增。 自增的低32位 根據某個規則進行增加 高32位不變。 zid 的低32為越小,被選舉的可能性就越大,被操作的可能性就越大 /* zxid (低32 +高32位 合並) 越大被操作的可能就越大。 */