corosync/openais+pacemaker+drbd+web实现高可用群集
拓撲圖:
配置前提:
1.節點的名字必須跟uname -n的名字相同,而且兩個主機必須能通過主機名來訪問。盡量不通過DNS來訪問。時鐘時間保持一樣。
2.雙方的通信要必須通過SSL的無障礙通信機制
3.雙節點之間可以通過某個IP來提供連接,但是這只是通信Ip,我們需要VIP來對外提供服務。
4.我采用虛擬機的方式實現配置,操作系統使用rhel5.4,x86平臺
5.兩個節點主機IP分別為192.168.2.10(node1.a.com),以及192.168.2.20(node2.a.com)
6.集群服務為apache的httpd服務
7.提供Web服務的地址(VIP)為192.168.2.100
8.在兩個節點上分別準備一塊大小為2G的分區用于實現DRBD的共享。(本文使用新分區/dev/sda4)
node1.a.com 配置
1.準備工作
[root@localhost ~]# vim /etc/sysconfig/network
HOSTNAME=node1.a.com
[root@localhost ~]# hostname node1.a.com
重新登錄
[root@localhost ~]# vim /etc/sysconfig/network
HOSTNAME=node2.a.com
[root@localhost ~]# hostname node2.a.com
我們首先要保證兩節點之間時間相差不應該超過1秒
[root@node1 ~]# hwclock -s
[root@node2 ~]# hwclock -s
分別在兩個節點上設置
# vim /etc/hosts
192.168.2.10 node1.a.com node1
192.168.2.20 node2.a.c node2
生成密鑰,確保通信正常
node1節點
[root@node1 ~]# ssh-keygen -t rsa
[root@node1 ~]# cd /root/.ssh
[root@node1 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub node2
node2節點
[root@node2 ~]# ssh-keygen -t rsa
[root@node2 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub node1
由于需要用到軟件的依賴,這里配置yum,在node1上
[root@node1 ~]# mkdir /mnt/cdrom/
[root@node1 ~]# mount /dev/cdrom /mnt/cdrom/
# vim /etc/yum.repos.d/rhel-debuginfo.repo
[root@node2~]# scp node1:/etc/yum.repos.d/rhel-debuginfo.repo /etc/yum.repos.d/
在node1,node2上安裝apache服務,為了測試在node1上創建含’node1.a.com’的index.html文件,在node2上創建’node2.a.com’的index.html確保服務能啟動,這里采用yum安裝:
# mount /dev/cdrom /mnt/cdrom
# yum install -y httpd
[root@node1 ~]# echo "node1.a.com" >>/var/www/html/index.html //node1上
[root@node2 ~]# echo "node2.a.com" >/var/www/html/index.html //node2上
# service httpd start
# chkconfig httpd on
2.安裝所需要的軟件包(corosync/openais+pacemaker軟件包)
cluster-glue-1.0.6-1.6.el5.i386.rpm
cluster-glue-libs-1.0.6-1.6.el5.i386.rpm
corosync-1.2.7-1.1.el5.i386.rpm
corosynclib-1.2.7-1.1.el5.i386.rpm
heartbeat-3.0.3-2.3.el5.i386.rpm
heartbeat-libs-3.0.3-2.3.el5.i386.rpm
libesmtp-1.0.4-5.el5.i386.rpm
openais-1.1.3-1.6.el5.i386.rpm
openaislib-1.1.3-1.6.el5.i386.rpm
pacemaker-1.1.5-1.1.el5.i386.rpm
pacemaker-cts-1.1.5-1.1.el5.i386.rpm
pacemaker-libs-1.1.5-1.1.el5.i386.rpm
perl-TimeDate-1.16-5.el5.noarch.rpm
resource-agents-1.0.4-1.1.el5.i386.rpm
# yum localinstall -y *.rpm --nogpgcheck
[root@node1 ~]# cd /etc/corosync/
[root@node1 corosync]# cp -p corosync.conf.example corosync.conf
[root@node1 corosync]# vim corosync.conf
10 bindnetaddr: 192.168.145.0 心跳探測
33 service {
34 ver: 0
35 name: pacemaker
36 }
37 aisexec {
38 user: root
39 group: root
40 }
創建目錄
#mkdir /var/log/cluster
為了便面其他主機加入該集群,需要認證,生成一個authkey
[root@node1 corosync]# corosync-keygen
Corosync Cluster Engine Authentication key generator.
Gathering 1024 bits for key from /dev/random.
Press keys on your keyboard to generate entropy.
Writing corosync key to /etc/corosync/authkey.
[root@node1 corosync]# ll
總計 28
-rw-r--r-- 1 root root 5384 2010-07-28 amf.conf.example
-r-------- 1 root root 128 10-20 13:02 authkey
-rw-r--r-- 1 root root 540 10-20 12:59 corosync.conf
-rw-r--r-- 1 root root 436 2010-07-28 corosync.conf.example
drwxr-xr-x 2 root root 4096 2010-07-28 service.d
drwxr-xr-x 2 root root 4096 2010-07-28 uidgid.d
拷貝到node2上去 (使用 -p 以保留權限)
[root@node1 corosync]# scp -p authkey corosync.conf node2:/etc/corosync/
在另外的一個節點上創建日志目錄
[root@node1 corosync]# ssh node2 'mkdir /var/log/cluster'
在節點上啟動服務
[root@node1 corosync]# service corosync start
[root@node1 corosync]# ssh node2 'service corosync start'
驗證啟動corosync是否正常:
查看corosync引擎是否正常啟動
[root@node1 corosync]# grep -i -e "corosync cluster engine" -e "configuration file" /var/log/messages
Oct 30 13:08:39 localhost corosync[32303]: [MAIN ] Corosync Cluster Engine ('1.2.7'): started and ready to provide service.
Oct 30 13:08:39 localhost corosync[32303]:[MAIN] Successfully read main configuration file '/etc/corosync/corosync.conf'.
查看初始化成員節點通知是否發出
[root@node1 corosync]# grep -i totem /var/log/messages
Oct 30 13:08:39 localhost corosync[32303]: [TOTEM ] Initializing transport (UDP/IP).
Oct 30 13:08:39 localhost corosync[32303]:[TOTEM] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).
Oct 30 13:08:39 localhost corosync[32303]: [TOTEM ] The network interface [192.168.145.100] is now up.
Oct 30 13:08:40 localhost corosync[32303]:[TOTEM] A processor joined or left the membership and a new membership was formed.
Oct 30 13:09:18 localhost corosync[32303]: [TOTEM] A processor joined or left the membership and a new membership was formed.
檢查過程中是否有錯誤產生
[root@node1 corosync]# grep -i error: /var/log/messages |grep -v unpack_resources
查看pacemaker是否正常啟動:
[root@node1 corosync]# grep -i pcmk_startup /var/log/messages
Oct 30 13:08:39 localhost corosync[32303]: [pcmk ] info: pcmk_startup: CRM: Initialized
Oct 30 13:08:39 localhost corosync[32303]: [pcmk ] Logging: Initialized pcmk_startup
Oct 30 13:08:39 localhost corosync[32303]: [pcmk ] info: pcmk_startup: Maximum core file size is: 4294967295
Oct 30 13:08:40 localhost corosync[32303]: [pcmk ] info: pcmk_startup: Service: 9
Oct 30 13:08:40 localhost corosync[32303]: [pcmk ] info: pcmk_startup: Local hostname: node1.a.com
將前面的驗證步驟在另外一個節點上再次驗證一次
在任何一個節點上 查看集群的成員狀態
[root@node1 corosync]# crm status
============
Last updated: Sat Oct 30 13:17:52 2013
Stack: openais
Current DC: node1.a.com - partition with quorum
Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f
2 Nodes configured, 2 expected votes
0 Resources configured.
============
Online: [ node1.a.com node2.a.com ]
提供高可用服務
在corosync中,定義服務可以用兩種借口
1.圖形接口 (使用hb—gui)
2.crm (pacemaker 提供,是一個shell)
[root@node1 corosync]# crm configure show
node node1.a.com
node node2.a.com
property $id="cib-bootstrap-options" \
dc-version="1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f" \
cluster-infrastructure="openais" \
expected-quorum-votes="2"
用于查看cib的相關信息
如何驗證該文件的語法錯誤
[root@node1 corosync]# crm_verify -L
crm_verify[32397]: 2013/11/1_13:24:12 ERROR: unpack_resources: Resource start-up disabled since no STONITH resources have been defined
crm_verify[32397]: 2013/11/1_13:24:12 ERROR: unpack_resources: Either configure some or disable STONITH with the stonith-enabled option
crm_verify[32397]: 2013/11/1_13:24:12 ERROR: unpack_resources: NOTE: Clusters with shared data need STONITH to ensure data integrity
Errors found during check: config not valid
-V may provide more details
可以看到有stonith錯誤,在高可用的環境里面,會禁止實用任何支援
可以禁用stonith
[root@node1 corosync]# crm
crm(live)# configure
crm(live)configure# property stonith-enabled=false
crm(live)configure# commit
crm(live)configure# show
node node1.a.com
node node2.a.com
property $id="cib-bootstrap-options" \
dc-version="1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f" \
cluster-infrastructure="openais" \
expected-quorum-votes="2" \
stonith-enabled="false"
再次進行檢查
[root@node1 corosync]# crm_verify -L
沒有錯誤了
系統上有專門的stonith命令
stonith -L 顯示stonith所指示的類型
crm可以使用交互式模式
可以執行help
保存在cib里面,以xml的格式
集群的資源類型有4種
primitive 本地主資源 (只能運行在一個節點上)
group 把多個資源軌道一個組里面,便于管理
clone 需要在多個節點上同時啟用的 (如ocfs2 ,stonith ,沒有主次之分)
master 有主次之分,如drbd
ip地址 http服務 共享存儲
用資源代理進行配置
ocf lsb的
使用list可以查看
crm(live)# ra
crm(live)ra# classes
heartbeat
lsb
ocf / heartbeat pacemaker
stonith
可以實用list lsb 查看資源代理的腳本
crm(live)ra# list lsb
NetworkManager acpid anacron apmd
atd auditd autofs avahi-daemon
avahi-dnsconfd bluetooth capi conman
corosync cpuspeed crond cups
cups-config-daemon dnsmasq dund firstboot
functions gpm haldaemon halt
heartbeat hidd hplip ip6tables
ipmi iptables irda irqbalance
isdn kdump killall krb524
kudzu lm_sensors logd lvm2-monitor
mcstrans mdmonitor mdmpd messagebus
microcode_ctl multipathd netconsole netfs
netplugd network nfs nfslock
nscd ntpd openais openibd
pacemaker pand pcscd portmap
psacct rawdevices rdisc readahead_early
readahead_later restorecond rhnsd rpcgssd
rpcidmapd rpcsvcgssd saslauthd sendmail
setroubleshoot single smartd sshd
syslog vncserver wdaemon winbind
wpa_supplicant xfs xinetd ypbind
(是/etc/init.d目錄下的)
查看ocf的heartbeat
crm(live)ra# list ocf heartbeat
實用info或者meta 用于顯示一個資源的詳細信息
meta ocf:heartbeat:IPaddr 各個子項用:分開
配置一個資源,可以在configure下面進行配置
1.先資源名字
crm(live)configure# primitive webip ocf:heartbeat:IPaddr params ip=192.168.2.100
2.查看
crm(live)configure# show
node node1.a.com
node node2.a.com
primitive webip ocf:heartbeat:IPaddr \
params ip="192.168.2.100"
property $id="cib-bootstrap-options" \
dc-version="1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f" \
cluster-infrastructure="openais" \
expected-quorum-votes="2" \
stonith-enabled="false"
3.提交 crm(live)configure# commit
4.crm(live)# status
============
Last updated: Mon May 7 19:39:37 2012
Stack: openai
Current DC: node1.a.com - partition with quorum
Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f
2 Nodes configured, 2 expected votes
1 Resources configured.
============
Online: [ node1.a.com node2.a.com ]
webIP (ocf::heartbeat:IPaddr): Started node1.a.com
可以看出該資源在node1上啟動
5.實用ifconfig 在節點1上進行查看
[root@node1 corosync]# ifconfig
6.定義web服務資源
在兩個節點上都要進行安裝
安裝完畢后,可以查看httpd的lsb腳本
[root@node2 corosync]# crm ra list lsb
或者
crm(live)ra# list lsb
查看httpd的參數
crm(live)ra# meta lsb:httpd
lsb:httpd
Apache is a World Wide Web server. It is used to serve \
HTML files and CGI.
Operations' defaults (advisory minimum):
start timeout=15
stop timeout=15
status timeout=15
restart timeout=15
force-reload timeout=15
monitor interval=15 timeout=15 start-delay=15
定義httpd的資源
crm(live)configure# primitive webserver lsb:httpd
crm(live)configure# show
crm(live)configure# commit
crm(live)configure# en
crm(live)# status
發現httpd已經啟動了,但是在node2節點上(高級群集服務資源越來越多,會分布在不同的節點上,以盡量負載均衡)需要約束在同一個節點上,定義成一個組
可以實用 crm(live)configure# help group 查看配置組的幫助 信息
crm(live)configure# help group
定義組
crm(live)configure# group web webip webserver
crm(live)configure# show
因為這里只有兩個節點,需要對這兩個節點的票數進行關閉
可選的參數有如下 ignore (忽略)
freeze (凍結,表示已經啟用的資源繼續實用,沒有啟用的資源不能啟用)
stop(默認)
suicide (所有的資源殺掉)
crm(live)configure# property no-quorum-policy=ignore
在次查看群集的狀態
crm(live)# status
(現在ip地址和 httpd都已經在node1上了)
lsb之類的服務,一定不能自動啟動 chkconfig httpd off
1 .測試,在兩個節點上做網頁
在節點1 和節點2 上分別創建網頁
使用http://群集ip 發現在第一個節點上
2.將節點1 的corosync 服務停止
[root@node1 corosync]# service corosync stop
3. 在節點2上進行觀察
[root@node2 corosync]# crm status
DRBD
添加分區
[root@node1 ~]# fdisk /dev/sda
[root@node1~]# partprobe /dev/sda
[root@node1 ~]# cat /proc/partitions
在節點2上做同樣配置
安裝drbd,用來構建分布式存儲。
這里要選用適合自己系統的版本進行安裝,我用到的是
軟件:
kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
drbd83-8.3.8-1.el5.centos.i386.rp
1.安裝DRBD軟件
[root@drbd1 ~]# rpm -ivh drbd83-8.3.8-1.el5.centos.i386.rpm //主文件安裝
[root@drbd1 ~]# rpm -ivh kmod-drbd83-8.3.8-1.el5.centos.i686.rpm //內核文件安裝
2.加載內核
[root@drbd1 ~]# modprobe drbd
3.配置主文件
root@drbd1 ~]# vim /etc/drbd.conf 在末行模式下輸入如下命令
:r /usr/share/doc/drbd83-8.3.8/drbd.conf
# You can find an example in /usr/share/doc/drbd.../drbd.conf.example
include "drbd.d/global_common.conf";
include "drbd.d/*.res";
# please have a a look at the example configuration file in
# /usr/share/doc/drbd83/drbd.conf
#
4.配置全局文件
[root@drbd1 ~]# cd /etc/drbd.d
[root@drbd1 drbd.d]# cp global_common.conf global_common.conf.bak //備份文件
[root@drbd1 drbd.d]# vim global_common.conf 修改如下
global {
usage-count no; //取消DRBD使用者統計
# minor-count dialog-refresh disable-ip-verification
}
common {
protocol C; //使用協議C
startup {
wfc-timeout 120; //啟動延遲
degr-wfc-timeout 120;
}
disk { //fence防腦裂
on-io-error detach;
fencing resource-only;
}
net {
cram-hmac-alg "sha1"; //主備節點使用的通信算法
shared-secret "mydrbdlab";
}
syncer {
rate 100M; //主備節點同步速率
}
}
5.定義資源
[root@drbd1 ~]# vim web.res
resource web { (資源名稱)
on node1.a.com { (節點名)
device /dev/drbd0; (虛擬設備名稱)
disk /dev/sda4; (真實設備名)
address 192.168.2.10:7789; (監聽自身的IP的地址端口)
meta-disk internal;
}
on node2.a.com {
device /dev/drbd0;
disk /dev/sda4;
address 192.168.2.20:7789;
meta-disk internal;
}
}
6.node2也需要進行同樣的配置,配置與node1配置是一樣的
在node1 與node2上初始化資源web
[root@drbd1 ~]# drbdadm create-md web
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
[root@drbd2 ~]# drbdadm create-md web
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
7.啟動drbd服務
注意兩個節點要一起啟動,否則在啟動時會處于一直等待狀態
[root@drbd1 ~]# service drbd start
[root@drbd2 ~]# service drbd start
8.查看節點狀態
在節點一上查看
[root@drbd1 ~]# drbd-overview
0:web Connected Secondary/Secondary Inconsistent/Inconsistent C r----
在節點二上查看
[root@drbd2 ~]# drbd-overview
0:web Connected Secondary/Secondary Inconsistent/Inconsistent C r----
web:資源名
Secondary/Secondary:自身狀態/另外節點狀態
由上面的兩個節點的狀態可看到,兩個節點都是備用節點,我們需要手動調整
9.將drbd1.a.com調整為主節點
[root@drbd1 ~]# drbdadm -- --overwrite-data-of-peer primary web
10.再次查看狀態
節點一
[root@drbd1 ~]# drbd-overview
0:web Connected Primary/Secondary UpToDate/UpToDate C r----
節點二
[root@drbd2 ~]# drbd-overview
0:web Connected Secondary/Primary UpToDate/UpToDate C r----
可以看出drbd1.a.com已經成為主節點了
11.在主節點上創建文件系統
[root@drbd1 ~]# mkfs.ext3 -L drbdweb /dev/drbd0 L:卷名
12.測試
1> 在主節點上創建掛載點,掛載后,寫入一個文件
[root@drbd1 ~]# mkdir /mnt/drbd
[root@drbd1 ~]# mount /dev/drbd0 /mnt/drbd
[root@drbd1 ~]# cd /mnt/drbd
[root@drbd1 drbd]# touch index.html
[root@drbd1 drbd]# ll
total 16
-rw-r--r-- 1 root root 0 Jan 20 18:09 index.html
drwx------ 2 root root 16384 Jan 20 18:07 lost+found
2> 將drbd1.a.com配置成從節點,將drbd2.a.com配置成主節點
節點一
[root@drbd1 drbd]# cd
[root@drbd1 ~]# umount /mnt/drbd
[root@drbd1 ~]# drbdadm secondary web
[root@drbd1 ~]# drbdadm role web
Secondary/Primary
[root@drbd1 ~]#
節點二
[root@drbd2 ~]# drbdadm primary web
[root@drbd2 ~]# drbd-overview
0:web Connected Primary/Secondary UpToDate/UpToDate C r----
3> 在節點二掛載,查看是否有內容
[root@drbd2 ~]# mkdir /mnt/drbd
[root@drbd2 ~]# mount /dev/drbd0 /mnt/drbd
[root@drbd2 ~]# ll /mnt/drbd/
total 16
-rw-r--r-- 1 root root 0 Jan 20 18:09 index.html //可以看到已經寫入成功
drwx------ 2 root root 16384 Jan 20 18:07
轉載于:https://blog.51cto.com/ymchaofeng/1319275
總結
以上是生活随笔為你收集整理的corosync/openais+pacemaker+drbd+web实现高可用群集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Zend API: array_init
- 下一篇: 多继承有什么坏处,为什么java搞单继承