Linux 高可用(HA)集羣之Corosync詳解(一)

一、Corosync簡介

      Corosync是OpenAIS發展到Wilson版本後衍生出來的開放性集羣引擎工程。可以說Corosync是OpenAIS工程的一部分。OpenAIS從openais0.90開始獨立成兩部分一個是Corosync另一個是AIS標準接口Wilson。Corosync包含OpenAIS的核心框架用來對Wilson的標準接口的使用、管理。它爲商用的或開源性的集羣提供集羣執行框架。Corosync執行高可用應用程序的通信組系統它有以下特徵

  •  一個封閉的程序組A closed process group communication model通信模式這個模式提供一種虛擬的同步方式來保證能夠復***務器的狀態。

  • 一個簡單可用性管理組件A simple availability manager這個管理組件可以重新啓動應用程序的進程當它失敗後。

  • 一個配置和內存數據的統計A configuration and statistics in-memory database內存數據能夠被設置回覆接受通知的更改信息。

  • 一個定額的系統A quorum  system,定額完成或者丟失時通知應用程序。


二、pacemaker簡介

        pacemaker(直譯心臟起搏器)是一個羣集資源管理器。它實現最大可用性羣集服務亦稱資源管理的節點和資源級故障檢測和恢復使用您的首選集羣基礎設施OpenAIS的或Heaerbeat提供的消息和成員能力。

      它可以做乎任何規模的集羣並配備了一個強大的依賴模型使管理員能夠準確地表達羣集資源之間的關係包括順序和位置。幾乎任何可以編寫腳本可以管理作爲心臟起搏器集羣的一部分。

pacemaker 特點

  • 主機和應用程序級別的故障檢測和恢復

  • 幾乎支持任何冗餘配置


  • 同時支持多種集羣配置模式


  • 配置策略處理法定人數損失多臺機器失敗時


  • 支持應用啓動/關機順序


  • 支持必須/必須在同一臺機器上運行的應用程序


  • 支持多種模式的應用程序如主/從


  • 可以測試任何故障或羣集的羣集狀態


  • 現在最主流的資源管理器


三、Corysync與Pacemaker 安裝    

1、實驗環境

節點服務器域名IP地址操作系統
軟件版本
node1.gulong.com172.16.8.5
Centos6.5

corosync-1.4.1-17.el6.x86_64

pacemaker-1.1.10-14.el6.x86_64

node2.gulong.com172.16.8.8Centos6.5

corosync-1.4.1-17.el6.x86_64

pacemaker-1.1.10-14.el6.x86_64


2.前提條件

爲了配置一臺Linux主機成爲HA的節點通常需要做出如下的準備工作

所有節點的主機名稱和對應的IP地址解析服務可以正常工作且每個節點的主機名稱需要跟"uname -n“命令的結果保持一致

node1的配置

(1).各節點之間主機名互相解析

[root@node1 ~]# hostname node1.gulong.com
[root@node1 ~]# vim /etc/hosts
//添加如下內容
172.16.8.8  node2.gulong.com
172.16.8.5  node1.gulong.com


(2).各節點之間時間同步

[root@node1 ~]# ntpdate 172.16.0.1 //172.16.0.1爲時間服務器


(3).各節點之間ssh互信

[root@node1 ~]# ssh-keygen  -t rsa -P ''
[root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]


node2的配置

(1).各節點之間主機名互相解析

[root@node2 ~]# hostname node2.gulong.com
[root@node2 ~]# vim /etc/hosts
//添加如下內容
172.16.8.8  node2.gulong.com
172.16.8.5  node1.gulong.com


(2).各節點之間時間同步

[root@node2 ~]# ntpdate 172.16.0.1 //172.16.0.1爲時間服務器


(3).各節點之間ssh互信

[root@node2 ~]# ssh-keygen  -t rsa -P ''
[root@node2 ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]


3.配置yum源(EPEL源)

node1

[root@node1 ~]# wget http://download.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
[root@node1 ~]# rpm -ivh epel-release-5-4.noarch.rpm
warning: epel-release-5-4.noarch.rpm: Header V3 DSA signature: NOKEY, key ID 217521f6
Preparing...                ########################################### [100%]
1:epel-release           ########################################### [100%]
[root@node1 src]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5


node2

[root@node2 ~]# wget http://download.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
[root@node2 ~]# rpm -ivh epel-release-5-4.noarch.rpm
warning: epel-release-5-4.noarch.rpm: Header V3 DSA signature: NOKEY, key ID 217521f6
Preparing...                ########################################### [100%]
1:epel-release           ########################################### [100%]
[root@node2 ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5


4.關閉防火牆與SELinux

node1:

root@node1 ~]# service iptables stop
[root@node1 ~]# vim /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - SELinux is fully disabled.
SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
#       targeted - Only targeted network daemons are protected.
#       strict - Full SELinux protection.
SELINUXTYPE=targeted


node2:

[root@node2 ~]# service iptables stop
[root@node2 ~]# vim /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - SELinux is fully disabled.
SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
#       targeted - Only targeted network daemons are protected.
#       strict - Full SELinux protection.
SELINUXTYPE=targeted


5.安裝corosync與pacemaker

node1:

[root@node1 ~]# yum install -y corosync*
[root@node1 ~]# yum install -y pacemaker*


node2

[root@node2 ~]# yum install -y corosync*
[root@node2 ~]# yum install -y pacemaker*


四、Corosync 詳細配置

在node1上修改配置

1.提供配置文件

[root@node1 ~]# cd /etc/corosync/
[root@node1 corosync]# cp corosync.conf.example corosync.conf


2.修改配置文件

[root@node1 corosync]# vim corosync.conf

內容如下:

# Please read the corosync.conf.5 manual page
compatibility: whitetank
totem {
        version: 2
        secauth: on   //啓動認證
        threads: 0
        interface {
                ringnumber: 0
                bindnetaddr: 172.16.0.0  //修改心跳線網段爲節點的網段
                mcastaddr: 226.77.167.71 //組播地址用於傳播心跳信息
                mcastport: 5405
                ttl: 1
        }
}
logging {
        fileline: off
        to_stderr: no
        to_logfile: yes
        to_syslog: no
        logfile: /var/log/cluster/corosync.log //日誌位置
        debug: off
        timestamp: on
        logger_subsys {
                subsys: AMF
                debug: off
        }
}
amf {
        mode: disabled
}
//啓用了 pacemaker
service {
        ver:    0
        name:   pacemaker
}
aisexec {
        user:   root
        group:  root
}


3.生成密鑰文件

注corosync生成key文件會默認調用/dev/random隨機數設備一旦系統中斷的IRQS的隨機數不夠用將會產生大量的等待時間因此爲了節約時間我們在生成key之前將random替換成urandom以便節約時間但在實際生產環境中請勿使用不安全。

[root@node1 corosync]# mv /dev/{random,random.bak}
[root@node1 corosync]# ln -s /dev/urandom /dev/random
[root@node1 corosync]# corosync-keygen

wKioL1NSbzviUpNyAAC2NXmRe2w660.jpg


確保key權限爲400

wKioL1NSb-3SUxBbAAFOdrw9Pn8431.jpg


4、將key文件authkey與配置文件corosync.conf複製到node2上

[root@node1 corosync]# scp -p authkey corosync.conf node2.gulong.com:/etc/corosync/


5、安裝crmsh

  從pacemaker 1.1.8開始crm sh 發展成一個獨立項目pacemaker中不再提供因此需要自行下載安裝crmsh依賴於pssh因此需要一併下載

(1)crmsh下載地址

http://pan.baidu.com/s/1o6oa2Pc

(2)pssh下載地址

http://pan.baidu.com/s/10AlYI


(3)安裝這2個包

#yum -y --nogpgcheck localinstall crmsh*.rpm pssh*.rpm

注corosync 到這裏配置全部完成。下面我們進行啓動測試


五、啓動Corosync

1.啓動corosync

[root@node1 ~]# ssh node2.gulong.com "service corosync start"
[root@node1 ~]# service corosync start

wKiom1NSd47xDd26AADnkPG-hsQ773.jpg


2.查看corosync啓動信息

(1)查看corosync引擎是否正常啓動

wKioL1NSeFzRT_W1AAHT2TBUiUg986.jpg


(2).檢查啓動過程中是否有錯誤產生

[root@node1 ~]# grep ERROR: /var/log/cluster/corosync.log

wKioL1NSeZeiUXOvAALIWO6SzDU770.jpg

上面的錯誤信息表示packmaker不久之後將不再作爲corosync的插件運行因此建議使用cman作爲集羣基礎架構服務此處可安全忽略。


(3).查看pacemaker是否正常啓動

[root@node1 ~]# grep pcmk_startup /var/log/cluster/corosync.log

wKioL1NSeg_iFgqNAAIyGM484Rc513.jpg


3、查看集羣狀態

[root@node1 corosync]# crm status

wKiom1NSfGqAsEAIAAKjY2Pvdq8996.jpg

大家可以看到集羣運行正常,node1與node2都在線 ,但是還沒有配置資源 ,在下一篇博客中我們重點來講解如何用pacemaker來增加各種資源!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章