最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ZooKeeper分布式協調服務設計核心概念及安裝配置

 更新時間:2022年03月21日 15:46:50   作者:愿許浪盡天涯  
這篇文章主要為大家介紹了ZooKeeper分布式協調服務核心概念及安裝配置,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

一、ZooKeeper 簡介

ZooKeeper 是一個開源的分布式協調服務,目前由 Apache 進行維護。ZooKeeper 可以用于實現分布式系統(tǒng)中常見的發(fā)布/訂閱、負載均衡、命令服務、分布式協調/通知、集群管理、Master 選舉、分布式鎖和分布式隊列等功能。 它具有以下特性:

順序一致性: 來自客戶端的更新操作將會按照順序被應用;
 

原子性: 即要么全部更新成功,要么要不更新失敗,沒有部分的結果;
 

統(tǒng)一的系統(tǒng)鏡像: 即不管客戶端連接的是哪臺服務器,都能看到同樣的服務視圖(也就是無狀態(tài)的)
 

可靠性: 一旦寫入操作被執(zhí)行,那么這個狀態(tài)將會被持久化,直到其它客戶端的修改生效。
 

實時性: 一旦一個事務被成功應用,ZooKeeper 可以保證客戶端立即讀取到這個事務變更后的最新狀態(tài)的數據。

1.ZooKeeper 設計目標

  • ZooKeeper 致力于為那些高吞吐的大型分布式系統(tǒng)提供一個高性能、高可用、且具有嚴格順序訪問控制能力的分布式協調服務。

1)簡單的數據模型:

ZooKeeper 通過樹形結構來存儲數據,它由一系列被稱為 ZNode 的數據節(jié)點組成,類似于常見的文件系統(tǒng);

不過和常見的文件系統(tǒng)不同,ZooKeeper 將數據全量存儲在內存中,以此來實現高吞吐,減少訪問延遲。

2)可配置 Cluster:

為了保證高可用,最好是以集群形態(tài)部署 ZooKeeper,這樣只要集群中大部分機器是可用的,那么 ZooKeeper 本身仍然可用。

在這里插入圖片描述

上圖中每一個 Server 代表一個安裝 ZooKeeper 服務的服務器,組成 ZooKeeper 服務的服務器都會在內存中維護當前的服務器狀態(tài),并且每臺服務器間都保持著通信。并通過 Zab 協議來保持數據的一致性。

3)順序訪問:

對于來自客戶端的每個更新請求,ZooKeeper 都會分配一個全局唯一的遞增 ID,這個 ID 決定了所有事務操作的先后順序。

4)高性能高可用

ZooKeeper 將數據全量存儲在內存中以保持高性能,并通過服務集群來實現高可用;由于 ZooKeeper 的所有更新和刪除都是基于事務的,所以其在讀多寫少的應用場景中有著很高的性能表現。

2.核心概念

Cluster 角色:

角色作用
Leader提供讀寫服務,并維護集群狀態(tài)(經過選舉產生)
Follower提供讀寫服務,并定期向 Leader 匯報自己的節(jié)點狀態(tài)(同時也參加 過半寫成功 的策略和 Leader 的選舉)
OBServer提供讀寫服務,并定期向 Leader 匯報自己的節(jié)點狀態(tài)(因為不參加策略和選舉,所以可以在不影響寫性能的情況下提升集群的讀性能)

1)Session 會話

當 Client 通過 TCP 長連接 連接到 ZooKeeper 服務器時,Session 便開始建立連接,并通過 tickTime(心跳檢測)機制來保持有效的會話狀態(tài)。通過這個連接,Client 可以發(fā)送請求并接收響應,同時也可以接收到 Watch 事件的通知。

另外,當由于網絡故障或者 Client 主動斷開等原因,導致連接斷開,此時只要在會話超時時間之內重新建立連接,則之間創(chuàng)建的會話依然有效。(這個取決于 tickTime 配置)

2)數據節(jié)點

ZooKeeper 數據模型是由一系列基本數據單元 ZNode(數據節(jié)點)組成的節(jié)點樹,其中根節(jié)點為 /(每個節(jié)點上都會保存自己的數據和節(jié)點信息);ZooKeeper 中的節(jié)點可以分為兩大類:

持久節(jié)點: 節(jié)點一旦創(chuàng)建,除非被主動刪除,否則一直存在。

臨時節(jié)點: 一旦創(chuàng)建該節(jié)點的客戶端會話(Session)失效,則所有該客戶端創(chuàng)建的臨時節(jié)點都會被刪除。

3)Watcher

ZooKeeper 中一個常用的功能是 Watcher(事件監(jiān)聽器),它允許用戶在指定節(jié)點上針對感興趣的事件注冊監(jiān)聽,當事件發(fā)生時,監(jiān)聽器會被觸發(fā),并將事件推送到客戶端。該機制是 ZooKeeper 實現分布式協調服務的重要特性。

4)ACL

命令作用
create可以進行創(chuàng)建操作
read可以進行查看操作
write可以對創(chuàng)建的內容進行寫入操作
delete可以進行刪除操作
admin可以進行配置權限操作

命令作用create可以進行創(chuàng)建操作read可以進行查看操作write可以對創(chuàng)建的內容進行寫入操作delete可以進行刪除操作admin可以進行配置權限操作

3.Zab 協議介紹

Zab(ZooKeeper Atomic Broadcast 原子廣播)協議是為分布式協調服務 ZooKeeper 專門設計的一種 支持崩潰恢復的原子廣播協議;

在 ZooKeeper 中,主要依賴 Zab 協議來實現分布式數據一致性;

基于 Zab 協議,ZooKeeper 實現了一種主備模式的系統(tǒng)架構來保持集群中各個副本間的數據一致性。

二、ZooKeeper Cluster 安裝

準備工作:

主機名操作系統(tǒng)IP 地址
ZooKeeperCentOS 7.4192.168.1.1

安裝 JDK:下載地址(需要創(chuàng)建 Oracle 賬號)

[root@ZooKeeper ~]# ls
anaconda-ks.cfg  jdk-8u181-linux-x64.tar.gz
[root@ZooKeeper ~]# tar zxf jdk-8u181-linux-x64.tar.gz 
[root@ZooKeeper ~]# ls
anaconda-ks.cfg  jdk1.8.0_181  jdk-8u181-linux-x64.tar.gz
[root@ZooKeeper ~]# mv jdk1.8.0_181 /usr/local/java
[root@ZooKeeper ~]# cat <<END >> /etc/profile
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin
END
[root@ZooKeeper ~]# source /etc/profile
[root@ZooKeeper ~]# java -version

在這里插入圖片描述

1.安裝 ZooKeeper

[root@ZooKeeper ~]# wget http://dlcdn.apache.org/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz
[root@ZooKeeper ~]# ls
anaconda-ks.cfg  apache-zookeeper-3.6.3-bin.tar.gz  jdk-8u181-linux-x64.tar.gz
[root@ZooKeeper ~]# tar zxf apache-zookeeper-3.6.3-bin.tar.gz
[root@ZooKeeper ~]# mv apache-zookeeper-3.6.3-bin /usr/local/zookeeper
[root@ZooKeeper ~]# mkdir /usr/local/zookeeper/data
[root@ZooKeeper ~]# cat <<END >> /usr/local/zookeeper/conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
clientPort=2181
END

注解:

tickTime:Client 和服務器間的通信會話限制(相當于健康檢查,tickTime 的時間為 ms (1s = 1000ms))

initLimit:Leader 和 Follower 間初始通信限制。

syncLimit:Leader 和 Follower 間同步通信限制(當響應時間超于 syncLimit * tickTime 時,Leader 便會將 Follower 進行移除)

dataDir:此目錄用于存放保存在內存數據庫中的快照信息(當未配置 dataLogDir 參數時,日志信息也會存放到此目錄)

clientPort:ZooKeeper 監(jiān)聽的端口,用于客戶端連接使用。

啟動 ZooKeeper

[root@ZooKeeper ~]# /usr/local/zookeeper/bin/zkServer.sh start						# 啟動
[root@ZooKeeper ~]# /usr/local/zookeeper/bin/zkServer.sh status						# 查看狀態(tài)

在這里插入圖片描述

連接到 ZooKeeper

[root@ZooKeeper ~]# /usr/local/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181
Welcome to ZooKeeper!
JLine support is enabled
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: 127.0.0.1:2181(CONNECTED) 0] 

當連接成功后,系統(tǒng)會輸出 ZooKeeper 的相關配置信息和相關環(huán)境,并在屏幕上輸出 Welcome to ZooKeeper! 等信息。

2.使用 Golang 連接 ZooKeeper 的 API 接口

安裝 Golang

[root@ZooKeeper ~]# git clone https://github.com/samuel/go-zookeeper.git
[root@ZooKeeper ~]# mv go-zookeeper /usr/local/go/src/
package main
import (
    "fmt"
    "time"
    "go-zookeeper/zk"
)
func main() {
    Hosts := []string{"192.168.1.1:2181"}
    conn, _, err := zk.Connect(Hosts,time.Second * 5)
    defer conn.Close()
    if err != nil {
        fmt.Println(err)
        return
    }
}

在這里插入圖片描述

通過 Golang 實現對 ZooKeeper 的增刪改查:

package main
import (
    "fmt"
    "time"
    "go-zookeeper/zk"
)
var (
    path = "/Zzz"
)
//增
func add(conn *zk.Conn) {
    var data = []byte("Hello ZooKeeper")
    // flags 的四種取值方式:
    // 0 (永久.除非手動刪除)
    // zk.FlagEphemeral = 1 (短暫. session 斷開則該節(jié)點也被刪除)
    // zk.FlagSequence = 2 (會自動在節(jié)點后面添加序號)
    // 3 (Ephemeral 和 Sequence. 即短暫且自動添加序號)
	var flags int32 = 0
	// 獲取訪問控制權限
	acls := zk.WorldACL(zk.PermAll)
	create, err := conn.Create(path,data,flags,acls)
	if err != nil {
	    fmt.Printf("創(chuàng)建失敗: %v\n",err)
		return
    }
	fmt.Printf("創(chuàng)建: %v 成功\n",create)
}
// 查
func get(conn *zk.Conn) {
    data, _, err := conn.Get(path)
	if err != nil {
	    fmt.Printf("查詢 %s 失敗,err: %v\n",path,err)
	    return
	}
	fmt.Printf("%s 的值為 %s\n",path,string(data))
}
// 刪除與增加不同在于其函數中的 Version 參數. 其中 Version 使用 CAS 支持 (可以通過此種方式保證原子性)
// 改
func modify(conn *zk.Conn) {
    new_data := []byte("This is ZooKeeper")
    _, sate, _ := conn.Get(path)
    _, err := conn.Set(path,new_data,sate.Version)
    if err != nil {
	    fmt.Printf("數據修改失敗: %v\n",err)
	    return
    }
    fmt.Println("數據修改成功")
}
// 刪
func del(conn *zk.Conn) {
    _, sate, _ := conn.Get(path)
    err := conn.Delete(path,sate.Version)
    if err != nil {
        fmt.Printf("數據刪除失敗: %v\n",err)
	    return
    }
    fmt.Println("數據刪除成功")
}
func main() {
    hosts := []string{"192.168.1.1:2181"}
    conn, _, err := zk.Connect(hosts,time.Second * 5)
    defer conn.Close()
    if err != nil {
        fmt.Println(err)
	    return
    }
    /* 增刪改查 */
    add(conn)
    get(conn)
    modify(conn)
    get(conn)
    del(conn)
}

3.配置 ZooKeeper Cluster

在原來的基礎上,在增加兩臺服務器:

主機名操作系統(tǒng)IP 地址
ZooKeeper-2CentOS 7.4192.168.1.2
ZooKeeper-3CentOS 7.4192.168.1.3

1)將 Java 和 ZooKeeper 傳給新的服務器:

[root@ZooKeeper ~]# scp -r /usr/local/java root@192.168.1.2:/usr/local/
[root@ZooKeeper ~]# scp -r /usr/local/zookeeper root@192.168.1.2:/usr/local/

2)在新的服務器上啟動 ZooKeeper:

[root@ZooKeeper ~]# cat <<END >> /etc/profile
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin
END
[root@ZooKeeper ~]# source /etc/profile
[root@ZooKeeper ~]# /usr/local/zookeeper/bin/zkServer.sh start

3)配置 Cluster 集群(三臺服務器上操作一樣)

[root@ZooKeeper ~]# cat <<END >> /usr/local/zookeeper/conf/zoo.cfg
server.1=192.168.1.1:2888:3888
server.2=192.168.1.2:2889:3889
server.3=192.168.1.3:2890:3890
END

4)創(chuàng)建 myid 文件

[root@ZooKeeper ~]# echo "1" > /usr/local/zookeeper/data/myid
[root@ZooKeeper-2 ~]# echo "2" > /usr/local/zookeeper/data/myid
[root@ZooKeeper-2 ~]# echo "3" > /usr/local/zookeeper/data/myid

需要確保每臺服務器的 myid 文件中數字不同,并且和自己所在機器的 zoo.cfgserver.id=host:port:portid 值一樣。

另外,id 的范圍是 1 ~ 255。

5)重啟 ZooKeeper 服務

[root@ZooKeeper ~]# /usr/local/zookeeper/bin/zkServer.sh restart			# 三臺服務器都要重啟

查看 ZooKeeper 狀態(tài):

在這里插入圖片描述

驗證:

在這里插入圖片描述

以上就是ZooKeeper分布式協調服務設計核心概念及安裝配置的詳細內容,更多關于ZooKeeper分布式協調服務核心安裝配置的資料請關注腳本之家其它相關文章!

相關文章

  • zabbix利用python腳本發(fā)送報警郵件的方法

    zabbix利用python腳本發(fā)送報警郵件的方法

    這篇文章是是用外部腳本python實現zabbix的報警機制的。對于zabbix3.0此處存在一個小改動,忙活了一天才找到原因噠。下面就來看看詳細的介紹吧,有需要的朋友們可以參考借鑒。
    2016-12-12
  • Zabbix?配置PING監(jiān)控的方法

    Zabbix?配置PING監(jiān)控的方法

    Zabbix?提供了一個預定義的模板,名為?Template?Module?ICMP?Ping,用于監(jiān)控網絡設備的?ICMP?響應,這篇文章主要介紹了Zabbix?配置PING監(jiān)控,需要的朋友可以參考下
    2024-07-07
  • 教你使用zabbix api批量添加數百臺監(jiān)控主機的方法

    教你使用zabbix api批量添加數百臺監(jiān)控主機的方法

    這篇文章主要介紹了利用zabbix api批量添加數百臺監(jiān)控主機,本次我們將實現用一臺主機虛擬出100臺主機,并通過api的方式自動添加監(jiān)控主機,需要的朋友可以參考下
    2022-03-03
  • zabbix實現郵件告警的方法

    zabbix實現郵件告警的方法

    今天小編就為大家分享一篇關于zabbix實現郵件告警的方法,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • 基于zabbix實現監(jiān)控Jenkins過程詳解

    基于zabbix實現監(jiān)控Jenkins過程詳解

    這篇文章主要介紹了基于zabbix實現監(jiān)控Jenkins過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • centos7.9安裝zabbix5.0.14及配置過程

    centos7.9安裝zabbix5.0.14及配置過程

    這篇文章主要介紹了centos7.9安裝zabbix5.0.14的詳細過程,本文給大家介紹了基礎環(huán)境配置方法及安裝zabbix相關組件的過程講解,需要的朋友可以參考下
    2021-08-08
  • 解決zabbix監(jiān)控因php問題導致圖形界面中文亂碼方法

    解決zabbix監(jiān)控因php問題導致圖形界面中文亂碼方法

    解決因編譯php中添加了-enable-gd-jis-conv選項導致Zabbix監(jiān)控系統(tǒng)圖形界面中文亂碼問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友參考下吧
    2019-10-10
  • 監(jiān)控zabbix的安裝與使用教程

    監(jiān)控zabbix的安裝與使用教程

    這篇文章主要介紹了監(jiān)控zabbix的安裝與使用教程,詳細介紹了zabbix的安裝步驟,zabbix的主動模式和被動模式簡介及實現,需要的朋友可以參考下
    2024-08-08
  • zabbix如何添加監(jiān)控主機和自定義監(jiān)控項

    zabbix如何添加監(jiān)控主機和自定義監(jiān)控項

    這篇文章主要介紹了zabbix添加監(jiān)控主機和自定義監(jiān)控項的方法,添加自定義監(jiān)控項此處以監(jiān)控當前系統(tǒng)的用戶個數為例子,通過腳本命令給大家詳細講解,需要的朋友可以參考下
    2022-08-08
  • zabbix 2.2安裝步驟詳細介紹

    zabbix 2.2安裝步驟詳細介紹

    這篇文章主要介紹了zabbix 2.2安裝步驟詳細介紹的相關資料,本文給大家介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下
    2016-10-10

最新評論

曲靖市| 苍山县| 馆陶县| 淮阳县| 定南县| 乐亭县| 阳朔县| 八宿县| 仙游县| 河津市| 澄迈县| 云霄县| 龙州县| 博兴县| 调兵山市| 瓮安县| 政和县| 察雅县| 特克斯县| 武夷山市| 上饶县| 原阳县| 石狮市| 宜君县| 叙永县| 祁阳县| 福安市| 阳曲县| 鄂伦春自治旗| 将乐县| 灌云县| 高尔夫| 江安县| 焦作市| 广宗县| 泽库县| 道孚县| 同江市| 廉江市| 策勒县| 韶关市|