在Docker中安裝Zookeeper以及集群環境搭建


前言

如果你對於zookeeper不懂的話,不建議來看此文章的內容。你可以自行網上查閱zookeeper資料學習。

在學習一門技術的時候,首先要了解這技術是干什么用的、基本的概念以及簡單的上手使用。

搭建zookeeper單節點環境

獲取zookeeper鏡像

只要是想使用鏡像,第一步都是先獲取鏡像

docker pull zookeeper

查看下載的zookeeper鏡像

docker images

如下圖所示:

在Docker中安裝Zookeeper以及集群環境搭建

運行zookeeper鏡像

docker run -d --name zookeeper -p 2181:2181 zookeeper

這里的2181是zookeeper的默認端口號。當然,你在啟動鏡像的時候,可以不用指定port的映射,解決的辦法就是可以通過docker提供的link機制來實現容器的訪問。

查看運行中的zookeeper容器

docker ps

如下圖所示:

在Docker中安裝Zookeeper以及集群環境搭建

連接zookeeper服務

在Linux命令行中執行以下命令:

docker exec -it ea zkCli.sh

其中的“ea”是zookeeper容器ID的前兩位字符。

回車如下圖(一般需要按兩下回車鍵,才能看到最下面的“CONNECTED”的字樣):

在Docker中安裝Zookeeper以及集群環境搭建

出現上面的信息,說明zookeeper正常啟動

另一種連接zookeeper服務的方式

或許有的朋友可能對上面的命令“docker exec -it ea zkCli.sh”中的 zkCli.sh 不太明白。這個 zkCli.sh 是哪里來的?

你也可以通過另外一種命令來進入zookeeper容器:

docker exec -it ea /bin/bash

唯一不同的地方,就是最后面的命令內容。

執行該命令之后,進入的是zookeeper容器的文件系統的根目錄。

我們可以查看一下容器的文件系統根目錄下面有什么東西,在容器內執行命令:

cd /

回車之后,再執行命令:

ls

如下圖所示:

在Docker中安裝Zookeeper以及集群環境搭建

可以明顯的看到,有一個zookeeper的文件夾,也就是我們在容器中安裝的zookeeper所在的目錄。

然后,除了黃色區域的內容,再仔細看一下其他的目錄,是不是發現了什么?不錯,和我們平時看到的Linux系統根目錄下面的內容是一樣的。其實Docker容器就是一個簡潔型的Linux文件系統。

找到我們的zookeeper目錄之后,執行下面命令:

cd ./zookeeper-3.4.12/bin/

可以看到目錄下面有一些腳本:

在Docker中安裝Zookeeper以及集群環境搭建

如果我們要連接zookeeper服務的話,需要使用 zkCli.sh 腳本來連接。

使用zkCli.sh連接zookeeper

在上面所在的目錄下,執行以下命令:

./zkCli.sh -server 127.0.0.1:2181

出現下圖所示信息,說明成功連接了zookeeper服務:

在Docker中安裝Zookeeper以及集群環境搭建

查看當前zookeeper的模式

和上面一樣,需要在 /zookeeper-3.4.12/bin/ 目錄下,執行以下命令查看zookeeper服務的模式:

./zkServer.sh  status

如下圖所示:

在Docker中安裝Zookeeper以及集群環境搭建

可以看到,當前zookeeper服務是單節點的,並非集群環境。

搭建zookeeper集群環境

實際企業生產環境,往往都是搭建的集群環境,避免單實例情況下的異常導致服務不可用。

這是我以前寫的在原生的centos系統上搭建的zookeeper集群環境的文檔,有興趣可以看看

https://pan.baidu.com/s/1hrMaRpq

這里我們就搭建3個zookeeper節點吧。3個節點已經算是最小單元的集群環境了。

為了編寫簡單,zookeeper 名稱我們使用“ZK”來表示。

因為一個一個地啟動 ZK 太麻煩了, 所以為了方便起見, 我們直接使用 docker-compose 來啟動 ZK 集群。

Docker-Compose —— Docker編排工具

簡介

Docker Compose是一個用來定義和運行復雜應用的Docker工具。一個使用Docker容器的應用,通常由多個容器組成。使用Docker Compose不再需要使用shell腳本來啟動容器。 Compose 通過一個配置文件來管理多個Docker容器,在配置文件中,所有的容器通過services來定義,然后使用docker-compose腳本來啟動,停止和重啟應用,和應用中的服務以及所有依賴服務的容器,非常適合組合使用多個容器進行開發的場景。

Docker-Compose是一個部署多個容器的簡單但是非常必要的工具.

兩種最新的安裝Docker-Compose的方式

  • 從github上下載docker-compose二進制文件安裝

  • pip安裝

官方文檔 https://docs.docker.com/compose/install/

這里我就使用 pip 的方式安裝。

安裝Docker-Compose之前,請先安裝 python-pip

安裝 python-pip

  • 首先檢查Linux有沒有安裝python-pip包,終端執行 pip -V
pip -V

如果出現 -bash: pip: command not found 的提示,說明沒有安裝python-pip,需要安裝一下python-pip包。

參考文章 https://www.cnblogs.com/YatHo/p/7815400.html

以下是我的阿里雲服務器上的執行情況:

在Docker中安裝Zookeeper以及集群環境搭建

可以看到已經自帶了pip包。

  • 對安裝好的pip進行升級

因為系統自帶的軟件包,很有可能不是最新版本,所以我們最好先更新到最新版本。

pip install --upgrade pip

運行結果如下:

在Docker中安裝Zookeeper以及集群環境搭建

已經升級到最新的 10.0.1 版本了。

安裝Docker-Compose

在Linux命令行中執行命令:

pip install docker-compose

查看安裝的docker-compose版本

docker-compose -version

如下圖所示表示安裝成功:

在Docker中安裝Zookeeper以及集群環境搭建

創建 docker-compose 文件

這里我就在 /opt 目錄下新建了一個 zookeeper 目錄(你也可以自定義存儲目錄),如下圖:

在當前目錄(/opt/zookeeper/)創建一個名為 docker-compose.yml 的文件, 其內容如下:

version: '2'
services:
zoo1:
    image: zookeeper
    restart: always
    container_name: zoo1
    ports:
        - "2181:2181"
    environment:
        ZOO_MY_ID: 1
        ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
zoo2:
    image: zookeeper
    restart: always
    container_name: zoo2
    ports:
        - "2182:2181"
    environment:
        ZOO_MY_ID: 2
        ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

zoo3:
    image: zookeeper
    restart: always
    container_name: zoo3
    ports:
        - "2183:2181"
    environment:
        ZOO_MY_ID: 3
        ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

這個配置文件會告訴 Docker 分別運行三個 zookeeper 鏡像, 並分別將本地的 2181, 2182, 2183 端口綁定到對應的容器的2181端口上(每個zookeeper容器的默認端口都是2181,這句話意思也就是說,將宿主機的2181、2182、2183這3個端口號,分別映射到3個zookeeper容器的2181端口)。
ZOO_MY_ID 和 ZOO_SERVERS 是搭建 ZK 集群需要設置的兩個環境變量,其中 ZOO_MY_ID 表示 ZK 服務的 id,它是1-255 之間的整數,必須在集群中唯一;ZOO_SERVERS 是ZK 集群的主機列表。

運行 docker-compose

接着我們在 docker-compose.yml 所在的目錄(/opt/zookeeper/ )下運行:

COMPOSE_PROJECT_NAME=zk_cluster docker-compose up

即可啟動 ZK 集群了。

注意:這種方式非后台運行,當執行 Ctrl + C 組合鍵的時候,所有的ZK容器都會停止運行。

以后台方式運行docker-compose

COMPOSE_PROJECT_NAME=zk_cluster docker-compose up -d

很簡單,只要在最后面加上“-d”即可。

運行效果如下圖:

在Docker中安裝Zookeeper以及集群環境搭建

可以看到,是以后台方式運行的ZK容器集群。

查看啟動的ZK集群

執行上述命令成功后,接着新開啟一個終端,然后在新終端界面中,首先進入 /opt/zookeeper/ 目錄,在該目錄下運行以下命令可以查看啟動的 ZK 容器:

COMPOSE_PROJECT_NAME=zk_cluster docker-compose ps

如下圖:

在Docker中安裝Zookeeper以及集群環境搭建

你也可以通過 docker ps 命令查看啟動的ZK容器列表,如下圖:

在Docker中安裝Zookeeper以及集群環境搭建

很明顯的看到,啟動了3個ZK容器,每個容器對應着宿主機的不同的端口號。

測試連接ZK集群

查看ZK集群的信息,有多種方法。這里我們就使用最普通的進入容器內部來查看ZK節點的信息以及它的模式。

通過上面的圖,可以看到3個ZK容器的ID信息。

這里我們先進入zoo1這個容器,查看ZK的信息,執行以下命令:

docker exec -it 49 zkServer.sh status

其中“49”指的是zoo1容器的ID。

運行結果如下圖:

在Docker中安裝Zookeeper以及集群環境搭建

可以看到,Mode的值為“follower”,指的是從節點,並非主節點。

以此類推,查看 zoo2 這個ZK容器的信息

在Docker中安裝Zookeeper以及集群環境搭建

當前ZK容器節點為主節點

查看 zoo3 這個ZK容器的信息

在Docker中安裝Zookeeper以及集群環境搭建

當前ZK容器節點為從節點

經過以上的查看,可以清晰的看到,其中一個ZK容器是一個主節點leader,另外2個都是從節點follower。

到此,在Docker中搭建zookeeper的集群環境已經講解完了。

當然,其中的知識點還是很多的,文章只是一個入門級,對於更深層次的技術探索,各位可以自行網上學習的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM