1. 程式人生 > >叢集解決方案

叢集解決方案

一、叢集的概念

            叢集是一種計算機系統, 它通過一組鬆散整合的計算機軟體和/或硬體連線起來高度緊密地協作完成計算工作。在某種意義上,他們可以被看作是一臺計算機。集群系統中的單個計算機通常稱為節點,通常通過區域網連線,但也有其它的可能連線方式。叢集計算機通常用來改進單個計算機的計算速度和/或可靠性。一般情況下叢集計算機比單個計算機,比如工作站或超級計算機效能價格比要高得多。


    叢集的特點


    1.   可擴充套件性:叢集的效能不限制於單一的服務實體,新的服務實體可以動態的添

加到叢集,從而增強叢集的效能。
             

   2.   高可用性:叢集當其中一個節點發生故障時,這臺節點上面所執行的應用程將在另一臺

節點被自動接管,消除單點故障對於增強資料可用性、可達性和可靠性是非常重要的。

叢集的兩大能力

    1. 負載均衡:負載均衡把任務比較均勻的分佈到叢集環境下的計算和網路資源,以提高資料吞吐量。
   

  2. 錯誤恢復:如果叢集中的某一臺伺服器由於故障或者維護需要無法使用,資源和應用程式

將轉移到可用的叢集節點上。這種由於某個節點的資源不能工作,另一個可用節點中的資源能

夠透明的接管並繼續完成任務的過程,叫做錯誤恢復。

負載均衡和錯誤恢復要求各服務實體中有執行同一任務的資源存在,而且對於同一任務的各個

資源來說,執行任務所需的資訊檢視必須是相同的。

二、叢集和分散式的區別

    說到叢集,可能大家會立刻聯想到另一個和它很相近的一個詞----“分散式”。那麼叢集和分散式是一回事嗎?有什麼聯絡和區別呢?

相同點:
        分散式和叢集都是需要有很多節點伺服器通過網路協同工作完成整體的任務目標。
不同點:
        分散式是指將業務系統進行拆分,即分散式的每一個節點都是實現不同的功能。而叢集每個節點做的是同一件事情。

 三、zookeeper叢集

       1、zookper叢集簡介
    
            大部分分散式應用需要一個主控、協調器或者控制器來管理物理分佈的子程序。目前,大多數

都要開發私有的協調程式,缺乏一個通用機制,協調程式的反覆編寫浪費,且難以形成通用、伸縮性好

的協調器,zookeeper提供通用的分散式鎖服務,用以協調分散式應用。所以說zookeeper是分散式

應用的協作服務。

            zookeeper作為註冊中心,伺服器和客戶端都要訪問,如果有大量的併發,肯定會有等待。所

以可以通過zookeeper叢集解決。

    下面是zookeeper叢集部署結構圖

    

2、瞭解Leader選舉

        Zookeeper的啟動過程中leader選舉是非常重要而且最複雜的一個環節。那麼什麼是leader選舉

呢?zookeeper為什麼需要leader選舉呢?zookeeper的leader選舉的過程又是什麼樣子的?

        首先我們來看看什麼是leader選舉。其實這個很好理解,leader選舉就像總統選舉一樣,每人一

票,獲得多數票的人就當選為總統了。在zookeeper叢集中也是一樣,每個節點都會投票,如果某個

節點獲得超過半數以上的節點的投票,則該節點就是leader節點了。

以一個簡單的例子來說明整個選舉的過程. 

假設有五臺伺服器組成的zookeeper叢集,它們的id從1-5,同時它們都是最新啟動的,也就是沒有

歷史資料,在存放資料量這一點上,都是一樣的.假設這些伺服器依序啟動,來看看會發生什麼 。

1) 伺服器1啟動,此時只有它一臺伺服器啟動了,它發出去的報沒有任何響應,所以它的選舉狀態一

直是LOOKING狀態  

2) 伺服器2啟動,它與最開始啟動的伺服器1進行通訊,互相交換自己的選舉結果,由於兩者都沒有歷

史資料,所以id值較大的伺服器2勝出,但是由於沒有達到超過半數以上的伺服器都同意選舉它(這個例子

中的半數以上是3),所以伺服器1,2還是繼續保持LOOKING狀態.  

3) 伺服器3啟動,根據前面的理論分析,伺服器3成為伺服器1,2,3中的老大,而與上面不同的是,此時

有三臺伺服器選舉了它,所以它成為了這次選舉的leader.  

4) 伺服器4啟動,根據前面的分析,理論上伺服器4應該是伺服器1,2,3,4中最大的,但是由於前面已經

有半數以上的伺服器選舉了伺服器3,所以它只能接收當小弟的命了.  

5) 伺服器5啟動,同4一樣,當小弟

   3、搭建zookeeper叢集

       3.1、 搭建要求

               真實的叢集是需要部署在不同的伺服器上的,但是在我們測試時同時啟動十

幾個虛擬機器記憶體會吃不消,所以我們通常會搭建偽叢集,也就是把所有的服務都搭建

在一臺虛擬機器上,用埠進行區分。

            我們這裡要求搭建一個三個節點的Zookeeper叢集(偽叢集)。

3.2 準備工作

    重新部署一臺虛擬機器作為我們搭建叢集的測試伺服器。


(1)安裝JDK  【此步驟省略】。

(2)Zookeeper壓縮包上傳到伺服器

(3)將Zookeeper解壓 ,建立data目錄 ,將 conf下zoo_sample.cfg 檔案改名為 zoo.cfg

(4)建立/usr/local/zookeeper-cluster目錄,將解壓後的Zookeeper複製到以下三個目錄
         

/usr/local/zookeeper-cluster/zookeeper-1
/usr/local/zookeeper-cluster/zookeeper-2
/usr/local/zookeeper-cluster/zookeeper-3 

[[email protected] ~]# mkdir /usr/local/zookeeper-cluster
[[email protected] ~]# cp -r  zookeeper-3.4.6 /usr/local/zookeeper-cluster/zookeeper-1
[[email protected] ~]# cp -r  zookeeper-3.4.6 /usr/local/zookeeper-cluster/zookeeper-2
[[email protected] ~]# cp -r  zookeeper-3.4.6 /usr/local/zookeeper-cluster/zookeeper-3
(5) 配置每一個Zookeeper 的dataDir(zoo.cfg) clientPort 分別為2181      2182  2183
   
     修改/usr/local/zookeeper-cluster/zookeeper-1/conf/zoo.cfg
    clientPort=2181
    dataDir=/usr/local/zookeeper-cluster/zookeeper-1/data
    修改/usr/local/zookeeper-cluster/zookeeper-2/conf/zoo.cfg
    clientPort=2182
    dataDir=/usr/local/zookeeper-cluster/zookeeper-2/data
    修改/usr/local/zookeeper-cluster/zookeeper-3/conf/zoo.cfg
    clientPort=2183
    dataDir=/usr/local/zookeeper-cluster/zookeeper-3/data
3.3、配置叢集(1)在每個zookeeper的 data 目錄下建立一個 myid 檔案,內容分別是1、2、3 。這個檔案就是記錄每個伺服器的ID
    -------知識點小貼士------
        如果你要建立的文字檔案內容比較簡單,我們可以通過echo 命令快速建立檔案
   

     格式為: 
                echo 內容 >檔名

        例如我們為第一個zookeeper指定ID為1,則輸入命令

 

(2)在每一個zookeeper 的zoo.cfg配置客戶端訪問埠(clientPort)和叢集伺服器IP列表。

    

    叢集伺服器IP列表如下

        
server.1=192.168.25.140:2881:3881
server.2=192.168.25.140:2882:3882
server.3=192.168.25.140:2883:3883

    解釋:server.伺服器ID=伺服器IP地址:伺服器之間通訊埠:伺服器之間投票選舉埠

 -----知識點小貼士-----
        我們可以使用EditPlus遠端修改伺服器的文字檔案的內容,更加便捷

(1)在選單選擇FTP Settings 
    (2)點選ADD按鈕
 (3)輸入伺服器資訊
 (4)點選高階選項按鈕
 (5)選擇SFTP  埠22
 (6)OK  。完成配置
 連線:
 
 

 
哈哈,無敵啦~~~~   你可能要問,老師,你為啥不早告訴我有這一招  !

3.4 、啟動叢集    啟動叢集就是分別啟動每個例項
    

    啟動後我們查詢一下每個例項的執行狀態


    先查詢第一個服務

    

Mode為follower表示是跟隨者(從)


再查詢第二個服務Mod 為leader表示是領導者(主)


查詢第三個為跟隨者(從)

3.5、模擬叢集異常

    (1)首先我們先測試如果是從伺服器掛掉,會怎麼樣?


        把3號伺服器停掉,觀察1號和2號,發現狀態並沒有變化?


由此得出結論,3個節點的叢集,從伺服器掛掉,叢集正常

(2)我們再把1號伺服器(從伺服器)也停掉,檢視2號(主伺服器)的狀態,發現已經停止運行了。



        由此得出結論,3個節點的叢集,2個從伺服器都掛掉,主伺服器也無法執行。因為可執行的機器

沒有超過叢集總數量的半數。


(3)我們再次把1號伺服器啟動起來,發現2號伺服器又開始正常工作了。而且依然是領導者。

(3)我們把3號伺服器也啟動起來,把2號伺服器停掉(汗~~幹嘛?領導掛了?)停掉後觀察1號和3

號的狀態。

    

發現新的leader產生了~ 

        由此我們得出結論,當叢集中的主伺服器掛了,叢集中的其他伺服器會自動進行選舉狀態,然後產生新

得leader


(5)我們再次測試,當我們把2號伺服器重新啟動起來(汗~~這是詐屍啊!)啟動後,會發生什麼?2

號伺服器會再次成為新的領導嗎?我們看結果


         我們會發現,2號伺服器啟動後依然是跟隨者(從伺服器),3號伺服器依然是領導者(主服務

器),沒有撼動3號伺服器的領導地位。哎~退休了就是退休了,說了不算了,哈哈。


        由此我們得出結論,當領導者產生後,再次有新伺服器加入叢集,不會影響到現任領導者。

4、Dubbox連線zookeeper叢集

修改服務提供者和服務呼叫者的spring 配置檔案

<!-- 指定註冊中心地址 -->
<dubbo:registry
protocol="zookeeper" address="192.168.25.140:2181,192.168.25.140:2182,192.168.25.140:2183">
</dubbo:registry>






相關推薦

Linux上的叢集解決方案(mpi)

一、叢集和Linux上的叢集解決方案 叢集計算機是指用一組聯網的PC或工作站來搭建成的,提供比單個PC(節點)計算效能高得多的計算機。說其是計算機,其實是針對所提供出來的服務而言的,或者說是邏輯上來說的。叢集計算機的主要優勢就是成本,相同的計算能力下,其成本只有傳統大型機的十分之一,在全球計

JAVA架構師課程(大資料,分散式事物解決方案,大型網際網路專案,大型金融專案,高併發叢集解決方案)實戰開發[技術 activeMQ,zookeeper,http,支付,團購,dubbox,stom]

在IT圈子裡,真正達到軟體架構師能力和水平的,一般的年薪在30-50w,甚至50w+,資深的或者高階的架構師,年薪在50-80萬,水平更高的,薪水也就更多了,可以稱得上是金領了。   因此,一直以來,有很多朋友都在朝軟體架構師這個方向努力發展。但由於沒有人領路,一些朋友

大規模Redis叢集解決方案

1.為什麼要使用Redis叢集 一般的,為了提升網站及其他網路應用的響應能力,會將經常訪問的資料進行快取起來,而不是直接從後端資料庫裡面進行讀取。而目前市場上,Redis則是Cache的一個很好的解決方案,使用和部署很簡單,效能也非常不錯。但由於它是單執行緒單例項的服務,在

Redis 叢集解決方案比較

調研比較了三個Redis叢集的解決方案: 系統貢獻者是否官方Redis實現程式語言TwemproxyTwitter是CRedis ClusterRedis官方

Redis叢集解決方案codis

Codis 是一個分散式 Redis 解決方案, 對於上層的應用來說, 連線到 Codis Proxy 和連線原生的 Redis Server 沒有明顯的區別 (不支援的命令列表), 上層應用可以像使用單機的 Redis 一樣使用, Codis 底層會處理請求的轉發,

華為釋出ATAE叢集解決方案,為運營商實現網路系統集中管理

“華為,不僅僅是世界500強”——這個口號不知道是啥時候開始喊起的,就在美國以安全為由狙擊華為中興時,今天在C114上看到這篇文章,轉載過來分享給大家,原文如下: 全球領先的資訊與通訊解決方案供應商華為,近日釋出ATAE叢集解決方案。該方案是基於ATAE (Advanced Telecommunic

nginx 負載均衡叢集解決方案 healthcheck_nginx_upstreams (一)

 該文章來源於網際網路,目前找不到原作者,放在這裡的目的是記錄 的安裝過程和相關配置,在起初安裝成功後不能夠正常執行healthcheck_nginx_upstreams,後通過閱讀原始碼和除錯,能夠正常執行。 不過資訊如下: *26 no live upstreams while connec

RocketMQ叢集解決方案----JAVA應用

       上篇文章 RocketMQ叢集解決方案 已經講解了RocketMQ應用場景及效能、RocketMQ網路部署圖、實際叢集部署操作步驟(採用多Master多Slave,非同步複製叢集模式進行部署),這篇文章將講解JAVA應用中怎麼實際呼叫搭建的RocketMQ

Redis叢集解決方案----JAVA應用

上篇文章 Redis叢集解決方案 已經已經介紹了Redis應用場景及效能、Redis單機部署以及叢集部署的操作,下面將講解如何使用JAVA客戶端呼叫搭建好的Redis叢集環境。     先搭建一個Java工程JRedisUtils,匯入Redis3.0相應的jar,點選此處

負載均衡叢集解決方案 Nginx

 Nginx是一個免費的,開源的,高效能的伺服器和反向代理伺服器軟體,同時它也可以為IMAP和POP3伺服器代理,以其高效能,穩定性,豐富的功能,結構簡單,低資源消耗的特性換來廣大運維者所喜愛。 Nginx與傳統的伺服器不同,不依賴執行緒來處理請求。相反,它使用一個更可

叢集解決方案

一、叢集的概念            叢集是一種計算機系統, 它通過一組鬆散整合的計算機軟體和/或硬體連線起來高度緊密地協作完成計算工作。在某種意義上,他們可以被看作是一臺計算機。集群系統中的單個計算機通常稱為節點,通常通過區域網連線,但也有其它的可能連線方式。叢集計算機通常

Java客戶端訪問HBase叢集解決方案(優化)

測試環境:Idea+Windows10 準備工作:    <1>、開啟本地 C:\Windows\System32\drivers\etc(系統預設)下名為hosts的系統檔案,如果提示當前使用者沒有許可權開啟檔案;第一種方法是將hosts檔案拖到桌面進行配置

Tomcat叢集解決方案

<?xml version='1.0' encoding='utf-8'?> <Context>     <WatchedResource>WEB-INF/web.xml</WatchedResource> <Manager className="de.

Nacos高可用叢集解決方案-Docker版本

文章主旨 本文目的是配置高可用的Nacos叢集 架構圖 整體架構為:Nginx + 3 x Nacos +高可用MySQL 高可用MySQL使用主從複製結構的可以參考Docker搭建MySQL主從叢集,基於GTID 文中對應的配置檔案已經上傳Github,地址:https://github.com/hel

部署hadoop叢集ha模式常見的問題,以及解決方案

1.      叢集中的某個datanode無法啟動。 原因:可能是該節點的clusterId和master上的不一樣了,修改clusterId和master一樣的就行了。如下: 在core-site.xml中找到配置的hadoop

Tomcat叢集session管理解決方案 關於sticky session session replication與使

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Python:問題及解決方案叢集

在《Python程式設計:從入門到實踐》書裡第16章中的一個程式countries.py裡,用到了模組pygal.i18n獲取國別碼,而現在由於pygal已經沒有i18n模組,出現瞭如下錯誤:ModuleNotFoundError: No module named 'pygal.i18n',

HDFS叢集磁碟傾斜不均衡的解決方案

一、引起磁碟傾斜不均衡的可能原因有哪些 (1)擴容節點,向叢集中新增新的資料節點 (2)資料節點之間的磁碟大小不一致 二、磁碟傾斜引起的效能問題 (1)MR程式無法很好地利用本地計算的優勢 (2)機器之間無法達到更好的網路頻寬使用率 (3)機器磁碟無

zookeeper叢集啟動報錯ZooKeeper JMX enabled by default...解決方案

1. 上傳zookeeper到linux伺服器,並解壓縮/opt/install中 2. zookeeper_home/conf    zoo_sample.cfg 改名 成 zoo.cfg    cp zoo_sample.cfg zoo.cfg 3. 修改zoo.cfg

Ceph叢集報錯解決方案筆記

當前Ceph版本和CentOS版本: [[email protected] ceph]# ceph -v ceph version 13.2.2 (02899bfda814146b021136e9d8e80eba494e1126) mimic (stable) [[emai