1. 程式人生 > >dubbo+zookeeper構建高可用分散式叢集

dubbo+zookeeper構建高可用分散式叢集

我們討論過Nginx+tomcat組成的叢集,這已經是非常靈活的叢集技術,但是當我們的系統遇到更大的瓶頸,全部應用的單點伺服器已經不能滿足我們的需求,這時,我們要考慮另外一種,我們熟悉的內容,就是分散式,而當下流行的Dubbo框架。

一,背景

    以前我們需要遠端呼叫他人的介面,我們是這麼做的:

                                              

我們遇到的問題:

        (1) 當服務越來越多時,服務URL配置管理變得非常困難,F5硬體負載均衡器的單點壓力也越來越大。
此時需要一個服務註冊中心,動態的註冊和發現服務,使服務的位置透明。
並通過在消費方獲取服務提供方地址列表,實現軟負載均衡和Failover,降低對F5硬體負載均衡器的依賴,也能減少部分成本。
        (2) 當進一步發展,服務間依賴關係變得錯蹤複雜,甚至分不清哪個應用要在哪個應用之前啟動,架構師都不能完整的描述應用的架構關係。
這時,需要自動畫出應用間的依賴關係圖,以幫助架構師理清理關係。
        (3) 接著,服務的呼叫量越來越大,服務的容量問題就暴露出來,這個服務需要多少機器支撐?什麼時候該加機器?
        為了解決這些問題,第一步,要將服務現在每天的呼叫量,響應時間,都統計出來,作為容量規劃的參考指標。
        其次,要可以動態調整權重,在線上,將某臺機器的權重一直加大,並在加大的過程中記錄響應時間的變化,直到響應時間到達閥值,記錄此時的訪問量,再以此訪問量乘以機器數反推總容量。

        為解決這些問題,Dubbo為我們做了什麼呢:

                               

負載均衡:

                                        

        這就是所謂的軟負載均衡!

        現在讓我們一起來接觸下這個優秀的框架:

        簡介

     架構如圖:

                                                      

節點角色說明:

        Provider: 暴露服務的服務提供方。

        Consumer: 呼叫遠端服務的服務消費方。

        Registry: 服務註冊與發現的註冊中心。

Monitor: 統計服務的呼叫次調和呼叫時間的監控中心。

Container: 服務執行容器。

呼叫關係說明:

0. 服務容器負責啟動,載入,執行服務提供者。

1. 服務提供者在啟動時,向註冊中心註冊自己提供的服務。

2. 服務消費者在啟動時,向註冊中心訂閱自己所需的服務。

3. 註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連線推送變更資料給消費者。

4. 服務消費者,從提供者地址列表中,基於軟負載均衡演算法,選一臺提供者進行呼叫,如果呼叫失敗,再選另一臺呼叫。

5. 服務消費者和提供者,在記憶體中累計呼叫次數和呼叫時間,定時每分鐘傳送一次統計資料到監控中心。

 Dubbo提供了很多協議,Dubbo議、RMI協議Hessian協議,我們檢視Dubbo原始碼,有各種協議的實現,如圖所示:

                                                                       

我們之前沒用Dubbo之前時,大部分都使用Hessian來使用我們服務的暴露和呼叫,利用HessianProxyFactory呼叫遠端介面。

上面是參考了Dubbo官方網介紹,接下來我們來介紹SpringMVCDubboZookeeper整合使用。

第三:Dubbo與Zookeeper、SpringMVC整合使用

  第一步:在Linux上安裝Zookeeper

       Zookeeper作為Dubbo服務的註冊中心,Dubbo原先基於資料庫的註冊中心,沒采用ZookeeperZookeeper一個分散式的服務框架,是樹型的目錄服務的資料儲存,能做到叢集管理資料 ,這裡能很好的作為Dubbo服務的註冊中心,Dubbo能與Zookeeper做到叢集部署,當提供者出現斷電等異常停機時,Zookeeper註冊中心能自動刪除提供者資訊,當提供者重啟時,能自動恢復註冊資料,以及訂閱請求。我們先在linux上安裝Zookeeper,我們安裝最簡單的單點,叢集比較麻煩。

先需要安裝JdK,從Oracle的Java網站下載,安裝很簡單,就不再詳述。

單機模式

單機安裝非常簡單,只要獲取到 Zookeeper 的壓縮包並解壓到某個目錄如:C:\zookeeper-3.4.5\下,Zookeeper 的啟動指令碼在 bin 目錄下,Windows 下的啟動指令碼是 zkServer.cmd。

在你執行啟動指令碼之前,還有幾個基本的配置項需要配置一下,Zookeeper 的配置檔案在 conf 目錄下,這個目錄下有 zoo_sample.cfg 和 log4j.properties,你需要做的就是將 zoo_sample.cfg 改名為 zoo.cfg,因為 Zookeeper 在啟動時會找這個檔案作為預設配置檔案。下面詳細介紹一下,這個配置檔案中各個配置項的意義。

  1. <spanstyle="font-size:18px;"># The number of milliseconds of each tick  
  2. tickTime=2000
  3. # The number of ticks that the initial   
  4. # synchronization phase can take  
  5. initLimit=10
  6. # The number of ticks that can pass between   
  7. # sending a request and getting an acknowledgement  
  8. syncLimit=5
  9. # the directory where the snapshot is stored.  
  10. # do not use /tmp for storage, /tmp here is just   
  11. # example sakes.  
  12. dataDir=C:\\zookeeper-3.4.5\\data  
  13. dataLogDir=C:\\zookeeper-3.4.5\\log  
  14. # the port at which the clients will connect  
  15. clientPort=2181
  16. #  
  17. # Be sure to read the maintenance section of the   
  18. # administrator guide before turning on autopurge.  
  19. #  
  20. # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance  
  21. #  
  22. # The number of snapshots to retain in dataDir  
  23. #autopurge.snapRetainCount=3
  24. # Purge task interval in hours  
  25. # Set to "0" to disable auto purge feature  
  26. #autopurge.purgeInterval=1</span>
  • tickTime:這個時間是作為 Zookeeper 伺服器之間或客戶端與伺服器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。
  • dataDir:顧名思義就是 Zookeeper 儲存資料的目錄,預設情況下,Zookeeper 將寫資料的日誌檔案也儲存在這個目錄裡。
  • dataLogDir:顧名思義就是 Zookeeper 儲存日誌檔案的目錄
  • clientPort:這個埠就是客戶端連線 Zookeeper 伺服器的埠,Zookeeper 會監聽這個埠,接受客戶端的訪問請求。

當這些配置項配置好後,你現在就可以啟動 Zookeeper 了,啟動後要檢查 Zookeeper 是否已經在服務,可以通過 netstat – ano 命令檢視是否有你配置的 clientPort 埠號在監聽服務。

  第二步:配置dubbo-admin的管理頁面,方便我們管理頁面

(1)下載dubbo-admin-2.4.1.war包,在windowstomcat部署,先把dubbo-admin-2.4.1放在tomcatwebapps/ROOT下,然後進行解壓

(2)然後到webapps/ROOT/WEB-INF下,有一個dubbo.properties檔案,裡面指向Zookeeper ,使用的是Zookeeper 的註冊中心,如圖所示:

  1. <spanstyle="font-size:18px;">dubbo.registry.address=zookeeper://127.0.0.1:2181  
  2. dubbo.admin.root.password=root
  3. dubbo.admin.guest.password=guest</span>

(3)然後啟動tomcat服務,使用者名稱和密碼:root,並訪問服務,顯示登陸頁面,說明dubbo-admin部署成功,如圖所示:

      

 第三步:SpringMVC與Dubbo的整合,這邊使用的Maven的管理專案

第一:我們先開發服務註冊的,就是提供服務,專案結構如圖所示:

         

(1)test-maven-api專案加入了一個服務介面,程式碼如下:

  1. publicinterface TestRegistryService {  
  2.    public String hello(String name);  
  3. }  


(2)test-maven-console在pom.xml加入Dubbo和Zookeeper的jar包、引用test-maven-apijar包,程式碼如下:
  1. <spanstyle="font-size:18px;"><dependency>
  2.         <groupId>cn.test</groupId>
  3.         <artifactId>test-maven-api</artifactId>
  4.         <version>0.0.1-SNAPSHOT</version>
  5.     </dependency>
  6.       <dependency>
  7.             <groupId>com.alibaba</groupId>
  8.             <artifactId>dubbo</artifactId>
  9.             <version>2.5.3</version>
  10.         </dependency>
  11.          <dependency>
  12.             <groupId>org.apache.zookeeper</groupId>
  13.             <artifactId>zookeeper

    相關推薦

    dubbo+zookeeper構建可用分散式叢集

    我們討論過Nginx+tomcat組成的叢集,這已經是非常靈活的叢集技術,但是當我們的系統遇到更大的瓶頸,全部應用的單點伺服器已經不能滿足我們的需求,這時,我們要考慮另外一種,我們熟悉的內容,就

    使用Keepalived構建可用Web叢集

    Keepalived的作用是檢測伺服器的狀態,如果有一臺web伺服器宕機,或工作出現故障,Keepalived將檢測到,並將有故障的伺服器從系統中剔除,同時使用其他伺服器代替該伺服器的工作,當伺服器工作正常後Keepalived自動將伺服器加入到伺服器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的只

    redis詳解(四)-- 可用分散式叢集

    一,高可用 高可用(High Availability),是當一臺伺服器停止服務後,對於業務及使用者毫無影響。 停止服務的原因可能由於網絡卡、路由器、機房、CPU負載過高、記憶體溢位、自然災害等不可預期的原因導致,在很多時候也稱單點問題。 (1)解決單點問題主要有2種方

    .net core下簡單構建可用服務叢集

    一說到叢集服務相信對普通開發者來說肯定想到很複雜的事情,如zeekeeper ,反向代理服務閘道器等一系列的搭建和配置等等;總得來說需要有一定經驗和規劃的團隊才能應用起來。在這文章裡你能看到在.net core下的另一種叢集構建方案,通過Beetlex即可非常便捷地構建高可用的叢集服務。 簡述

    構建可用分散式Key-Value儲存服務

    前言 當我們構建服務端應用的時候,都會面臨資料存放的問題。不同的資料型別有不同的存放方式,譬如關係型資料通常使用MySQL來儲存,文件型資料則會考慮使用MongoDB,而這裡,我們僅僅考慮最簡單的kv(key-value)。 kv的使用場景很多,一個很典型的場景就是使用者session的存放,key為

    Flume + Keepalived構建可用分散式採集系統

    10.0.1.76作為Client,通過exec獲取nginx的日誌資訊,然後將資料傳到10.0.1.68(配置了Failover和Load balancing)的節點,最後10.0.1.68將資料傳送的10.0.1.70,77,85,86,87節點,這些節點最終將資料

    實踐部署 repmgr+pg9.6構建可用叢集

    環境:vlnx107001.firstshare.cn      primaryvlnx107002.firstshare.cn      slavecentos7postresql9.6repmgr4.0.5開啟防火牆firewall-cmd --zone=public -

    一張圖講解最少機器搭建FastDFS可用分散式叢集安裝說明

     很幸運參與零售雲快消平臺的公有云搭建及孵化專案。零售雲快消平臺源於零售雲家電3C平臺私有專案,是與公司業務強耦合的。為了適用於全場景全品類平臺,集團要求專案平臺化,我們搶先並承擔了此任務。並由我來主要負責平臺建設及專案落地。  今天講解在零售雲快消平臺中使用的圖片服務FastDFS叢集搭建說明,此叢集模式是

    可用分散式服務框架搭建(DubboZooKeeper

    以下是官方例項部署方法。此處涉及四個服務: zookeeper:註冊中心 dubbo-admin:服務管理後臺 dubbo-demo-provider:生產者(服務提供者) dubbo-demo-consumer:消費者(服務使用者) 需要注意的是,必

    構建可用ZooKeeper叢集

    ZooKeeper 是 Apache 的一個頂級專案,為分散式應用提供高效、高可用的分散式協調服務,提供了諸如資料釋出/訂閱、負載均衡、命名服務、分散式協調/通知和分散式鎖等分散式基礎服務。由於 ZooKeeper 便捷的使用方式、卓越的效能和良好的穩定性,被廣泛地應用於

    構建可用ZooKeeper集群

    新的 好的 機器數 單點 java_home 規模 機器 很遺憾 proc 前言 ZooKeeper 是 Apache 的一個頂級項目,為分布式應用提供高效、高可用的分布式協調服務,提供了諸如數據發布/訂閱、負載均衡、命名服務、分布式協調/通知和分布式鎖等分布式基礎服務。由

    P7架構師帶你構建可用ZooKeeper集群

    server ado 斷開 分布式 建立 kafka 保存 步驟 運行 前言: ZooKeeper 是 Apache 的一個頂級項目,為分布式應用提供高效、高可用的分布式協調服務,提供了諸如數據發布/訂閱、負載均衡、命名服務、分布式協調/通知和分布式鎖等分布式基礎服務。由於

    Centos7上利用corosync+pacemaker+crmsh構建可用叢集

    一、高可用叢集框架 資源型別: primitive(native):表示主資源 group:表示組資源,組資源裡包含多個主資源 clone:表示克隆資源 masterslave:表示主從資源 資源約束方式: 位置約束:定義資源對節點的傾向性 排序約束:定義資源彼此能否執行在同一

    corosync+pacemaker使用crmsh構建可用叢集

    一、叢集簡介  引自suse官方關於corosync的高可用叢集的框架圖:          由圖,我們可以看到,suse官方將叢集的Architecture Layers分成四層。最低層Messaging/Infra

    一鍵配置可用Hadoop叢集(hdfs HA+zookeeper HA)

    準備環境 3臺節點,主節點 建議 2G 記憶體,兩個從節點 1.5G記憶體, 橋接網路    關閉防火牆 配置ssh,讓節點之間能夠相互 ping 通 準備  軟體放到 autoInstall  目錄下,已存放 hadoop-2.9.0.tar.g

    Spark叢集搭建+基於zookeeper可用HA

    export JAVA_HOME=/usr/java/jdk1.8.0_20/ export SCALA_HOME=/home/iespark/hadoop_program_files/scala-2.10.6/ export HADOOP_HOME=/home/iespark/hadoop_program

    快速搭建 Zookeeper+Kafka 可用叢集環境

    1、概念和方案 本文只介紹快速的搭建方案,不囉嗦哈。搭建方案圖,如下: Zookeeper獨立3臺叢集(根據專案情況擴充套件),一臺為leader,其他為follower。 Kafka為多節點多br

    基於zookeeper可用Hadoop HA叢集安裝

    1.Hadoop叢集方式介紹     1.1 hadoop1.x和hadoop2.x都支援的namenode+secondarynamenode方式          優點:搭建環境簡單,適合開發者模式下除錯程式          缺點:namenode作為很重

    構建可用redis(4.0.8)快取叢集-根據圖靈公開課完整實現搭建

    redis 主從模式 單體應用,系統中只有一臺redis伺服器,只有一臺時候有單點的問題。 redis升級 主從形式: 升級主從後,從redis 伺服器不對外提供服務,只是從主伺服器哪裡同步資料;一旦主redis伺服器不能提供服務後,前臺運維人員手

    dubbo可用叢集容錯(十四)

    在叢集呼叫失敗時,Dubbo 提供了多種容錯方案,預設為 failover 重試。 Failover Cluster 失敗自動切換,當出現失敗,重試其它伺服器。通常用於讀操作,但重試會帶來更長延遲。可通過 retries="2" 來設定重試次數(不含第一次) 重試次數配