配置前提: |
一:corosync的配置
1.准备工作
1)我们首先要保证两节点之间时间相差不应该超过1秒
- hwclock -s
2)两台主机的主机名:node1.weiyan.org && node2.weiyan.org
3)分别在两个node节点上编辑/etc/hosts文件并加入
172.16.19.11 node1.weiyan.org node1 |
- ## node1上:
- ssh-keygen -t rsa
- ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
- ## node2上:
- ssh-keygen -t rsa
- ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
5)安装所依赖的软件包,以及要用到的主程序包
这里我们创建环境所需要依赖到的软件包有: 安装corosync和pacemaker,下载主程序包,并将其放至单独目录方便安装:(这里为/root/corosync) cluster-glue、cluster-glue-libs、heartbeat、openaislib、resource-agents、corosync、heartbeat-libs、pacemaker、corosynclib、libesmtp、pacemaker-libs 下载地址:http://clusterlabs.org/rpm/。请根据硬件平台及操作系统类型选择对应的软件包;这里建议每个软件包都使用目前最新的版本。(本文最后提供了这些软件包,可以直接下载) |
- ## 安装使用:
- cd /root/corosync
- yum -y --nogpgcheck localinstall *.rpm
2.配置corosync(这阶段内容都在node1上进行)
- cd /etc/corosync/
- cp corosync.conf.example corosync.conf
1)编辑corosync.conf使其含有如下内容
# Please read the corosync.conf.5 manual page totem { ##定义多个node节点之间实现心跳信息传递的相关协议详细信息 version: 2 secauth: off ##是否打开安全认证 threads: 0 interface { ringnumber: 0 bindnetaddr: 172.16.19.0 ##通过哪个网段进行通信 mcastaddr: 226.94.1.1 ##多播地址 mcastport: 5405 ##多播端口 } } logging { fileline: off to_stderr: no ##是否将错误信息发送到标准错误输出 to_logfile: yes ##是否写入日志文件 to_syslog: yes ##是否写到系统日志进程上去 logfile: /var/log/cluster/corosync.log ##需要手动去建立这个路径 debug: off timestamp: on logger_subsys { subsys: AMF debug: off } } mode: disabled } ver:0 name:pacemaker ##表明我们要启动pacemaker } user:root ##定义启动的身份和组 group:root } |
2)生成authkey
- corosync-keygen ##自动生成认证密钥(默认情况下将会从熵池里拿随机数)
3)将配置文件和authkey传递到node2
- scp -p authkey corosync.conf node2:/etc/corosync
- ssh node2 ‘mkdir -v /var/log/cluster’
3.启动corosync并检查配置
- service corosync start
1)验证错误
##查看corosync引擎是否正常启动 应出现含有:[MAIN ] Corosync Cluster Engine ('1.2.7'): started and ready to provide service. ##查看初始化成员节点通知是否发出 应出现含有:[TOTEM ] The network interface [172.16.19.11] is now up. ##检查启动过程中是否有错误产生: 应没有任何内容出现 ##查看pacemaker是否正常启动: 应出现含有:[pcmk ] info: pcmk_startup: Local hostname: node1.weiyan.org |
3)当node1的检测正常之后,进行node2启动和验证
- ssh node2 ‘/etc/init.d/corosync start’
4).查看当前集群状态:
- crm status
============ Stack: openais Current DC: node1.weiyan.org - partition WITHOUT quorum Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87 2 Nodes configured, 2 expected votes 0 Resources configured. ============
Online: [ node1.weiyan.org node2.weiyan.org ] |
二.定义高可用资源
1.我们里可以通过如下命令先禁用stonith:
- crm configure property stonith-enabled=false
2.添加IP资源
- crm configure primitive WebIP ocf:heartbeat:IPaddr params ip=172.16.19.1
3.定义httpd资源
1)分别在两个节点上安装httpd
- yum install -y httpd
2)添加网页以方便验证
- ## node1上输入:
- echo “node1.weiyan.org” > /var/www/html/index.html
- ## node2上输入:
- echo “node2.weiyan.org” > /var/www/html/index.html
3)手动停止其开机自动启动并确保当前没有启动中
- chkconfig httpd off
- service httpd stop
4)定义httpd集群资源
- crm configure primitive WebServer lsb:httpd
4.查看状态并定义约束
1)查看当前资源状态
- crm status
============
Online: [ node1.weiyan.org node2.weiyan.org ] WebIP (ocf::heartbeat:IPaddr): Started node1.weiyan.org |
2)定义关联以及约束
- crm configure colocation WebServer-with-WebIP INFINITY: WebServer WebIP
- crm configure order WebServer-after-WebIP mandatory: WebIP WebServer
- crm configure location prefer-node1 WebServer rule 200: node1
3)定义quorum运行方式
- crm configure property no-quorum-policy=ignore
4)查看配置状态
- crm configure show
node node1.weiyan.org \ |
三,配置DRBD
1.安装drbd
- yum -y --nogpgcheck localinstall drbd83-8.3.8-1.el5.centos.i386.rpm kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
2.配置drbd
1)复制样例配置文件为即将使用的配置文件:
- cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc
2)配置/etc/drbd.d/global-common.conf
global { # minor-count dialog-refresh disable-ip-verification }
common {
handlers { pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f"; local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f"; fence-peer "/usr/lib/drbd/crm-fence-peer.sh"; split-brain "/usr/lib/drbd/notify-split-brain.sh root"; out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root"; before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k"; after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh; } startup { degr-wfc-timeout 120; }
disk { fencing resource-only; }
net { shared-secret "mydrbdlab"; }
syncer { } } |
3).定义一个新资源/etc/drbd.d/web.res,内容如下:
resource web { device /dev/drbd0; disk /dev/sda5; address 172.16.19.11:7789; meta-disk internal; } on node2.weiyan.org { device /dev/drbd0; disk /dev/sda5; address 172.16.19.12:7789; meta-disk internal; } } |
4).将配置文件同步至node2
- scp -r /etc/drbd.conf /etc/drbd.d/ node2:/etc/
4.初始化已定义的资源并启动服务:
1)初始化资源,在Node1和Node2上分别执行:
- drbdadm create-md web
2)启动服务,在Node1和Node2上分别执行:
- /etc/init.d/drbd start
3)查看启动状态:
- cat /proc/drbd
version: 8.3.8 (api:88/proto:86-94) 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r---- ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:1959800 |
4)设置node1为主节点
- drbdsetup /dev/drbd0 primary –o
5)而后再次查看状态,可以发现数据同步过程已经开始:
# drbd-overview [====>...............] sync'ed: 28.0% (1413848/1959800)K delay_probe: 52 |
6)等数据同步完成以后再次查看状态,可以发现节点已经牌实时状态,且节点已经有了主次:
- drbd-overview
- 0:web Connected Primary/Secondary UpToDate/UpToDate C r----
5、创建文件系统
文件系统的挂载只能在Primary节点进行,因此,也只有在设置了主节点后才能对drbd设备进行格式化:
- mke2fs -j -L DRBD /dev/drbd0 ## 格式化为ext3
- mkdir /mnt/drbd ## 创建测试目录
- mount /dev/drbd0 /mnt/drb ## 挂载至测试目录
6、切换Primary和Secondary节点
对主Primary/Secondary模型的drbd服务来讲,在某个时刻只能有一个节点为Primary,因此,要切换两个节点的角色,只能在先将原有的Primary节点设置为Secondary后,才能原来的Secondary节点设置为Primary:- ## Node1上:
- echo “drbd.weiyan.org” > /mnt/drbd/index.html ##定义测试文件
- umount /mnt/drbd ## 卸载drbd
- drbdadm secondary web ##设置node1为Secondary状态
- ##查看状态:则两节点都为Secondary状态
- drbd-overview
- 0:web Connected Secondary/Secondary UpToDate/UpToDate C r----
- ## Node2上:
- drbdadm primary web ## 设置node2成为Primary状态
- drbd-overview
- 0:web Connected Primary/Secondary UpToDate/UpToDate C r----
- mkdir /mnt/drbd
- mount /dev/drbd0 /mnt/drbd ## 挂载至测试目录
四:配置corosync使集群能争用DRBD资源。
版权声明: 第四步实现的过程文档为转载,原作者花费不少心血来实现并写成文档,请大家尊重原作者,下文原作者:马哥,博客地址:http://blog.chinaunix.net/space.php?uid=233544&do=blog&id=2427499 本人在实现这篇文档的时候发现文档内容有细微错误,在这里已将其纠正。并增加了注释。希望大家在实现的过程中发现问题请及时提出。 |
1.为了将DRBD定义成集群服务,我们首先要做以下工作
停止drbd服务,以及不能使其开机启动
- drbd-overview
- 0:web Unconfigured . . . .
- chkconfig drbd off
2.配置drbd为集群资源:
小贴士: 提供drbd的RA目前由OCF归类为linbit,其路径为/usr/lib/ocf/resource.d/linbit/drbd。我们可以使用如下命令来查看drbd信息: crm ra info ocf:linbit:drbd drbd需要同时运行在两个节点上,但只能有一个节点(primary/secondary模型)是Master,而另一个节点为Slave;因此,它是一种比较特殊的集群资源,其资源类型为多状态(Multi-state)clone类型,即主机节点有Master和Slave之分,且要求服务刚启动时两个节点都处于slave状态。
|
[root@node1 ~]# crm crm(live)# configure crm(live)configure# primitive webdrbd ocf:heartbeat:drbd params drbd_resource=web op monitor role=Master interval=50s timeout=30s op monitor role=Slave interval=60s timeout=30s crm(live)configure# master MS_Webdrbd webdrbd meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true" crm(live)configure# show webdrbd ## 查看我们定义的Webdrbd资源 primitive WebDRBD ocf:heartbeat:drbd \ params drbd_resource="web" \ op monitor interval="50s" role="Master" timeout="30s" \ op monitor interval="60s" role="Slave" timeout="30s" crm(live)configure# show MS_Webdrbd ## 查看定义的clone资源 ms MS_WebDRBD WebDRBD \ meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true" crm(live)configure# verify crm(live)configure# commit |
## 查看当前集群运行状态: crm status ============ Online: [ node2.weiyan.org node1.weiyan.org ] Master/Slave Set: MS_Webdrbd Masters: [ node2.weiyan.org ] |
由上面的信息可以看出此时的drbd服务的Primary节点为node2.a.org,Secondary节点为node1.a.org。当然,也可以在node2上使用如下命令验正当前主机是否已经成为web资源的Primary节点:
- drbdadm role web
- Primary/Secondary ## 发现已经是主节点
3.为Primary节点上的web资源创建自动挂载的集群服务
MS_Webdrbd的Master节点即为drbd服务web资源的Primary节点,此节点的设备/dev/drbd0可以挂载使用,且在某集群服务的应用当中也需要能够实现自动挂载。假设我们这里的web资源是为Web服务器集群提供网页文件的共享文件系统,其需要挂载至/www(此目录需要在两个节点都已经建立完成)目录。 此外,此自动挂载的集群资源需要运行于drbd服务的Master节点上,并且只能在drbd服务将某节点设置为Primary以后方可启动。因此,还需要为这两个资源建立排列约束和顺序约束。 |
## 定义挂载资源 crm ## 查看集群中资源的运行状态: crm status ============ Online: [ node2.weiyan.org node1.weiyan.org ] Master/Slave Set: MS_Webdrbd WebFS (ocf::heartbeat:Filesystem): Started node2.weiyan.org |
由上面的信息可以发现,此时WebFS运行的节点和drbd服务的Primary节点均为node2.a.org;我们在node2上复制一些文件至/www目录(挂载点),而后在故障故障转移后查看node1的/www目录下是否存在这些文件。
- cp /etc/rc./rc.sysinit /www
4.下面我们模拟node2节点故障,看此些资源可否正确转移至node1。
以下命令在Node2上执行: crm node standby ##我们先让node2节点待命 ============ Node node2.weiyan.org: standby Master/Slave Set: MS_Webdrbd WebFS (ocf::heartbeat:Filesystem): Started node1.weiyan.org 由上面的信息可以推断出,node2已经转入standby模式,其drbd服务已经停止,但故障转移已经完成,所有资源已经正常转移至node1。 在node1可以看到在node2作为primary节点时产生的保存至/www目录中的数据,在node1上均存在一份拷贝。 |
让node2重新上线: crm node online ## 让node2上线 ============ Online: [ node2.weiyan.org node1.weiyan.org ] Master/Slave Set: MS_Webdrbd |