Corosync+DRBD构建高可用web服务
实验平台:virtualbox 4.12
操作系统:RedHat5.4
实验拓扑:本实验使用两台主机模拟实现高可用集群,使用DRBD实现分布式存储,在一台主机宕机是可以保证数据的完整及服务app开发的正常。
< XMLNAMESPACE PREFIX ="O" />
一. 首先进行一些基本的准备设置。
# vim /etc/sysconfig/network-scripts/ifcfg-eth0
#vim /etc/sysconfig/network
安装实验规划进行相应修改即可
#vim /etc/hosts
添加:
192.168.56.10node1.a.orgnode1 192.168.56.30node2.a.orgnode2
拷贝该文件至node2
# scp /etc/hosts node2:/etc/
接下来要设置ssh免密码连接
[root@node1~]#ssh-keygen-trsa [root@node1~]#ssh-copy-id-i~/.ssh/id_rsa.pubroot@node2 [root@node2~]#ssh-keygen-trsa [root@node2~]#ssh-copy-id-i~/.ssh/id_rsa.pubroot@node1
二.安装DRBD,用来构建分布式存储。
1.这里要选用适合自己系统的版本进行安装,我用到的是
drbd83-8.3.8-1.el5.centos.i386.rpm kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
下面开始安装,两台主机都要装上:
[root@node1~]#yumlocalinstall*.rpm-y–nogpgcheck [root@node1~]#scp*.rpmnode2:/root [root@node2~]#yumlocalinstall*.rpm-y–nogpgcheck
还要为DRBD准备分区,同样是要在两台主机上分别进行,关于分区的操作就不细述来,很简单,我在两台主机上各分了一个5G的分区,盘符都是/dev/sda5
2.配置DRBD
[root@node1~]#cp/usr/share/doc/drbd83-8.3.8/drbd.conf/etc/ cp:overwrite`/etc/drbd.conf'?Y#这里要选择覆盖 [root@node1~]#scp/etc/drbd.confnode2:/etc/
编辑配置文件:
[root@node1 ~]# vim /etc/drbd.d/global_common.conf
global{ usage-countno; } common{ protocolC; handlers{ pri-on-incon-degr"/usr/lib/drbd/notify-pri-on-incon-degr.sh;/usr/lib/drbd/notify-emergency-reboot.sh;echob>/proc/sysrq-trigger;reboot-f"; pri-lost-after-sb"/usr/lib/drbd/notify-pri-lost-after-sb.sh;/usr/lib/drbd/notify-emergency-reboot.sh;echob>/proc/sysrq-trigger;reboot-f"; local-io-error"/usr/lib/drbd/notify-io-error.sh;/usr/lib/drbd/notify-emergency-shutdown.sh;echoo>/proc/sysrq-trigger;halt-f"; } startup{ wfc-timeout120; degr-wfc-timeout120; } disk{ on-io-errordetach; fencingresource-only; } net{ cram-hmac-alg"sha1"; shared-secret"mydrbdlab"; } syncer{ rate100M; }
为DRBD定义一个资源
[root@node1~]#vim/etc/drbd.d/web.res#这里名字可以随便起,但一定要是.res结尾的文件 resourceweb{ onnode1.a.org{ device/dev/drbd0; disk/dev/sda5; address192.168.56.10:7789; meta-diskinternal; } onnode2.a.org{ device/dev/drbd0; disk/dev/sda5; address192.168.56.30:7789; meta-diskinternal; } } [root@node1~]#scp/etc/drbd.d/web.resnode2:/etc/drbd.d/
初始化资源,在Node1和Node2上分别执行:
[root@node1~]#drbdadmcreate-mdweb [root@node2~]#drbdadmcreate-mdweb #启动服务: [root@node1~]#/etc/init.d/drbdstart [root@node2~]#/etc/init.d/drbdstart
设置其中一个节点为主节点
# drbdsetup /dev/drbd0 primary –o
3.创建文件系统
[root@node1~]#mke2fs-j-LDRBD/dev/drbd0 [root@node1~]#mkdir/mnt/drbd [root@node1~]#mount/dev/drbd0/mnt/drbd
三.安装corosync
用到的软件包有
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.0.11-1.2.el5.i386.rpm pacemaker-libs-1.0.11-1.2.el5.i386.rpm resource-agents-1.0.4-1.1.el5.i386.rpm
[root@node1 ~]# yum localinstall *.rpm -y --nogpgcheck
配置corosync
[root@node1~]#cd/etc/corosync [root@node1~]#cpcorosync.conf.examplecorosync.conf [root@node1~]#vimcorosync.conf bindnetaddr:192.168.56.0 #并添加如下内容: service{ ver:0 name:pacemaker } aisexec{ user:root group:root }
生成节点间通信时用到的认证密钥文件:
[root@node1corosync]#corosync-keygen [root@node1corosync]#scp-pcorosync.confauthkeynode2:/etc/corosync/ [root@node1~]#mkdir/var/log/cluster [root@node1~]#sshnode2'mkdir/var/log/cluster'
启动服务
[root@node1~]#/etc/init.d/corosyncstart [root@node1~]#sshnode2--/etc/init.d/corosyncstart [root@node1~]#crmconfigurepropertystonith-enabled=false//禁用stonith 为集群添加集群资源 [root@node1~]#crmconfigureprimitiveWebIPocf:heartbeat:IPaddrparamsip=192.168.56.20 [root@node1~]#crmconfigurepropertyno-quorum-policy=ignore为资源指定默认黏性值 [root@node1~]#crmconfigurersc_defaultsresource-stickiness=100[root@node1~]#crm crm(live)#configure crm(live)configure#primitivewebdrbdocf:heartbeat:drbdparamsdrbd_resource=webopmonitorrole=Masterinterval=50stimeout=30sopmonitorrole=Slaveinterval=60stimeout=30scrm(live)configure#masterMS_Webdrbdwebdrbdmetamaster-max="1"master-node-max="1"clone-max="2"clone-node-max="1"notify="true"
为Primary节点上的web资源创建自动挂载的集群服务
#crm crm(live)#configure crm(live)configure#primitiveWebFSocf:heartbeat:Filesystemparamsdevice="/dev/drbd0"directory="/www"fstype="ext3"crm(live)configure#colocationWebFS_on_MS_webdrbdinf:WebFSMS_Webdrbd:Master crm(live)configure#orderWebFS_after_MS_Webdrbdinf:MS_Webdrbd:promoteWebFS:start crm(live)configure#verify crm(live)configure#commit
查看集群中资源的运行状态:
下面我们在两个节点分别安装httpd服务用于测试
[root@node1~]#yuminstallhttpd-y [root@node2~]#yuminstallhttpd-y root@node1~]#setenforce0//关闭SElinux root@node2~]#setenforce0 [root@node1~]#vim/etc/httpd/conf/httpd.conf DocumentRoot"//mnt/drbd/html" [root@node1~]#echo"
Node1.a.org
">/mnt/debd/html/index.html [root@node1~]#crmconfigureprimitiveWebSitelsb:httpd//添加httpd为资源 [root@node1~]#crmconfigurecolocationwebsite-with-ipINFINITY:WebSiteWebIP//是IP和web服务在同一主机上 [root@node1~]#crmconfigureorderhttpd-after-ipmandatory:WebIPWebSite//定义资源启动顺序
查看资源状态:
下面在浏览器内输入192.168.56.20,可以看到
此时停掉node1
查看资源状态:
刷新页面可以看到说明corosync和DRBD都工作正常。