主頁 > 作業系統 > 分布式協調服務之Zookeeper集群部署

分布式協調服務之Zookeeper集群部署

2020-10-20 01:22:35 作業系統

  一、分布式系統概念

  在聊Zookeeper之前,我們先來聊聊什么是分布式系統;所謂分布式系統就是一個系統的軟體或硬體組件分布在網路中的不同計算機之上,彼此間通過訊息傳遞進行通信和協作的系統;簡單講就是一個系統的組件分布在不同網路中的各主機上,彼此通過訊息傳遞通信和協作,我們把這樣的系統就叫做分布式系統;

  二、分布式系統的特征

  1、分布性:所謂分布性就是指我們在上面描述的各組件分布在不同的網路中的不同計算機上;

  2、對等性:所謂對等性是指不同計算節點上的組件沒有主從之分,所有組件的角色身份都是平等的;

  3、并發性:指集群中的各節點同時對一些資源進行并發訪問;各節點同時并發訪問一些資源,如何協調這些節點對同一資源的訪問是一個分布式系統面臨的一個問題;  

  4、缺乏全域時鐘:集群各節點組件沒有一個全域時鐘;

  5、故障必然會發生:這個是說一個分布式系統中的各個節點一定會故障發生;

  三、分布式系統常見的故障

  1、通信例外:集群各節點都是通過網路通信,如果因各網路設備故障或例外,或者網路線路故障都可導致通信例外;

  2、網路磁區:在發生通信例外后,各節點間通信延遲變得越來越高,最侄訓導致一個分布式系統的所有節點中,一部分能夠正常通信,一部分不能正常通信,我們把這種現象叫做網路發生了磁區;比如,兩臺server組成的集群,當其中一臺server不能夠正常的聯系到另一臺server,這個時候我們就說網路發生了磁區;對于網路磁區,如何界定哪臺server的網路故障就先得尤為重要;

  3、三態:指在分布式系統中各組件間的每一次請求和應答狀態;如果能夠正常回應請求我們就說本次請求成功被回應;反之,我們就說本次請求失敗;除了這兩種狀態外,還有第三種,在分布式系統中網路是不可靠因素,因此各組件間呼叫就很有可能存在超時;所謂超時是指在一定時間范圍內請求一直沒有得到回應;

  4、節點故障:指分布式系統中各節點因各種原因導致節點故障;比如節點斷電宕機,人為操作不當等等;

  四、CAP理論和BASE理論

  CAP理論指一個分布式系統中,一致性(Consistency)、可用性(Availability)、磁區容錯性(Partition tolerance);這三個要素最多只能同時滿足兩個;這樣一來我們的系統要么滿足一致性和可用性,要么滿足一致性和磁區容錯性,要么滿足可用性和磁區容錯性;我們知道一個分布式系統各組件間傳遞訊息來通信,所以網路磁區容錯性應該必須滿足;這樣一來我們的系統就必須在一致性和可用性之間做權衡;

  BASE理論:BA表示基本可用,S表示軟狀態,E表示最終一致性;它主要是對CAP理論中的一致性和可用性進行權衡的結果;意思是說一個分布式系統應該滿足系統基本可用(允許部分節點不可用),在一定時間視窗內我們允許各節點之間資料不一致,但要保證最終一致;

  五、zookeeper簡介

  zookeeper是一個開源的分布式協調服務,由知名互聯網公司Yahoo創建,它是Chubby的開源實作;換句話講,zookeeper是一個典型的分布式資料一致性解決方案,分布式應用程式可以基于它實作資料的發布/訂閱、負載均衡、名稱服務、分布式協調/通知、集群管理、Master選舉、分布式鎖和分布式佇列;

  zookeeper集群中的相關概念

  集群角色:Leader、Follower、Observer;一個zookeeper(簡稱zk)集群,是由一個leader,多個Follower和Observer角色組成;其中Leader是由follower和observer選舉產生,提供讀寫服務;Leader參與選舉,能夠被選舉,提供讀服務;Observer參與選舉,不能夠被選舉,提供讀服務;

  zk會話:指客戶端和服務端建立的tcp長鏈接;

  資料節點(ZNode):即zk資料模型中的資料單元;zk的資料都存盤于記憶體中,資料模型為樹狀結構(ZNode Tree);每個ZNode都會保存自己的資料于記憶體中;其中ZNode節點又分持久節點和臨時節點,所謂持久節點指僅顯式洗掉才消失的節點;臨時節點指會話中止即自動消失的節點;

  版本(version):ZK會為每個ZNode維護一個稱之為Stat的資料結構,記錄了當前ZNode的三個資料版本;當前版本(version),當前znode的子節點的版本(cversion),當前znode的ACL的版本(aversion);

  ACL:ZK使用ACL機制進行權限控制;CREATE, READ,WRITE,DELETE,ADMIN;

  事件監聽器(Watcher):ZK上,由用戶指定的觸發機制,在某些事件產生時,ZK能夠將通知給相關的客戶端;

  ZAB協議:Zookeeper Atomic Broadcast,ZK原子廣播協議;Zab協議是為分布式協調服務Zookeeper專門設計的一種 支持崩潰恢復的原子廣播協議; 主要作用是在zk集群leader崩潰以后,能夠基于此協議選舉新leader,并且保證資料最終一致性和完整性;zk客戶端連接zk集群中的任何一個節點,發起請求,如果客戶端發送讀請求,則直接由當前節點回應;如果客戶端發送的是寫請求,且當前節點不是leader節點,則由當前節點把寫請求,轉發給leader,由leader進行寫事務廣播,只有超過集群節點半數的回應允許寫,該事務才會被并提交;只有當leader寫成功后,leader會通知各follower來同步資料;對于zab協議來講,它存在三種狀態,分別是Looking,Following和Leading;所謂looking狀態指zk集群正在啟動或leader崩潰以后,各節點進行選舉的程序時的狀態;following狀態指當zk集群中有leader以后,各個follower的狀態;leading狀態就是指leader所屬狀態;所以zk集群中的各節點都會在這三個狀態上來回轉換,在集群剛啟動或leder崩潰以后,各節點都會切換為looking狀態,在選舉產生leader以后,當選leader的節點會從looking切換為leading狀態,其他follower會從looking切換為following狀態;只要zk集群觸發一次新的選舉,都會經過上述狀態的轉換;

  六、zookeeper集群部署

  環境說明

主機名 ip地址
node01 192.168.0.41
node02 192.168.0.42
node03 192.168.0.43

 

  

 

 

 

 

  1、集群各節點安裝jdk

[root@node01 ~]# yum install -y java-1.8.0-openjdk-devel

  提示:各節點的時間同步、selinux、iptables和firewalld服務的配置都要提前做好;

  驗證:在各節點執行java -version看看對應java的版本是不是我們安裝的版本?

  提示:只要在各節點上能夠看到對應版本的java資訊出現,并且是我們指定的版本,說明java環境沒有問題;

  2、下載zookeeper二進制包

[root@node01 ~]# cd /usr/local/
[root@node01 local]# ll
total 0
drwxr-xr-x. 2 root root  6 Nov  5  2016 bin
drwxr-xr-x. 2 root root  6 Nov  5  2016 etc
drwxr-xr-x. 2 root root  6 Nov  5  2016 games
drwxr-xr-x. 2 root root  6 Nov  5  2016 include
drwxr-xr-x. 2 root root  6 Nov  5  2016 lib
drwxr-xr-x. 2 root root  6 Nov  5  2016 lib64
drwxr-xr-x. 2 root root  6 Nov  5  2016 libexec
drwxr-xr-x. 2 root root  6 Nov  5  2016 sbin
drwxr-xr-x. 5 root root 49 Sep 15 20:33 share
drwxr-xr-x. 2 root root  6 Oct 19 19:42 src
[root@node01 local]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz
--2020-10-19 19:42:52--  https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz
Resolving mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)... 101.6.8.193, 2402:f000:1:408:8100::1
Connecting to mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)|101.6.8.193|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 12515974 (12M) [application/x-gzip]
Saving to: ‘apache-zookeeper-3.6.2-bin.tar.gz’

100%[================================================================================>] 12,515,974  4.02MB/s   in 3.0s   

2020-10-19 19:42:55 (4.02 MB/s) - ‘apache-zookeeper-3.6.2-bin.tar.gz’ saved [12515974/12515974]

[root@node01 local]# ll
total 12224
-rw-r--r--  1 root root 12515974 Sep  9 19:36 apache-zookeeper-3.6.2-bin.tar.gz
drwxr-xr-x. 2 root root        6 Nov  5  2016 bin
drwxr-xr-x. 2 root root        6 Nov  5  2016 etc
drwxr-xr-x. 2 root root        6 Nov  5  2016 games
drwxr-xr-x. 2 root root        6 Nov  5  2016 include
drwxr-xr-x. 2 root root        6 Nov  5  2016 lib
drwxr-xr-x. 2 root root        6 Nov  5  2016 lib64
drwxr-xr-x. 2 root root        6 Nov  5  2016 libexec
drwxr-xr-x. 2 root root        6 Nov  5  2016 sbin
drwxr-xr-x. 5 root root       49 Sep 15 20:33 share
drwxr-xr-x. 2 root root        6 Oct 19 19:42 src
[root@node01 local]# scp apache-zookeeper-3.6.2-bin.tar.gz node02:/usr/local/
apache-zookeeper-3.6.2-bin.tar.gz                                                       100%   12MB  26.8MB/s   00:00    
[root@node01 local]# scp apache-zookeeper-3.6.2-bin.tar.gz node03:/usr/local/
apache-zookeeper-3.6.2-bin.tar.gz                                                       100%   12MB  32.7MB/s   00:00    
[root@node01 local]# 

  解壓二進制包,并作軟連接

  提示:其他兩個節點都要做相同的操作;

  3、配置zookeeper

  提示:zookeeper在二進制包中給我們提供了一個示例組態檔其路徑為conf/下名為zoo_sample.cfg,我們需要將其復制為zoo.cfg,然后基于此檔案做修改即可;這里主要修改dataDir,從名字上我們可以知道,這個引數是指定zookeeper的資料目錄;上面的tickTime用于指定節點向leader發送心跳的間隔時間,單位毫秒,一般不用改;initLimit用于指定初始化階段要經過多個tickTime時長;超出則為初始化超時或初始化失敗;syncLimit用戶指定同步階段需要經過多少個tickTime時長,超出指定的時長,則為同步失敗,或同步超時;clientPort用于指定客戶端連接zk集群所用埠,即zk集群客戶監聽埠;后面的server.1使用于配置集群第一個節點的資訊;其語法格式為server.id=[hostname or ipaddr ]:port:port[:observer];其中第一個port用于指定follower與leader進行通信和資料同步時所使用埠;第二個port是指定leader選舉時使用的埠;

  zk配置引數說明

  除了以上配置,zk還有其他配置

            存盤配置:
                preAllocSize:為事務日志預先分配的磁盤空間量;默認65535KB;
                snapCount:每多少次事務后執行一次快照操作;每事務的平均大小在100位元組;
                autopurget.snapRetainCount:自動清理快照時,需要保存最近的快照個數;
                autopurge.purgeInterval:purge操作的時間間隔,0表示不啟動;
                fsync.warningthresholdms:zk進行事務日志fsync操作時消耗的時長報警閾值;
                weight.X=N:判斷quorum時投票權限,默認1;
                
            網路配置:
                maxClientCnxns:每客戶端IP的最大并發連接數;
                clientPortAddress:zk監聽IP地址;
                minSessionTimeout:會話的最短超時時長;
                maxSessionTimeout:會話的最大超時時長
                
            集群配置:
                initLimit:Follower連入Leader并完成資料同步的時長;
                syncLimit:心跳檢測的最大延遲;
                leaderServes:默認zk的leader接收讀寫請求,額外還要負責協調各Follower發來的事務等;因此,為使得leader集中處理zk集群內部資訊,建議不讓leader直接提供服務;
                cnxTimeout:Leader選舉期間,各服務器創建TCP連接的超時時長;
                ellectionAlg:選舉演算法,目前僅支持FastLeaderElection演算法一種;
View Code

  復制組態檔到集群各節點,創建資料目錄并在其資料目錄下各自創建用于保存節點id的myid檔案,其內容僅為當前節點的server id

[root@node01 conf]# scp zoo.cfg node02:/usr/local/zookeeper/conf/
zoo.cfg                                                                                 100% 1244   412.3KB/s   00:00    
[root@node01 conf]# scp zoo.cfg node03:/usr/local/zookeeper/conf/
zoo.cfg                                                                                 100% 1244   486.7KB/s   00:00    
[root@node01 conf]# mkdir /data/zookeeper -pv
mkdir: created directory ‘/data’
mkdir: created directory ‘/data/zookeeper’
[root@node01 conf]# echo 1 >/data/zookeeper/myid
[root@node01 conf]# cat /data/zookeeper/myid
1
[root@node01 conf]# ssh node02 'mkdir -pv /data/zookeeper/ && echo 2 >/data/zookeeper/myid && cat /data/zookeeper/myid'
mkdir: created directory ‘/data’
mkdir: created directory ‘/data/zookeeper/’
2
[root@node01 conf]# ssh node03 'mkdir -pv /data/zookeeper/ && echo 3 >/data/zookeeper/myid && cat /data/zookeeper/myid'  
mkdir: created directory ‘/data’
mkdir: created directory ‘/data/zookeeper/’
3
[root@node01 conf]# 

  提示:這里的myid中的server id是根據其組態檔中配置的server id,意思就是主組態檔中的server id 要和其當前主節點中的myid保持一致,否則zk集群啟動不了;

  在各節點啟動zookeeper

[root@node01 ~]# /usr/local/zookeeper/bin/zkServer.sh --help
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Usage: /usr/local/zookeeper/bin/zkServer.sh [--config <conf-dir>] {start|start-foreground|stop|version|restart|status|print-cmd}
[root@node01 ~]# /usr/local/zookeeper/bin/zkServer.sh start
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@node01 ~]# ssh node02 '/usr/local/zookeeper/bin/zkServer.sh start'
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@node01 ~]# ssh node03 '/usr/local/zookeeper/bin/zkServer.sh start' 
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@node01 ~]# ss -tnl
State      Recv-Q Send-Q                Local Address:Port                               Peer Address:Port              
LISTEN     0      128                               *:22                                            *:*                  
LISTEN     0      100                       127.0.0.1:25                                            *:*                  
LISTEN     0      50              ::ffff:192.168.0.41:3888                                         :::*                  
LISTEN     0      50                               :::8080                                         :::*                  
LISTEN     0      128                              :::22                                           :::*                  
LISTEN     0      100                             ::1:25                                           :::*                  
LISTEN     0      50                               :::2181                                         :::*                  
LISTEN     0      50                               :::35879                                        :::*                  
[root@node01 ~]#

  提示:可以看到node01上3888、2181、8080這三個埠都處于監聽狀態了;8080是jetty監聽的埠,用于管理用,如果修改其監聽埠可以在組態檔中加admin.serverPort=來定義即可;

  node02上監聽埠情況

[root@node02 local]# ss -tnl
State      Recv-Q Send-Q                Local Address:Port                               Peer Address:Port              
LISTEN     0      128                               *:22                                            *:*                  
LISTEN     0      100                       127.0.0.1:25                                            *:*                  
LISTEN     0      50              ::ffff:192.168.0.42:3888                                         :::*                  
LISTEN     0      50                               :::8080                                         :::*                  
LISTEN     0      128                              :::22                                           :::*                  
LISTEN     0      100                             ::1:25                                           :::*                  
LISTEN     0      50                               :::2181                                         :::*                  
LISTEN     0      50                               :::35589                                        :::*                  
LISTEN     0      50              ::ffff:192.168.0.42:2888                                         :::*                  
[root@node02 local]# 

  提示:node02相對node01多監聽了一個2888埠,這個埠只有leader節點才會監聽,從查看埠的情況就可以判斷node02此時是leader節點;

  node03上監聽埠情況

[root@node03 local]# ss -tnl
State      Recv-Q Send-Q                Local Address:Port                               Peer Address:Port              
LISTEN     0      128                               *:22                                            *:*                  
LISTEN     0      100                       127.0.0.1:25                                            *:*                  
LISTEN     0      50              ::ffff:192.168.0.43:3888                                         :::*                  
LISTEN     0      50                               :::8080                                         :::*                  
LISTEN     0      128                              :::22                                           :::*                  
LISTEN     0      100                             ::1:25                                           :::*                  
LISTEN     0      50                               :::46683                                        :::*                  
LISTEN     0      50                               :::2181                                         :::*                  
[root@node03 local]# 

  提示:node03和node01一樣,都沒有監聽2888埠,說明這兩個幾點是follower節點;到此一個三節點的zookeeper集群就搭建好了;

  測驗:使用zkServer.sh status查看當前節點狀態

  提示:可以看到node02是leader;

  把node02的zk重啟,看看它是否還是leader?

  提示:可以看到當node02重啟后,再次加入集群就不再是leader了;

  使用zkCli.sh連接zk

[zk: localhost:2181(CONNECTED) 0] ?
ZooKeeper -server host:port -client-configuration properties-file cmd args
        addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE
        addauth scheme auth
        close 
        config [-c] [-w] [-s]
        connect host:port
        create [-s] [-e] [-c] [-t ttl] path [data] [acl]
        delete [-v version] path
        deleteall path [-b batch size]
        delquota [-n|-b] path
        get [-s] [-w] path
        getAcl [-s] path
        getAllChildrenNumber path
        getEphemerals path
        history 
        listquota path
        ls [-s] [-w] [-R] path
        printwatches on|off
        quit 
        reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
        redo cmdno
        removewatches path [-c|-d|-a] [-l]
        set [-s] [-v version] path data
        setAcl [-s] [-v version] [-R] path acl
        setquota -n|-b val path
        stat [-w] path
        sync path
        version 
Command not found: Command not found ?
[zk: localhost:2181(CONNECTED) 1] 

  提示:在集群任意一個節點使用zkCli.sh 即可連接當前節點的2181埠;連接以后會有一個zk的控制臺,我們輸入一個不存在的命令,可列印在當前控制臺上所使用的命令有哪些;

  查看資料節點

[zk: localhost:2181(CONNECTED) 1] ls 
ls [-s] [-w] [-R] path
[zk: localhost:2181(CONNECTED) 2] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 3] 

  提示:zk的資料節點類似Linux檔案系統,它也是一顆倒置的樹狀結構;

  創建一個資料節點,并給一個資料內容將其存入到創建的節點

[zk: localhost:2181(CONNECTED) 11] create /test "test01"
Created /test
[zk: localhost:2181(CONNECTED) 12] ls /
[test, zookeeper]
[zk: localhost:2181(CONNECTED) 13] 

  提示:默認不指定任何選項,創建的節點都是持久節點,即會話斷開對應節點不會自動洗掉;如果需要創建一個臨時節點需要用到-e選項來明確指定創建一個臨時節點;

  查看/test節點的資料

[zk: localhost:2181(CONNECTED) 13] get /test
test01
[zk: localhost:2181(CONNECTED) 14] 

  修改/test節點的資料

[zk: localhost:2181(CONNECTED) 14] set /test "test data version 2"
[zk: localhost:2181(CONNECTED) 15] get /test
test data version 2
[zk: localhost:2181(CONNECTED) 16] 

  洗掉/test節點

[zk: localhost:2181(CONNECTED) 16] delete /test
[zk: localhost:2181(CONNECTED) 17] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 18] 

  提示:delete是洗掉一個下面沒有子節點的節點,如果對應節點下還有子節點,需要用到deleteall來洗掉;

  洗掉帶有子節點的節點

[zk: localhost:2181(CONNECTED) 25] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 26] create /test "test01"
Created /test
[zk: localhost:2181(CONNECTED) 27] ls /
[test, zookeeper]
[zk: localhost:2181(CONNECTED) 28] create /test/aa "test02"
Created /test/aa
[zk: localhost:2181(CONNECTED) 29] ls /test 
[aa]
[zk: localhost:2181(CONNECTED) 30] ls -R /test 
/test
/test/aa
[zk: localhost:2181(CONNECTED) 31] delete /test 
Node not empty: /test
[zk: localhost:2181(CONNECTED) 32] deleteall /test 
[zk: localhost:2181(CONNECTED) 33] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 34] 

  提示:ls -R表示遞回查看指定節點及其子節點;

  查看集群成員配置資訊

[zk: localhost:2181(CONNECTED) 38] config
server.1=192.168.0.41:2888:3888:participant
server.2=192.168.0.42:2888:3888:participant
server.3=192.168.0.43:2888:3888:participant
version=0
[zk: localhost:2181(CONNECTED) 39] 

  查看指定節點的狀態資訊

[zk: localhost:2181(CONNECTED) 40] stat
stat [-w] path
[zk: localhost:2181(CONNECTED) 41] stat /
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x200000014
cversion = 9
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
[zk: localhost:2181(CONNECTED) 42

  zk四字命令使用

  查看生效的配置

[root@node01 ~]# echo conf |nc node01 2181                   
conf is not executed because it is not in the whitelist.
[root@node01 ~]# 

  提示:默認zk沒有開啟四字命令;需要到組態檔中配置4lw.commands.whitelist=*,然后保存重啟zk即可支持四字命令;

  重啟zk,再來使用conf命令查看生效配置資訊

[root@node01 ~]# /usr/local/zookeeper/bin/zkServer.sh restart
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@node01 ~]# echo conf |nc node01 2181                   
clientPort=2181
secureClientPort=-1
dataDir=/data/zookeeper/version-2
dataDirSize=134218360
dataLogDir=/data/zookeeper/version-2
dataLogSize=134218360
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
clientPortListenBacklog=-1
serverId=1
initLimit=10
syncLimit=5
electionAlg=3
electionPort=3888
quorumPort=2888
peerType=0
membership: 
server.1=192.168.0.41:2888:3888:participant
server.2=192.168.0.42:2888:3888:participant
server.3=192.168.0.43:2888:3888:participant
version=0[root@node01 ~]# 

  查看當前server上的zk連接資訊

[root@node01 ~]# echo cons | nc node01 2181
 /192.168.0.41:58920[0](queued=0,recved=1,sent=0)

[root@node01 ~]# 

  測驗zk是否能夠正常連接

[root@node01 ~]# echo ruok | nc node01 2181    
imok[root@node01 ~]# 

  提示:回傳imok表示zk節點上可以正常連接的;

  列出當前zkserver的版本資訊、資料接收/發送量、連接數、節點模式、Node數、最大/平均/最小延遲數

[root@node01 ~]# echo srvr | nc node01 2181    
Zookeeper version: 3.6.2--803c7f1a12f85978cb049af5e4ef23bd8b688715, built on 09/04/2020 12:44 GMT
Latency min/avg/max: 0/0.0/0
Received: 6
Sent: 5
Connections: 1
Outstanding: 0
Zxid: 0x200000016
Mode: follower
Node count: 5
[root@node01 ~]# 

  列出事件監聽器的連接數和總數

[root@node01 ~]# echo wchs |nc node01 2181
0 connections watching 0 paths
Total watches:0
[root@node01 ~]# 

  列出當前zkserver的環境資訊

[root@node01 ~]# echo envi| nc node01 2181
Environment:
zookeeper.version=3.6.2--803c7f1a12f85978cb049af5e4ef23bd8b688715, built on 09/04/2020 12:44 GMT
host.name=node01.test.org
java.version=1.8.0_262
java.vendor=Oracle Corporation
java.home=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64/jre
java.class.path=/usr/local/zookeeper/bin/../zookeeper-server/target/classes:/usr/local/zookeeper/bin/../build/classes:/usr/local/zookeeper/bin/../zookeeper-server/target/lib/*.jar:/usr/local/zookeeper/bin/../build/lib/*.jar:/usr/local/zookeeper/bin/../lib/zookeeper-prometheus-metrics-3.6.2.jar:/usr/local/zookeeper/bin/../lib/zookeeper-jute-3.6.2.jar:/usr/local/zookeeper/bin/../lib/zookeeper-3.6.2.jar:/usr/local/zookeeper/bin/../lib/snappy-java-1.1.7.jar:/usr/local/zookeeper/bin/../lib/slf4j-log4j12-1.7.25.jar:/usr/local/zookeeper/bin/../lib/slf4j-api-1.7.25.jar:/usr/local/zookeeper/bin/../lib/simpleclient_servlet-0.6.0.jar:/usr/local/zookeeper/bin/../lib/simpleclient_hotspot-0.6.0.jar:/usr/local/zookeeper/bin/../lib/simpleclient_common-0.6.0.jar:/usr/local/zookeeper/bin/../lib/simpleclient-0.6.0.jar:/usr/local/zookeeper/bin/../lib/netty-transport-native-unix-common-4.1.50.Final.jar:/usr/local/zookeeper/bin/../lib/netty-transport-native-epoll-4.1.50.Final.jar:/usr/local/zookeeper/bin/../lib/netty-transport-4.1.50.Final.jar:/usr/local/zookeeper/bin/../lib/netty-resolver-4.1.50.Final.jar:/usr/local/zookeeper/bin/../lib/netty-handler-4.1.50.Final.jar:/usr/local/zookeeper/bin/../lib/netty-common-4.1.50.Final.jar:/usr/local/zookeeper/bin/../lib/netty-codec-4.1.50.Final.jar:/usr/local/zookeeper/bin/../lib/netty-buffer-4.1.50.Final.jar:/usr/local/zookeeper/bin/../lib/metrics-core-3.2.5.jar:/usr/local/zookeeper/bin/../lib/log4j-1.2.17.jar:/usr/local/zookeeper/bin/../lib/json-simple-1.1.1.jar:/usr/local/zookeeper/bin/../lib/jline-2.14.6.jar:/usr/local/zookeeper/bin/../lib/jetty-util-9.4.24.v20191120.jar:/usr/local/zookeeper/bin/../lib/jetty-servlet-9.4.24.v20191120.jar:/usr/local/zookeeper/bin/../lib/jetty-server-9.4.24.v20191120.jar:/usr/local/zookeeper/bin/../lib/jetty-security-9.4.24.v20191120.jar:/usr/local/zookeeper/bin/../lib/jetty-io-9.4.24.v20191120.jar:/usr/local/zookeeper/bin/../lib/jetty-http-9.4.24.v20191120.jar:/usr/local/zookeeper/bin/../lib/javax.servlet-api-3.1.0.jar:/usr/local/zookeeper/bin/../lib/jackson-databind-2.10.3.jar:/usr/local/zookeeper/bin/../lib/jackson-core-2.10.3.jar:/usr/local/zookeeper/bin/../lib/jackson-annotations-2.10.3.jar:/usr/local/zookeeper/bin/../lib/commons-lang-2.6.jar:/usr/local/zookeeper/bin/../lib/commons-cli-1.2.jar:/usr/local/zookeeper/bin/../lib/audience-annotations-0.5.0.jar:/usr/local/zookeeper/bin/../zookeeper-*.jar:/usr/local/zookeeper/bin/../zookeeper-server/src/main/resources/lib/*.jar:/usr/local/zookeeper/bin/../conf:
java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
java.io.tmpdir=/tmp
java.compiler=<NA>
os.name=Linux
os.arch=amd64
os.version=3.10.0-693.el7.x86_64
user.name=root
user.home=/root
user.dir=/root
os.memory.free=26MB
os.memory.max=889MB
os.memory.total=37MB
[root@node01 ~]# 

  好了,到此zk集群搭建就完成了,通常zk集群應用的場景很多,比如分布式應用程式可以基于它實作資料的發布/訂閱、負載均衡、名稱服務、分布式協調/通知、集群管理、Master選舉、分布式鎖和分布式佇列;很多分布式服務都可以借助zk集群做服務發現和服務注冊;

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/181210.html

標籤:其他

上一篇:如何防止程式二次啟動?

下一篇:Kubernetes K8S之存盤Volume詳解

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:43:21 more
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:42:36 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:26:53 more
  • 設定Windows主機的瀏覽器為wls2的默認瀏覽器

    這里以Chrome為例。 1. 準備作業 wsl是可以使用Windows主機上安裝的exe程式,出于安全考慮,默認情況下改功能是無法使用。要使用的話,終端需要以管理員權限啟動。 我這里以Windows Terminal為例,介紹如何默認使用管理員權限打開終端,具體操作如下圖所示: 2. 操作 wsl ......

    uj5u.com 2023-04-19 09:25:49 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:19:04 more
  • Linux學習筆記

    IP地址和主機名 IP地址 ifconfig可以用來查詢本機的IP地址,如果不能使用,可以通過install net-tools安裝。 Centos系統下ens33表示主網卡;inet后表示IP地址;lo表示本地回環網卡; 127.0.0.1表示代指本機;0.0.0.0可以用于代指本機,同時在放行設 ......

    uj5u.com 2023-04-18 06:52:01 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:50 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:01 more
  • 你是不是暴露了?

    作者:袁首京 原創文章,轉載時請保留此宣告,并給出原文連接。 如果您是計算機相關從業人員,那么應該經歷不止一次網路安全專項檢查了,你肯定是收到過資訊系統技術檢測報告,要求你加強風險監測,確保你提供的系統服務堅實可靠了。 沒檢測到問題還好,檢測到問題的話,有些處理起來還是挺麻煩的,尤其是線上正在運行的 ......

    uj5u.com 2023-04-05 16:52:56 more
  • 細節拉滿,80 張圖帶你一步一步推演 slab 記憶體池的設計與實作

    1. 前文回顧 在之前的幾篇記憶體管理系列文章中,筆者帶大家從宏觀角度完整地梳理了一遍 Linux 記憶體分配的整個鏈路,本文的主題依然是記憶體分配,這一次我們會從微觀的角度來探秘一下 Linux 內核中用于零散小記憶體塊分配的記憶體池 —— slab 分配器。 在本小節中,筆者還是按照以往的風格先帶大家簡單 ......

    uj5u.com 2023-04-05 16:44:11 more