zookeeper的單實例和偽集群部署

原文鏈接: http://gudaoyufu.com/?p=1395

zookeeper工作方式

ZooKeeper 是一個開源的分布式協調服務,由雅虎創建,是 Google Chubby 的開源實現。 分布式應用程序可以基于 ZooKeeper 實現諸如數據發布/訂閱、負載均衡、命名服務、分布式協 調/通知、集群管理、Master 選舉、分布式鎖和分布式隊列 等功能。

在使用中,通常以集群的方式部署,Zookeeper節點部署越多,服務的可靠性越高,建議部署奇數個節點,因為zookeeper集群是以宕機個數過半才會讓整個集群宕機的,集群節點數為奇數最佳。

zookeeper也可以以單實例或偽集群的方式運行,只不過這種方式不適用高并發的環境。下面記錄一下部署zookeeper的過程,包括單實例和偽集群,分布式集群的部署。

安裝JDK

zookeeper是由JAVA開發,運行需要有JAVA環境,安裝前先安裝JDK。

JDK下載:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

下載完成后直接yum安裝即可

單機實例部署

  • 下載

各版本可以在官方網站下載 : https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/

這里下載的版本是 3.4.12

  • 解壓至指定路徑
[root@zookeeper ~]# tar zxf zookeeper-3.4.12.tar.gz  -C /data/
  • 修改解壓目錄名稱,做偽集群或分布式集群最好將目錄標明白,容易看清
[root@zookeeper ~]# mv /data/zookeeper-3.4.12/ /data/zookeeper1
  • 修改配置文件
[root@zookeeper ~]# cd /data/zookeeper1/conf/
[root@zookeeper conf]# mv zoo_sample.cfg zoo.cfg
  • 單機實例部署配置如下
[root@zookeeper conf]# vim zoo.cfg 
tickTime=2000 #2000毫秒=2秒
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper/datadir
dataLogDir=/opt/zookeeper/logdir
clientPort=2181
  • 創建數據目錄
[root@zookeeper conf]# mkdir -pv /opt/zookeeper/{datadir,logdata}
mkdir: 已創建目錄 "/opt/zookeeper"
mkdir: 已創建目錄 "/opt/zookeeper/datadir"
mkdir: 已創建目錄 "/opt/zookeeper/logdata"

配置參數說明

  • ickTime這個時間是作為zookeeper服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是說每個tickTime時間就會發送一個心跳。
    initLimit : 配置項是用來配置zookeeper接受客戶端(這里所說的客戶端不是用戶連接zookeeper服務器的客戶端,而是zookeeper服務器集群中連接到leader的follower 服務器)初始化連接時最長能忍受多少個心跳時間間隔數。當已經超過10個心跳的時間(也就是tickTime)長度后 zookeeper 服務器還沒有收到客戶端的返回信息,那么表明這個客戶端連接失敗。總的時間長度就是 10
    2000=20秒。

  • syncLimit :配置項標識leader與follower之間發送消息,請求和應答時間長度,最長不能超過多少個tickTime的時間長度,總的時間長度就是5*2000=10秒。
    • dataDir :是zookeeper保存數據的目錄,默認情況下如果不定義dataLogDir,zookeeper將寫數據的日志文件也保存在這個目錄里,最好分開定義
  • clientPort : 客戶端連接Zookeeper服務器的端口,Zookeeper會監聽這個端口接受客戶端的訪問請求;
  • server.n=ipA:B:C :定義集群節點號,ip,監聽端口,選舉通信端口,n是一個數字,表示這個是第幾號服務器,A是這個服務器的IP地址,B第一個端口用來集群成員的信息交換,表示這個服務器與集群中的leader服務器交換信息的端口,C是在leader掛掉時專門用來進行選舉leader所用的端口。

  • 啟動zookeeper

[root@zookeeper ~]# /data/zookeeper1/bin/zkServer.sh startZooKeeper JMX enabled by default
Using config: /data/zookeeper1/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
  • 查看狀態
[root@zookeeper ~]# /data/zookeeper1/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /data/zookeeper1/bin/../conf/zoo.cfg
Mode: standalone  #單機模式
  • 查看端口 2181已經啟動

zookeeper指令

zookeeper啟動后,可以先連接測試是否正常

[root@zookeeper ~]# cd /data/zookeeper1/bin/
[root@zookeeper bin]# ./zkCli.sh -server 127.0.0.1WATCHER::WatchedEvent state:SyncConnected type:None path:null
[zk: 127.0.0.1(CONNECTED) 0]   #登錄成功

zookeeper啟動后會在當前用戶的家目錄生成狀態日志zookeeper.out,平時服務狀態出現問題可以從里面找到問題所在

連接上zk后,隨意輸入一個字符,通常是?號,會給出zookeeper的指令幫助

[zk: 127.0.0.1(CONNECTED) 0] ?
ZooKeeper -server host:port cmd argsstat path [watch]set path data [version]ls path [watch]   #查看節點delquota [-n|-b] pathls2 path [watch]setAcl path aclsetquota -n|-b val pathhistory redo cmdnoprintwatches on|offdelete path [version]sync pathlistquota pathrmr pathget path [watch]create [-s] [-e] path data acl   #創建節點addauth scheme authquit getAcl pathclose connect host:port  #連接指令
  • 創建節點
[zk: 127.0.0.1(CONNECTED) 1] create /test "test"
Created /test
[zk: 127.0.0.1(CONNECTED) 2] ls /
[zookeeper, test]
  • 獲取節點內容
[zk: 127.0.0.1(CONNECTED) 3] get /test 
test
cZxid = 0x8  :該節點是由哪個事務ID產生
ctime = Sat Sep 01 21:41:06 CST 2018
mZxid = 0x8  :最近更新了該節點的事務ID
mtime = Sat Sep 01 21:41:06 CST 2018
pZxid = 0x8  :該節點的子節點列表被修改的事務ID
cversion = 0 :子節點版本號
dataVersion = 0 : 數據版本號
aclVersion = 0 : ACL版本號
ephemeralOwner = 0x0  
dataLength = 4  : 數據長度
numChildren = 0  : 子節點個數

樂觀并發訪問控制和悲觀并發訪問控制 —延伸

  • 更新節點
[zk: 127.0.0.1(CONNECTED) 4] set /test "test path"
  • 刪除節點
[zk: 127.0.0.1(CONNECTED) 6] delete /test
[zk: 127.0.0.1(CONNECTED) 7] ls /test
Node does not exist: /test
#如果刪除有子目錄的節點,使用rmr指令

臨時節點不能有子節點

ookeeper四字命令

使用telnet可以連接zookeeper發送4個字符的命令。

[root@zookeeper bin]# telnet 127.0.0.1 2181
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
ruok  #探測是否存活
imokConnection closed by foreign host.
[root@zookeeper bin]# telnet 127.0.0.1 2181
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
stat            #查看zk版本信息
Zookeeper version: 3.4.12-e5259e437540f349646870ea94dc2658c4e44b3b, built on 03/27/2018 03:55 GMT
Clients:/127.0.0.1:52636[0](queued=0,recved=1,sent=0)Latency min/avg/max: 0/2/308
Received: 248
Sent: 247
Connections: 1
Outstanding: 0
Zxid: 0xc
Mode: standalone
Node count: 5
Connection closed by foreign host.
[root@zookeeper bin]# telnet 127.0.0.1 2181
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
conf   #查看節點配置信息
clientPort=2181
dataDir=/opt/zookeeper/datadir/version-2
dataLogDir=/opt/zookeeper/logdir/version-2
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=0
Connection closed by foreign host.

zookeeper偽集群部署

zookeeper偽集群是部署在一臺服務器上,通過創建多個工作目錄配置項等,實現多實例的運行

在上面的基礎上,再添加兩個實例

  • 將原來/data/zookeeper1目錄復制
[root@zookeeper ~]# cp -ar /data/zookeeper1/ /data/zookeeper2
[root@zookeeper ~]# cp -ar /data/zookeeper1/ /data/zookeeper3
[root@zookeeper ~]# ls /data/
zookeeper1  zookeeper2  zookeeper3
  • 修改zookeeper1配置文件
[root@zookeeper ~]# vim  /data/zookeeper1/conf/zoo.cfg dataDir=/opt/zookeeper/datadir     #各偽節點目錄不能相同
dataLogDir=/opt/zookeeper/logdir
clientPort=2181   #各偽節點端口不能相同#下面的節點定義各偽節點要相同
server.1=192.168.214.171:2888:3888 
server.2=192.168.214.171:2889:3889
server.3=192.168.214.171:2890:3890
  • 修改zookeeper2配置文件
[root@zookeeper ~]# vim  /data/zookeeper2/conf/zoo.cfg dataDir=/opt/zookeeper2/datadir
dataLogDir=/opt/zookeeper2/logdir
clientPort=2182
server.1=192.168.214.171:2888:3888
server.2=192.168.214.171:2889:3889
server.3=192.168.214.171:2890:3890
  • 修改zookeeper3配置文件
dataDir=/opt/zookeeper3/datadir
dataLogDir=/opt/zookeeper3/logdir
clientPort=2183
server.1=192.168.214.171:2888:3888
server.2=192.168.214.171:2889:3889
server.3=192.168.214.171:2890:3890
  • 創建數據存放目錄
[root@zookeeper ~]# mkdir -pv /opt/zookeeper{2,3}/{datadir,logdir}
mkdir: 已創建目錄 "/opt/zookeeper2"
mkdir: 已創建目錄 "/opt/zookeeper2/datadir"
mkdir: 已創建目錄 "/opt/zookeeper2/logdir"
mkdir: 已創建目錄 "/opt/zookeeper3"
mkdir: 已創建目錄 "/opt/zookeeper3/datadir"
mkdir: 已創建目錄 "/opt/zookeeper3/logdir"
  • 為每個節點設置節點ID號
[root@zookeeper ~]# echo 1 > /opt/zookeeper/datadir/myid
[root@zookeeper ~]# echo 2 > /opt/zookeeper2/datadir/myid
[root@zookeeper ~]# echo 3 > /opt/zookeeper3/datadir/myid[root@zookeeper ~]# cat /opt/zookeeper/datadir/
myid       version-2/ 
[root@zookeeper ~]# cat /opt/zookeeper/datadir/myid 
1
[root@zookeeper ~]# cat /opt/zookeeper2/datadir/myid 
2
[root@zookeeper ~]# cat /opt/zookeeper3/datadir/myid 
3
  • 啟動集群
[root@zookeeper ~]# /data/zookeeper1/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /data/zookeeper1/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED[root@zookeeper ~]# /data/zookeeper2/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /data/zookeeper2/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED[root@zookeeper ~]# /data/zookeeper3/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /data/zookeeper3/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
  • 查看狀態
[root@zookeeper ~]# /data/zookeeper1/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /data/zookeeper1/bin/../conf/zoo.cfg
Mode: leader[root@zookeeper ~]# /data/zookeeper2/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /data/zookeeper2/bin/../conf/zoo.cfg
Mode: follower[root@zookeeper ~]# /data/zookeeper3/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /data/zookeeper3/bin/../conf/zoo.cfg
Mode: follower
  • 測試master切換

關閉leader節點

[root@zookeeper ~]# /data/zookeeper1/bin/zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /data/zookeeper1/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED#zookeeper2節點立即變成了leader[root@zookeeper ~]# /data/zookeeper2/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /data/zookeeper2/bin/../conf/zoo.cfg
Mode: leader
  • 再啟動zookeeper1節點,會以follower角色工作
[root@zookeeper ~]# /data/zookeeper1/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /data/zookeeper1/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@zookeeper ~]# /data/zookeeper1/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /data/zookeeper1/bin/../conf/zoo.cfg
Mode: follower

關于zookeeper的單機模式和偽集群就寫到這,分布式集群部署點擊閱讀

轉載于:https://www.cnblogs.com/tchroot/p/9591801.html

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

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

相關文章

PHP開發常見功能實現流程

一、pc端網站登錄 1、獲取并過濾用戶提交的用戶名和密碼以及驗證碼 2、驗證用戶提交驗證碼和session中的驗證碼是否一致 3、驗證用戶名是否存在 4、根據用戶名獲取密碼,并校驗密碼是否一致 5、密碼一致,則登錄成功,跳轉到對應的首頁 圖示…

七牛直播云服務技術揭秘

以下根據七牛云首席布道師何李石現場演講內容整理。 直播模型及其實現 一個通用的直播模型一般包括三個模塊:主播方、服務器端和播放端。 首先是主播方,它是產生視頻流的源頭,由一系列流程組成: 第一,通過一定的設備來…

golang 標準庫間依賴的可視化展示

簡介 國慶看完 << Go 語言圣經 >>,總想做點什么,來加深下印象.以可視化的方式展示 golang 標準庫之間的依賴,可能是一個比較好的切入點.做之前,簡單搜了下相關的內容,網上也要討論,但是沒有發現直接能拿過來用的.標準庫之間,是必然存在依賴關系的,不同庫被依賴的程…

Amazon Alexa 新里程碑: 50000 個功能、 20000 種設備、 3500 個品牌

幾個月過去&#xff0c;Alexa的設備連接量、活躍度等各項數據又攀升了。昨日&#xff0c;亞馬遜智慧家庭副總裁DanielRausch在IFA大會上公布了Alexa的各項數據&#xff1a;全球范圍內&#xff0c;Alexa已經擁有50000個功能&#xff0c;與20000種設備相容&#xff0c;并與超過35…

C# 計算耗時的三種方法

概述計算一段程序的耗時是我們在編程中很常見的用法&#xff0c;那這節內容就通過實例的方式來演示幾種常用的統計耗時的方法.方法一&#xff1a;stopwatchstatic void Main(string[] args){Stopwatch sw new Stopwatch();sw.Start();Thread.Sleep(999);sw.Stop();Console.Wri…

《HTML5 2D游戲編程核心技術》——第1章,第1.3節特別功能

本節書摘來自華章出版社《HTML5 2D游戲編程核心技術》一書中的第1章&#xff0c;第1.3節特別功能&#xff0c;作者&#xff3b;美&#xff3d; 戴維吉爾里&#xff0c;更多章節內容可以訪問云棲社區“華章計算機”公眾號查看。 1.3 特別功能 Snail Bait游戲有3個特別的功能&a…

XunSearch的安裝和加入服務器開機腳本以及將目錄寫入系統變量

一、安裝xunserach 1、cd ~ 2、wget http://www.xunsearch.com/download/xunsearch-full-latest.tar.bz2 #下載最新xunsearch包 3、tar -xjf xunsearch-full-latest.tar.bz2 #解壓xunsearch包 4、cd xunsearch-full-1.4.11/ #進入xunsearch包目錄 5、sh setup.sh #執…

dubbo源碼解析-zookeeper創建節點

前言 在之前dubbo源碼解析-本地暴露中的前言部分提到了兩道高頻的面試題,其中一道dubbo中zookeeper做注冊中心,如果注冊中心集群都掛掉,那發布者和訂閱者還能通信嗎?在上周的dubbo源碼解析-zookeeper連接中已經講到,這周解析的是另一道,即服務提供者能實現失效踢出是根據什么原…

配置mysql為主主復制步驟

mysql版本&#xff1a;mysql-5.6.24-solaris10-sparc-64bit.tar 操作系統&#xff1a;solaris 11g u10 操作用戶&#xff1a;使用非root進行操作安裝&#xff0c;a路服務器ip地址為192.168.1.1 b路ip地址為192.168.1.2&#xff08;應改為實際ip地址&#xff09; 1&#xff0c;安…

XunSearch的使用

一、項目的配置文件 1、要想使用xunsearch&#xff0c;首先需要進行配置文件的配置。 默認目錄在app下&#xff0c;如下面的結構&#xff0c;每一個搜索項目都需要有一個ini文件進行相應的配置。 舉例&#xff1a; project.name novel project.default_charset utf-8 serv…

《VMware vSphere設計(原書第2版)》——1.1 什么是設計

本節書摘來自華章出版社《VMware vSphere設計&#xff08;原書第2版&#xff09;》一 書中的第1章&#xff0c;第1.1節&#xff0c;作者&#xff1a;[美] 福布斯格思里&#xff08;Forbes Guthrie&#xff09;斯科特羅威&#xff08;Scott Lowe&#xff09;肯德里克科爾曼&…

SqlKata - 方便好用的 Sql query builder

SqlKata查詢生成器是一個用C# 編寫的功能強大的Sql查詢生成器。它是安全的&#xff0c;與框架無關。靈感來源于可用的頂級查詢生成器&#xff0c;如Laravel Query Builder和 Knex&#xff1a;https://knexjs.org/。SqlKata有一個富有表現力的API。它遵循一個干凈的命名約定&…

編寫高質量代碼:改善Java的151個建議四(基本類型)21-30

該書籍PDF下載地址&#xff1a;http://download.csdn.net/download/muyeju/10001473 基本類型有8個&#xff1a;byte&#xff0c;short&#xff0c;int&#xff0c;char&#xff0c;long&#xff0c;double&#xff0c;float&#xff0c;boolean 21.用偶判斷&#xff0c;不用奇…

ABP vNext微服務架構詳細教程(補充篇)——單層模板(下)

業務代碼2聚合服務聚合服務層和基礎服務層相同的道理&#xff0c;在Demo.Core.Contracts增加Services文件夾&#xff0c;并添加Notifications子文件夾&#xff0c;在其中添加Dtos文件夾并添加兩個DTO與基礎服務對應&#xff1a;using Volo.Abp.Application.Dtos;namespace Demo…

PHP 電子商城基本數據表

1、品牌表 tp_brand CREATE TABLE tp_brand (id smallint(5) unsigned NOT NULL AUTO_INCREMENT COMMENT 品牌表,name varchar(60) NOT NULL DEFAULT COMMENT 品牌名稱,logo varchar(80) NOT NULL DEFAULT COMMENT 品牌logo,desc text NOT NULL COMMENT 品牌描述,url varcha…

摘要,日志

1.hashlib 模塊: 由于數據的不安全性,為了保證用戶的信息絕對安全,所有所有人的賬號密碼不能以明文的形式存儲, 而是經過適當的處理以密文的形式存儲. hashlib對同一個字符串在不同的語言,不同的環境(操作系統,版本,時間)中加密得到的是同一個密文串,不同的字符串得到的密文是不…

《網站情感化設計與內容策略》一第1章 情感化設計1.1 革命:有失亦有得

本節書摘來自異步社區《網站情感化設計與內容策略》一書中的第1章&#xff0c;第1.1節&#xff0c;作者 【美】Aarron Walter , Erin Kissane&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看 第1章 情感化設計 網站情感化設計與內容策略 1.1 革命&#xff1…

php自動加載機制的實現

一、什么是自動加載 自動加載就是當我們在當前文件中實例化一個不存在的類時&#xff0c;調用自動加載機制引入相應的類文件。 注&#xff1a;自動加載有兩種方式&#xff08;都是php內置的&#xff09;&#xff0c;一種是通過__autoload(),另一種是通過spl_autoload_registe…

MySQL之 從復制延遲問題排查

一、從庫復制延遲問題 1、可能的原因如下&#xff08;1&#xff09;主從服務器處于不同的網絡之中&#xff0c;由于網絡延遲導致&#xff1b;&#xff08;2&#xff09;主從服務器的硬件配置不同&#xff0c;從服務器的硬件配置&#xff08;包括內存&#xff0c;CPU&#xff0c…

《樹莓派滲透測試實戰》——2.12 用例子總結以上步驟

本節書摘來異步社區《樹莓派滲透測試實戰》一書中的第2章&#xff0c;第2.12節&#xff0c;作者【美】Joseph Muniz&#xff08;約瑟夫 穆尼斯&#xff09; , Aamir Lakhani&#xff08;阿米爾 拉克哈尼&#xff09;&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號…