Pacemaker+ISCSI 實現Apache高可用實戰

Pacemaker

1.1 概述

    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

  • 支持高級的服務模式

1.2 Pacemaker 集羣的架構

1.2.1 軟件架構

wKioL1dqetyCaFDxAABJ1NsbF0Q021.jpg-wh_50

  • 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。

1.2.2 Pacemaker 支持的集羣類型

Pacemaker 支持多種類型的集羣,包括 Active/Active, Active/Passive, N+1, N+M, N-to-1 and N-to-N 等

wKioL1dqe1zwQKSBAABUqSqDi6Q265.jpg

wKioL1dqe13BCgBsAABa1hpJYg8222.jpg


wKiom1dqe12z6O6oAABknrMeatw663.jpg


1.3 Corosync

    Corosync 用於高可用環境中提供通信服務,位於高可用集羣架構中的底層,扮演着爲各節點 (node)之間提供心跳信息傳遞這樣的一個角色。Pacemaker 位於 HA 集羣架構中資源管理、資源代理這麼個層次,它自己不提供底層心跳信息傳遞的功能,它要想與對方節點通訊就須要藉助底層的心跳傳遞服務,將信息通告給對方。

wKioL1dqe72QDPSkAACLALzkgHk249.jpg

關於心跳的基本概念:

  • 心跳:就是將多臺服務器用網絡鏈接起來,然後每一臺服務器都不停的將本身依然在線的信息使用很簡短很小的通告給同一個網絡中的其它主機,告訴它們本身依然在線,其它服務器收到這個心跳信息就認爲它是在線的,尤爲是主服務器。

  • 心跳信息怎麼發送,由誰來收,其實就是進程間通訊。兩臺主機是無法通訊的,只能利用網絡功能,經過進程監聽在 某一套接字上,實現數據發送,數據請求,因此多臺服務器就得運行同等的進程,這兩個進程不停的進行通訊,主節點(主服務器)不停的向對方同等的節點發送自 己的心跳信息,那這個軟件就叫高可用的集羣的基準層次,也叫心跳信息傳遞層以及事物信息的傳遞層,這是運行在集羣中的各節點上的進程,這個進程是個服務軟 件,關機後須要將其啓動起來,主機間才能夠傳遞信息的,通常是主節點傳給備節點。


1.4 Fencing Agent

    一個 Pacemaker 集羣每每須要使用 Fencing agent。https://alteeve.ca/w/ANCluster_Tutorial_2#Concept.3B_Fencing 詳細地闡述了Fencing的概念及其必要性。Fencing 是在一個節點不穩定或者無答覆時將其關閉,使得它不會損壞集羣的其它資源,其主要用途是消除腦裂。

wKioL1dqfADzIzxsAAB2jZQPNlo976.jpg


1.5 資源代理(Resource Agent - RA)

    一個 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

4.2.1. targetcli介紹

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,配置簡單,只要命令不敲錯,節點整理清楚,基本上不會出問題。

作技術,必需要有一顆永不磨滅的好奇心,不能偷懶。

相關文章
相關標籤/搜索