1. 程式人生 > >linux進階之pacemaker+corosync實現haproxy高可用

linux進階之pacemaker+corosync實現haproxy高可用

一、環境介紹

1. 系統環境

rhel6.5 selinux and iptables if disable
server1: 172.25.14.1 pacemaker + haproxy node1
server4: 172.25.14.4 pacemaker + haproxy node2
server2: 172.25.14.2 web1
server3:172.25..14.3 web2

2.前提條件

(因為之前有使用luci圖形管理工具搭建高可用叢集,所以在做本次實驗之前確保這三個服務關閉並且不能開機子、自啟動)
:::chkconfig cman off
:::chkconfig modclusterd off
:::chkconfig ricci off
:::/etc/init.d/ricci stop
:::/etc/init.d/modclusterd stop
:::/etc/init.d/cman

二、pacemaker介紹

Pacemaker是一個叢集資源管理器。它利用叢集基礎構件(OpenAIS 、heartbeat或corosync)提供的訊息和成員管理能力來探測並從節點或資源級別的故障中恢復,以實現群集服務(亦稱資源)的最大可用性。它可以做幾乎任何規模的叢集,並帶有一個強大的依賴模式,讓管理員能夠準確地表達群集資源之間的關係(包括順序和位置)。幾乎任何可以編寫的指令碼,都可以作為管理起搏器叢集的一部分。尤為重要的是Pacemaker不是一個heartbeat的分支,似乎很多人存在這樣的誤解。Pacemaker是CRM專案(亦名V2資源管理器)的延續,該專案最初是為heartbeat而開發,但目前已經成為獨立專案。

1. pacemaker 特點

1)主機和應用程式級別的故障檢測和恢復
2)幾乎支援任何冗餘配置
3)同時支援多種叢集配置模式
4)可以測試任何故障或群集的群集狀態

2. 關鍵組建

Pacemaker本身由四個關鍵元件組成:
•CIB (aka. 叢集資訊基礎)
•CRMd (aka. 叢集資源管理守護程序)
•PEngine (aka. PE or 策略引擎)
•STONITHd(心跳系統)

3. pacemaker的內部結構:

這裡寫圖片描述
stonithd:心跳系統

lrmd:本地資源管理守護程序。它提供了一個通用的介面支援的資源型別。直接呼叫資源代理(指令碼)

pengine:政策引擎。根據當前狀態和配置叢集計算的下一個狀態。產生一個過渡圖,包含行動和依賴關係的列表

cib:群集資訊庫。包含所有群集選項,節點,資源,他們彼此之間的關係和現狀的定義。同步更新到所有群集節點

crmd:叢集資源管理守護程序。主要是訊息代理的PEngine和LRM,還選舉一個領導者(DC)統籌活動(包括啟動/停止資源)的叢集

heartbeat:心跳訊息層

CCM:共識群整合員,心跳成員

4. corosync

Corosync是叢集管理套件的一部分,它在傳遞資訊的時候可以通過一個簡單的配置檔案來定義資訊傳遞的方式和協議。corosync可以實現故障檢測功能,發現存在問題的資源,同時也具有心跳檢測機制 ,檢測服務是否啟用,執行在每個節點上,多個節點之間通過組播的方式監測心跳。

三、安裝配置流程

1. server1和server4安裝配置haproxy,配置相同。配置方式可參考如下文章,不再贅述。

2. server1和server4安裝配置pacemaker,配置相同。我們以server1為例

1)安裝pacemaker
可以直接從映象中下載
yum 源配置:

[[email protected] ~]# cat /etc/yum.repos.d/yum.repo 
[rhel-source]
name=rhel-source
baseurl=http://172.25.14.250/rhel6.5
gpgcheck=0

[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.14.250/rhel6.5/LoadBalancer
gpgcheck=0

[HighAvailability]
name=HighAvailability
baseurl=http://172.25.14.250/rhel6.5/HighAvailability
gpgcheck=0

[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.14.250/rhel6.5/ResilientStorage
gpgcheck=0

[ScalableFileSystem]
name=ScalableFileSystem
baseurl=http://172.25.14.250/rhel6.5/ScalableFileSystem
gpgcheck=0

這裡寫圖片描述
2)安裝crmsh及其依賴包pssh
其可從如下網址中下載:https://pkgs.org/
crm:管理叢集的工具
crm的特性:
任何操作都需要commit提交後才會生效;
想要刪除一個資源之前需要先將資源停止;
可以用 help 獲取該命令的幫助;
與Linux命令列一樣,都支援TAB補全
這裡寫圖片描述
3)corosync的配置
[[email protected] ~]# cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf
[[email protected] ~]# vim /etc/corosync/corosync.conf

bindnetaddr: 172.25.14.0  #心跳監聽網段
mcastaddr: 226.94.1.1  #約定的廣播地址,所有節點相同

這裡寫圖片描述

# corosync以外掛形式執行pacemaker
service {
        name: pacemaker
        ver: 0  #自動隨著corosync開啟
}

這裡寫圖片描述
每一個節點的/etc/corosync.conf都要相同,之後所有節點重啟corosync服務

3. 配置採集叢集

1)crm_verify -LV ##檢查crm的語句是否有錯

#關掉報錯
crm(live)configure# property stonith-enabled=false 
crm(live)configure# commit
[root@server1 ~]# crm_verify -LV
無報錯

Stonith 即shoot the other node in the head使Heartbeat軟體包的一部分,該元件允許系統自動地復位一個失敗的伺服器使用連線到一個健康的伺服器的遙遠電源裝置。Stonith裝置是一種能夠自動關閉電源來響應軟體命令的裝置
這裡寫圖片描述
這裡寫圖片描述

#關閉叢集對節點數量的檢查,節點server1如果故障,節點server4收不到心跳請求,直接接管程式,保證正常執行,不至於一個節點崩掉而使整個叢集崩掉
crm(live)configure# property no-quorum-policy=ignore
crm(live)configure# commit
2)引數介紹

這裡寫圖片描述
cib #cib管理模組

resource #所有的資源都在這個子命令後定義:cleanup #清理資源狀態;refresh #LRM本地資源管理更新CIB(叢集資訊庫)

configure #編輯叢集配置資訊:show #顯示叢集資訊庫;edit #編輯叢集資訊庫物件(vim模式下編輯);delete #刪除CIB物件;primitive #定義資源;monitor #對一個資源新增監控選項(如超時時間,啟動失敗後的操作);group #定義一個組型別(將多個資源整合在一起)

node #叢集節點管理子命令:status #以xml格式顯示節點狀態資訊;show #命令列格式顯示節點狀態資訊;standby #模擬指定節點離線(standby在後面必須的FQDN);online #節點重新上線;fence #隔離節點;delete #刪除 一個節點

options #使用者優先順序

# 注:關於crm 其他詳細引數參考如下文件:
http://blog.chinaunix.net/uid-30212356-id-5345399.html
3)crm configure show ##檢視叢集的資訊

這裡寫圖片描述

4)新增虛擬IP
crm(live)configure# primitive vip ocf:heartbeat:IPaddr2 params ip=172.25.14.100 cidr_netmask=24 op monitor interval=30
crm(live)configure# commit

這裡寫圖片描述

5)新增服務haproxy
crm(live)configure# primitive haproxy lsb:haproxy op monitor interval=1min
crm(live)configure# commit

這裡寫圖片描述

6)新增資源組
crm(live)configure# group sunshine vip haproxy
crm(live)configure# commit

這裡寫圖片描述

7)高可用效能測試
# 叢集節點實時監控:
[root@server1 ~]# crm_mon 

這裡寫圖片描述
表示,vip此時在server1上,server1執行 /etc/init.d/corosync stop,其變化如下:
這裡寫圖片描述

8)新增fence裝置
真機:
  • 安裝軟體fence-virtd-multicast、fence-virtd、fence-virtd-libvirt;
  • fence_virtd -c編寫新的fence資訊

安裝fence,選擇工作模式”multicast”,地址”225.0.0.12”,埠”1229”,family”ipv4”,網路interface”br0”,Backend module “libvirt”;

// 注:這裡br0是因為虛擬伺服器受主機控制的網絡卡是br0
  • 生成128位的key,並將key傳送到套件叢集伺服器(server1,server4)的/etc/cluster目錄下,可以用file命令檢視這個key型別是資料
[[email protected] ~]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1
  • 重新啟動fence_virtd;

這裡寫圖片描述

虛擬機器:
server1和server4上:
stonith_admin -I  ##檢驗fence,有fence_xvm就可以。這個命令用來檢視主機支援的代理型別,本次使用的是fence_xvm

這裡寫圖片描述

stonith_admin -M -a    fence_xvm    ##檢視fence_xvm

這裡寫圖片描述
新增fence資源,寫入叢集節點名和真實server的名字對映 :

crm(live)configure# primitive vmfence stonith:fence_xvm params pcmk_host_map="server1:server1;server4:server4" op monitor interval=1min
crm(live)configure# property stonith-enabled=true // 開啟fence功能
crm(live)configure# commit 

在server1和server4上設定corosync開機自啟: chkconfig corosync on
9)測試fence裝置
監控顯示:發現,fence裝置所在節點和正在執行的節點對立
這裡寫圖片描述

相關推薦

linuxpacemaker+corosync實現haproxy可用

一、環境介紹 1. 系統環境 rhel6.5 selinux and iptables if disable server1: 172.25.14.1 pacemaker + haproxy node1 server4: 172.25.14.4

毛毛Python路2——實現雙端互聯

毛毛Python進階之路2——實現雙端互聯 1、兩個月前我開始自學Python 2、一個月前我在室友的壓迫下,我用Python優秀的第三方庫requests庫完成了相對正規的爬蟲專案。可以做到批量爬去網路上美眉的圖片【手動滑稽!!!】 連結:https://blog.csdn.ne

Linux路(一):部署

經過長期的開發工作,在專案中經常會需要將打包好的專案部署到Linux伺服器上,不過,在此之前需要掌握一些Linux常用命令比如ls、ll、ps -ef|grep java 、cp、tail 等等,詳細的可以百度查一下,還是很多的。接下來,就說一下關於專案的部署。 首先需要一個遠端訪問Linu

pacemaker + corosync 實現 haproxy可用負載均衡

1. HAProxy簡介 HAProxy 是一款提供高可用性、負載均衡以及基於TCP(第四層)和HTTP(第七層)應用的代理軟體,支援虛擬主機,它是免費、快速並且可靠的一種解決方案。 HAProxy特別適用於那些負載特大的web站點,這些站點通常又

我的Android旅------>Android實現音樂示波器、均衡器、重低音和音場功能

package com.oyp.media; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Context; import android.gra

Linux which 命令

我們經常在linux要查詢某個檔案,但不知道放在哪裡了,可以使用下面的一些命令來搜尋: which 檢視可執行檔案的位置。 whereis 檢視檔案的位

corosync+pacemaker+crm實現drbd可用

drbd.not configured corosync packmaker crm pcs 系統:Centos 7.2 內核3.10.0-327.el7.x86_64 # 內核需要高於2.6.32Drbd : 192.168.8.111:node1/dev/drdb0 /my

基於corosyncpacemaker+drbd實現mfs可用

mfs高可用 drbd pacemaker corosync moosefs 基於corosync和pacemaker+drbd實現mfs高可用一、MooseFS簡介1、介紹 MooseFS是一個具備冗余容錯功能的分布式網絡文件系統,它將數據分別存

Linux運維-叢集技術】Nginx+Keepalived+Tomcat搭建可用/負載均衡/動靜分離的Web伺服器叢集

額,部落格名字有點長。。。 前言 終於到這篇文章了,心情是有點激動的。因為這篇文章會集中以前部落格講到的所有Nginx功能點,包括基本的負載均衡,還有動靜分離技術再加上這篇文章的重點,通過Keepalived實現的HA(High Available),為什麼

路(基礎篇) - 009 通過底層AVR方法實現SPI數據傳輸

lean oop and return false 進階 from setup pie 主機端: /********************************* 代碼功能:通過底層AVR方法實現SPI數據傳輸(主機端) 創作時間:2016*10*17 使用資源:

【SSH路】Struts基本原理 + 實現簡單登錄(二)

target doctype 掌握 pack insert enter snippet file manage 上面博文,主要簡單的介紹了一下SSH的基本概念,比較宏觀。作為剛開始學習的人可以有一個總體上的認識,個人覺得對學習有非常好的輔助功能,它不不過

我的Android旅------>Android二級ListView列表的實現

cat -i gravity 寫真 技術分享 家政服務 個性 韓國 服務 實現例如以下圖所看到的的二級列表效果 首先是在布局文件裏,布局兩個ListView,代碼例如以下: <LinearLayout xmlns:android="htt

Linux命令find

linux命令 find find目的:查找符合條件的文件格式:find 目錄名 選項 查找條件find /work/001_linux_basic/dira -name "*.txt"查找指定目錄下所有以.txt結尾的文件,其中,*是通配符fi

Linux命令grep查找字符串

linux grep 目的:使用grep命令來查找文件中符合條件的字符串格式:grep 【選項】 【查找模式】 【文件名】查找字符串時希望顯示如下內容:1)所在的文件名-------------------------grep在查找時默認已經顯示目標文件名2)所在的行號--

Linux命令tar

linux tar tar常用選項-c(create) 表示創建用來生成文件包-x:表示提取,從文件包中提取文件-t可以查看壓縮的文件。-z使用gzip方式進行處理,它與”c“結合就表示壓縮,與”x“結合就表示解壓縮。-j使用bzip2方式進行處理,它與”c“結合就表示壓縮,與”x“結合就表示解

haproxy+pacemaker+corosync實現可用

pacemaker+corosync Pacemaker是一個叢集資源管理器。它利用叢集基礎構件(OpenAIS 、heartbeat或corosync)提供的訊息和成員管理能力來探測並從節點或資源級別的故障中恢復,以實現群集服務(亦稱資源)的最大可用性。 Corosync是叢集管理

Linux:自動化運維ANSIBLE(一)

運維自動化發展歷程 1、本地部署(On-Premiss) 部署硬體+軟體+作業系統+環境+服務 2、基礎設施即服務(Iaas) 相當於只准備硬體 3、平臺即服務(Paas) 相當於只准備服務 4、軟體即服務(SaaS) 直接使用 企業實際應用場景分析 1、Dev開發環境 使用者:程式

python3.5(三)-------------實現多工協程(生成器,迭代器)

1.迭代器:迭代是訪問集合元素的一種方式,迭代器是可以記住遍歷的位置的物件,迭代器物件從集合的第一個元素開始訪問,直到所有訪問結束,迭代器只能前進不能後退。判斷一個數據型別是否可以迭代,看是否能for迴圈。如(字串,列表,元祖...)序列可以迭代,數字不能迭代,或通過isintance([11,12

python3.5(三)-------------實現多工程序

1. 程式:硬碟上的exe,是靜態的(一段程式碼程式碼)。通俗的說,程式在硬碟上執行起來(如雙擊qq.exe)就是程序,一般一個程式,可以有多個程序,如一個QQ程式,可以同時開啟登入多個QQ號程序。   2. 程序與執行緒的區別:都能實現多工。程式執行時,先將靜態程式碼

Esp8266 路32【高階篇】當esp8266遇到 Html,該怎麼內建網頁控制裝置,理清內建網頁的實現過程,實現無需路由器手機也可以控制esp8266。(附帶韌體)

一、前言; 這個月也快結束了,時間真快,我伺服器知識自學依然在路途中,這幾天聽到熱點網頁配置esp8266連線路由器,那麼我想這個不是很複雜,不過需要一些通訊協議的基礎,以及對esp8266