1. 程式人生 > >《Zookeeper Linux 集群服務》

《Zookeeper Linux 集群服務》

我們 擴容 不同的 高並發 都是 bean 標識 0.10 單獨

今天是平安夜,先祝大家平安夜快樂,自從有了女朋友貌似就不過平安夜了,哈哈,開個玩笑。平安夜要過,隨筆也要寫。這篇文章我們來談談 Zookeeper Linux 集群。

為什麽要集群呢?因為一臺服務不夠。集群是為了系統擴容,系統穩定。一臺服務掛了,沒關系,我還有其他的服務。集群雖然可以帶來很多好處,例如高可用性,高並發,高流量,但是也有它的缺點。因為是多臺服務器,所以怎麽去保證每臺服務器上的數據一致以及事務就成了問題。不過 Zookeeper 幫我們解決了這些問題,關於一致性和事務我們以後再詳細討論,足以寫多篇隨筆了。

上一篇隨筆是寫獨立服務,也就是單臺服務器提供服務。Zookeeper 目錄是 /usr/local/src/zookeeper/zookeeper-3.4.6。我們現在要集群,所以需要至少 3 個 Zookeeper 註冊中心。先來看看我的 3 個註冊中心目錄,/usr/local/src/zookeeper/zookeeper-3.4.9、/usr/local/src/zookeeper/zookeeper-3.4.9.slave、/usr/local/src/zookeeper/zookeeper-3.4.6。首先保證每個註冊中心可以單獨正常服務,其實集群和單體的區別在於配置,單體配置很簡單,集群配置則必須包含其他註冊中心信息。

先來看看 /usr/local/src/zookeeper/zookeeper-3.4.6 配置文件:

技術分享圖片

重點看看最後,server.1=127.0.0.1:2881:3881、server.2=127.0.0.1:2882:3882、server.3=127.0.0.1:2883:3883。由於服務器原因,我的 3 個註冊中心都放在了同一臺服務器。server.1、server.2、server.3 則表示 3 個不同的註冊中心服務名稱。1、2、3 則表示 3 個註冊中心的標識碼。

規則 server.N=IP:A:B,N 表示標識碼也就是編碼,IP 表示服務地址,A 表示LF通信端口,也就是與 Leader 通信端口,B 表示選舉端口。既然是集群,那麽需要有一個領導,其他的都是隨從。誰來做領導,這就需要選舉,所以需要 B 端口。有了領導,需要和領導通信就需要專門通信端口,也就是 A。至於為什麽不把 A 和 B 設置成同一個端口,我個人認為如果設置成一個端口,端口出現問題的話,那就既不能和領導通信,也不能選舉。這就極有可能使整個集群不可用,雖然你有 N 臺服務器,但是根據選舉過半原則就很有可能選不出領導。

因為我是放在同一臺服務器,所有可以看到,server.1、server.2、server.3 的 A 和 B 端口都不一樣。如果是放在不同的服務器,例如 server.1=192.168.0.1:2881:3881、server.2=192.168.0.2:2881:3881、server.3=192.168.0.3:2881:3881,那麽 A 和 B 端口可以一樣。

繼續上面的話題,server.1、server.2、server.3,怎麽知道 /usr/local/src/zookeeper/zookeeper-3.4.6 是哪一臺服務呢?可以看到 dataDir=/usr/local/src/zookeeper/zookeeper-3.4.6/data,在 data 目錄下面我們要生產一個叫 myid 的文件,裏面就保存了服務表示碼,也就是編碼。

技術分享圖片

這裏面是 1,也就是 server.1 就是 /usr/local/src/zookeeper/zookeeper-3.4.6 的服務,127.0.0.1:2881:3881,通信端口 2881,選舉端口 3881。

其他兩個 /usr/local/src/zookeeper/zookeeper-3.4.9、/usr/local/src/zookeeper/zookeeper-3.4.9.slave,也是一樣的。

我們啟動所有的註冊中心,然後 jps 看看。

技術分享圖片

最後我們要記得把,2181、2182、2183 端口加入防火墻規則,像上一篇文章中講的,-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 2181 -j ACCEPT。重啟防火墻。

技術分享圖片

好了,我們來試試集群是否成功。首先註冊 Dubbo 服務到集群,然後通過 Dubbo 客戶端隨機調用,看看提供服務的註冊中心是否不同。

先來看看 Dubbo 服務註冊:

<dubbo:application name="demo-provider"/>
<dubbo:registry id="test" group="test" protocol="zookeeper" address="192.168.0.106:2181,192.168.0.106:2182,192.168.0.106:2183" />
<dubbo:protocol name="dubbo" port="20881"/>
<dubbo:service interface="www.test.com.dubbo.xml.IUser" ref="userService" version="0.0.1"/>
<bean id="userService" class="www.test.com.dubbo.xml.UserImpl"/>

Dubbo 客戶端訂閱:

<dubbo:application name="demo-consumer"/>
<dubbo:registry protocol="zookeeper" id="test" group="test" address="192.168.0.106:2181,192.168.0.106:2182,192.168.0.106:2183"/>
<dubbo:reference id="userService" interface="www.test.com.dubbo.xml.IUser" version="0.0.1"/>

先來看看 Dubbo 服務是否註冊成功。 技術分享圖片

沒錯,dubbo%3A%2F%2F192.168.0.102%3A20881%2Fwww.test.com.dubbo.xml.IUser,這就是 Dubbo 服務提供者地址。

我們來隨機獲取服務,看看是哪個註冊中心提供服務。

第一次獲取

技術分享圖片

第二次獲取

技術分享圖片

第三次獲取

技術分享圖片

OK,Linux 集群就到這裏,謝謝大家觀看,希望有所幫助!

《Zookeeper Linux 集群服務》