zookeeper介紹及集群的搭建(利用虛擬機)

ZooKeeper

?   ZooKeeper是一個分布式的,開放源碼(apache)的分布式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase、dubbox、kafka的重要組件。它主要用來解決分布式集群中應用系統的一致性問題,例如怎樣避免同時操作同一數據造成臟讀的問題,提供的功能包括:配置維護、域名服務、分布式同步、組服務等。

  其本質是一個分布式的小文件存儲系統,這個文件系統是樹形的,每個節點叫做znode,每個znode都有路徑和存儲的值(也就是同時具有文件夾和文件的作用)。

?

ZooKeeper特性

  • 1. 全局數據一致:集群中每個服務器保存一份相同的數據副本,client 無論連接到哪個服務器,展示的數據都是一致的,這是最重要的特征。
  • 2. 可靠性:如果消息被其中一臺服務器接受,那么將被所有的服務器接受。
  • 3. 順序性:包括全局有序和偏序兩種:全局有序是指如果在一臺服務器上消息 a 在消息 b 前發布,則在所有 Server 上消息 a 都將在消息 b 前被發布;偏序是指如果一個消息 b 在消息 a后被同一個發送者發布,a 必將排在 b 前面。
  • 4. 數據更新原子性:一次數據更新要么成功(半數以上節點成功),要么失敗,不存在中間狀態。
  • 5. 實時性:Zookeeper 保證客戶端將在一個時間間隔范圍內獲得服務器的更新信息,或者服務器失效的信息。

?

ZooKeeper集群的角色

Leader:
  Zookeeper 集群工作的核心,事務請求(寫操作)的唯一調度和處理者,保證集群事務處理的順序性;集群內部各個服務器的調度者。對于 create,setData,delete 等有寫操作的請求,則需要統一轉發給leader 處理,leader 需要決定編號、執行操作,這個過程稱為一個事務。

Follower:
  處理客戶端非事務(讀操作)請求,轉發事務請求給 Leader;參與集群 Leader 選舉投票。

?

此外,針對訪問量比較大的 zookeeper 集群,還可新增觀察者角色。

Observer:
  觀察者角色,觀察 Zookeeper 集群的最新狀態變化并將這些狀態同步過來,其對于非事務請求可以進行獨立處理,對于事務請求,則會轉發給 Leader服務器進行處理。不會參與任何形式的投票只提供非事務服務,通常用于在不影響集群事務處理能力的前提下提升集群的非事務處理能力。

?

那么我們為什么要搭建zookeeper集群呢?

  zookeeper一般是作為dubbo的注冊中心存在的,搭建集群一是為了高可用(一個zookeeper掛了,另外一個可以立即補上),二是為了應付高并發的情況提高效率。

  

  zookeeper在solrCloud中的作用

    主要用來管理solr集群中的相關配置信息和集群的運行狀態, 協助solr進行主節點的選舉。

?

準備:zookeeper的安裝包? 三臺linux虛擬機? 虛擬機的安裝

修改三臺虛擬機的hosts文件:vi /etc/hosts
添加如下內容:
192.168.44.28 node-01
192.168.44.29 node-02
192.168.44.30 node-03
注意: 添加時, 前面ip地址一定是自己的三臺linux的ip地址 切記不要搞錯了

上傳zookeeper的壓縮包(上傳其中一臺即可)

cd /export/software/
rz          #此時選擇zookeeper的壓縮包進行上傳

解壓zookeeper到指定的目錄

tar -zxf zookeeper-3.4.9.tar.gz -C /export/servers/
cd /export/servers/

修改zookeeper的配置文件

cd /export/servers/zookeeper-3.4.9/conf
mv zoo_sample.cfg  zoo.cfg
vi zoo.cfg

修改后, 在配置文件的底部, 添加如下內容
server.1=node-01:2888:3888
server.2=node-02:2888:3888
server.3=node-03:2888:3888

更改后配置文件整體內容如下:(如果擔心修改錯誤, 可以直接將zoo.cfg中的內容全部刪除, 復制以下內容即可)

# 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:3888

將配置好的zookeeper發送到其他兩臺主機上

cd /export/servers/
scp -r zookeeper-3.4.9/ root@node-02:$PWD   //將zookeeper復制到node-02的同級目錄下
scp -r zookeeper-3.4.9/ root@node-03:$PWD   //將zookeeper復制到node-03的同級目錄下

發送完成后,在其他兩臺主機查看, 是否已經成功接收到

cd /export/servers
ll

分別在三臺主機輸入如下命令給zookeeper設置id

node-01:執行的命令
mkdir -p  /export/data/zk            //這個路徑和上面修改配置文件dataDir一致
echo "1" > /export/data/zk/myid 
cat /export/data/zk/myid             //此命令用于查看此文件有沒有正確寫入 1node-02:執行的命令
mkdir -p  /export/data/zk
echo "2" > /export/data/zk/myid 
cat /export/data/zk/myid             //此命令用于查看此文件有沒有正確寫入 2node-03:執行的命令
mkdir -p  /export/data/zk
echo "3" > /export/data/zk/myid 
cat /export/data/zk/myid            //此命令用于查看此文件有沒有正確寫入 3

分別啟動三臺zookeeper(建議啟動順序 node1>>node2>>node3 依次啟動)

cd /export/servers/zookeeper-3.4.9/bin/
./zkServer.sh start

一個leader 其余的為follower

?

zookeeper的選舉機制

初始化集群: 采取投票機制, 選舉過半即為leader

1. 當第一臺(id=1),啟動后, 由于目前自有自己,故會把票投給自己
2. 當第二臺(id=2),啟動后, 由于目前已經又二臺啟動, 這時候會將票投給id最大的機器, 此時三臺中已經有二臺啟動, 數量過半, 第二臺理所應當的成為了leader
3. 當第三臺(id=3),啟動后, 雖然id=3為最大, 但是由于leader已經產生, 故只能擔任follower

當下一次在重新啟動時, 又會恢復選舉,此時誰的數據多, 誰為leader, 如果數據都一樣, 那么看id誰最大,同時一般選舉過半,就會產生leader

?

還有一種選舉方式是非全新集群選舉:

對于運行正常的 zookeeper 集群,中途有機器 down 掉,需要重新選舉時,選舉過程就需要加入數據 ID、服務器 ID 和邏輯時鐘。
數據 ID:數據新的 version 就大,數據每次更新都會更新 version。
服務器 ID:就是我們配置的 myid 中的值,每個機器一個。
邏輯時鐘:這個值從 0 開始遞增,每次選舉對應一個值。 如果在同一次選舉中,這個值是一致的。
這樣選舉的標準就變成:
1、邏輯時鐘小的選舉結果被忽略,重新投票;
2、統一邏輯時鐘后,數據 id 大的勝出;
3、數據 id 相同的情況下,服務器 id 大的勝出;
根據這個規則選出 leader。

?

?

在zookeeper集群的基礎上,搭建solrCloud

zookeeper偽集群的搭建

轉載于:https://www.cnblogs.com/blazeZzz/p/9442709.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/394676.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394676.shtml
英文地址,請注明出處:http://en.pswp.cn/news/394676.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

pythondict初始化_利用defaultdict對字典進行全局初始化。

通常我們在操作字典時,如果讀取的鍵未被初始化,則會拋出KeyError的錯誤,這個是我們都很熟悉的。那么一般的解決方式是使用異常處理或者是調用字典的get方法來避免出現這個異常。 可以看到,這兩種寫法都比較繁瑣,第二種…

標準庫類型String

定義和初始化string對象 初始化string對象方式 string s1 默認初始化,s1是一個空串 string s2(s1) s2是s1的副本 string s2 s1 等價于s2(s1), s2是s1的副本 string s3("value") s3是字面值"value"的副本,除了字面值最后的那個…

輕量級數據庫中間件利器Sharding-JDBC深度解析(有彩蛋)

講師介紹張亮 當當架構部總監 負責分布式中間件和私有云平臺建設 目前主導開源項目:Elastic-Job及Sharding-JDBC 主題簡介: 1、關系型數據庫中間件核心功能介紹 2、Sharding-JDBC架構及內核解析 3、Sharding-JDBC未來展望 一、關系型數據庫中間件核心功…

python字典嵌套字典的情況下獲取某個key的value

最近在用python寫接口的測試程序,期間用到解析字典獲取某個key的value,由于多個接口返回的字典格式不是固定的并存在多層嵌套的情況。在字典的方法中也沒有找到可直接達到目的的方法(也可能是我對字典的方法了解的不深的緣故),于是自己寫了個…

系統在此應用程序堆棧溢出_從部署我的第一個完整堆棧Web應用程序中學到的經驗教訓...

系統在此應用程序堆棧溢出by Will Abramson威爾艾布拉姆森(Will Abramson) 從部署我的第一個完整堆棧Web應用程序中學到的經驗教訓 (Lessons learned from deploying my first full-stack web application) I recently achieved one of my long-term goals: deploying my firs…

const 常量_條款03:盡可能使用const

const 允許你指定一個語義約束(也就是指定一個“不該被改動”的對象),而編譯器會強制實施這項約束。1、const指針如果關鍵字const出現在星號左邊,表示被指物是常量;如果出現在星號右邊,表示指針自身是常量&…

javascript高級程序設計---js事件思維導圖

繪制思維軟件與平時用的筆記,以及導出功能,這三個問題綜合起來,于是我把思維導圖分開畫 1、js事件的基本概念 2、js事件的事件處理程序 3、js事件的事件對象 轉載于:https://www.cnblogs.com/Jamie1032797633/p/10567419.html

jq挑戰30天——打字機效果+小程序

<!doctype html><html><head><meta charset"utf-8"><title>基于jQuery實現的打字機效果-jq22.com</title><script src"http://libs.baidu.com/jquery/1.11.3/jquery.min.js"></script><style></…

和 Thrift 的一場美麗邂逅

一. 與 Thrift 的初識 也許大多數人接觸 Thrift 是從序列化開始的。每次搜索 “java序列化” “方式”、“對比” 或 “性能” 等關鍵字時&#xff0c;搜索引擎總是會返回一大堆有關各種序列化方式的使用方法或者性能對比的結果給你&#xff0c;而其中必定少不了 Thrift&#…

instagram技術_Instagram9位科技女孩進行技術采訪的主要技巧

instagram技術by Rachel通過瑞秋 Instagram9位科技女孩進行技術采訪的主要技巧 (Top tips for technical interviews from nine of Instagram’s tech girls) My job-hunt came to an end a few weeks ago. After endless phone interviews, coding challenges, and on-sites,…

彈出框 每次打開 滾動條置頂_微信置頂文字怎么弄?微信置頂一句話教程

今日支付寶紅包支付寶首頁搜索511501453馬上領取紅包(支付寶雙十二活動&#xff0c;瓜分15億紅包)(領取后一定要記得使用&#xff0c;不然會浪費的呦&#xff0c;更會影響第二天的領取&#xff01;)奶思靚機“ 一 個 有 用 的 公 眾 號 の ”嗨&#xff0c;最近很流行在微信上面…

Python學習_字符串格式化

#!/usr/bin/env python # -*- coding:utf-8 -*-# 百分號格式化 # %[(name)[flags][width].[precision]]typecode # name : 指定占位符的key # flags : - 空格 0 # width : 寬度 # precision : 小數點后保留的位數 # typecode : 必需,數據類型 # 字符串里面有%的時候, %%表示一…

python 3 面向過程編程

python 3 面向過程編程 核心是過程&#xff08;流水線式思維&#xff09;&#xff0c;過程即解決問題的步驟&#xff0c;面向過程的設計就像設計好一條工業流水線&#xff0c;是一種機械式的思維方式。 1、優點&#xff1a;程序結構清晰&#xff0c;可以把復雜的問題簡單化&…

在ionic/cordova中使用百度地圖插件

在ionic項目中&#xff0c;如果想實現定位功能&#xff0c;可以使用ng-cordova提供的cordova-plugin-geolocation。 但由于高墻的緣故&#xff0c;國內andorid環境下&#xff0c;此插件不起作用&#xff08;ios環境下可用&#xff09;。 國內比較好的是現實使用百度地圖提供的A…

django國際化與html語言,Django 國際化

Django 國際化Django 支持國際化&#xff0c;多語言。Django的國際化是默認開啟的&#xff0c;如果您不需要國際化支持&#xff0c;那么您可以在您的設置文件中設置 USE_I18N False&#xff0c;那么Django會進行一些優化&#xff0c;不加載國際化支持機制。NOTE: 18表示Intern…

mongo 刪除節點_將生產節點/ Express Mongo App部署到AWS —反思

mongo 刪除節點在AWS中部署生產Web應用程序的經驗教訓 (Lessons learned deploying a production web application in AWS) 背景 (Background) This is not a code-based tutorial. It consists of all the things I wish I knew before I started the project and the steps I…

漢諾塔問題遞歸算法python代碼_[python]漢諾塔問題遞歸實現

一、問題描述及算法步驟 漢諾塔問題的大意是有三根柱子a, b, c&#xff0c;現在a柱有N個盤子從下往上尺寸遞減排列&#xff0c;要求&#xff1a; 1. 將a上的盤子移動到c柱上; 2. 每次移動一個盤子; 3. 柱子上的盤子始終必須是大的在下面image.png 漢諾塔問題的經典實現算法步驟…

【硬件】PCB設計步驟

前言 合理的PCB設計步驟&#xff0c;可以減少反復修改的可能性。動手設計PCB前&#xff0c;需要按步就班準備一些資料&#xff0c;即使是小項目。 本文將講解如何一次性成功地設計一款PCB的常規步驟。 當然&#xff0c;如果是一個系統&#xff0c;則需要按照瀑布式的思路&#…

linux install StarDict

1.  sudo apt-get install stardict 2.  Downloads from: http://abloz.com/huzheng/stardict-dic/zh_CN/ 3.  tar jxf stardict-21shijishuangxiangcidian-2.4.2.tar.bz2 -C /usr/share/stardict/dic (etc other dictionaries)轉載于:https://www.cnblogs.com/HurryXin/…

交付方式 saas_我在全職工作時如何交付我的第一個SaaS副項目

交付方式 saasby Tigran Hakobyan由Tigran Hakobyan 我在全職工作時如何交付我的第一個SaaS副項目 (How I shipped my first SaaS side-project while working full-time) This is my personal story of how I shipped my very first SaaS side-project while working full-ti…