Apache Qpid 高可用集羣

1、RHCS

  RHCS是Red Hat Cluster Suite(紅帽子集羣套件)的縮寫。RHCS是一個功能完備的集羣應用解決方案,它從應用的前端訪問到後端的數據存儲都提供了一個行之有效的集羣架構實現,不但能保證前端應用持久、穩定的提供服務,同時也保證了後端數據存儲的安全。RHCS提供了集羣系統中三種集羣構架:高可用性集羣、負載均衡集羣、存儲集羣html

 

RHCS提供的三個核心功能前端

  高可用集羣是RHCS的核心功能。當應用程序出現故障,或者系統硬件、網絡出現故障時,應用能夠經過RHCS提供的高可用**管理組件自動、快速從一個節點切換到另外一個節點,節點故障轉移功能對客戶端來講是透明的,從而保證應用持續、不間斷的對外提供服務。node

  RHCS經過LVS(Linux Virtual Server)來提供負載均衡集羣。經過LVS的負載調度功能,能夠將客戶端請求平均的分配到各個服務節點,同時,LVS還提供了服務節點故障轉移功能,當某個服務節點不能提供服務時,LVS會自動屏蔽這個故障節點,並從集羣中剔除,同時將新來此節點的請求平滑的轉移到其它正常節點上來;而當此故障節點恢復正常後,LVS又會自動將此節點加入到集羣中去。這一系列切換動做,對用戶來講都是透明的。python

  RHCS經過GFS(Global File System)分佈式文件系統來提供存儲集羣功能,它容許多個服務同時去讀寫一個單一的共享文件系統,存儲集羣經過將共享數據放到一個共享文件系統中從而消除了在應用程序間同步數據的麻煩。linux

 

RHCS集羣架構c++

圖1.1是紅帽官方給出的集羣架構,每臺集羣裏的計算機配置2個網卡,分別鏈接外網的交換機和內網的交換機,存儲部分由統一的光纖交換機接入存儲設備。web

圖1.2則是集羣的工做模式,其中node1和node2共同跑的是service1 ,node3和node4跑的是service2,各個node由fencing device來進行管理。vim

 

2、     源碼安裝Apache Qpid

  因爲C++ Broker性能較Java Broker強,同時支持HA集羣和Federation,故咱們選擇C++版本的Qpid Broker。目前最新版本爲0.32。Qpid 採用 Corosync 做爲通訊層,利用 Corosync,集羣中的每個 broker 都採用組播通訊將本身的狀態同步給集羣中的其餘 broker。windows

  Qpid 和 RHCS 緊密集成,它能夠採用 CMAN 防止集羣中的「腦裂」問題,也可使用 rgmanager 自動重啓 failed 的 Qpid。固然,不必定非要使用 RHCS 來搭建您的集羣,也可使用其餘的 CRM 集羣管理軟件來管理 Qpidd。Qpidd 自己只是使用了 Corosync 來完成同步通訊,可使用 CMAN 來防止「腦裂」問題。後端

  一、從官網下載qpid-cpp-0.32.tar.gz、qpid-python-0.32.tar.gz和qpid-tools-0.32.tar.gz。

[root@node2 Downloads]# ll

total 2396

-rwxr--r--. 1 root root 2226863 Jun 15 18:24 qpid-cpp-0.32.tar.gz

-rwxr--r--. 1 root root  161339 Jun 15 18:24 qpid-python-0.32.tar.gz

-rwxr--r--. 1 root root   60695 Jun 15 18:24 qpid-tools-0.32.tar.gz

[root@node2 Downloads]# tar xvf qpid-cpp-0.32.tar.gz

[root@node2 Downloads]# cd qpid-cpp-0.32

 

  二、查看INSTALL文檔可知,先安裝依賴庫(部分可選的,這裏爲了方便,所有安裝)

[root@node2 qpid-cpp-0.32]# yum -y install cmake boost-devel libuuid-devel pkgconfig gcc-c++ make ruby help2man doxygen graphviz cyrus-sasl-devel nss-devel nspr-devel xqilla-devel xerces-c-devel ruby ruby-devel swig libdb-cxx-devel libaio-devel db4-devel

 

  三、Qpid是用cmake來管理的。在這裏只須要編譯release版本,新建一個BLD-opt文件夾。

[root@node2 qpid-cpp-0.32]# mkdir BLD-opt

[root@node2 qpid-cpp-0.32]# cd BLD-opt

[root@node2 BLD-opt]# cmake -DCMAKE_BUILD_TYPE=Release ..

[root@node2 BLD-opt]# make all –j4

……

Linking CXX executable server_reconnect

[100%] Built target server_reconnect

Scanning dependencies of target spout

[100%] Building CXX object examples/messaging/CMakeFiles/spout.dir/spout.o

[100%] Building CXX object examples/messaging/CMakeFiles/spout.dir/OptionParser.o

Linking CXX executable spout

[100%] Built target spout

[root@node2 BLD-opt]#

 

  四、執行安裝,默認的安裝目錄爲/usr/local/

[root@node2 BLD-opt]# make install

[root@node2 BLD-opt]# qpidd -v

qpidd (qpid-cpp) version 0.32

 

在這裏,說明已經Apache Qpid安裝成功。

 

  五、再分別安裝qpid-python-0.3二、qpid-tools-0.32和qpid-qmf-0.32工具包。

[root@node2 Downloads]# tar xvf qpid-python-0.32.tar.gz

[root@node2 Downloads]# cd qpid-python-0.32

[root@node2 qpid-python-0.32]# ./setup.py build

[root@node2 qpid-python-0.32]# ./setup.py install --record install_log

 

[root@node2 Downloads]# tar xvf qpid-tools-0.32.tar.gz

[root@node2 Downloads]# cd qpid-tools-0.32

[root@node2 qpid-tools-0.32]# ./setup.py build

[root@node2 qpid-tools-0.32]# ./setup.py install --record install_log

       注意,其中install_log是方便卸載而記錄安裝過程而用的。

 

  六、修改HA集羣所須要的配置文件

[root@node2 Downloads]# vim /usr/local/etc/qpid/qpidd.conf

目前爲了方便測試,須要關閉認證。配置以下:

auth=0

ha-cluster=yes

ha-brokers-url= node1.example.com,node2.example.com

 

  七、分別修改qpidd和qpidd-primary腳本

[root@node2 Downloads]# vim /usr/local/etc/rc.d/init.d/qpidd

[root@node2 Downloads]# vim /usr/local/etc/rc.d/init.d/qpidd-primary

分別將

QPID_HA=/usr/local/bin/qpid-ha

修改成:

QPID_HA=/usr/bin/qpid-ha

保存

 

  八、添加用戶qpidd,並賦予root權限。

[root@node2 Downloads]# useradd qpidd

修改 /etc/passwd 文件,找到以下的一行,把用戶ID修改成 0(這個方法其實並不推薦)

[root@node2 Downloads]# vim /etc/passwd

qpidd:x:501:501::/home/qpidd:/bin/bash

修改成:

qpidd:x:0:501::/home/qpidd:/bin/bash

保存便可

 

  九、最後新建一個目錄/var/lib/qpidd

[root@node2 Downloads]# mkdir /var/lib/qpidd

 

3、     實現Apache Qpid高可用集羣

  RHCS提供了多種集羣配置和管理工具,經常使用的有基於GUI的system-config-cluster和基於web的Conga(luci+ricci)等。在這裏咱們採用Conga。由於Qpid每一個節點服務的存儲空間是獨立的,因此這裏不須要實現共享儲存GFS+ISCSI。使用到的RHCS套件的工具主要包括luci、ricci、cman、rgmanager和fence等等。

 

操做系統:Centos 6.5 i386(Microsoft windows 7 旗艦版 64位+ vmware workstation 10)

因爲機器性能有限,Qpid主服務和RHCS管理端共用一臺主機。

主機名

IP地址

主要用途

虛擬IP

所需軟件

node1.example.com

192.168.15.16

Qpid主服務+RHCS管理端

192.168.15.30

luci+ricci+cman+rgmanager

node2.example.com

192.168.15.69

Qpid備用服務

ricci+cman+rgmanager

 

  一、修改管理主機和每一個節點的hosts文件,爲每一個節點主機名增長域名錶示,保證全部主要的hosts文件同樣

[root@node1 ~]# cat /etc/hosts

127.0.0.1   localhost localhost.localdomain

::1         localhost localhost.localdomain

192.168.15.16     node1.example.com

192.168.15.69     node2.example.com

[root@node1 ~]# scp /etc/hosts  root@192.168.15.69:/etc/hosts

 

  二、每一個節點上分別關閉selinux、iptables和NetworkManager

[root@node1 ~]# iptables -F

[root@node1 ~]# service iptables stop

iptables: Setting chains to policy ACCEPT: nat mangle filte [  OK  ]

iptables: Flushing firewall rules:                       [  OK  ]

iptables: Unloading modules:                            [  OK  ]

[root@node1 ~]# chkconfig iptables off

[root@node1 ~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config

[root@node1 ~]# setenforce 0

[root@node1 ~]# service NetworkManager stop

Stopping NetworkManager daemon:                [  OK  ]

[root@node1 ~]# chkconfig NetworkManager off

 

  三、在每一個節點分別安裝ricci、rgmanager、cman,並配置開機自動啓動

[root@node1 ~]# yum -y install ricci rgmanager cman

[root@node1 ~]# chkconfig ricci on

[root@node1 ~]# chkconfig rgmanager on

[root@node1 ~]# chkconfig cman on

 

  四、在每一個節點分別啓動ricci,並設置用於luci鏈接的認證密碼,賬號默認爲系統用戶名

[root@node1 ~]# service ricci start

Starting ricci:                                            [  OK  ]

[root@node1 ~]# passwd ricci

Changing password for user ricci.

New password:

BAD PASSWORD: it is too simplistic/systematic

Retype new password:

passwd: all authentication tokens updated successfully.

 

  五、在管理端安裝luci並啓用luci

[root@node1 ~]# yum -y install luci

[root@node1 ~]# chkconfig luci on

[root@node1 ~]# service luci start

Start luci...                                              [  OK  ]

Point your web browser to https://node1.example.com:8084 (or equivalent) to access luci

 

  六、集羣配置文件內容

集羣文件固然能夠手動配置生成。也能夠經過配置工具自動生成,這就須要按照下面的步驟經過luci配置工具的使用生成下面內容的配置文件。

<?xml version="1.0"?>

<cluster config_version="36" name="qpid-test">

        <clusternodes>

                <clusternode name="node1.example.com" nodeid="1"/>

                <clusternode name="node2.example.com" nodeid="2"/>

        </clusternodes>

        <cman expected_votes="1" two_node="1"/>

        <rm>

                <failoverdomains>

                        <failoverdomain name="node1-domain" ordered="1" restricted="1">

                                <failoverdomainnode name="node1.example.com" priority="1"/>

                        </failoverdomain>

                        <failoverdomain name="node2-domain" ordered="1" restricted="1">

                                <failoverdomainnode name="node2.example.com" priority="1"/>

                        </failoverdomain>

                </failoverdomains>

                <resources>

                        <ip address="192.168.15.100/24" sleeptime="10"/>

                        <script file="/usr/local/etc/rc.d/init.d/qpidd" name="qpidd"/>

                        <script file="/usr/local/etc/rc.d/init.d/qpidd-primary" name="qpidd-primary"/>

                </resources>

                <service autostart="0" domain="node1-domain" name="node1-qpidd-service" recovery="restart">

                        <script ref="qpidd"/>

                </service>

                <service autostart="0" domain="node2-domain" name="node2-qpidd-service" recovery="restart">

                        <script ref="qpidd"/>

                </service>

                <service autostart="0" name="qpidd-primary-service" recovery="relocate">

                        <ip ref="192.168.15.100/24"/>

                        <script ref="qpidd-primary"/>

                </service>

        </rm>

</cluster>

 

  七、集羣web管理界面配置

經過瀏覽器訪問https://192.168.15.16:8084/,就能夠打開luci登陸界面。如今就經過配置工具來生成上面的配置文件。

瀏覽器打開https://192.168.15.16:8084 輸入root和root密碼進行登錄。

 

建立集羣

node name就hosts定義的名字,其中password爲剛纔設置ricci的密碼,ricci端口保持默認。

由於以前在兩個節點上都安裝了ricci、cman、rgmanager等包,故勾選use locally installed package和Reboot Nodes Before Joining Cluster。由於沒有用到GFS,因此不用勾選enable shared storage support。

點擊Create Cluster,建立過程luci管理端正在爲ricci的HA節點上自動檢查和安裝所須要的包,安裝完會自動重啓。

重啓完後,再次進入luci界面,能夠發現,每一個節點都已經成功鏈接加入集羣。

建立故障轉移域

分別爲兩個Qpid服務單首創建故障轉移域

 

建立資源

建立Qpid的啓動腳本qpidd,路徑爲 /usr/local/etc/rc.d/init.d/qpidd

 

建立Qpid的啓動腳本qpidd-primary,路徑爲 /usr/local/etc/rc.d/init.d/qpidd-primary

 

建立IP地址資源,用做對外服務的虛擬IP地址(注意:這裏必定要填寫沒有被使用的空閒IP地址),這裏用192.168.15.100/24

 

建立服務組

分別爲每一個Qpid服務節點node1和node2建立服務服node1-qpidd-service和node2-qpidd-service,勾選Automatically Start This Service, 故障轉移域選擇分別對應的node1-domain和node2-domain,Recovery Policy選擇Restart,並分別添加腳本資源qpidd

 

 

建立qpidd-primary服務組,勾選Automatically Start This Service, 故障轉移域選None,Recovery Policy選擇Relocate,並添加腳本資源qpidd-primary和IP地址資源192.168.16.100/24,最後提交。

 

 

fence設備在實機環境下須要配置,vmware虛擬機能夠暫時不須要。

 

最後,三個服務組正常啓動。至此,Apache Qpid 高可用集羣部署已經完成。

 

測試:

從luci界面看到,目前node2節點處理active狀態,node1爲ready/standby狀態。使用qpid的命令行工具測試一下虛擬IP 192.168.15.100是否正常工做。

 

而後關閉node2節點主機,模擬宕機,能夠見到node1會自動切換爲active狀態。

這時候,再次使用命令行工具測試一下虛擬IP是否正常工做。

這說明HA集羣內部切換服務主機,對客戶端來講是徹底透明的。

相關文章
相關標籤/搜索