天天看點

使用centos7搭建zookeeper叢集下載下傳安裝vmware安裝centos7配置centos7的網絡安裝wget設定螢幕分辨率及字型大小安裝SecureCRT FX安裝JDK安裝zookeeper操作zookeeper搭建叢集測試服務使用java操作zkzk工具類架構zk實作分布式鎖zk釋出訂閱

下載下傳安裝vmware

去官網下載下傳的話需要注冊才能下載下傳,随便在網上找了一個15的版本,發現安裝失敗。網上的解決辦法也是千奇百怪沒有嘗試。然後下載下傳了14的版本,安裝成功。

安裝centos7

首先去阿裡的鏡像官網找到centos7相應版本下載下傳,位址:https://mirrors.aliyun.com/centos/7.7.1908/isos/x86_64/

下載下傳鏡像成功後。使用vmware打開,安裝centos7系統。過程很簡單。

配置centos7的網絡

網上的教程都是通過nat模式配置,多數都是centos7中是如何操作的,這裡随便貼一篇:https://blog.csdn.net/akipa11/article/details/81414875。如果按照這個操作能成功的話是可以的。但是有時候我們的電腦網絡可能沒有配置好,會出現一些問題。是以從頭捋一下。

按照上邊的文章,使用nat模式連接配接。需要用到vmnet8網絡。這個網絡設定在我們的電腦、控制台\網絡和 Internet\網絡連接配接中,右鍵屬性。打開ipv4設定。然後選擇手動ip位址。

ip位址:xxx.xxx.xxx.x。随便設定,如:192.168.45.100。

子網路遮罩:255.255.255.0

然後設定虛拟機的網絡,設定nat模式下

子網ip:xxx.xxx.xxx.0。跟net8的前三段一樣,如:192.168.45.0。

子網路遮罩:255.255.255.0

網關:xxx.xxx.xxx.2。跟net8的前三段一樣,如:192.168.45.2。

其他centos網絡設定參考上邊文章即可。

通過ping 主機ip:192.168.45.100測試是否能ping通,或者ping www.baidu.com測試。

針對設定的ip不起作用,還會重新生成的解決方案,

首先通過指令,檢視目前的ip

ip addr show
           
使用centos7搭建zookeeper叢集下載下傳安裝vmware安裝centos7配置centos7的網絡安裝wget設定螢幕分辨率及字型大小安裝SecureCRT FX安裝JDK安裝zookeeper操作zookeeper搭建叢集測試服務使用java操作zkzk工具類架構zk實作分布式鎖zk釋出訂閱

 然後記錄截圖中的mac位址,

然後停止掉NetworkManager服務,因為它跟networkservice沖突。

systemctl stop NetworkManager
systemctl disable NetworkManager
           

然後修改網絡配置檔案,增加HWADDR=上邊截圖的mac位址

vi /etc/sysconfig/network-scripts/ifcfg-ens33
           

 最後重新開機reboot。ip就會變為你設定的ip。

安裝wget

如果通過網絡下載下傳一些檔案,需要用到wget,系統預設是沒有這個指令的,需要通過yum來安裝,指令:

yum -y install wget  
           

其中-y代表彈出的提示預設選y就是yes。

設定螢幕分辨率及字型大小

打開虛拟機之後,會發現界面不是很大,這塊就需要修改虛拟機的分辨率,具體參考這篇文章:https://cloud.tencent.com/developer/article/1466317。文章中有個别指令帶箭頭 需要換成--。

安裝SecureCRT FX

CRT是遠端指令行工具,FX是支援圖形化檔案遠端傳遞.直接去官網下載下傳即可,現在下載下傳需要注冊登陸。下載下傳之後可以試用30天,否則需要購買,可以去網絡上搜尋序列号破解版。不過網絡上這方面的key比較少。

使用CRT操作起來還是非常友善的,可以開多個視窗,複制粘貼也很友善。用FX傳檔案更是沒得說。

也可以通過windows共享檔案夾,centos挂在該檔案夾的方式實作共享,參考:http://www.mamicode.com/info-detail-2425151.html

安裝JDK

許多應用都需要jdk的支援,是以優先安裝jdk,首先去官網下載下傳所需要的安裝包,我這邊下載下傳的是linux x64.rpm包。

安裝方法及環境變量配置參見:https://www.cnblogs.com/fanqisoft/p/10460583.html

安裝zookeeper

在usr目錄下建立兩個檔案夾,分别為apps和tools分别用來存放安裝的應用和下載下傳的檔案。

然後進入到tools目錄,使用wget方式下載下傳zookeeper,zookeeper下載下傳位址可以去官網找下載下傳位址。

将tools目錄下的gz包解壓到app目錄下

tar -zxvf apache-zookeeper-3.5.6-bin.tar.gz -c /usr/app
           

因為要把zookeeper/bin目錄放入到環境變量,是以盡量不要帶zookeeper版本号,否則以後更新需要修改配置檔案。

那如何處理呢?通過建立引用的形式,指令如下:

ln -s apache-zookeeper-3.5.6-bin/ zookeeper
           

 這樣的話,zookeeper檔案夾就是一個引用,它實際指向zookeeper-3.5.6檔案夾。是以ln指令的作用就是解決這種需求。如果很多目錄檔案夾都需要内部包含一個檔案,可以通過ln指令來操作。這樣就省去了複制多個檔案。省去一些空間。

 接着修改環境變量

vi /etc/profile
G到最後一行
新增兩行代碼
export ZK_HOME=/usr/app/zookeeper
export PATH=$ZK_HOME/bin:$PATH
           

接着進入zookeeper目錄下conf ,複制一份zoo_sample.cfg檔案。打開進行修改。

先修改datadir。

首先建立usr/data/zookeeper檔案夾。因為是樹級檔案夾建立,需要mkdir -p指令。 建立成功後,修改dataDir目錄為:/usr/data/zookeeper

操作zookeeper

通過指令啟動服務,在conf目錄下輸入指令:

zkServer.sh start
           

通過 

zkServer.sh status
           

檢視狀态。 

搭建叢集

克隆3台虛拟機。打開後先通過指令修改主機名:

vi /etc/hostname
           

然後修改IP位址

vi /etc/sysconfig/network-scripts/ifcfg-ens33
           

 有些系統可能自動配置設定ip就不用配置ip這塊了,通過ip addr show可以看到ip。然後reboot重新開機

這樣配置好4台伺服器。

然後進入zookeeper/conf,zoo.cfg檔案。增加server的配置。

server.1=192.168.43.129:2888:3888
server.2=192.168.43.130:2888:3888
server.3=192.168.43.131:2888:3888
server.4=192.168.43.132:2888:3888:observer
           

 前邊的server.1中1代表目前server的myid。需要在usr/data/zookeeper目錄下配置

echo 1 > myid

cat myid //檢視myid
           

 同理4台機器都這樣配置,記得在第4台observer的zookeeper的conf.zoo.cfg檔案中,增加

peerType=observer
           

最後,别忘記關閉防火牆

systemctl stop firewalld.service //暫時關閉
systemctl disable firewalld.service //永久關閉

流程必須先暫時關閉,再永久關閉,因為防火牆現在是開着的,需要先關閉。

可以通過systemctl status firewalld.service檢視防火牆狀态是否關閉。
           

 最後啟動zookeeper/

zkServer.sh start //啟動服務
zkServer.sh status //檢視服務狀态
zkServer.sh stop //停止服務
           

先執行啟動服務,把4台都啟動,然後檢視每台的狀态。

你會看到1台是leader,2台follower,1台observer。

測試服務

啟動用戶端

zkCli.sh -server 192.168.43.129:2181
           

 上邊的ip位址随意是哪台zookeeper的ip都可以。

啟動後 輸入-help檢視操作指令

具體操作指令參考文章:https://blog.csdn.net/dandandeshangni/article/details/80558383

使用java操作zk

使用idea建立一個空的maven工程,

在pom檔案中導入zk依賴:

<dependencies>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.5.6</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13-beta-3</version>
        </dependency>
    </dependencies>
           

 接着就是寫java代碼了,首先我們要學會zk的指令,在上一步多練習一下,熟悉指令後,寫java代碼就很容易了。

首先就是建立用戶端連接配接:

zk=new ZooKeeper(“192.168.43.129:2181”, 20000, null)
           

然後通過該連接配接就可以調各種api了。

//建立節點,可以建立四種節點,通過createMode來區分節點類型,如持久節點,持久順序節點,臨時節點,臨時順序節點等。
zk.create(final String path, byte data[], List<ACL> acl,
            CreateMode createMode)
//擷取某節點下的子節點
zk.getChildren()
//擷取某節點的資料
zk.getData()
//删除某節點
zk.delete()
。。。。
。。。。
           

其實隻要對指令熟悉,這些javaapi是好寫的,這裡就不一一列舉了。

想省事的話可以去網上搜一個工具類,好好封裝一下。

zk工具類架構

curator簡介與用戶端之間的異同點

常用的zookeeper java用戶端:

  • zookeeper原生Java API
  • zkclient
  • Apache curator

ZooKeeper原生Java API的不足之處:

  • 在連接配接zk逾時的時候,不支援自動重連,需要手動操作
  • Watch注冊一次就會失效,需要反複注冊
  • 不支援遞歸建立節點

Apache curator:

  • Apache 的開源項目
  • 解決Watch注冊一次就會失效的問題
  • 提供的 API 更加簡單易用
  • 提供更多解決方案并且實作簡單,例如:分布式鎖
  • 提供常用的ZooKeeper工具類
  • 程式設計風格更舒服,

參考文章:https://blog.51cto.com/zero01/2109137,該文章對curator做了詳細的介紹以及代碼示範。

zk實作分布式鎖

理論部分就不重複寫了,參考文章:https://blog.csdn.net/kongmin_123/article/details/82081953

代碼實作部分:基于curator實作:https://blog.csdn.net/u010028869/article/details/84034261

zk釋出訂閱

參考文章:上邊curator文章裡的實作https://blog.51cto.com/zero01/2109137。

繼續閱讀