集群的理解

2021-07-15 09:41:24 字數 3360 閱讀 1394

來suse實習了乙個多星期了,這期間主要就是在理解集群涉及的概念以及搭建簡單的集群環境。這是第一次接觸集群,很多概念還是沒有完全理解,感覺就是看了很多單個的知識點,但是不能連珠成線。先來簡單說說。

集群是由多個計算機組成的乙個系統,其中這每乙個計算機被稱為節點,節點之間通過區域網或者其他方式連線起來,彼此配合完成乙個或者多個任務。從巨集觀上來講,這個系統相當於乙個計算機 。一般集群有以下三個分類:

高效能計算集群被使用在計算任務重的環境中,如果程序多是一些複雜的科學計算任務,如果這些程序全部執行在乙個伺服器上效率會非常差,如果是執行在高效能計算集群上,從效率講優化了很多。

負載均衡集群常常被使用在一些像訪問頻繁的**這樣任務繁重的環境中,負載均衡集群的目的是重新把任務分配給擁有資源的伺服器去處理任務。這個聽起來和高效能計算集群有點類似,實際上是不一樣的。高效能計算集群中所有的節點的計算都是為了完成同乙個任務,而負載均衡集群需要兼顧任務分配以找到最有效的任務處理方式和處理任務這兩件事。

高可用集群的目的就是為了確保關鍵資源或服務最大限度的可用性,集群通過在每個節點上安裝特定軟體來完成這點。該軟體會負責監控每個集群節點和集群服務是否可用,如果節點不可用或者服務停止,集群需要立即知道並且確保盡可能快的重啟節點。

乙個最基本的ha(high acailability)集群需要四個元件,shared storage、corosync、pacemaker和stonith(shoot the other node in the head)。先簡單的解釋這幾個元件。

集群必須決定哪乙個伺服器上的共享資源會被host,在該伺服器上,資料和檔案對於所有節點都必須是可用的,並且對資料或者檔案的改動保證對所有節點都能可見,因此大部分集群都需要共享儲存。大體上來說,有兩種途徑來管理共享儲存,:nfs(network file system)和san(storage area network)。nfs允許通過網路共享多個檔案和目錄,這是一種比較簡單的方式來管理共享儲存,但是靈活性比較差,因此大部分的集群都是用san方式管理共享儲存 。san像乙個外部磁碟收集器連線到伺服器上,為了訪問san,你需要配置一些基礎設施——iscsi(internet small computer system inte***ce)或者fible channal。這裡主要說iscsi,iscsi利用了tcp/ip的port 860 和 3260作為溝通的渠道。兩部計算機之間利用iscsi的協議來交換scsi命令,讓計算機可以通過區域網來把san模擬成為本地的儲存裝置。這賦予了iscsi san很多優點,任何乙個基於標準網路硬體的人都能建立乙個iscsi san來使用。

corosync是乙個組通訊系統,它執行高可用應用程式的通訊操作,有以下特徵:

pacemaker是集群很重要的乙個元件,他是集群的大腦,集群很多的決定都是靠他來決策的。比如說需要fencing哪個節點。pacemaker從根本上說是集群資源管理器,他通過監測和利用基礎設施(像corosync和heartbeat)提供的訊息從節點和資源中恢復錯誤來實現集群服務的可用性最大化。

pacemaker的主要特點包括:

抽象來說,集群由三部分組成:

要解釋stonith機制需要理解fencing這個概念。如果集群中有乙個節點異常操作或者down了(每個節點每隔1.2秒向pacemaker傳送乙個heartbeat,如果pacemaker沒有收到哪個節點的heartbeat,就認為該節點down了),集群需要立即移除該節點,這個移除操作被稱為fencing(shoot節點的意思是該結點poweroff或者reboot,這個可以設定)。在集群中,每個資源都有連線狀態,集群要求每乙個資源某一時刻只能和乙個節點連線,節點需要向集群提交對資源的改動,乙個集群的狀態就是資源狀態和節點狀態的集合。當乙個節點或者資源的狀態並不能被確定時,立即啟動stonith機制。stonith機制在集群中的實現有很多種,我主要是看了sbd(share block device)這種方式。sbd deamon執行在集群中的每乙個節點上,監測共享儲存,如果它不能訪問多數sbd或者其他的節點把fencing請求寫在了該節點的特定檔案中,此節點會立刻fencing自己。

解釋完了集群需要的簡單的元件,接下來說說如何配置乙個簡單的集群。這裡說的是配置乙個最簡單的三個節點的集群,因此需要三颱虛擬機器。

建立target的時候需要用到targetcli這個服務,有可能這個服務沒有開機自啟動,所以在建立之前需要檢視那targetcli服務的狀態。如圖下所示:

如果服務狀態是active就可以開始建立了。我們前面說share storage的時候說了,集群中每個節點都是通過network連線到share stoarage的,因此target建立的位置並沒有什麼關係,我是在本機上建立的。建立過程先在backstore的fileio目錄下建立乙個image,給出大小和名稱,然後根據響應的image建立出iscsi target最後設定以下許可權,儲存設定就可以了。過程如下圖所示。

在根據上面的步驟建立出另外乙個target用作share storage,建立完成後ls以下就可以看見建立的target了,這個集群只是為了演示並沒有任何事蹟意義,因此share storage只給了100m的空間。

建立好了target以後,需要在集群中的每乙個節點上login,因為集群中的節點此時並沒有發現這兩個target。login的時候需要知道target的名稱,如果記不住target的名稱,iscsiadm 提供了discovery功能。如圖所示:

login以後,fdisk下就能看見這兩個盤了。

我們之前在建立target的時候說明了,乙個用作sbd乙個用作share storage,在每乙個節點上都login,每乙個節點都能看見這兩個儲存了,然後就是進行一些share storage和sbd的設定了。先來設定share storage。

我們前面說stonith的時候說了,實現stonith有很多種方式,我們選擇sbd這種方式,並且選擇/dev/sda.每個節點都需要有stonith,所以需要集群中的每個節點上都配置sbd。配置sbd的步驟大概是:

注:三颱機器用作sbd的都必須是同乙個target,還記得嗎,我建立了兩個target,兩個target全部ligin進來(可以理解為掛載進來),三颱機器用作sbd的必須是用乙個target。這樣有兩個辦法解決,乙個就是先login乙個進來,配置好了sbd以後在login另外乙個。或者可以在dev目錄下檢視兩個target被掛在到了哪個目錄下,如圖:

選擇剛剛login進來的兩個盤中的其中乙個,我們選擇sdb來作為share storage。之前說了,share storage是每乙個節點都能看見的,這就意味著每乙個節點都能對share storage進行讀寫,為了對於這些併發的讀寫進行管理,我們需要在share storage上搭載乙個檔案系統,並且不能是我們常見的本地檔案系統,因為本地檔案系統並不能管理不同節點的併發讀寫,我們選擇ocfs2(oracle cluster file system 2),具體步驟如下:

注:如果建立的時候輸錯了,可以通過crm edit來修改集群的resource。

現在集群就已經配置好了。你可以通過crm status檢視集群狀態。

Hbase集群理解

nosql 表示非關係型資料庫 特點 具有查詢低延遲,列式儲存,出現原因 因為大量數資料,當今查詢比較慢 常見的nosql資料庫型別和代表有 列儲存 hbase 文件型儲存 mongodb 記憶體式儲存 redis hbase與hive的區別 重點 hive的定位是資料倉儲,雖然也有增刪但是增刪改查...

docker集群理解

某網際網路公司有12臺機器 2.在這些機器上面搭建docker環境 3.在docker容器中部署專案 4.docker容器中的網路和儲存是怎麼對映到主機上面的?網路對映 例如docker容器中的nginx監聽80埠?那麼是怎麼對應到宿主機的某個埠呢?容器內部的某個埠可以被宿主機的多個埠對映,比如 8...

分布式和集群的理解

原文 分布式分布式 乙個業務拆分成多個子業務,部署在多個伺服器上。若乙個子業務節點垮了,那整個業務就不能訪問了。舉例 乙個人跑完一千公尺,變成四個人各跑250公尺 四個人都跑完250公尺用的時間會少於乙個人跑1000公尺用的時間,單個節點無法滿足業務需求的時候,採用分布式可減少負載提公升效能和併發,...