概述: 爲何要使用zookeeper?centos安裝配置zookeeper,zookeeper的主要實際運用場景有4種,java+dubbo+zookeeper實現分佈式服務.html
原文地址:http://www.maoyupeng.com/how-to-install-zookeeper-on-centos6.html前端
節選自夏天的森林的博文java
場景一: 有一組服務器向客戶端提供某種服務(例如:我前面作的分佈式網站的服務端,就是由四臺服務器組成的集羣,向前端集羣提供服務),咱們但願客戶端每次請求服務端均可以找到服務端集羣中某一臺服務器,這樣服務端就能夠向客戶端提供客戶端所需的服務。對於這種場景,咱們的程序中必定有一份這組服務器的列表,每次客戶端請求時候,都是從這份列表裏讀取這份服務器列表。那麼這分列表顯然不能存儲在一臺單節點的服務器上,不然這個節點掛掉了,整個集羣都會發生故障,咱們但願這份列表時高可用的。高可用的解決方案是:這份列表是分佈式存儲的,它是由存儲這份列表的服務器共同管理的,若是存儲列表裏的某臺服務器壞掉了,其餘服務器立刻能夠替代壞掉的服務器,而且能夠把壞掉的服務器從列表裏刪除掉,讓故障服務器退出整個集羣的運行,而這一切的操做又不會由故障的服務器來操做,而是集羣里正常的服務器來完成。這是一種主動的分佈式數據結構,可以在外部狀況發生變化時候主動修改數據項狀態的數據機構。Zookeeper框架提供了這種服務。這種服務名字就是:統一命名服務,它和javaEE裏的JNDI服務很像。算法
場景二: 分佈式鎖服務。當分佈式系統操做數據,例如:讀取數據、分析數據、最後修改數據。在分佈式系統裏這些操做可能會分散到集羣裏不一樣的節點上,那麼這時候就存在數據操做過程當中一致性的問題,若是不一致,咱們將會獲得一個錯誤的運算結果,在單一進程的程序裏,一致性的問題很好解決,可是到了分佈式系統就比較困難,由於分佈式系統裏不一樣服務器的運算都是在獨立的進程裏,運算的中間結果和過程還要經過網絡進行傳遞,那麼想作到數據操做一致性要困難的多。Zookeeper提供了一個鎖服務解決了這樣的問題,能讓咱們在作分佈式數據運算時候,保證數據操做的一致性。vim
場景三: 配置管理。在分佈式系統裏,咱們會把一個服務應用分別部署到n臺服務器上,這些服務器的配置文件是相同的(例如:我設計的分佈式網站框架裏,服務端就有4臺服務器,4臺服務器上的程序都是同樣,配置文件都是同樣),若是配置文件的配置選項發生變化,那麼咱們就得一個個去改這些配置文件,若是咱們須要改的服務器比較少,這些操做還不是太麻煩,若是咱們分佈式的服務器特別多,好比某些大型互聯網公司的hadoop集羣有數千臺服務器,那麼更改配置選項就是一件麻煩並且危險的事情。這時候zookeeper就能夠派上用場了,咱們能夠把zookeeper當成一個高可用的配置存儲器,把這樣的事情交給zookeeper進行管理,咱們將集羣的配置文件拷貝到zookeeper的文件系統的某個節點上,而後用zookeeper監控全部分佈式系統裏配置文件的狀態,一旦發現有配置文件發生了變化,每臺服務器都會收到zookeeper的通知,讓每臺服務器同步zookeeper裏的配置文件,zookeeper服務也會保證同步操做原子性,確保每一個服務器的配置文件都能被正確的更新。centos
場景四: 爲分佈式系統提供故障修復的功能。集羣管理是很困難的,在分佈式系統里加入了zookeeper服務,能讓咱們很容易的對集羣進行管理。集羣管理最麻煩的事情就是節點故障管理,zookeeper可讓集羣選出一個健康的節點做爲master,master節點會知道當前集羣的每臺服務器的運行情況,一旦某個節點發生故障,master會把這個狀況通知給集羣其餘服務器,從而從新分配不一樣節點的計算任務。Zookeeper不只能夠發現故障,也會對有故障的服務器進行甄別,看故障服務器是什麼樣的故障,若是該故障能夠修復,zookeeper能夠自動修復或者告訴系統管理員錯誤的緣由讓管理員迅速定位問題,修復節點的故障。你們也許還會有個疑問,master故障了,那怎麼辦了?zookeeper也考慮到了這點,zookeeper內部有一個「選舉領導者的算法」,master能夠動態選擇,當master故障時候,zookeeper能立刻選出新的master對集羣進行管理。bash
我使用zookeeper更可能是關聯場景一的.這裏就很少介紹zookeeper了.有興趣的朋友能夠自行去了解,咱們看看下面的內容,瞭解下怎麼安裝zookeeper吧.....服務器
查看本機ip,且記住ip添加一條記錄到hosts,以下圖,個人ip是10.211.55.27網絡
# 編輯hosts vim /etc/hosts # 未修改前 127.0.0.1 localhost ::1 localhost # 修改後 127.0.0.1 localhost # 添加一行,[ip name],隨便起個名字:mao-101 10.211.55.27 mao-101 ::1 localhost
zookeeper-3.4.6版本百度雲盤下載 : http://pan.baidu.com/s/1miwdKRA數據結構
將下載到的zookeeper-3.4.6.tar.gz安裝文件上傳到服務器的/home
目錄,解壓後進入根目錄建立data
文件夾和logs
文件夾
cd /home tar -zxvf zookeeper-3.4.6.tar.gz cd zookeeper-3.4.6 mkdir data mkdir logs
進入conf目錄,將zoo_sample.cfg重命名或拷貝一份,且命名爲zoo.cfg
# 重命名 cd /home/zookeeper-3.4.6/conf/ && mv zoo_sample.cfg zoo.cfg # 拷貝 cd /home/zookeeper-3.4.6/conf/ && cp zoo_sample.cfg zoo.cfg
修改zoo.cfg配置
tickTime=2000 initLimit=10 syncLimit=5 # 指向zookeeper目錄下的data目錄 dataDir=/home/zookeeper-3.4.6/data # 增長日誌目錄 dataLogDir=/home/zookeeper-3.4.6/logs clientPort=2181 #添加服務通信端口以及程序通信端口 #mao-101咱們已經在 hosts裏面配置過 server.1=mao-101:2888:3888
在配置文件中,dataDir配置的目錄下,建立myid文件,內容爲1
cd /home/zookeeper-3.4.6/data vim myid # 加入內容:1 保存退出vim 1
編輯文件 /etc/profile
,添加以下:
export ZOOKEEPER_HOME=/home/zookeeper-3.4.6 export PATH=$ZOOKEEPER_HOME/bin:$PATH
當即生效
source /etc/profile
sudo su chkconfig iptables on service iptables start #編輯iptables vim /etc/sysconfig/iptables #增長如下內容 -A INPUT -m state --state NEW -m tcp -p tcp --dport 2181 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 2888 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 3888 -j ACCEPT # 重啓防火牆並查看端口狀態 service iptables restart #狀態以下圖 service iptables status
zkServer.sh start # 輸出QuorumPeerMain就證實啓動成功 jps
// 切換到init.d目錄 cd /etc/rc.d/init.d // 建立zookeeper文件並更新權限 touch zookeeper && chmod +x zookeeper // 編輯zookeeper文件,並添加以下內容 vim zookeeper ====下面是文件內容===== #!/bin/bash #chkconfig:2345 20 90 #description:zookeeper #processname:zookeeper export JAVA_HOME=/usr/local/jdk7 export PATH=$JAVA_HOME/bin:$PATH case $1 in start) su root /home/zookeeper-3.4.6/bin/zkServer.sh start;; stop) su root /home/zookeeper-3.4.6/bin/zkServer.sh stop;; status) su root /home/zookeeper-3.4.6/bin/zkServer.sh status;; restart) su root /home/zookeeper-3.4.6/bin/zkServer.shrestart;; *) echo "requirestart|stop|status|restart" ;; esac // 添加到開機啓動 chkconfig zookeeper on chkconfig --add zookeeper // 啓動或中止 service zookeeper start | stop | restart