分散式架構中一致性解決方案——Zookeeper集群搭建

来源:http://www.cnblogs.com/huangxincheng/archive/2016/07/08/5654170.html
-Advertisement-
Play Games

當我們的項目在不知不覺中做大了之後,各種問題就出來了,真jb頭疼,比如性能,業務系統的並行計算的一致性協調問題,比如分散式架構的事務問題, 我們需要多台機器共同commit事務,經典的案例當然是銀行轉賬,支付寶轉賬這種,如果是一臺機器的話,這個還是很方便的,windows中自帶了一個事務協 調器ms ...


  當我們的項目在不知不覺中做大了之後,各種問題就出來了,真jb頭疼,比如性能,業務系統的並行計算的一致性協調問題,比如分散式架構的事務問題,

我們需要多台機器共同commit事務,經典的案例當然是銀行轉賬,支付寶轉賬這種,如果是一臺機器的話,這個還是很方便的,windows中自帶了一個事務協

調器mstsc,但是呢,你那種很大很牛逼的項目不可能全是windows伺服器,對吧,有些人為瞭解決這個問題,會採用2pc,3pc這種演算法,或者是paxos的思

想進行分散式下的一致性處理,當然在這個世界上,真的不需要你自己去開發這種協調性,因為現在已經有了專門解決這種問題的解決方案,比如zookeeper。

 

一:zookeeper集群搭建

  有些人應該明白,zookeeper正是google的chubby的開源實現,使用zookeeper之前,我們先來搭建一個集群。

1. 下載

   從官網上,我們可以看到,zookeeper的最新版本是3.4.8,下載地址是:http://apache.fayea.com/zookeeper/zookeeper-3.4.8/,可以下載一下:

 

2. 文件夾配置

接下來我們解壓一下,根目錄為zkcluster,下麵使用clientport(3000,3001,3002)這樣的埠作為文件夾名稱,裡面就是zookeeper解壓包,如下麵這樣:

 

3. 配置zoo.cfg

   現在我們有三個文件夾,也就是3個zookeeper程式,在3001/conf/下麵有一個zoo_sample.cfg文件,現在我們改成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=/root/zkcluster/3001/data
dataLogDir=/root/zkcluster/3001/logs
# the port at which the clients will connect
clientPort=3001
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=6
#
# 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

server.1=192.168.161.134:2888:3888
server.2=192.168.161.134:2889:3889
server.3=192.168.161.134:2890:3890

這裡我們要註意的是,紅色的部分分別就是:指定zookeeper的data和log文件夾,指定clientport訪問的埠和servers的列表。

 

4. 生成pid文件

    我們在servers列表中,可以看到有server.1 ,server.2, server.3 三個字元串,生成pid文件的內容就取決如此,比如server.1的地址,

我們的pid文件裡面就是1,不過要知道的是,pid文件要在data目錄下,比如下麵這樣:

 

ok,同樣的道理,3002和3003的文件夾同3001就可以了,比如他們的zoo.cfg如下:

 

--------  3002 --------------

# 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=/root/zkcluster/3002/data
dataLogDir=/root/zkcluster/3002/logs
# the port at which the clients will connect
clientPort=3002
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=6
#
# 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

server.1=192.168.161.134:2888:3888
server.2=192.168.161.134:2889:3889
server.3=192.168.161.134:2890:3890

 

--------  3003 --------------

# 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=/root/zkcluster/3003/data
dataLogDir=/root/zkcluster/3003/logs
# the port at which the clients will connect
clientPort=3003
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=6
#
# 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

server.1=192.168.161.134:2888:3888
server.2=192.168.161.134:2889:3889
server.3=192.168.161.134:2890:3890

 

5. 啟動各自伺服器

    到現在為止,我們各個zookeeper程式的配置都結束了,接下來我們到各自目錄的bin目錄下,通過zkServer.sh來進行啟動,比如下麵這樣:

ok,接下來我們來開始啟動,通過如下命令即可:

./zkServer.sh start-foreground

 

現在我們都啟動了,接下來我們可以用命令看下哪個server是leader,哪些是follower。。。

[root@localhost bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/zkcluster/3001/bin/../conf/zoo.cfg
Mode: follower
[root@localhost bin]# 


[root@localhost bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/zkcluster/3002/bin/../conf/zoo.cfg
Mode: leader
[root@localhost bin]# 

[root@localhost bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/zkcluster/3003/bin/../conf/zoo.cfg
Mode: follower
[root@localhost bin]# 

到目前為止,我們的服務端操作都ok啦,,,是不是好弔。。。

 

二:驅動下載

1.  java的驅動就方便了,直接在源代碼中就提供了,直接copy一下lib文件夾中的jar包就ok了,真是tmd的方便。

 

2. 用C#驅動的也不要太煩,要使用也是不難的,我們可以通過nuget下載一下就可以了,轉換過來的版本也是3.4.8的最新版本,比如下麵這樣:

 

好了,大概就說這麼多,希望對你有幫助~~~

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • redis的list類型其實就是一個每個子元素都是string類型的雙向鏈表。所以[lr]push和[lr]pop命令的演算法時間複雜度都是O(1)。另外list會記錄鏈表的長度。所以llen操作也是O(1).鏈表的最大長度是(2的32次方-1)。我們可以通過push,pop操作從鏈表的頭部或者尾部添 ...
  • 前幾天和群里網友討論一個關於行內鏈接(intra-block chaining)的問題,問題非常有意思,恰好今天有空,順便整理了一下這些知識點。 問題描述:下麵SQL,創建一個超過255列的表(實際為256列),然後插入幾條數據,然後對錶做ANALYZE分析過後,但是發現user_tables的CH... ...
  • 定義 公用表表達式(CTE),是一個在查詢中定義的臨時命名結果集將在from子句中使用它。每個CTE僅被定義一次(但在其作用域內可以被引用任意次),並且在該查詢生存期間將一直生存。可以使用CTE來執行遞歸操作。創建的語法是: with <name of you cte>(<column names> ...
  • 眾所周知,java中為String類提供了split()字元串分割的方法,所以很容易將字元串以指定的符號分割為一個字元串數組。但是在pl/sql中並沒有提供像java中的split()方法,所以要想在pl/sql中實現字元串的分割還需要自己動手。由於在項目中需要用到此類方法,所以自己研究了一下,方便 ...
  • 數據處理過程分為數據挖掘和數據分析,廣義上說數據分析泛指整個過程,然而數據分析大的流程大致相同,如圖: 數據挖掘一般都要經過過濾、漂洗、匹配三個過程: 1.過濾:主要將數據中的不適合分析的數據過濾掉,就好比產品流水線的殘次品一樣,對數據進行組粒度的過濾,其規則可按數據大小,字元長短; 2.漂洗:也稱 ...
  • 微軟資料庫SQL Server 2016正式版在2016年6月就發佈,由於近期工作忙,一直拖到現在才有時間把安裝過程寫到博客上,分享給大家。本人一直習慣使用英文版,所以版本和截圖都是英文版的。廢話少說,轉入正題。 下載地址: https://www.microsoft.com/en-us/serve ...
  • 首先,我用的mysql資料庫是5.7.12版本。 出現的問題: 1.插入數據顯示錯誤,插入不成功,出現:Incorrect string value: '\xCD\xF5\xD5\xBC\xBE\xA9' for column 'Sname' at row 1 2.插入中文,雖然插入成功,但是顯示: ...
  • MapReduce實現基於物品的協同過濾: 實現過程中需要執行多個mapreduce任務。 初始數據: job1: 生成用戶對物品喜愛度矩陣 數據:初始數據 map: key=userid value=item:grade reduce: key=userid value=item:grade,it ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...