zookeeper-jdk21
操作系統:openEuler
JDK:21
主機名 | IP地址 |
---|---|
spark01 | 192.168.171.101 |
spark02 | 192.168.171.102 |
spark03 | 192.168.171.103 |
安裝
1. 升級內核和軟件
yum -y update
2. 安裝常用軟件
yum -y install gcc gcc-c++ autoconf automake cmake make \zlib zlib-devel openssl openssl-devel pcre-devel \rsync openssh-server vim man zip unzip net-tools tcpdump lrzsz tar wget
3. 關閉防火墻
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
systemctl stop firewalld
systemctl disable firewalld
4. 修改主機名
hostnamectl set-hostname spark01
hostnamectl set-hostname spark02
hostnamectl set-hostname spark03
5. 修改IP地址
vim /etc/sysconfig/network-scripts/ifcfg-ens160
參考如下:
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=ens160
UUID=22d234d4-df21-45ca-a078-bb280978fbce
DEVICE=ens160
ONBOOT=yes
IPADDR=192.168.171.101
PREFIX=24
GATEWAY=192.168.171.2
DNS1=192.168.171.2
6. 修改hosts配置文件
vim /etc/hosts
修改內容如下:
192.168.171.101 spark01
192.168.171.102 spark02
192.168.171.103 spark03
7. 重啟系統
reboot
8. 下載安裝JDK和Zookeeper并配置環境變量
在所有主機節點創建軟件目錄
mkdir -p /opt/soft
以下操作在 spark01 主機上完成
進入軟件目錄
cd /opt/soft
下載JDK
wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz
下載 Zookeeper
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.9.1/apache-zookeeper-3.9.1-bin.tar.gz
解壓 JDK 修改名稱
解壓 zookeeper 修改名稱
tar -zxvf jdk-21_linux-x64_bin.tar.gz
mv jdk-21.0.1 jdk-21
tar -zxvf apache-zookeeper-3.9.1-bin.tar.gz
mv apache-zookeeper-3.9.1-bin zookeeper-3
配置環境變量
vim /etc/profile.d/my_env.sh
編寫以下內容:
export JAVA_HOME=/opt/soft/jdk-21
export set JAVA_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED"export ZOOKEEPER_HOME=/opt/soft/zookeeper-3export PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin
在各服務器上使環境變量生效
source /etc/profile
10. 編輯配置文件
cd $ZOOKEEPER_HOME/conf
vim zoo.cfg
# 心跳單位,2s
tickTime=2000
# zookeeper-3初始化的同步超時時間,10個心跳單位,也即20s
initLimit=10
# 普通同步:發送一個請求并得到響應的超時時間,5個心跳單位也即10s
syncLimit=5
# 內存快照數據的存儲位置
dataDir=/home/zookeeper-3/data
# 事務日志的存儲位置
dataLogDir=/home/zookeeper-3/datalog
# 當前zookeeper-3節點的端口
clientPort=2181
# 單個客戶端到集群中單個節點的并發連接數,通過ip判斷是否同一個客戶端,默認60
maxClientCnxns=1000
# 保留7個內存快照文件在dataDir中,默認保留3個
autopurge.snapRetainCount=7
# 清除快照的定時任務,默認1小時,如果設置為0,標識關閉清除任務
autopurge.purgeInterval=1
#允許客戶端連接設置的最小超時時間,默認2個心跳單位
minSessionTimeout=4000
#允許客戶端連接設置的最大超時時間,默認是20個心跳單位,也即40s,
maxSessionTimeout=300000
#zookeeper-3 3.5.5啟動默認會把AdminService服務啟動,這個服務默認是8080端口
admin.serverPort=9001
#集群地址配置
server.1=spark01:2888:3888
server.2=spark02:2888:3888
server.3=spark03:2888:3888
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/zookeeper-3/data
dataLogDir=/home/zookeeper-3/datalog
clientPort=2181
maxClientCnxns=1000
autopurge.snapRetainCount=7
autopurge.purgeInterval=1
minSessionTimeout=4000
maxSessionTimeout=300000
admin.serverPort=9001
server.1=spark01:2888:3888
server.2=spark02:2888:3888
server.3=spark03:2888:3888
11. 保存后根據配置文件創建目錄
在每臺服務器上執行
mkdir -p /home/zookeeper-3/data
mkdir -p /home/zookeeper-3/datalog
12. 編寫zookeeper-3開機啟動腳本
在/etc/systemd/system/文件夾下創建一個啟動腳本zookeeper-3.service
注意:在每臺服務器上編寫
cd /etc/systemd/system
vim zookeeper.service
內容如下:
[Unit]
Description=zookeeper
After=syslog.target network.target[Service]
Type=forking
# 指定zookeeper-3 日志文件路徑,也可以在zkServer.sh 中定義
Environment=ZOO_LOG_DIR=/home/zookeeper-3/datalog
# 指定JDK路徑,也可以在zkServer.sh 中定義
Environment=JAVA_HOME=/opt/soft/jdk-21
ExecStart=/opt/soft/zookeeper-3/bin/zkServer.sh start
ExecStop=/opt/soft/zookeeper-3/bin/zkServer.sh stop
Restart=always
User=root
Group=root[Install]
WantedBy=multi-user.target
[Unit]
Description=zookeeper
After=syslog.target network.target[Service]
Type=forking
Environment=ZOO_LOG_DIR=/home/zookeeper-3/datalog
Environment=JAVA_HOME=/opt/soft/jdk-21
ExecStart=/opt/soft/zookeeper-3/bin/zkServer.sh start
ExecStop=/opt/soft/zookeeper-3/bin/zkServer.sh stop
Restart=always
User=root
Group=root[Install]
WantedBy=multi-user.target
systemctl daemon-reload
# 等所有主機配置好后再執行以下命令
systemctl start zookeeper
systemctl enable zookeeper
systemctl status zookeeper
13. 配置ssh免密鑰登錄
創建本地秘鑰并將公共秘鑰寫入認證文件
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
ssh-copy-id root@spark01
ssh-copy-id root@spark02
ssh-copy-id root@spark03
14. 分發軟件和配置文件
分發 ssh 免密鑰
scp -r ~/.ssh root@spark02:~/
scp -r ~/.ssh root@spark03:~/
分發 hosts 文件
scp -r /etc/hosts root@spark02:/etc/
scp -r /etc/hosts root@spark03:/etc/
分發軟件
scp -r /opt/soft/jdk-21 root@spark02:/opt/soft
scp -r /opt/soft/zookeeper-3 root@spark02:/opt/soft
scp -r /opt/soft/jdk-21 root@spark03:/opt/soft
scp -r /opt/soft/zookeeper-3 root@spark03:/opt/soft
分發環境變量
scp /etc/profile.d/my_env.sh root@spark02:/etc/profile.d/
scp /etc/profile.d/my_env.sh root@spark03:/etc/profile.d/
在所有主機節點 使新的環境變量生效
source /etc/profile
15. myid
spark01
echo 1 > /home/zookeeper-3/data/myid
more /home/zookeeper-3/data/myid
spark02
echo 2 > /home/zookeeper-3/data/myid
more /home/zookeeper-3/data/myid
spark03
echo 3 > /home/zookeeper-3/data/myid
more /home/zookeeper-3/data/myid
16. 啟動服務
在各節點執行以下命令
systemctl daemon-reload
systemctl start zookeeper
systemctl enable zookeeper
systemctl status zookeeper
17. 驗證
jps
zkServer.sh status
18. 瀏覽器訪問 AdminServer
瀏覽器訪問:http://spark03:9001/commands
zookeeper shell
zookeeper 存儲結構類似于Linux文件系統 使用根結構
node 不是文件也不是目錄
客戶端命令行
# 連接本地服務
zkCli.sh
# 連接其他節點
zkCli.sh -server spark02:2181
# 這里并不是連接了三個節點,而是按照順序連接一個,當第一個連接無法獲取時,就連接第二個
zkCli.sh -server spark01:2181,spark02:2181,spark03:2181
查看幫助
help
ZooKeeper -server host:port -client-configuration properties-file cmd argsaddWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVEaddauth scheme authclose config [-c] [-w] [-s]connect host:portcreate [-s] [-e] [-c] [-t ttl] path [data] [acl]delete [-v version] pathdeleteall path [-b batch size]delquota [-n|-b|-N|-B] pathget [-s] [-w] pathgetAcl [-s] pathgetAllChildrenNumber pathgetEphemerals pathhistory listquota pathls [-s] [-w] [-R] pathprintwatches on|offquit reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]redo cmdnoremovewatches path [-c|-d|-a] [-l]set [-s] [-v version] path datasetAcl [-s] [-v version] [-R] path aclsetquota -n|-b|-N|-B val pathstat [-w] pathsync pathversion whoami
連接其他節點
# 在某節點連接其他節點
connect spark01:2181
退出
quit
查看節點
ls /
ls -s /
cZxid = 0x0 # 節點創建的時候的zxid
ctime = Thu Jan 01 08:00:00 CST 1970 # 節點創建的時候的zxid
mZxid = 0x0 #節點修改的時候的zxid,與子節點的修改無關
mtime = Thu Jan 01 08:00:00 CST 1970 # 節點修改的時間
pZxid = 0x0 # 子節點的創建/刪除對應的 zxid,和修改無關,和孫子節點無關
cversion = -1 # 子節點的更新次數
dataVersion = 0 # 節點數據的更新次數
aclVersion = 0 # 節點(ACL)的更新次數
ephemeralOwner = 0x0 # 值表示與該節點綁定的 session id. 如果該節點不是 ephemeral 節點, ephemeralOwner 值為0
dataLength = 0 # 節點數據的字節數
numChildren = 1 # 節點數據的字節數
創建節點
持久
臨時
有序號
無序號
# 持久無序號
# 節點lihaozhe存儲的數據是 李昊哲
create /lihaozhe "李昊哲"
# 節點lihaozhe存儲的數據是 空
create /lihaozhe ""# 查看該節點中的文件或目錄,[]代表其中沒有文件或子目錄
[zk: localhost:2181(CONNECTED) 7] ls /lihaozhe
[]# 創建持久無序號子節點
create /lihaozhe/zk01
# 創建持久有序號子節點
create -s /lihaozhe/zk01# 創建臨時無序號節點
create -e /lihaozhe/zk10
# 創建臨時有序號節點
create -e -s /lihaozhe/zk10
刪除節點
delete /lihaozhe/zk04
delete /lihaozhe/zk01 # Node not empty: /lihaozhe/zk01
deleteall /lihaozhe
獲取節點數據
get /lihaozhe
設置節點數據
set /lihaozhe "李大寶"
關閉當前session
close
監聽
# NodeChildrenChanged
ls -w /lihaozhe
# NodeDataChanged
stat -w /lihaozhe
#
haozhe
[]
創建持久無序號子節點
create /lihaozhe/zk01
創建持久有序號子節點
create -s /lihaozhe/zk01
創建臨時無序號節點
create -e /lihaozhe/zk10
創建臨時有序號節點
create -e -s /lihaozhe/zk10
### 刪除節點```bash
delete /lihaozhe/zk04
delete /lihaozhe/zk01 # Node not empty: /lihaozhe/zk01
deleteall /lihaozhe
獲取節點數據
get /lihaozhe
設置節點數據
set /lihaozhe "李大寶"
關閉當前session
close
監聽
# NodeChildrenChanged
ls -w /lihaozhe
# NodeDataChanged
stat -w /lihaozhe
#