zookeeper介绍及集群的搭建(利用虚拟机)
?
ZooKeeper特性
- 1. 全局?jǐn)?shù)據(jù)一致:集群中每個(gè)服務(wù)器保存一份相同的數(shù)據(jù)副本,client 無(wú)論連接到哪個(gè)服務(wù)器,展示的數(shù)據(jù)都是一致的,這是最重要的特征。
- 2. 可靠性:如果消息被其中一臺(tái)服務(wù)器接受,那么將被所有的服務(wù)器接受。
- 3. 順序性:包括全局有序和偏序兩種:全局有序是指如果在一臺(tái)服務(wù)器上消息 a 在消息 b 前發(fā)布,則在所有 Server 上消息 a 都將在消息 b 前被發(fā)布;偏序是指如果一個(gè)消息 b 在消息 a后被同一個(gè)發(fā)送者發(fā)布,a 必將排在 b 前面。
- 4. 數(shù)據(jù)更新原子性:一次數(shù)據(jù)更新要么成功(半數(shù)以上節(jié)點(diǎn)成功),要么失敗,不存在中間狀態(tài)。
- 5. 實(shí)時(shí)性:Zookeeper 保證客戶端將在一個(gè)時(shí)間間隔范圍內(nèi)獲得服務(wù)器的更新信息,或者服務(wù)器失效的信息。
?
ZooKeeper集群的角色
Leader:
Zookeeper 集群工作的核心,事務(wù)請(qǐng)求(寫(xiě)操作)的唯一調(diào)度和處理者,保證集群事務(wù)處理的順序性;集群內(nèi)部各個(gè)服務(wù)器的調(diào)度者。對(duì)于 create,setData,delete 等有寫(xiě)操作的請(qǐng)求,則需要統(tǒng)一轉(zhuǎn)發(fā)給leader 處理,leader 需要決定編號(hào)、執(zhí)行操作,這個(gè)過(guò)程稱(chēng)為一個(gè)事務(wù)。
Follower:
處理客戶端非事務(wù)(讀操作)請(qǐng)求,轉(zhuǎn)發(fā)事務(wù)請(qǐng)求給 Leader;參與集群 Leader 選舉投票。
?
此外,針對(duì)訪問(wèn)量比較大的 zookeeper 集群,還可新增觀察者角色。
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ù)處理能力。
?
主要用來(lái)管理solr集群中的相關(guān)配置信息和集群的運(yùn)行狀態(tài), 協(xié)助solr進(jìn)行主節(jié)點(diǎn)的選舉。
?
準(zhǔn)備:zookeeper的安裝包? 三臺(tái)linux虛擬機(jī)? 虛擬機(jī)的安裝
修改三臺(tái)虛擬機(jī)的hosts文件:vi /etc/hosts 添加如下內(nèi)容: 192.168.44.28 node-01 192.168.44.29 node-02 192.168.44.30 node-03 注意: 添加時(shí), 前面ip地址一定是自己的三臺(tái)linux的ip地址 切記不要搞錯(cuò)了cd /export/software/ rz #此時(shí)選擇zookeeper的壓縮包進(jìn)行上傳
tar -zxf zookeeper-3.4.9.tar.gz -C /export/servers/ cd /export/servers/
cd /export/servers/zookeeper-3.4.9/conf mv zoo_sample.cfg zoo.cfg vi zoo.cfg 修改后, 在配置文件的底部, 添加如下內(nèi)容 server.1=node-01:2888:3888 server.2=node-02:2888:3888 server.3=node-03:2888:3888
更改后配置文件整體內(nèi)容如下:(如果擔(dān)心修改錯(cuò)誤, 可以直接將zoo.cfg中的內(nèi)容全部刪除, 復(fù)制以下內(nèi)容即可)
# The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/export/data/zk # the port at which the clients will connect clientPort=2181 # the maximum number of client connections. # increase this if you need to handle more clients #maxClientCnxns=60 # # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retain in dataDir #autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature #autopurge.purgeInterval=1#zookeeper集群配置 server.1=node-01:2888:3888 server.2=node-02:2888:3888 server.3=node-03:2888:3888cd /export/servers/ scp -r zookeeper-3.4.9/ root@node-02:$PWD //將zookeeper復(fù)制到node-02的同級(jí)目錄下 scp -r zookeeper-3.4.9/ root@node-03:$PWD //將zookeeper復(fù)制到node-03的同級(jí)目錄下
發(fā)送完成后,在其他兩臺(tái)主機(jī)查看, 是否已經(jīng)成功接收到
cd /export/servers llnode-01:執(zhí)行的命令 mkdir -p /export/data/zk //這個(gè)路徑和上面修改配置文件dataDir一致 echo "1" > /export/data/zk/myid cat /export/data/zk/myid //此命令用于查看此文件有沒(méi)有正確寫(xiě)入 1node-02:執(zhí)行的命令 mkdir -p /export/data/zk echo "2" > /export/data/zk/myid cat /export/data/zk/myid //此命令用于查看此文件有沒(méi)有正確寫(xiě)入 2node-03:執(zhí)行的命令 mkdir -p /export/data/zk echo "3" > /export/data/zk/myid cat /export/data/zk/myid //此命令用于查看此文件有沒(méi)有正確寫(xiě)入 3
cd /export/servers/zookeeper-3.4.9/bin/ ./zkServer.sh start
一個(gè)leader 其余的為follower
?
1. 當(dāng)?shù)谝慌_(tái)(id=1),啟動(dòng)后, 由于目前自有自己,故會(huì)把票投給自己 2. 當(dāng)?shù)诙_(tái)(id=2),啟動(dòng)后, 由于目前已經(jīng)又二臺(tái)啟動(dòng), 這時(shí)候會(huì)將票投給id最大的機(jī)器, 此時(shí)三臺(tái)中已經(jīng)有二臺(tái)啟動(dòng), 數(shù)量過(guò)半, 第二臺(tái)理所應(yīng)當(dāng)?shù)某蔀榱薼eader 3. 當(dāng)?shù)谌_(tái)(id=3),啟動(dòng)后, 雖然id=3為最大, 但是由于leader已經(jīng)產(chǎn)生, 故只能擔(dān)任follower
當(dāng)下一次在重新啟動(dòng)時(shí), 又會(huì)恢復(fù)選舉,此時(shí)誰(shuí)的數(shù)據(jù)多, 誰(shuí)為leader, 如果數(shù)據(jù)都一樣, 那么看id誰(shuí)最大,同時(shí)一般選舉過(guò)半,就會(huì)產(chǎn)生leader
?
還有一種選舉方式是非全新集群選舉:
對(duì)于運(yùn)行正常的 zookeeper 集群,中途有機(jī)器 down 掉,需要重新選舉時(shí),選舉過(guò)程就需要加入數(shù)據(jù) ID、服務(wù)器 ID 和邏輯時(shí)鐘。 數(shù)據(jù) ID:數(shù)據(jù)新的 version 就大,數(shù)據(jù)每次更新都會(huì)更新 version。 服務(wù)器 ID:就是我們配置的 myid 中的值,每個(gè)機(jī)器一個(gè)。 邏輯時(shí)鐘:這個(gè)值從 0 開(kāi)始遞增,每次選舉對(duì)應(yīng)一個(gè)值。 如果在同一次選舉中,這個(gè)值是一致的。 這樣選舉的標(biāo)準(zhǔn)就變成: 1、邏輯時(shí)鐘小的選舉結(jié)果被忽略,重新投票; 2、統(tǒng)一邏輯時(shí)鐘后,數(shù)據(jù) id 大的勝出; 3、數(shù)據(jù) id 相同的情況下,服務(wù)器 id 大的勝出; 根據(jù)這個(gè)規(guī)則選出 leader。?
?
在zookeeper集群的基礎(chǔ)上,搭建solrCloud
zookeeper偽集群的搭建
轉(zhuǎn)載于:https://www.cnblogs.com/blazeZzz/p/9442709.html
總結(jié)
以上是生活随笔為你收集整理的zookeeper介绍及集群的搭建(利用虚拟机)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: win7 IIS7环境下部署PHP 7.
- 下一篇: 在ionic/cordova中使用百度地