Centos下Zookeeper的安裝部署

一 安裝jdk

zookeeper是採用java開發的,因此須要依賴jdk環境,咱們須要先安裝jdk,最便捷的方式就是採用yum,可是yum的官方源速度很慢,咱們能夠先更換yum源;java

#備份初始源 
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
#下載新的CentOS-Base.repo 源文件 
cd /etc/yum.repos.d
curl -O http://mirrors.aliyun.com/repo/Centos-7.repo
mv Centos-7.repo CentOS-Base.repo
#更新緩存
yum clean all
yum makecache

ok如今咱們就可使用yum安裝須要的jdk了算法

yum -y install java-1.8.0-openjdk-demo.x86_64
#驗證一下  
java -version

二 安裝zookeeper

#下載二進制壓縮包
wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.6.1/apache-zookeeper-3.6.1-bin.tar.gz

#解壓縮
tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz
#移動至local下
mv apache-zookeeper-3.5.7-bin /usr/local
# 建立軟鏈接
ln -s /usr/local/apache-zookeeper-3.5.7-bin /usr/local/zookeeper
# 添加至環境變量
echo export PATH=\"\$PATH:/usr/local/zookeeper/bin\" >> ~/.bashrc
source ~/.bashrc

目錄結構:shell

image-20200507153419750

配置文件模板:apache

image-20200507153439527

主要配置項:vim

image-20200507153454381

三 啓動與訪問

#在啓動前須要先提供 一個dataDir,在安裝目錄下建立名爲data的目錄
#該目錄默認指向tmp必須修改,用於存儲zookeeper持久化數據和日誌文件;
cd /usr/local/zookeeper
mkdir data

#複製配置模板改名爲zoo.cfg
cd /usr/local/zookeeper/conf
cp zoo_sample.cfg  zoo.cfg

#修改zoo.cfg中的dataDir指向新建的data目錄
#dataDir=/usr/local/zookeeper/data

#啓動
zkServer.sh start

客戶端訪問緩存

zkCli.sh
#當服務器不在當前機器上時經過 -server參數指定主機地址 
zkCli.sh -server 10.211.55.3:2181

四 集羣搭建

集羣搭建準備

在開始搭建集羣以前咱們須要先了解一下概念:bash

三種角色:

爲了不 Zookeeper 的單點問題,zk 也是以集羣的形式出現的。zk 集羣中的角色主要有 如下三類:服務器

  • Leader 集羣的主節點,能夠處理寫請求,並將數據同步至從節點curl

  • Follower 從節點,跟隨者,決策者,學習者,僅能夠處理讀請求,收到寫請求是自動轉發給leader,具有選舉權,被選舉權,決策權性能

  • Observer 學習者 僅可處理讀請求,且不具有選舉權,被選舉權和決策權

    因爲選舉leader的過程使用的是paxos算法,參與選舉的節點越多則選舉過程越慢,且選舉過程當中節點不可對外服務,Observe能夠縮短leader選舉過程所需的時間; 減小集羣不可用;

法定人數

zookeeper服務器運行於兩種模式:獨立模式和集羣模式。集羣模式下,會複製全部服務器的 數據樹。但若是讓客戶端等待全部複製完成,延遲過高。這裏引入法定人數概念,指爲了使zookeeper 集羣正常工做,必須有效運行的服務器數量。同時也是服務器通知客戶端保存成功前,必須保存數據的 服務器最小數。例如咱們有一個5臺服務器的zookeeper集羣,法定人數爲3,只要任何3個服務器保存了數據,客戶端就會收到確認。

image-20200606132424972

另外當法定人數爲3時,集羣中只要有3臺服務器存活,整個zookeeper集羣就是可用的。

image-20200606132648464

注意:observer不算在法定人數內

集羣應有奇數個節點

zookeeper節點數量因當是大於1的奇數,由於zookeeper集羣必須在大多數節點均可用的狀況下才能正常提供訪問,若節點爲3個則運行宕機1個,若節點爲4個一樣只容許宕機1個,偶數個節點的容許宕機的節點佔比更低;

集羣搭建

ip配置

一般虛擬機會以dhcp的方式得到ip,ip可能會發生變化,形成沒法鏈接服務器,因此咱們先對克隆獲得的虛擬機,進行靜態ip配置,同時修改hostname,保證集羣中全部服務器的主機名和地址都是不一樣的

#修改主機名稱  zk1 是新的主機名
echo zk1 > /etc/hostname
#修改 ip配置
vim /etc/sysconfig/network-scripts/ifcfg-eth0

修改後的文件內容:

image-20200507153513399

只修改標註的內容,其餘的保持原樣

防火牆設置:

爲了使服務器之間能互相訪問,須要開放對應端口,或是中止防火牆(僅限測試環境),相關 指令 以下:

#1.禁止firewall開機啓動
systemctl disable firewalld
#2.設置開機啓動防火牆
systemctl enable firewalld.service

zookeeper集羣部署

zookeeper節點數量因當是大於1的奇數,由於zookeeper集羣必須在大多數節點均可用的狀況下才能正常提供訪問,若節點爲3個則運行宕機1個,若節點爲4個一樣只容許宕機1個,偶數個節點的容許宕機的節點佔比更低;

1.在配置文件中配置節點信息

image-20200507153528178

注意:如果在一臺機器上作測試,則須要需改clientPort,以及每一個節點的通訊端口和選舉端口,保證不與其餘節點衝突

2.在dataDir目錄下建立myid

該文件用於存儲集羣中各個zookeeper節點的編號

建立myid文件:

touch /usr/local/zookeeper/data/myid
#文件內容爲當前zookeeper的節點編號與配置文件對應
echo 1 > /usr/local/zookeeper/data/myid

注意:若data目錄下有其餘文件則須要刪除,在建立集羣前要保持zookeeper是空的

3.克隆當前虛擬機

1.逐個啓動新的虛擬機並修改ip地址(按照上面的方法)

2.修改myid文件中的節點id與配置文件匹配

3.逐個啓動每一個虛擬機上的zookeeper服務

zkServer.sh start
#啓動完成後能夠經過如下指令查看當前zookeeper的狀態
zkServer.sh status

能夠發現此時有一個leader和兩個follower表示集羣已正常運行

Observer

爲何須要Observer:

爲了提升zookeeper的吞吐量,咱們能夠爲其添加更多的follower,可是更多的follower會致使投票過程變得更慢,而客戶端的響應時間變長(由於投票過程zookeeper不能響應),所以zookeeper設計了Observer節點

什麼是Observer:

Observer與普通的 follower僅有一個區別: Observer不參與 投票環節; 可是提議 和commit一樣會發送給Observer,這意味着Observer中的數據也是一致的,既提升了整個集羣的性能同時避免了,投票帶來的延遲;

配置方法:

只須要在 節點後面 添加observer關鍵字便可將節點做爲Observer

echo server.4=10.211.55.9:28888:38888:observer >> /usr/local/zookeeper/conf/zoo.cfg
#添加後的內容:
server.1=10.211.55.5:28888:38888
server.2=10.211.55.6:28888:38888
server.3=10.211.55.7:28888:38888
server.4=10.211.55.8:28888:38888:observer

啓動集羣后經過status查看節點狀態:

zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: observer

但要注意Observer不能算在法定人數內;

相關文章
相關標籤/搜索