cman,rgmanager高可用集羣方案

一,概述

   Cluster manager 簡稱CMAN,是一個分佈式集羣管理工具,運行在集羣的各個節點上,爲RHCS提供集羣管理任務。它用於管理集羣成員、消息和通知。它通過監控每個節點的運行狀態來了解節點成員之間的有關係。當集羣中某個節點出現故障時,節點成員關係將發生改變,CMAN及時將這種改變通知底層,進而做出相應的調整。
   CMAN根據每個節點的運行狀態,統計出一個法定節點數,作爲集羣是否存活的依據。當整個集羣中有多於一半的節點處於激活狀態時,表示達到了法定節點數,此集羣可以正常運行,當集羣中有一半或少於一半的節點處於激活狀態時,表示沒有達到法定的節點數,此時整個集羣系統將變得不可用。CMAN依賴於CCS,並且CMAN通過CCS讀取cluster.conf文件。

   rgmanager主要用來監督、啓動、停止集羣的應用、服務和資源。當一個節點的服務失敗時,高可用集羣服務管理進程可以將服務從這個失敗節點轉移至其點健康節點上,這種服務轉移能力是自動動,透明的。RHCS通過rgmanager來管理集羣服務,rgmanager運行在每個集羣節點上,在服務器上對應的進程爲clurgmgrd。
   在RHCS集羣中,高可用生服務包括集羣服務和集羣資源兩個方面。集羣服務其實就是應用,如APACHE,MYSQL等。集羣資源有IP地址,腳本,EXT3/GFS文件系統等。
   在RHCS集羣中,高可用性服務是和一個失敗轉移域結合在一起的。由幾個節點負責一個特定的服務的集合叫失敗轉移域,在失敗遷移域中可以設置節點的優先級,主節點失效,服務會遷移至次節點,如果沒有設置優先,集羣高可用服務將在任意節點間轉移。

RHCS包括的組件:

wKioL1M32pfzlPAEAAETKpy6wTo843.jpg

下面說一下CMAN在 RHEL4到RHEL6的各組件工作模式的變化:

RHEL 4系列:

wKioL1M32kLDclg6AAF0-OvdhgU216.jpg


RHEL 5系列:

wKiom1M32xOiJLM7AAHH_OIi1-g438.jpg

RHEL 6系列:

發現CMAN在RHEL6中各組功能已經大部分被轉移到用戶空間實現,大大簡化了工作流程。

wKioL1M32xezZOwtAAGUjC68zuI428.jpg



集羣配置和管理工具

   RHCS提供了多種集羣配置和管理工具,常用有基於GUI的system-config-cluster,conga等,還提供了基於命令行的管理工具。
   System-config-cluster由集羣節點配置和集羣管理兩個部分組成,分別用於創建集羣節點配置文件和維護節點運行狀態,一般用於早期的RHCS版本中。
   Conga是新的基於網絡的集羣配置工具。它是web界面管理的,由luci和ricci組成,luci可以安裝在一臺獨立的計算機上,也可安裝在節點上,用於配置和管理集羣,ricci是一個代理,安裝在每個集羣節點上,luci通過ricci和集羣中的每個節點通信。



二,下面我準備了一個實驗環境,使用Conga配置工具來創建和管理集羣:

IP:192.168.30.115  Host:admin.luojianlong.com OS:Centos6.4 x86_64  用於管理和配置集羣

IP:192.168.30.116  Host:node1.luojianlong.com OS:Centos6.4 x86_64  集羣節點1

IP:192.168.30.117  Host:node1.luojianlong.com OS:Centos6.4 x86_64  集羣節點2

IP:192.168.30.119  Host:node1.luojianlong.com OS:Centos6.4 x86_64  集羣節點3


首先配置4臺server的主機名,ssh無密碼互信和hosts文件:

[root@localhost ~]# hostname admin.luojianlong.com
[root@localhost ~]# sed -i 's@\(HOSTNAME=\).*@\1admin.luojianlong.com@g'  /etc/sysconfig/network
[root@localhost ~]# bash
[root@localhost ~]# hostname node1.luojianlong.com
[root@localhost ~]# sed -i 's@\(HOSTNAME=\).*@\1node1.luojianlong.com@g' /etc/sysconfig/network
[root@localhost ~]# bash
[root@localhost ~]# hostname node2.luojianlong.com
[root@localhost ~]# sed -i 's@\(HOSTNAME=\).*@\1node2.luojianlong.com@g' /etc/sysconfig/network
[root@localhost ~]# bash
[root@localhost ~]# hostname node3.luojianlong.com
[root@localhost ~]# sed -i 's@\(HOSTNAME=\).*@\1node3.luojianlong.com@g' /etc/sysconfig/network
[root@localhost ~]# bash
[root@localhost ~]# vi /etc/hosts
192.168.30.115 admin.luojianlong.com admin
192.168.30.116 node1.luojianlong.com node1
192.168.30.117 node2.luojianlong.com node2
192.168.30.119 node3.luojianlong.com node3
[root@admin ~]# ssh-keygen -t rsa
[root@admin ~]# ssh-copy-id -i node1
[root@admin ~]# ssh-copy-id -i node2
[root@admin ~]# ssh-copy-id -i node3
[root@admin ~]# scp /etc/hosts node1:/etc
[root@admin ~]# scp /etc/hosts node2:/etc
[root@admin ~]# scp /etc/hosts node3:/etc


下面在admin上面安裝luci

[root@admin ~]# yum -y install luci --disablerepo=epel


啓動luci服務

[root@admin ~]# service luci start
Adding following auto-detected host IDs (IP addresses/domain names), corresponding to `admin.luojianlong.com' address, to the configuration of self-managed certificate `/var/lib/luci/etc/cacert.config' (you can change them by editing `/var/lib/luci/etc/cacert.config', removing the generated certificate `/var/lib/luci/certs/host.pem' and restarting luci):
    (none suitable found, you can still do it manually as mentioned above)
Generating a 2048 bit RSA private key
writing new private key to '/var/lib/luci/certs/host.pem'
Starting saslauthd:                                        [  OK  ]
Start luci...                                              [  OK  ]
Point your web browser to https://admin.luojianlong.com:8084 (or equivalent) to access luci

以上信息看出啓動luci後會自動生成2048位ras加密的密鑰,啓動成功,監聽在套接字的8084

注意,這裏是基於https的,所有通過web訪問luci管理頁面,要通過https://IP來訪問

[root@admin ~]# ss -antpl | grep :8084
LISTEN     0      5                         *:8084                     *:*      users:(("python",17785,5))


打開瀏覽器訪問https://192.168.30.115:8084

wKiom1M3yhHwXqUkAAE79Z-oO64877.jpg


輸入服務器的賬號密碼登錄:

wKiom1M3ywqR4DlQAAFZac_UWA0749.jpg


在其他3個節點上分別安裝ricci

[root@node1 ~]# yum -y install ricci
[root@node2 ~]# yum -y install ricci
[root@node3 ~]# yum -y install ricci

安裝好riccic後,會在3個節點上分別自動建立用戶ricci,下面分別給ricci設置密碼,用來在luci裏面添加集羣節點

[root@node1 ~]# echo mypass | passwd --stdin ricci
Changing password for user ricci.
passwd: all authentication tokens updated successfully.
[root@node2 ~]# echo mypass | passwd --stdin ricci
Changing password for user ricci.
passwd: all authentication tokens updated successfully.
[root@node3 ~]# echo mypass | passwd --stdin ricci
Changing password for user ricci.
passwd: all authentication tokens updated successfully.


啓動ricci

[root@node1 ~]# service ricci start
Starting oddjobd:                                          [  OK  ]
generating SSL certificates...  done
Generating NSS database...  done
Starting ricci:                                            [  OK  ]
[root@node1 ~]# chkconfig ricci on
[root@node2 ~]# service ricci start
Starting oddjobd:                                          [  OK  ]
generating SSL certificates...  done
Generating NSS database...  done
Starting ricci:                                            [  OK  ]
[root@node2 ~]# chkconfig ricci on
[root@node3 ~]# service ricci start
Starting oddjobd:                                          [  OK  ]
generating SSL certificates...  done
Generating NSS database...  done
Starting ricci:                                            [  OK  ]
[root@node3 ~]# chkconfig ricci on


在luci創建集羣,並添加集羣節點

wKiom1M3za7AAFubAAKdiw0ps7Y711.jpg


選擇Download Packages,node1,node2,node3會自動安裝rgmanager等所需要的軟件包


wKiom1M3zeuQJkikAAIF-cozaxY810.jpg


以上信息發現,正在創建集羣


wKiom1M3ziuwDbVsAAKobQMop_Q105.jpg

創建完成


隨便登錄到一個節點上面,觀察集羣狀態

[root@node1 ~]# cman_tool nodes
Node  Sts   Inc   Joined               Name
   1   M      4   2014-03-30 15:49:14  node1.luojianlong.com
   2   M     12   2014-03-30 15:49:14  node2.luojianlong.com
   3   M     12   2014-03-30 15:49:14  node3.luojianlong.com
[root@node1 ~]# clustat
Cluster Status for tcluster @ Sun Mar 30 15:53:40 2014
Member Status: Quorate
 Member Name                                                     ID   Status
 ------ ----                                                     ---- ------
 node1.luojianlong.com                                               1 Online, Local
 node2.luojianlong.com                                               2 Online
 node3.luojianlong.com                                               3 Online

發現3個節點都已經在線


下來創建集羣資源,首先創建集羣VIP

wKioL1M30B-SX44EAAJn2GKmoUg269.jpg


wKiom1M30KPR6pHwAAJZmslKbSc059.jpg


以上信息:

IP Address:定義IP地址

Netmask Bits (optional):掩碼長度

Monitor Link:是否監控資源,發生故障後可以自動重啓資源

Disable Updates to Static Routes:禁止跟新靜態路由

Number of Seconds to Sleep After Removing an IP Address:故障轉移等待的時間


設置完成,點submit提交

wKiom1M30XuA5ceXAAJIvGjO2os111.jpg

發現一個IP資源已經創建好了

下面開始創建service groups

wKioL1M30uLx9QhsAAIRMzeIvaw264.jpg


wKiom1M31EvSYLaeAAHsidZKKsc025.jpg


定義:

Service Name:服務名稱

Automatically Start This Service:服務是否自動啓動

Failover Domain:選擇故障轉移域

Recovery Policy:故障轉移策略,包括Relocate,Restart,Restart-Disable,Disable


下面選擇資源:

wKioL1M31QTCtczmAAGOadOnylA065.jpg


選擇剛纔創建的IP資源


wKiom1M31VbwVph0AAF0eeVZ_a8252.jpg


選擇自定義script資源,我們這裏選擇httpd,請確保3臺node上面已經安裝httpd

然後submit

wKiom1M31cagiTADAAJd7DePE4Q424.jpg


下來點擊start,啓動資源

wKiom1M31i3y4tOaAAIvabTPGcc689.jpg


wKioL1M31jij4KjkAAIKWzuqv9A458.jpg

發現剛纔定義的IP資源已經被使用


登錄node1,查看集羣狀態

[root@node1 ~]# clustat
Cluster Status for tcluster @ Sun Mar 30 16:26:40 2014
Member Status: Quorate
 Member Name                                                     ID   Status
 ------ ----                                                     ---- ------
 node1.luojianlong.com                                               1 Online, Local, rgmanager
 node2.luojianlong.com                                               2 Online, rgmanager
 node3.luojianlong.com                                               3 Online, rgmanager
 Service Name                                                Owner (Last)                                                State 
 ------- ----                                                ----- ------                                                ----- 
 service:webservice                                          node1.luojianlong.com                                       started
[root@node1 ~]# ss -anptl | grep :80
LISTEN     0      128                      :::80                      :::*      users:(("httpd",31177,5),("httpd",31179,5),("httpd",31180,5),("httpd",31181,5),("httpd",31182,5),("httpd",31183,5),("httpd",31184,5),("httpd",31185,5),("httpd",31186,5))


發現httpd已經在node1運行了

接着,將webservice轉移到node2上面

[root@node1 ~]# clusvcadm -r webservice -m node2.luojianlong.com
Trying to relocate service:webservice to node2.luojianlong.com...Success
service:webservice is now running on node2.luojianlong.com
[root@node1 ~]# clustat
Cluster Status for tcluster @ Sun Mar 30 16:29:25 2014
Member Status: Quorate
 Member Name                                                     ID   Status
 ------ ----                                                     ---- ------
 node1.luojianlong.com                                               1 Online, Local, rgmanager
 node2.luojianlong.com                                               2 Online, rgmanager
 node3.luojianlong.com                                               3 Online, rgmanager
 Service Name                                                Owner (Last)                                                State 
 ------- ----                                                ----- ------                                                ----- 
 service:webservice                                          node2.luojianlong.com                                       started

登錄node2

[root@node2 ~]# ss -anptl | grep :80
LISTEN     0      128                      :::80                      :::*      users:(("httpd",11601,5),("httpd",11603,5),("httpd",11604,5),("httpd",11605,5),("httpd",11606,5),("httpd",11607,5),("httpd",11608,5),("httpd",11609,5),("httpd",11610,5))
[root@node2 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:5b:50:f9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.30.117/24 brd 192.168.30.255 scope global eth0
    inet 192.168.30.230/24 scope global secondary eth0
    inet6 fe80::20c:29ff:fe5b:50f9/64 scope link
       valid_lft forever preferred_lft forever


發現httpd和VIP已經在node2上面了。

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