pacemaker(直譯:心臟起搏器),是一個羣集資源管理器。它實現最大可用性羣集服務(亦稱資源管理)的節點和資源級故障檢測和恢復使用您的首選集羣基礎設施(OpenAIS的或Heaerbeat)提供的消息和成員能力。
html
Pacemaker 承擔集羣資源管理者(CRM - Cluster Resource Manager)的角色,它是一款開源的高可用資源管理軟件,適合各類大小集羣。Pacemaker 由 Novell 支持,SLES HAE 就是用 Pacemaker 來管理集羣,而且 Pacemaker 獲得了來自Redhat,Linbit等公司的支持。它用資源級別的監測和恢復來保證集羣服務(aka. 資源)的最大可用性。它能夠用基礎組件(Corosync 或者是Heartbeat)來實現集羣中各成員之間的通訊和關係管理。它包含如下的關鍵特性:node
監測並恢復節點和服務級別的故障mysql
存儲無關,並不須要共享存儲linux
資源無關,任何能用腳本控制的資源均可以做爲服務git
支持使用 STONITH 來保證數據一致性github
支持大型或者小型的集羣web
支持 quorum (仲裁) 或 resource(資源) 驅動的集羣sql
支持任何的冗餘配置shell
自動同步各個節點的配置文件apache
能夠設定集羣範圍內的 ordering, colocation and anti-colocation
支持高級的服務模式
Pacemaker - 資源管理器(CRM),負責啓動和中止服務,並且保證它們是一直運行着的以及某個時刻某服務只在一個節點上運行(避免多服務同時操做數據形成的混亂)。
Corosync - 消息層組件(Messaging Layer),管理成員關係、消息和仲裁。見 1.2 部分介紹。
Resource Agents - 資源代理,實如今節點上接收 CRM 的調度對某一個資源進行管理的工具,這個管理的工具一般是腳本,因此咱們一般稱爲資源代理。任何資源代理都要使用同一種風格,接收四個參數: {start|stop|restart|status},包括配置IP地址的也是。每一個種資源的代理都要完成這四個參數據的輸出。Pacemaker 的 RA 能夠分爲三種:(1)Pacemaker 本身實現的 (2)第三方實現的,好比 RabbitMQ 的 RA (3)本身實現的,好比 OpenStack 實現的它的各類服務的RA,這是 mysql 的 RA。
Pacemaker 支持多種類型的集羣,包括 Active/Active, Active/Passive, N+1, N+M, N-to-1 and N-to-N 等
Corosync 用於高可用環境中提供通信服務,位於高可用集羣架構中的底層,扮演着爲各節點 (node)之間提供心跳信息傳遞這樣的一個角色。Pacemaker 位於 HA 集羣架構中資源管理、資源代理這麼個層次,它自己不提供底層心跳信息傳遞的功能,它要想與對方節點通訊就須要藉助底層的心跳傳遞服務,將信息通告給對方。
關於心跳的基本概念:
心跳:就是將多臺服務器用網絡鏈接起來,然後每一臺服務器都不停的將本身依然在線的信息使用很簡短很小的通告給同一個網絡中的其它主機,告訴它們本身依然在線,其它服務器收到這個心跳信息就認爲它是在線的,尤爲是主服務器。
心跳信息怎麼發送,由誰來收,其實就是進程間通訊。兩臺主機是無法通訊的,只能利用網絡功能,經過進程監聽在 某一套接字上,實現數據發送,數據請求,因此多臺服務器就得運行同等的進程,這兩個進程不停的進行通訊,主節點(主服務器)不停的向對方同等的節點發送自 己的心跳信息,那這個軟件就叫高可用的集羣的基準層次,也叫心跳信息傳遞層以及事物信息的傳遞層,這是運行在集羣中的各節點上的進程,這個進程是個服務軟 件,關機後須要將其啓動起來,主機間才能夠傳遞信息的,通常是主節點傳給備節點。
一個 Pacemaker 集羣每每須要使用 Fencing agent。https://alteeve.ca/w/ANCluster_Tutorial_2#Concept.3B_Fencing 詳細地闡述了Fencing的概念及其必要性。Fencing 是在一個節點不穩定或者無答覆時將其關閉,使得它不會損壞集羣的其它資源,其主要用途是消除腦裂。
一個 RA 是管理一個集羣資源的可執行程序,沒有固定其實現的編程語言,可是大部分RA都是用 shell 腳本實現的。Pacemaker 使用 RA 來和受管理資源進行交互,它既支持它自身實現的70多個RA,也支持第三方RA。
1.6 Pacemaker 集羣管理器
Red Hat Enterprise Linux 7 使用 Pacemaker 替換 rgmanager 進行集羣資源管理以及從節點失敗中恢復。Pacemaker 的優勢包括:
資源配置的自動同步和版本管理。
靈活的資源和 fencing 模式可與用戶環境更緊密地對應。
可以使用 fencing 恢復資源層失敗。
基於時間的配置選項。
在多節點中運行同一資源的能力。例如:網頁服務器或者集羣文件系統。
在兩個不一樣模式之一的多個節點中運行同一資源的能力。例如:同步資源和目標。
Pacemaker 不須要分佈式鎖管理程序。
仲裁丟失或者造成多個分區時的可配置行爲。
Pacemaker 配置系統,也稱 pcs,替換了 ccs、ricci 和 luci 做爲統一的集羣配置和管理工具。pcs 的優勢包括:
命令行工具。
可輕鬆自我啓動集羣,即初始化集羣並使其開始運行。
可配置集羣選項。
可添加、刪除或者修改資源及其之間的關係。
2.部署準備
部署平臺:KVM
部署系統版本:centos7.2(three)
部署方案:HA+Pacemaker
部署數量:node1,node2,storage
部署ip:node1(192.168.122.10) node2(192.168.122.20)storage(192.168.122.30) VIP(192.168.122.100)
準備工做:設置靜態ip,關閉服務(NetworkManager!,iptables,SElinux),設置hostname!,配置hosts解析!,配置ssh互信,安裝ntp,配置好yum
注:!爲必不可少的步驟。
3.網絡拓撲
Client: CIP:任意一臺非集羣設備便可
Director: VIP:192.168.122.100 DIP(storage):192.168.122.30
Real Server: RIP:192.168.122.10 192.168.122.20
DNS: hosts能解析便可
3.1 系統初始化
node1 node2 storage 相同步驟,須要執行三次
配置防火牆及SELinux
systemctl disable firewalld
systemctl stop firewalld
iptables -F
[root@localhost ~]# sed -r -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config [root@localhost ~]# setenforce 0
3.2. 主機名解析
[root@localhost ~]# hostnamectl set-hostname node1 [root@localhost ~]# hostname node1 [root@localhost ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.122.10 node1 192.168.122.20 node2
3.3. 時間同步
[root@localhost ~]# yum -y install ntp [root@localhost ~]# ntpdate cn.pool.ntp.org(以本身的時間服務器爲準)
3.4. 雙機互信(可選)
[root@localhost ~]# ssh-keygen -f /root/.ssh/id_rsa -N "" Generating public/private rsa key pair. Created directory '/root/.ssh'. Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: 9c:7a:00:b9:22:9b:24:8e:65:a6:f1:79:79:11:0e:ad root@node1 The key's randomart p_w_picpath is: +--[ RSA 2048]----+ | | | o | | + o | | * o . | |+.= E + S | |=@ o . + | |=.o o o . | | . . . | | | +-----------------+ [root@localhost ~]# rsync -va /root/.ssh/ node2:/root/ [root@localhost ~]# rsync -va /root/.ssh/ 192.168.122.30:/root/
到此,初始化步驟完畢。
4. ISCSI Target
關閉storage節點,選擇添加磁盤的時候,要以本身本身原來的存儲類型爲準,避免出錯
4.1. storage 添加一塊新硬盤用做共享
[root@storage ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 252:0 0 20G 0 disk ├─vda1 252:1 0 500M 0 part /boot ├─vda2 252:2 0 1G 0 part │ └─centos-swap 253:0 0 1G 0 lvm [SWAP] └─vda3 252:3 0 18.5G 0 part / vdb爲新硬盤,類型根據本身的來定 vdb 252:16 0 8G 0 disk
[root@storage ~]# hostname storage [root@storage ~]# fdisk /dev/vdb [root@storage ~]# 確認工做在storage端,而不是其餘節點 [root@storage ~]# yum -y install targetcli [root@storage ~]# systemctl enable target Created symlink from /etc/systemd/system/multi-user.target.wants/target.service to /usr/lib/systemd/system/target.service. [root@storage ~]# systemctl start target.service
4.2 配置Target
targetcli是Linux-IO Target的用戶態的管理配置工具。用戶可使用yum或apt-get直接從各大發行版的官方倉庫安裝。targetcli提供一個相似shell的界面,而前文提到的各類Target、TPG、LUN、backstore對象則被組織成目錄樹的形式,用戶能夠用ls、cd命令來瀏覽目錄樹,用create、delete命令來建立和刪除各類對象。瀏覽配置,就是瀏覽目錄樹,建立刪除各類對象,就是在目錄樹的各級節點中建立新的節點。同時targetcli還提供了常見的shell命令輔助編輯功能,例如TAB智能補全、上下鍵切換命令歷史、Ctrl + R搜索命令歷史。凡有不熟悉的命令,均可以用help命令查詢使用說明。
如下步驟爲動態交互,必定要檢查安全策略是否關閉
運行targetcli進入交互模式,在終端中顯示爲彩色版,並且支持tab。
[root@storage ~]# targetcli Warning: Could not load preferences file /root/.targetcli/prefs.bin. targetcli shell version 2.1.fb41 Copyright 2011-2013 by Datera, Inc and others. For help on commands, type 'help'. /> ls o- / ..................................................................... [...] o- backstores .......................................................... [...] | o- block .............................................. [Storage Objects: 0] | o- fileio ............................................. [Storage Objects: 0] | o- pscsi .............................................. [Storage Objects: 0] | o- ramdisk ............................................ [Storage Objects: 0] o- iscsi ........................................................ [Targets: 0] o- loopback ..................................................... [Targets: 0] />
4.2.2. 創建一個塊存儲
/> /backstores/block create san1 /dev/vdb1 Created block storage object san1 using /dev/vdb.
4.2.3. 給存儲起一個名稱
/> /iscsi create iqn.2016-06.com.node.san1 Created target iqn.2016-06.com.node.san1. Created TPG 1. Global pref auto_add_default_portal=true Created default portal listening on all IPs (0.0.0.0), port 3260. />
4.2.4. 進入
/> cd /iscsi/iqn.2016-06.com.node.san1/tpg1/ /iscsi/iqn.20...ode.san1/tpg1> ls o- tpg1 ................................................. [no-gen-acls, no-auth] o- acls ............................................................ [ACLs: 0] o- luns ............................................................ [LUNs: 0] o- portals ...................................................... [Portals: 1] o- 0.0.0.0:3260 ....................................................... [OK] /iscsi/iqn.20...ode.san1/tpg1>
4.2.5 建立lun(target塊設備的邏輯單元)
/iscsi/iqn.20...ode.san1/tpg1> luns/ create /backstores/block/san1 Created LUN 0. /iscsi/iqn.20...ode.san1/tpg1> ls o- tpg1 ................................................. [no-gen-acls, no-auth] o- acls ............................................................ [ACLs: 0] o- luns ............................................................ [LUNs: 1] | o- lun0 ............................................ [block/san1 (/dev/vdb)] o- portals ...................................................... [Portals: 1] o- 0.0.0.0:3260 ....................................................... [OK] /iscsi/iqn.20...ode.san1/tpg1>
4.2.6. 返回/目錄
/iscsi/iqn.20...ode.san1/tpg1> cd / /> ls o- / ..................................................................... [...] o- backstores .......................................................... [...] | o- block .............................................. [Storage Objects: 1] | | o- san1 ......................... [/dev/vdb (8.0GiB) write-thru activated] | o- fileio ............................................. [Storage Objects: 0] | o- pscsi .............................................. [Storage Objects: 0] | o- ramdisk ............................................ [Storage Objects: 0] o- iscsi ........................................................ [Targets: 1] | o- iqn.2016-06.com.node.san1 ..................................... [TPGs: 1] | o- tpg1 ........................................... [no-gen-acls, no-auth] | o- acls ...................................................... [ACLs: 0] | o- luns ...................................................... [LUNs: 1] | | o- lun0 ...................................... [block/san1 (/dev/vdb)] | o- portals ................................................ [Portals: 1] | o- 0.0.0.0:3260 ................................................. [OK] o- loopback ..................................................... [Targets: 0] /> 優化,可選步驟 /> cd iscsi/iqn.2016-06.com.node.san1/tpg1/ /iscsi/iqn.20...ode.san1/tpg1> set attribute demo_mode_write_protect=0 Parameter demo_mode_write_protect is now '0'. /iscsi/iqn.20...ode.san1/tpg1> set attribute generate_node_acls=1 Parameter generate_node_acls is now '1'. /iscsi/iqn.20...ode.san1/tpg1> set attribute cache_dynamic_acls=1 Parameter cache_dynamic_acls is now '1'. /iscsi/iqn.20...ode.san1/tpg1>
4.2.7. 保存,若是發現添加有問題,請運行clearconfig清除,再運行clearconfig confirm=True重置,而後再按照上面步驟從新添加。
/iscsi/iqn.20...ode.san1/tpg1> /iscsi/iqn.20...ode.san1/tpg1> cd / /> saveconfig Last 10 configs saved in /etc/target/backup. Configuration saved to /etc/target/saveconfig.json /> exit Global pref auto_save_on_exit=true Last 10 configs saved in /etc/target/backup. Configuration saved to /etc/target/saveconfig.json [root@storage ~]#
若是最後發現集羣重啓資源服務全是stop狀態,估計是存儲沒掛上,系統重啓存儲就掉了,若是遇到這種狀況必須重啓添加劇啓磁盤。
storage端添加完畢。
5. Iscsi initiator(客戶端配置)
iscsi-initiator-utils [node1,node1]
node1和node2 都要作一遍,在這裏我就只顯示添加一個節點了,只要命令複製過去就能夠了。
[root@node1 ~]# yum -y install lvm2-cluster iscsi*
5.1. 發現並鏈接iscsi設備
[root@node1 ~]# iscsiadm -m discovery -t st -p 192.168.122.30 192.168.122.30:3260,1 iqn.2016-06.com.node.san1
node2別忘記執行一遍,而後重啓服務。
-m discovery表示發現查找
-t senbtargets 表示發佈的target("-t st" 爲縮寫)
-p ip:port用來指定服務器ip地址
5.2. 重啓服務
[root@node2 ~]# systemctl restart iscsi [root@node2 ~]# systemctl enable iscsi [root@node2 ~]# systemctl enable iscsid [root@node2 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 8G 0 disk 此設備爲新發現設備,node1和node2都須要看一下是否有 vda 252:0 0 20G 0 disk ├─vda1 252:1 0 500M 0 part /boot ├─vda2 252:2 0 1G 0 part │ └─centos-swap 253:0 0 1G 0 lvm [SWAP] └─vda3 252:3 0 18.5G 0 part /
6. 建立集羣 corosync
node1 and node2
6.1 . 安裝並啓動
軟件包的名稱不要寫錯,檢查清楚
[root@node1 ~]# yum -y install pcs pacemaker corosync fence-agents-all [root@node2 ~]# systemctl start pcsd.service [root@node2 ~]# systemctl enable pcsd.service Created symlink from /etc/systemd/system/multi-user.target.wants/pcsd.service to /usr/lib/systemd/system/pcsd.service. [root@node2 ~]#
6.2. 生成hacluster密碼(node1和node2的hacluster密碼必須,必須同樣)
[root@node1 ~]# passwd hacluster 別忘記了node2 Changing password for user hacluster. New password: BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word Retype new password: passwd: all authentication tokens updated successfully.
6.3. 建立集羣
如下步驟在任意節點操做(node1 or node2)
認證節點,並建立名爲web_cluster的集羣
查看
[root@node1 ~]# pcs cluster auth node1 node2 Username: hacluster Password: node1: Authorized node2: Authorized
建立
[root@node1 ~]# pcs cluster setup --start --name web_cluster node1 node2 Shutting down pacemaker/corosync services... Redirecting to /bin/systemctl stop pacemaker.service Redirecting to /bin/systemctl stop corosync.service Killing any remaining services... Removing all cluster configuration files... node1: Succeeded node2: Succeeded Starting cluster on nodes: node1, node2... node2: Starting Cluster... node1: Starting Cluster... Synchronizing pcsd certificates on nodes node1, node2... node1: Success node2: Success Restaring pcsd on the nodes in order to reload the certificates... node1: Success node2: Success 看見Success爲成功。
6.4. 檢查狀態
[root@node1 ~]# pcs cluster enable --all node1: Cluster Enabled node2: Cluster Enabled [root@node1 ~]# [root@node2 ~]# pcs cluster status Cluster Status: Last updated: Wed Jun 22 05:40:36 2016 Last change: Wed Jun 22 05:38:13 2016 by hacluster via crmd on node1 Stack: corosync Current DC: node1 (version 1.1.13-10.el7-44eb2dd) - partition with quorum 2 nodes and 0 resources configured Online: [ node1 node2 ] PCSD Status: node1: Online node2: Online [root@node2 ~]# [root@node1 ~]# ps aux|grep pacemaker root 2554 0.0 1.3 130488 7404 ? Ss 05:37 0:00 /usr/sbin/pacemakerd -f haclust+ 2579 0.4 2.6 132304 14576 ? Ss 05:37 0:01 /usr/libexec/pacemaker/cib root 2580 0.0 1.5 133964 8380 ? Ss 05:37 0:00 /usr/libexec/pacemaker/stonithd root 2581 0.0 0.8 102936 5000 ? Ss 05:37 0:00 /usr/libexec/pacemaker/lrmd haclust+ 2582 0.0 1.3 124780 7628 ? Ss 05:37 0:00 /usr/libexec/pacemaker/attrd haclust+ 2583 0.0 3.7 150992 20916 ? Ss 05:37 0:00 /usr/libexec/pacemaker/pengine haclust+ 2584 0.0 2.0 184188 11264 ? Ss 05:37 0:00 /usr/libexec/pacemaker/crmd root 14879 0.0 0.1 112644 996 pts/0 R+ 05:42 0:00 grep --color=auto pacemaker [root@node1 ~]#
6.5. 驗證corosync的安裝
[root@node2 ~]# corosync-cfgtool -s Printing ring status. Local node ID 2 RING ID 0 id = 192.168.122.20 status = ring 0 active with no faults [root@node2 ~]#
若是沒有Fence,建議禁用STONITH
pcs property set stonith-enabled=false
正常集羣Quorum(法定)須要半數以上的票數,若是是雙節點的集羣
pcs property set no-quorum-policy=ignore
[root@node1 ~]# crm_verify -L -V
若是爲空,說明禁用了,若是沒禁用,會提示error。
若是想驗證的話能夠用pcs建立一個testvip來測試節點的可用性,但測試完testvip必須刪除,這裏就先不驗證了。
集羣建立完畢
7. 配置資源(resource)
任意節點便可(node1 or node2)
7.1.1. 配置文件系統
[root@node2 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 8G 0 disk vda 252:0 0 20G 0 disk ├─vda1 252:1 0 500M 0 part /boot ├─vda2 252:2 0 1G 0 part │ └─centos-swap 253:0 0 1G 0 lvm [SWAP] └─vda3 252:3 0 18.5G 0 part /
任意節點建立LVM
[root@node1 ~]# pvcreate /dev/sda Physical volume "/dev/sda" successfully created [root@node1 ~]# vgcreate web_vg /dev/sda Volume group "web_vg" successfully created [root@node1 ~]# lvcreate -L 2G -n web_lv web_vg Logical volume "web_lv" created. [root@node1 ~]# lvscan ACTIVE '/dev/web_vg/web_lv' [2.00 GiB] inherit [root@node1 ~]#
7.1.2. 格式化
[root@node1 ~]# mkfs.xfs /dev/web_vg/web_lv 格式化 meta-data=/dev/web_vg/web_lv isize=256 agcount=4, agsize=131072 blks = sectsz=512 attr=2, projid32bit=1 = crc=0 finobt=0 data = bsize=4096 blocks=524288, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 [root@node1 ~]#
7.1.3. 配置lvm
全部節點都須要作(node1 and node2)
root@node1 ~]# lvmconf --enable-halvm --services --startstopservices Warning: Stopping lvm2-lvmetad.service, but it can still be activated by: lvm2-lvmetad.socket Removed symlink /etc/systemd/system/sysinit.target.wants/lvm2-lvmetad.socket. [root@node1 ~]# [root@node1 ~]# vgs --noheadings -o vg_name centos web_vg [root@node1 ~]# [root@node1 ~]# vgs VG #PV #LV #SN Attr VSize VFree centos 1 1 0 wz--n- 1.00g 0 web_vg 1 1 0 wz--n- 4.00g 2.00g [root@node1 ~]#
[root@node1 ~]# vim /etc/lvm/lvm.conf # # Example # volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ] volume_list = [ "centos" ] #
7.1.4. 保存並推送到node2
[root@node1 ~]# rsync -va /etc/lvm/lvm.conf node2:/etc/lvm/lvm.conf sending incremental file list lvm.conf sent 1272 bytes received 739 bytes 4022.00 bytes/sec total size is 82243 speedup is 40.90 [root@node1 ~]#
7.1.5. 升級版本
[root@node2 ~]# dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
node1 and node 2 reboot
7.1.6. 重啓以後驗證共享存儲狀態
[root@node1 ~]# lvscan ACTIVE '/dev/centos/swap' [1.00 GiB] inherit inactive '/dev/web_vg/web_lv' [2.00 GiB] inherit [root@node1 ~]# [root@node2 ~]# lvscan ACTIVE '/dev/centos/swap' [1.00 GiB] inherit inactive '/dev/web_vg/web_lv' [2.00 GiB] inherit [root@node2 ~]#
7.2.1 Apache配置
Apache必須 "不" 能設置開機啓動!(node1 and node2)
[root@node2 ~]# yum -y install httpd wget [root@node2 ~]# vim /etc/httpd/conf/httpd.conf # Load config files in the "/etc/httpd/conf.d" directory, if any. IncludeOptional conf.d/*.conf <Location /server-status> sethandler server-status order deny,allow deny from all allow from 127.0.0.1 </Location>
7.2.2. 推送
[root@node2 ~]# rsync -va /etc/httpd/conf/httpd.conf node1:/etc/httpd/conf/httpd.conf Warning: Permanently added 'node1,192.168.122.10' (ECDSA) to the list of known hosts. sending incremental file list httpd.conf sent 795 bytes received 133 bytes 618.67 bytes/sec total size is 11853 speedup is 12.77 [root@node2 ~]#
7.2.3. 測試(成功以後要關閉httpd服務)
[root@node1 ~]# curl -I http://192.168.122.20 HTTP/1.1 200 ok Date: Wed, 22 Jun 2016 10:36:04 GMT Server: Apache/2.4.6 (CentOS) Last-Modified: Thu, 16 Oct 2014 13:20:58 GMT ETag: "1321-5058a1e728280" Accept-Ranges: bytes Content-Length: 4897 Content-Type: text/html; charset=UTF-8
7.2.4. 建立文件系統資源
任意節點
確認狀態
[root@node1 ~]# pcs status Cluster name: web_cluster Last updated: Wed Jun 22 06:39:17 2016 Last change: Wed Jun 22 06:09:10 2016 by root via cibadmin on node1 Stack: corosync Current DC: node1 (version 1.1.13-10.el7-44eb2dd) - partition with quorum 2 nodes and 0 resources configured Online: [ node1 node2 ] Full list of resources: ========================================================================================== PCSD Status: node1: Online node2: Online Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled ========================================================================================== 狀態括號內爲正常 2 nodes and 0 resources [root@node1 ~]#
添加
[root@node1 ~]# pcs resource create web_lv LVM \ > volgrpname=web_vg \ > exclusive=true \ > --group apachegroup
web_lv web_vg group都是自定義的resource,以本身的爲準
建立文件系統資源(添加資源要慎重,添加錯了必須刪了從新建)
查看
[root@node1 ~]# pcs resource show Resource Group: apachegroup web_lv (ocf::heartbeat:LVM): Started node1 [root@node1 ~]#
建立
[root@node1 ~]# pcs resource create web_fs Filesystem \ > device="/dev/web_vg/web_lv" \ > directory="/var/www/html/" \ > fstype="xfs" \ > --group apachegroup [root@node1 ~]# pcs resource show Resource Group: apachegroup web_lv (ocf::heartbeat:LVM): Started node1 web_fs (ocf::heartbeat:Filesystem): Started node1 [root@node1 ~]#
7.3. 建立ip資源
[root@node1 ~]# pcs resource create web_ip IPaddr2 \ > ip=192.168.122.100 \ > cidr_netmask=24 \ > --group apachegroup [root@node1 ~]# pcs resource show Resource Group: apachegroup web_lv (ocf::heartbeat:LVM): Started node1 web_fs (ocf::heartbeat:Filesystem): Started node1 web_ip (ocf::heartbeat:IPaddr2): Started node1 [root@node1 ~]#
7.4. 建立Apache資源
[root@node1 ~]# pcs resource create website apache \ > configfile="/etc/httpd/conf/httpd.conf" \ > statusurl="http://127.0.0.1/server-status" \ > --group apachegroup [root@node1 ~]# pcs resource show (node2也查看一下資源) Resource Group: apachegroup web_lv (ocf::heartbeat:LVM): Started node1 web_fs (ocf::heartbeat:Filesystem): Started node1 web_ip (ocf::heartbeat:IPaddr2): Started node1 website (ocf::heartbeat:apache): Started node1 [root@node1 ~]#
若是須要刪除資源:pcs resource delete (web_lv,web_fs,web_ip,website等)
reboot node1 node2
parcemacker集羣搭建完畢
8. 測試
[root@node1 ~]# pcs resource show Resource Group: apachegroup web_lv (ocf::heartbeat:LVM): Started node1 web_fs (ocf::heartbeat:Filesystem): Started node1 web_ip (ocf::heartbeat:IPaddr2): Started node1 website (ocf::heartbeat:apache): Started node1 [root@node1 ~]# [root@node2 ~]# pcs status Cluster name: web_cluster Last updated: Wed Jun 22 07:01:45 2016 Last change: Wed Jun 22 06:55:28 2016 by root via cibadmin on node1 Stack: corosync Current DC: node2 (version 1.1.13-10.el7-44eb2dd) - partition with quorum 2 nodes and 4 resources configured Online: [ node1 node2 ] Full list of resources: Resource Group: apachegroup web_lv (ocf::heartbeat:LVM): Started node1 web_fs (ocf::heartbeat:Filesystem): Started node1 web_ip (ocf::heartbeat:IPaddr2): Started node1 website (ocf::heartbeat:apache): Started node1 PCSD Status: node1: Online node2: Online Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
查看VIP資源
[root@node1 ~]# ip a
1: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:7a:0d:a4:bf brd ff:ff:ff:ff:ff:ff
inet 192.168.122.10/24 brd 192.168.122.255 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.122.100/24 brd 192.168.122.255 scope global secondary eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:7aff:fe0d:a4bf/64 scope link
valid_lft forever preferred_lft forever
[root@node1 ~]#
查看lvm資源
[root@node1 ~]# lvscan
ACTIVE '/dev/centos/swap' [1.00 GiB] inherit
ACTIVE '/dev/web_vg/web_lv' [2.00 GiB] inherit
[root@node1 ~]#
查看掛載資源
[root@node1 ~]# df -T /var/www/html/
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/mapper/web_vg-web_lv xfs 2086912 32928 2053984 2% /var/www/html
[root@node1 ~]#
8.1. 測試網頁
[root@node1 ~]# echo "<h1>Hello World</h1>" >/var/www/html/index.html [root@node1 ~]# ss -an | grep :80 tcp TIME-WAIT 0 0 127.0.0.1:56378 127.0.0.1:80 tcp TIME-WAIT 0 0 127.0.0.1:33486 127.0.0.1:80 tcp TIME-WAIT 0 0 127.0.0.1:37408 127.0.0.1:80 tcp TIME-WAIT 0 0 127.0.0.1:60674 127.0.0.1:80 tcp TIME-WAIT 0 0 127.0.0.1:52606 127.0.0.1:80 tcp LISTEN 0 128 :::80 :::* [root@node1 ~]#
8.2 結果
[root@localhost ~]# curl -I http://192.168.122.100
HTTP/1.1 200 OK
Date: Wed, 22 Jun 2016 11:09:51 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Wed, 22 Jun 2016 11:07:51 GMT
ETag: "15-535dbf2ccdb58"
Accept-Ranges: bytes
Content-Length: 21
Content-Type: text/html; charset=UTF-8
或者用瀏覽器訪問VIP地址http://192.168.122.100,查看是否顯示正常,而後模擬一臺node節點故障,用pcs resource show查看資源狀態便可。
總結:
Pacemaker是一款很是強大的高可用軟件,可是對centos6的支持不是太好,並且配置複雜,因此建議用centos7,核心命令就是pcs,配置簡單,只要命令不敲錯,節點整理清楚,基本上不會出問題。
作技術,必需要有一顆永不磨滅的好奇心,不能偷懶。