企業生產環境-麒麟V10(ARM架構)作業系統部署Zookeeper單節點&高可用叢集版

Linux运维技术栈發表於2024-11-11

前言:ZooKeeper是一個分散式協調服務,它為分散式應用提供一致性服務,是Apache Hadoop的子專案。它被設計為易於程式設計,同時具有高效能和高可靠性。ZooKeeper提供了一個簡單的介面和一些基本的檔案系統操作,使得開發者能夠快速地構建分散式應用。

以下是ZooKeeper的一些關鍵特性和概念:

  1. 一致性:ZooKeeper保證了分散式環境中資料的一致性。它使用原子操作來確保在分散式系統中資料的一致性。

  2. 可靠性:ZooKeeper透過資料複製和容錯機制來保證服務的可靠性。即使部分伺服器出現故障,ZooKeeper也能繼續提供服務。

  3. 有序性:ZooKeeper能夠保證操作的順序性,即使在分散式環境中,也能確保操作按照特定的順序執行。

  4. 實時性:ZooKeeper提供了實時的資料更新和監控機制,客戶端可以實時獲取到資料的變化。

  5. 層次名稱空間:ZooKeeper使用層次化的名稱空間(類似於檔案系統的路徑),這使得資料的組織和管理更加直觀和方便。

  6. 資料模型:ZooKeeper的資料模型類似於檔案系統,但它的資料節點(ZNodes)可以儲存少量的資料(預設不超過1MB)。

  7. 會話管理:客戶端與ZooKeeper伺服器之間建立的會話可以保持一段時間,期間客戶端可以執行各種操作。

  8. ACL(訪問控制列表):ZooKeeper支援細粒度的許可權控制,可以對不同的ZNode設定不同的訪問許可權。

  9. 分散式同步:ZooKeeper提供了分散式鎖、佇列等同步原語,幫助分散式系統中的節點協調操作。

  10. Watcher機制:ZooKeeper允許客戶端註冊Watcher來監聽ZNode的變化,當ZNode發生變化時,ZooKeeper會通知客戶端。

ZooKeeper的應用場景非常廣泛,包括但不限於:

  • 配置管理:在分散式系統中動態地管理配置資訊。
  • 命名服務:為分散式系統中的服務提供命名和發現機制。
  • 分散式鎖:在分散式系統中實現鎖的功能,以避免多個節點同時執行相同的操作。
  • 叢集管理:管理叢集中的節點狀態,如選舉主節點等。
  • 佇列管理:實現分散式佇列,用於任務分發和負載均衡。

ZooKeeper通常作為大型分散式系統的基礎設施之一,為系統提供必要的協調和同步服務。

部署zk3.9.2單機:

安裝zk,需要jdk環境,參考部落格xc安裝jdk篇

第一步:上傳apache-zookeeper-3.9.2-bin.tar.gz包
使用ssh終端工具登入到Zookeeper伺服器上。本例中安裝在/mpjava目錄下

第二步:配置zookeeper
1、根據zookeeper伺服器在zookeeper叢集的順序,建立zookeeper例項目錄。(zookeeper叢集必須是奇數臺)
例如:zookeeper叢集有三臺伺服器,本伺服器是第1臺伺服器,則在/mpjava目錄下建立目錄zookeeper-3.9.2,依次類推。
命令:mkdir /mpjava/zookeeper-3.9.2
2、在zookeeper-3.9.2例項目錄下建立data、dataLog
命令:mkdir data dataLog
3、在data目錄下建立myid檔案,填入服務例項的順序
例如本伺服器是第1臺伺服器,則在myid中填入1,依次類推。
4、將zookeeper-3.9.2-bin.tar.gz解壓到zookeeper-3.9.2目錄下面
命令:tar -zxvf zookeeper-3.9.2-bin.tar.gz
5、將/mpjava/zookeeper-3.9.2/apache-zookeeper-3.9.2-bin/conf/zoo_sample.cfg檔案複製為zoo.cfg檔案
命令:cd /mpjava/zookeeper-3.9.2/apache-zookeeper-3.9.2-bin/conf/ && cp zoo_sample.cfg zoo.cfg
6、按照下面的說明,編輯zoo.cfg檔案,並儲存

# The number of milliseconds of each tick											
tickTime=2000																	
# The number of ticks that the initial 												
# synchronization phase can take													
initLimit=10																	
# The number of ticks that can pass between 										
# sending a request and getting an acknowledgement									
syncLimit=5																	
# the directory where the snapshot is stored.										
dataDir=/mpjava/zookeeper-3.9.2/data												
dataLogDir=/mpjava/zookeeper-3.9.2/dataLog						
maxClientCnxns=5000															
4lw.commands.whitelist=*														
# the port at which the clients will connect											
clientPort=2181    (建議預設埠)
server.1=10.0.0.8:2888:3888		

註釋:

dataDir目錄為本zookeeper例項的data目錄										
dataLogDir目錄為本zookeeper例項的dataLogDir目錄								
clientPort為客戶端連線埠,保持為2181不改變。								
server.1中的1為例項順序,根據zookeeper例項序號,ip、port保持為127.0.0.1:2888:3888。

第三步:輸入下面命令,執行zookeeper目錄bin/zkServer.sh,啟動zookeeper
命令:./zkServer.sh start
命令:jps

啟動成功!
參考命令:

停止 ZooKeeper:        ./zkServer.sh stop
檢視 ZooKeeper狀態:   ./zkServer.sh status
檢視 ZooKeeper 伺服器的日誌: tail -f $ZOOKEEPER_HOME/logs/zookeeper.log

配置單節點開機自啟:
命令:vim /etc/rc.d/rc.local
新增:

export JAVA_HOME=/usr/java/jdk1.8.0_421
export PATH=$JAVA_HOME/bin:$PATH
touch /var/lock/subsys/local
/mpjava/zookeeper-3.9.2/apache-zookeeper-3.9.2-bin/bin/./zkServer.sh start

啟動 rc-local:
命令:systemctl restart rc-local
命令:systemctl status rc-local
測試:export JAVA_HOME=""
命令:/etc/rc.d/rc.local start
然後reboot

部署zk3.9.2叢集:

安裝zk,需要jdk環境,參考部落格xc安裝jdk篇

部署準備工作:
第一步:修改 /etc/hosts檔案
三節點:vim /etc/hosts
新增:

10.0.0.1     GH-PROD-MP-1
10.0.0.2     GH-PROD-MP-3
10.0.0.3     GH-PROD-MP-2

第二步:安裝ntpdate並配置時鐘同步

sudo yum update
sudo yum install ntpdate
時鐘同步命令:ntpdate pool.ntp.org

第三步:關閉防火牆
修改vim /etc/sysconfig/selinux
原檔案:SELINUX=permissive

修改設定 SELINUX=disabled
命令:systemctl disable firewalld
命令:systemctl stop firewalld

**第四步:將部署元件解壓縮分發到各個節點 **
命令: mkdir /usr/lib/hadoop
命令: tar -zxvf apache-zookeeper-3.9.2-bin.tar.gz
命令: mv apache-zookeeper-3.9.2-bin zookeeper-3.9.2

第六步:修改環境變數(即在檔案~/.bash_profile尾部追加下面的宣告語句)
命令:vim ~/.bash_profile
export ZOOKEEPER_HOME=/usr/lib/hadoop/zookeeper-3.9.2

export PATH=$PATH:$ZOOKEEPER_HOME/bin									
export ZOO_LOG_DIR=/var/hadoop/zk/logs	

第六步:重啟伺服器
命令:reboot

部署zookeeper 叢集 :
第一步:建立目錄
1、建立臨時目錄/var/hadoop/zk/tmp(每個節點都需要配置)
2、建立日誌目錄/var/hadoop/zk/logs(每個節點都需要配置)
3、建立資料節點目錄/var/hadoop/zk/data (每個節點都需要配置)
命令:mkdir -p /var/hadoop/zk/tmp /var/hadoop/zk/logs /var/hadoop/zk/data

第二步:修改$ZOOKEEPER_HOME/conf/zoo.cfg(在 GH-PROD-MP-1)
從模板zook_sample.cfg 複製一份配置檔案zoo.cfg
命令:cp $ZOOKEEPER_HOME/conf/zoo_sample.cfg $ZOOKEEPER_HOME/conf/zoo.cfg
修改配置檔案:

tickTime=6000			
dataDir=/var/hadoop/zk/data		#資料儲存路徑
dataLogDir=/var/hadoop/zk/logs	    #日誌路徑	
autopurge.purgeInterval=1			#快照自動清理頻率,單位:小時		
autopurge.snapRetainCount=3		#儲存快照數量	
server.0=GH-PROD-MP-1:2888:3888
server.1=GH-PROD-MP-2:2888:3888
server.2=GH-PROD-MP-3:2888:3888	

第三步:編輯myid

GH-PROD-MP-1執行:echo 0 > /var/hadoop/zk/data/myid
GH-PROD-MP-2執行:echo 1 > /var/hadoop/zk/data/myid
GH-PROD-MP-3執行:echo 2 > /var/hadoop/zk/data/myid

第五步:同步配置檔案到叢集到其他節點(在 GH-PROD-MP-1)
命令:tar -czf conf.tar.gz conf/
命令:scp -r $ZOOKEEPER_HOME/conf.tar.gz GH-PROD-MP-2:$ZOOKEEPER_HOME/
命令:scp -r $ZOOKEEPER_HOME/conf.tar.gz GH-PROD-MP-3:$ZOOKEEPER_HOME/

第六步:啟動zookeeper叢集
1、在GH-PROD-MP-1,GH-PROD-MP-2,GH-PROD-MP-3分別執行啟動命令:zkServer.sh start
2、驗證叢集啟動成功,分別輸入:jps
GH-PROD-MP-1

GH-PROD-MP-2

GH-PROD-MP-3

配置開機自動:
這裡推薦幾種不同方法(這裡一和二不寫具體配置了,優先推薦方法二,便於運維管理),如果無法生效就用方法三:

方法一:crontab -e
方法二:/etc/systemd/system/zookeeper.service

方法三:
命令:vim /etc/rc.d/rc.local
新增:

export JAVA_HOME=/usr/java/jdk1.8.0_421
export PATH=$JAVA_HOME/bin:$PATH
touch /var/lock/subsys/local

#!/bin/sh -e
if ! pgrep -x "zkServer.sh" > /dev/null
then
    /usr/lib/hadoop/zookeeper-3.9.2/bin/zkServer.sh start
fi
exit 0

加執行許可權: chmod +x /etc/rc.d/rc.local
參考命令,啟動rc-local:systemctl restart rc-local
檢視 rc-local狀態:systemctl status rc-local
然後reboot驗證

相關文章