服務篇---zookeeper集羣的部署及配置

一、部署zookeeper集羣

服務器 1:192.168.1.81 端口:2181、2881、3881

服務器 2:192.168.1.82 端口:2182、2882、3882
服務器 3:192.168.1.83 端口:2183、2883、3883
1、 修改操作系統的/etc/hosts 文件,添加 IP 與主機名映射:
# zookeeper cluster servers
192.168.1.81 edu-zk-01
192.168.1.82 edu-zk-02
192.168.1.83 edu-zk-03
2、 下載或上傳 zookeeper-3.4.6.tar.gz 到/home/test/zookeeper 目錄:
$ cd /home/test/zookeeper
$ wget http://apache.fayea.com/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
3、 解壓 zookeeper 安裝包,並按節點號對 zookeeper 目錄重命名:
$ tar -zxvf zookeeper-3.4.6.tar.gz
服務器 1:
$ mv zookeeper-3.4.6 node-01
服務器 2:
$ mv zookeeper-3.4.6 node-02
服務器 3:
$ mv zookeeper-3.4.6 node-03
4、 在各 zookeeper 節點目錄下創建以下目錄:
$ cd /home/test/zookeeper/node-0X (X 代表節點號 1、2、3,以下同解)
$ mkdir data
$ mkdir logs
5、 將 zookeeper/node-0X/conf 目錄下的 zoo_sample.cfg 文件拷貝一份,命名爲 zoo.cfg:
$ cp zoo_sample.cfg zoo.cfg
6、 修改 zoo.cfg 配置文件:
zookeeper/node- -1 01  的 配置 ( /home/test/ zookeeper/node- - 01/conf/zoo.cfg ) 如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/test/zookeeper/node-01/data
dataLogDir=/home/test/zookeeper/node-01/logs
clientPort=2181
server.1=edu-zk-01:2881:3881  #這裏是使用hosts文件中的hosts,也可以直接寫成IP
server.2=edu-zk-02:2882:3882
server.3=edu-zk-03:2883:3883

zookeeper/node- -2 02  的 配置 ( /home/test/ zookeeper/node- -0 02 2 /conf/zoo.cfg )如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/wusc/zookeeper/node-02/data
dataLogDir=/home/wusc/zookeeper/node-02/logs
clientPort=2182
server.1=edu-zk-01:2881:3881
server.2=edu-zk-02:2882:3882

server.3=edu-zk-03:2883:3883

zookeeper/node- -3 03  的 配置 ( /home/test/ zookeeper/node- -0 03 3 /conf/zoo.cfg )如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/wusc/zookeeper/node-03/data
dataLogDir=/home/wusc/zookeeper/node-03/logs
clientPort=2183
server.1=edu-zk-01:2881:3881
server.2=edu-zk-02:2882:3882
server.3=edu-zk-03:2883:3883
參數說明: :
tickTime=2000
tickTime 這個時間是作爲 Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。
initLimit=10
initLimit 這個配置項是用來配置 Zookeeper 接受客戶端(這裏所說的客戶端不是用戶連接 Zookeeper服務器的客戶端,而是 Zookeeper 服務器集羣中連接到 Leader 的 Follower 服務器)初始化連接時最長能忍受多少個心跳時間間隔數。當已經超過 10 個心跳的時間(也就是 tickTime)長度後 Zookeeper 服務器還沒有收到客戶端的返回信息,那麼表明這個客戶端連接失敗。總的時間長度就是 10*2000=20 秒。
syncLimit=5
syncLimit 這個配置項標識 Leader 與 Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是 5*2000=10 秒。
dataDir=/home/wusc/zookeeper/node-01/data
dataDir顧名思義就是Zookeeper保存數據的目錄,默認情況下Zookeeper將寫數據的日誌文件也保存在這個目錄裏。
clientPort=2181
clientPort 這個端口就是客戶端(應用程序)連接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口接受客戶端的訪問請求。
server.A=B:C:D
server.1=edu-zk-01:2881:3881
server.2=edu-zk-02:2882:3882
server.3=edu-zk-03:2883:3883
A 是一個數字,表示這個是第幾號服務器;
B 是這個服務器的 IP 地址(或者是與 IP 地址做了映射的主機名);
C 第一個端口用來集羣成員的信息交換,表示這個服務器與集羣中的 Leader 服務器交換信息的端口;
D 是在 leader 掛掉時專門用來進行選舉 leader 所用的端口。
注意:如果是僞集羣的配置方式,不同的 Zookeeper 實例通信端口號不能一樣,所以要給它們分配不同的端口號。
7、 在 dataDir=/home/wusc/zookeeper/node-0X/data 下創建 myid 文件
編輯 myid 文件,並在對應的 IP 的機器上輸入對應的編號。如在 node-01 上,myid 文件內容就是1,node-02 上就是 2,node-03 上就是 3:
$ vi /home/wusc/zookeeper/node-01/data/myid ## 值爲 1
$ vi /home/wusc/zookeeper/node-02/data/myid ## 值爲 2
$ vi /home/wusc/zookeeper/node-03/data/myid ## 值爲 3
8、 在防火牆中打開要用到的端口 218X、288X、388X
切換到 root 用戶權限,執行以下命令:
# chkconfig iptables on
# service iptables start
編輯/etc/sysconfig/iptables
# vi /etc/sysconfig/iptables
如服務器 01 增加以下 3 行:
## zookeeper
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2181 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2881 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3881 -j ACCEPT
重啓防火牆:
# service iptables restart
查看防火牆端口狀態:
# service iptables status
9、 啓動並測試 zookeeper(要用 test用戶啓動,不要用 root):
(1) 使用 test 用戶到/home/test/zookeeper/node-0X/bin 目錄中執行:
$ /home/wusc/zookeeper/node-01/bin/zkServer.sh start
$ /home/wusc/zookeeper/node-02/bin/zkServer.sh start
$ /home/wusc/zookeeper/node-03/bin/zkServer.sh start
(2) 輸入 jps 命令查看進程:
$ jps
1456 QuorumPeerMain
其中,QuorumPeerMain 是 zookeeper 進程,說明啓動正常
(3) 查看狀態:
$ /home/test/zookeeper/node-01/bin/zkServer.sh status
(4) 查看 zookeeper 服務輸出信息:
由於服務信息輸出文件在/home/test/zookeeper/node-0X/bin/zookeeper.out
$ tail -f  zookeeper.out
10、停止 zookeeper 進程:
$ zkServer.sh stop
11、配置 zookeeper 開機使用 test 用戶啓動:
編輯 node-01、node-02、node-03 中的/etc/rc.local 文件,分別加入:
su - test -c '/home/test/zookeeper/node-01/bin/zkServer.sh start'
su - test -c '/home/test/zookeeper/node-02/bin/zkServer.sh start'
su - test -c '/home/test/zookeeper/node-03/bin/zkServer.sh start'
二 、 安裝 Dubbo  管 控臺 ( 此處重點講管 控 臺 如何 鏈接集羣) :
Dubbo 管控臺可以對註冊到 zookeeper 註冊中心的服務或服務消費者進行管理,但管控臺是否正常對Dubbo 服務沒有影響,管控臺也不需要高可用,因此可以單節點部署。
IP: 192.168.1.81   部署容器:Tomcat7   端口:8080
1、 下載(或上傳)最新版的 Tomcat7(apache-tomcat-7.0.57.tar.gz)到/home/wusc/
2、 解壓:
$ tar -zxvf apache-tomcat-7.0.57.tar.gz
$ mv apache-tomcat-7.0.57 dubbo-admin-tomcat
3、移除/home/wusc/dubbo-admin-tomcat/webapps 目錄下的所有文件:
$ rm -rf  *
4、 上傳 Dubbo 管理控制檯程序 dubbo-admin-2.5.3.war
到/home/test/dubbo-admin-tomcat/webapps
5、 解壓並把目錄命名爲 ROOT:
$ unzip  dubbo-admin-2.5.3.war  -d  ROOT
把 dubbo-admin-2.5.3.war 移到/home/test/tools 目錄備份
$ mv dubbo-admin-2.5.3.war /home/wusc/tools
6、 配置 dubbo.properties:
$ vi ROOT/WEB-INF/dubbo.properties
dubbo.registry.address=zookeeper://192.168.1.81:2181?backup=192.168.1.82:2182,192.168.1.83:2183
dubbo.admin.root.password=test.123
dubbo.admin.guest.password=test.123
(以上密碼在正式上生產前要修改)
7、 防火牆開啓 8080 端口,用 root 用戶修改/etc/sysconfig/iptables,
# vi /etc/sysconfig/iptables
增加:
## dubbo-admin-tomcat:8080
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
重啓防火牆:
# service iptables restart
8、 啓動 Tomat7
$ /home/test/dubbo-admin-tomcat/bin/startup.sh
9、 瀏覽 http://192.168.1.81:8080/
10、配置部署了 Dubbo 管控臺的 Tomcat 開機啓動:

在虛擬主機中編輯/etc/rc.local 文件,加入:su - test -c '/home/test/dubbo-admin-tomcat/bin/startup.sh'

三、測試應用可以鏈接到註冊中心集羣

由開發人員,在項目的公共配置文件例如test-commom-config下面的public_system.properpies中,寫明如下

   ##dubbo

dubbo.registry.address=192.168.1.81:2181,192.168.1.82:2182,192.168.1.83:2183

然後選擇某一個項目,在本地啓動一個dubbo服務,啓動完成後到dubbo-admin的web界面刷新看一下當前的應用,就會發現該應用已經註冊上來,點擊該應用,可以看到該應用下的服務,列示的就是很多暴露的服務(即dubbo服務所暴露的接口服務),再點擊具體的接口服務名稱,可以查看到該接口所暴露的服務提供者IP和端口、服務消費者的IP和端口等;

四、測試zookeeper集羣的高可用

zookeeper集羣的三個節點,一個爲主節點(命令./bin/zkServer.sh status,顯示爲leader的即是,本例中爲節點2)和兩個從節點。

在關閉掉主節點後,刷新dubbo-admin,查看該dubbo應用(test-service-user)的日誌,可以看到zookeeper state change(Disconnected)和zookeeper state change(Syncconnected),說明可能剛纔連的是主節點,現在主節點變更了,並且通過選舉選出了新的主節點,並且重新連接到了zookeeper節點。這時,去節點1和節點3上去查看節點的狀態,發現節點3成爲了主節點,這時重新啓動節點1,可以發現1爲follower,這說明zookeeper集羣在正常節點數過半的情況下,主節點是不會變的;

有一個測試方法,在zookeeper節點不正常情況下,如果關掉dubbo-admin(./bin/shutdown.sh),則再重啓dubb-admin,是起不來的,這也是一個測試方法;但是,在dubbo-admin已經起來後,此時zookeeper集羣掛掉,已經建立的服務提供者和消費者連接是仍然可以用的(會有緩存存在,所以不能通過消費端和提供端能正常通信來測試zookeeper集羣正常),但是新建立的則不可以被建立。因爲dubbo-admin是不依賴於zookeeper運行的,只是啓動時會去檢測zookeeper狀態。

因此,zookeeper集羣不是一直要用的,已經建立連接後,可以不用到註冊中心去了。

但是,在正常節點數不過半的情況下,zookeeper集羣是不能用的,不管剩下的正常的節點中有沒有主節點,主要是得有一半以上的節點需要正常;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章