1. 程式人生 > >使用 Docker 一步搞定 ZooKeeper 叢集的搭建

使用 Docker 一步搞定 ZooKeeper 叢集的搭建

作者:楊冬 歡迎轉載,也請保留這段宣告。謝謝!

ZooKeeper為分散式應用提供高效、高可用的分散式協調服務,它有三種執行模式:單機模式、偽叢集模式和叢集模式。本文通過探索ZooKeeper的官方Docker映象,來看看怎樣快速搭建一個ZooKeeper的高可用叢集。

Docker容器將應用打包成一個單一的映象,這對應用程式的部署提供了很大的便利。如果我們以傳統的方式部署應用程式,首先需要將應用的依賴環境部署好,如果程式的依賴比較單一,部署時還不至於非常麻煩;但如果應用程式的依賴比較複雜,在部署時就會比較耗時。ZooKeeper依賴於Java,以傳統方式部署時,首先應在主機上配置好JAVA執行時,如果通過Docker的方式部署,JAVA執行時已經打包到ZooKeeper的映象中,我們只需要拉取映象,然後在啟動容器時給定合適的配置資訊即可。

使用ZooKeeper的Docker映象和ZooKeeper編譯後的tar包有區別嗎?下面就來看看ZooKeeper的Docker映象是如何構建的。ZooKeeper的 官方映象地址 有關於此映象的一些資訊,從頁面上得到其Dockerfile的 地址 ,便可以檢視映象的構建過程。整個檔案中第27行程式碼,表明映象構建時,從ZooKeeper的官方網站上下載了指定版本的tar檔案。所以我們得知該映象是以官方的tar檔案為基礎,加入了JAVA執行時及一些啟動指令碼,來控制映象啟動時的行為。映象構建時加入的啟動指令碼docker-entrypoint.sh也是比較關鍵的:

docker-entrypoint.sh 
link
#!/bin/bash

set -e

# Allow the container to be started with `--user`
if [ "$1" = 'zkServer.sh' -a "$(id -u)" = '0' ]; then
 exec su-exec "$ZOO_USER" "$0" "[email protected]"
fi

# Generate the config only if it doesn't exist
if [ ! -f "$ZOO_CONF_DIR/zoo.cfg" ]; then
 CONFIG="$ZOO_CONF_DIR/zoo.cfg"
echo "clientPort=$ZOO_PORT" >> "$CONFIG" echo "dataDir=$ZOO_DATA_DIR" >> "$CONFIG" echo "dataLogDir=$ZOO_DATA_LOG_DIR" >> "$CONFIG" echo 'tickTime=2000' >> "$CONFIG" echo 'initLimit=5' >> "$CONFIG" echo 'syncLimit=2' >> "$CONFIG" for server in $ZOO_SERVERS; do echo "$server" >> "$CONFIG" done fi # Write myid only if it doesn't exist if [ ! -f "$ZOO_DATA_DIR/myid" ]; then echo "${ZOO_MY_ID:-1}" > "$ZOO_DATA_DIR/myid" fi exec "[email protected]"

從這個指令碼檔案中得知,如果在啟動映象時沒有提供zoo.cfg檔案,則該指令碼通過提供給docker命令的環境變數ZOO_SERVERS來生成zoo.cfg檔案;myid檔案也是一樣,如果沒有提供,則通過傳入的ZOO_MY_ID環境變數來生成該檔案。所以上面這個啟動指令碼對於通過Docker成功搭建高可用叢集時十分關鍵的。

下面就開始高可用叢集的搭建,叢集有3個節點,包括:

centos7-A:192.168.71.167

centos7-B:192.168.71.168

centos7-C:192.168.71.169

首先在三個節點上通過 docker pull zookeeper 命令拉取ZooKeeper的最新版本的映象。然後在三個節點上分別啟動docker映象:

主機A:

docker run -d\
 -e ZOO_MY_ID=1 \
 -e ZOO_SERVERS="server.1=192.168.71.167:2888:3888 server.2=192.168.71.168:2888:3888 server.3=192.168.71.169:2888:3888"\
 --name=zookeeper \
 --net=host \
 --privileged \
 zookeeper

主機B:

docker run -d\
 -e ZOO_MY_ID=2 \
 -e ZOO_SERVERS="server.1=192.168.71.167:2888:3888 server.2=192.168.71.168:2888:3888 server.3=192.168.71.169:2888:3888"\
 --name=zookeeper \
 --net=host \
 --privileged \
 zookeeper

主機C:

docker run -d\
 -e ZOO_MY_ID=3 \
 -e ZOO_SERVERS="server.1=192.168.71.167:2888:3888 server.2=192.168.71.168:2888:3888 server.3=192.168.71.169:2888:3888"\
 --name=zookeeper \
 --net=host \
 --privileged \
 zookeeper

上面三個命令需要注意的地方有:通過-e選項指定了ZOO_MY_ID和ZOO_SERVERS的值,在容器啟動時根據這兩個環境變數的值在容器中生成/data/myid檔案和/conf/zoo.cfg檔案。如果還有其它更詳細的配置資訊,想要通過配置檔案掛載到容器內部的方式啟動,則不需要指定前兩個值,即使指定了也沒有用處,容器會直接使用配置檔案中的配置資訊。另外,容器啟動時指定了--net=host 和 --privileged 選項,使得容器可以使用主機的ip地址和埠進行通訊。

下面驗證一下叢集是否工作正常:

[yangdong@centos7-A ~]$ echoruok|nc 192.168.71.167 2181
imok[yangdong@centos7-A ~]$ echoruok|nc 192.168.71.168 2181
imok[yangdong@centos7-A ~]$ echoruok|nc 192.168.71.169 2181
imok[yangdong@centos7-A ~]$
[yangdong@centos7-A ~]$ echostat| nc 192.168.71.167 2181
Zookeeper version: 3.4.9-1757313, built on 08/23/2016 06:50 GMT
Clients:
 /192.168.71.167:58366[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/0/0
Received: 3
Sent: 2
Connections: 1
Outstanding: 0
Zxid: 0x0
Mode: follower
Node count: 4
[yangdong@centos7-A ~]$ echostat| nc 192.168.71.168 2181
Zookeeper version: 3.4.9-1757313, built on 08/23/2016 06:50 GMT
Clients:
 /192.168.71.167:51164[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/0/0
Received: 1
Sent: 0
Connections: 1
Outstanding: 0
Zxid: 0x100000000
Mode: leader
Node count: 4
[yangdong@centos7-A ~]$ echostat| nc 192.168.71.169 2181
Zookeeper version: 3.4.9-1757313, built on 08/23/2016 06:50 GMT
Clients:
 /192.168.71.167:46106[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/0/0
Received: 1
Sent: 0
Connections: 1
Outstanding: 0
Zxid: 0x100000000
Mode: follower
Node count: 4

通過上面的命令可見叢集搭建成功,並且有一個節點為leader狀態。

相關推薦

使用 Docker ZooKeeper 叢集搭建

作者:楊冬 歡迎轉載,也請保留這段宣告。謝謝! ZooKeeper為分散式應用提供高效、高可用的分散式協調服務,它有三種執行模式:單機模式、偽叢集模式和叢集模式。本文通過探索ZooKeeper的官方Docker映象,來看看怎樣快速搭建一個ZooKeeper的高可用叢集

使用 Docker ZooKeeper 集群的搭建

docker -i zoo.cfg sin 但是 .com 證明 配置 當我 背景 原來學習 ZK 時, 我是在本地搭建的偽集群, 雖然說使用起來沒有什麽問題, 但是總感覺部署起來有點麻煩. 剛好我發現了 ZK 已經有了 Docker 的鏡像了, 於是就嘗試了一下, 發現

Python3.6編碼問題

python 編碼格式 unicodedecodeerror 字節流 字符流Python中的編碼問題很蛋疼,我們遇到這類問題有時候會使用下面幾個步驟處理該問題: 1:這麽低級問題,別問同事了太丟人,趕緊百度; 2:臥槽,出了一堆廣告,罵個娘,趕緊找相關解決問題方式; 3:尼瑪,終於搞定,原來

私有Git服務器部署(Gogs)

soft 管理員 efault shared 自由 mes off valid art http://www.jianshu.com/p/424627516ef6 零、安裝 Docker 和 Compsoe 首先安裝 Docker: $ curl -sSL http

CAD圖紙轉換成高質量的PDF文件,兩種方法

設計 彈出 雙擊 下載 顯示 快捷 pdf 搜索 鼠標 其實提到CAD,可能大家都大致的了解,CAD現在已經是建築行業運用的非常廣泛的一個設計軟件了,其實CAD就是一種計算機輔助軟件,可以高效的幫助我們進行圖紙的繪制。我們一般在設計完圖紙,可能定會轉換格式,以至於可以方便的

我是如何小區的安防系統

前言 博主從小就是一個喜歡把事情簡單化的男人,但是現實總是在不經意間給你太多的驚喜,比如不停的搬家。 博主從大學畢業到現在前前後後湊足了10次搬家運動,終於在第10次搬家的時候搬進了真正屬於自己的房子。 15年底趁著房價最低的時候撿了個漏,一咬牙買下一套兩房半小居室,1

全面系統講解CSS 工作應用+面試 (新手)

html常見元素 當我們使用ajax方式提交資料時還需要from表單嗎? 需要。利用Jqu’r’y進行批量提交,或者(框架結合,驗證元件去做表單驗證,還有from的特性,記住使用者的賬號密碼) html5 html

Centos 7 上特定版本的 docker 安裝

cache con data doc 說明 ger mapper 過程 -s 由於國內網絡原因,使用centos的用戶yum源常用國內的阿裏雲。現在把centos7上安裝docker的詳細過程記錄如下: 一、配置centos7的yum源(阿裏雲) 1、cd /etc/yu

Docker Zookeeper叢集搭建(偽叢集)

主要通過修改容器 zookeeper 裡面的配置檔案實現 1、Docker安裝 zookeeper映象獲取各個版本的docker安裝需要自行百度, 基本上都是採用 yum install docke 或者 apt-get install

搭建自己的圖片處理服務 — 智慧裁剪、旋轉、佔位

前言 前兩天剛搭建了自己的部落格,並寫了一篇介紹性的文章:《極簡部落格搭建,搭建超級簡單又好看》,這幾天準備寫點文章體驗一下這款部落格。發現不論是撰寫文章還是展示效果,都非常符合我的品味,真是太棒了。 直到今天我上傳了一張圖片,於是便有了這篇文章。 因果 一般情況,我寫

CentOS6.8核心升級和Docker的安裝

一、核心的升級 最近安裝需要在虛擬機器Linux系統上安裝Docker,但是前提是CentOS的核心必須是3.10及以上,但是我的核心版本才2.xxx,所以必須要對核心進行升級,但是查看了很多部落格都是需要修改各種配置檔案,但是一一試過之後,均不適合我的這種情況。在Dock

記錄zookeeper叢集搭建遇到的問題

使用VMware+centos7,clone了3臺虛機,然後分別裝上zookeeper。zoo.cfg配置檔案如下: # The number of milliseconds of each tick tickTime=2000 # The number of ticks

Python搭建物聯網,所有代理商

  搭建整套物聯網系統的方法有很多,最近四處搗鼓,使用python + 阿里雲搭建一套最簡單的物聯絡統,可以將微控制器上的資料通過阿里雲傳輸到PC端。 學習Python中有不明白推薦加入交流裙            

ZooKeeper叢集搭建):準備工作以及搭建叢集的具體操作

為什麼要做ZooKeeper叢集? ZooKeeper在Dubbo框架中起著發現服務,服務登出/註冊(動態伸縮)的功能,假如僅有的一臺Zookeeper宕機了,將會造成整個應用的服務呼叫失敗,服務停擺期間所造成的損失不可想象 同時Zookeeper也是很

Android開發環境部署——非常詳細的Android開發環境搭建教程(windows 環境)

前面我們已經配置好了java的開發環境,安裝了開發Android的IDE,下載安裝了Android SDK,但是Eclipse還沒有和Android SDK進行關聯,也就是它們現在是互相獨立的,就好比槍和子彈分開了。為了使得Android應用的建立,執行和除錯更加方便快捷,Android的開發團隊專門針對Ec

Android開發環境部署——非常詳細的Android開發環境搭建教程

引言 在windows安裝Android的開發環境不簡單也說不上算複雜,本文寫給第一次想在自己Windows上建立Android開發環境投入Android浪潮的朋友們,為了確保大家能順利完成開發環境的搭建,文章寫的儘量詳細,希望對準備進入Android開發的朋友有幫助。 本教程將分為五個步驟來完成

教你步步win7環境下RobotFramework的環境搭建

一、安裝Python 因為Robot Framework框架是基於Python語言開發的,所以這個是前提 注意事項: 1、  需要選擇Python2; 2、  安裝Python2.7.9/Python3.X時,選中最後一項(我安裝的時候沒有仔細看,所以沒有選)可以自動新增

Android開發環境部署--非常詳細Android開發環境搭建教程

引言 在windows安裝Android的開發環境不簡單也說不上算複雜,本文寫給第一次想在自己Windows上建立Android開發環境投入Android浪潮的朋友們,為了確保大家能順利完成開發環境的搭建,文章寫的儘量詳細,希望對準備進入Android開發的朋友有幫助。 本教程將分為五個步驟來完成Andr

docker-zookeeper叢集搭建(偽叢集)

各個版本的docker安裝需要自行百度, 基本上都是採用yum install docker 或者 apt-get install docker 等方式安裝docker命令問題這裡不對docker所有命令進行介紹, 相關命令會在使用時簡要提及我的docker版本17.05.0-ce➜ ~ docker ve

小時DIV+CSS布局-固定頁面開度布局

之前 水平居中 css charset oat img 水平 分享 code DIV+CSS布局中主要CSS屬性介紹: Float: Float屬性是DIV+CSS布局中最基本也是最常用的屬性,用於實現多列功能,我們知道<div>