下載下傳安裝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

然後記錄截圖中的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。