构建Heartbeat 303 GUI+DRBD+Oracle 10g 双机互备集群.docx
《构建Heartbeat 303 GUI+DRBD+Oracle 10g 双机互备集群.docx》由会员分享,可在线阅读,更多相关《构建Heartbeat 303 GUI+DRBD+Oracle 10g 双机互备集群.docx(12页珍藏版)》请在冰豆网上搜索。
构建Heartbeat303GUI+DRBD+Oracle10g双机互备集群
构建Heartbeat3.0.3GUI+DRBD+Oracle10g双机互备集群
一、系统环境
引用
操作系统:
Asianux3.0SP2forx86_64
DRBD版本:
8.3.8
Heartbeat版本:
3.0.3
Oracle版本:
10.2.0.4
两服务器:
drbd1.linuxfly.org:
192.168.228.133
drbd2.linuxfly.org:
192.168.228.134
DRBD镜像分区:
资源名称:
oradata
设备:
/dev/drbd0
挂载点:
/oradata(存放Oracle实例)
二、安装Heartbeat3.0.3
这里将使用我自行编译的rpm包,通过yum来安装。
1、配置yum环境
假设把压缩包解压到/root/rpms目录下。
然后在/etc/yum.repos.d中创建以下文件:
引用
#catheartbeat.repo
[heartbeat]
name=Heartbeat3
baseurl=file:
///root/rpms
enabled=1
2、安装
先卸载旧的包:
#rpm-e`rpm-qa|grepheartbeat`
#rpm-e`rpm-qa|grepopenais`
然后用yum安装:
#yuminstallpacemakercorosyncheartbeatldirectordpacemaker-mgmtpacemaker-mgmt-clientldirectord
※ldirectord用于LVS环境,若您不需要,可不安装
三、配置Heartbeat3
实际上,Heartbeat3与2.x的配置差别并不大,很多内容都是相通的。
1、配置authkeys
这里我用随机数来获得密钥:
引用
#(echo-ne"auth1\n1sha1";ddif=/dev/urandombs=512count=1|opensslmd5)>authkeys
#catauthkeys
auth1
1sha10366577bdaed36f08b5f1c29431812dc
※注意,authkeys的权限必须是600
2、配置ha.cf
引用
#grep-v'^#'ha.cf
debugfile/var/log/ha-debug
logfile/var/log/ha-log
logfacilitylocal0
keepalive2
deadtime30
initdead30
udpport694
mcasteth0239.0.0.169410#使用多播方式进行相互通信
auto_failbackon
nodedrbd1.linuxfly.org
nodedrbd2.linuxfly.org
compressionbz2
compression_threshold2
crmrespawn
#以下两行是pacemaker-mgmt提供的hb_gui连接所必须的,2.1.4时没有apiauthmgmtduid=root
#注意,下面文件的路径不能有错(可查询pacemaker-mgmt包),并且一定是可执行文件
respawnroot/usr/lib64/heartbeat/mgmtd-v
两文件保存后,同步到另一节点上:
#/usr/share/heartbeat/ha_propagate
3、启动heartbeat
在两节点上启动heartbeat3:
#serviceheartbeatstart
四、pacemaker(CRM)
pacemaker是heartbeat项目将原有的crm组件独立出来形成的项目(当然,除了Heartbeat外,还支持OpenAIS),它在Heartbeat3集群中的角色就是CRM(其实如今CRMd也只是pacemaker的一个部分)。
只有heartbeat不能完成任何工作,packemaker负责整个集群资源的定义、调度,是集群的核心内容。
简单而言,整个集群的运行情况是这样的:
heartbeat确保节点之间通信;packemaker确定集群拥有那些资源,根据服务器的性能状态、资源的约束关系确定资源在哪一个节点上运行;LRM(lrm程序包含在cluster-glue中)按照CRM的要求启动相应的资源,并将资源的状态返回给pacemaker;pacemaker根据LRM的返回决定下一步的动作。
pacemaker提供crmshell工具,而pacemaker-mgmt和pacemaker-mgmt-client则提供了hb_gui图形工具。
1、设定用户
为可以使用hb_gui图形工具,需要设定一个用户。
该用户可以是默认的hacluster,可以是属于haclient组的用户:
#useraddlinuxing-Ghaclient
#passwdlinuxing
进入Xwin后,即可通过hb_bui命令打开图形的配置和管理工具:
crmshell不需要特定的用户,主要管理员登陆到机器上即可使用。
2、使用不同的管理工具
pacemaker既然提供多种管理工具,例如我这里提到的crmshell、hb_gui等,它们的作用是相同的,在其官网上还提供了其他,如基于Ajaxweb方式的管理工具等,可从这里获得源码包。
下面,我以修改其中一个属性为例简单说明一下:
关闭STONITH支持
默认的情况下pacemaker中启用了stonith,但是我们实际部署集群时可能一般都不会用到stonith资源。
当启用了stonith而集群中又没有stonith资源时,集群中的资源都是无法启动的。
在启动资源时会报错:
引用
Jul1502:
01:
19drbd1mgmtd:
[25127]:
ERROR:
unpack_resources:
Resourcestart-updisabledsincenoSTONITHresourceshavebeendefined
Jul1502:
01:
19drbd1mgmtd:
[25127]:
ERROR:
unpack_resources:
EitherconfiguresomeordisableSTONITHwiththestonith-enabledoption
Jul1502:
01:
19drbd1mgmtd:
[25127]:
ERROR:
unpack_resources:
NOTE:
ClusterswithshareddataneedSTONITHtoensuredataintegrity
解决办法,就是把stonith-enabled选项禁用。
a、crmshell方式
在pacemaker包中提供crmshell方式。
其中,crm是一个非常友好的,同时支持交互和非交互两种模式的集成命令;此外,还有一些按功能划分的独立命令,例如:
crm_mon、crm_resource、cibadmin等(可参考heartbeat2.x)。
下面两条命令都能关闭STONITH:
#crm_attribute-tcrm_config-nstonith-enabled-vfalse
#crmconfigurepropertystonith-enabled="false"
若要进入crm的交互模式,可直接运行crm即可:
引用
#crm
crm(live)#
在该环境下,敲入help可获取帮助信息。
敲入对应的命令,可进入下一层菜单,用cd、或end、up都可以返回上一层,exit退出。
※注意,独立的管理命令及非交互模式下的crm,在输入命令后会马上生效;而交互默认下的crm,必须手动用commit命令提交后,配置才能生效。
因crm使用方便,在管理时经常使用。
b、hb_gui方式
这是在Xwin下面的GUI管理方式,从heartbeat2.x就已经提供。
在heartbeat3中必须独立安装pacemaker-mgmt和pacemaker-mgmt-client才能用到,并且,需要在ha.cf中打开mgmtd支持。
以关闭STONITH为例,可在下面的窗口中修改:
在pacemaker-mgmt提供了新的管理界面,并且可以跨机器登陆管理。
远程管理时,必须使用远端机器上的hacluster用户,或属于haclinet组的管理账号(heartbeat2.x只能在本机127.0.0.1上登陆管理)。
另外,若当前连接的是本地,而手动把heartbeat服务关闭时,hb_gui会通过相同的用户名和密码尝试连接到集群节点中的其他机器上,继续追踪集群状态。
hb_gui的设定,在点击“应用”或“确认”后会马上生效。
五、使用pacemaker进行配置
为方便说明,我将以crm命令方式讲解,当然,同样的,你也可以用hb_gui来实现。
1、清空旧配置文件
执行:
#crmconfigureerase
或者以crm交互方式提交:
引用
#crm
crm(live)#configure
crm(live)configure#erase
crm(live)configure#commit
crm(live)configure#exit
bye
2、关闭quorum
pacemaker中有quorum的概念,即集群中必须有一半的节点处于online的状态,则集群被认为是havequorum(可以认为是达到合法节点数要求)。
如果少于一半的节点在线,那么pacemaker认为集群达不到节点数要求,从而拒绝启动集群中的资源。
但是这种策略对于2个节点的集群明显是不合理的,所以就会发生当2个节点的集群其中一个节点失效时所有的集群都无法启动的情况。
同样的,也关闭STONITH,执行:
#crmconfigurepropertyno-quorum-policy=ignore
#crmconfigurepropertystonith-enabled="false"
这是当前的配置情况:
引用
#crmconfigureshow
node$id="ff77dbf9-3344-42ec-86f7-955521a67387"drbd2.linuxfly.org
node$id="ffc0848a-f475-49be-814e-1b247389d819"drbd1.linuxfly.org
property$id="cib-bootstrap-options"\
dc-version="1.0.9-89bd754939df5150de7cd76835f98fe90851b677"\
cluster-infrastructure="Heartbeat"\
no-quorum-policy="ignore"\
stonith-enabled="false"
3、配置DRBD+Oracle
如[原]构建Heartbeat2.1.3GUI+DRBD+Oracle10g双机互备集群一文中提到的一样,把DRBD设置为主备资源,其他oracle资源放在同一个组里面,并通过“顺序”、“协同”等限制条件让两资源配合运行。
根据监控的情况,加入start超时、monitor间隔时间等操作。
进入crm交互模式:
引用
#crmconfigure
crm(live)configure#
然后在configure状态下输入以下内容:
引用
primitivedrbd_oracleocf:
linbit:
drbd\
paramsdrbd_resource="oradata"\
opmonitorinterval="15s"
primitivefs_oracleocf:
heartbeat:
Filesystem\
paramsdevice="/dev/drbd/by-res/oradata"directory="/oradata"fstype="ext3"
primitiveip_oracleocf:
heartbeat:
IPaddr2\
paramsip="192.168.228.136"nic="eth0"cidr_netmask="24"
primitiveoracle_instantocf:
heartbeat:
oracle\
opmonitorinterval="120"timeout="30"\
opstartinterval="0"timeout="120"\
paramssid="orcl"
primitiveoracle_lsnrctlocf:
heartbeat:
oralsnr\
paramssid="orcl"\
operations$id="oracle_lsnrctl-operations"\
opmonitorinterval="10"timeout="30"
groupgroup_oracleip_oraclefs_oracleoracle_lsnrctloracle_instant\
metatarget-role="Started"is-managed="true"
msms_drbd_oracledrbd_oracle\
metamaster-max="1"master-node-max="1"\
clone-max="2"clone-node-max="1"notify="true"
colocationoracle_on_drbdinf:
group_oraclems_drbd_oracle:
Master
orderoracle_after_drbdinf:
ms_drbd_oracle:
promotegroup_oracle:
start
最后用commit提交即可。
※说明:
引用
a、根据DRBD官网的资料,ocf:
heartbeat:
drbd已经被丢弃,不建议使用,故用ocf:
linbit:
drbd代替;
b、IP的设定RA,用ocf:
heartbeat:
IPaddr2,其用ip命令设定虚拟IP,虚拟IP生效后,用ifconfig命令看不到,可用ipaddr查看;
c、输入上述命令时,可能会提示警告,start、stop的超时时间少于建议值等,这可根据应用启动、停止的实际环境在“操作”中加入(可参考oracle_instant资源);
d、ms是设置“主备资源”;
e、colocation是设置“协同”限制,即group_oracle和ms_drbd_oracle必须在同一台机器上运行,并且若ms_drbd_oracle不能作为Master运行时,不会运行group_oracle,相反group_oracle的状态不会影响ms_drbd_oracle;
g、order是设置“顺序”限制,即先激活ms_drbd_oracle资源(把drbd设备设置为primary状态),然后再启动group_oracle组资源;
f、挂载操作中,/dev/drbd/by-res/oradata是为了方便使用,由drbd创建的一个指向/dev/drbd0的链接;
h、如果您输入的命令比较长,可以用“\”调到下一行继续,但是必须注意,下一行前面的空白只能用空格,不能用Tab等字符。
4、启动group_oracle资源组
配置提交后,两资源会自动运行(根据全局配置,有延迟),也可手动启动:
#crmresourcestartgroup_oracle
5、查看状态:
引用
#crmstatus
============
Lastupdated:
ThuJul1515:
39:
202010
Stack:
Heartbeat
CurrentDC:
drbd1.linuxfly.org(ffc0848a-f475-49be-814e-1b247389d819)-partitionwithquorum
Version:
1.0.9-89bd754939df5150de7cd76835f98fe90851b677
2Nodesconfigured,unknownexpectedvotes
2Resourcesconfigured.
============
Online:
[drbd1.linuxfly.orgdrbd2.linuxfly.org]
ResourceGroup:
group_oracle
ip_oracle(ocf:
:
heartbeat:
IPaddr2):
Starteddrbd1.linuxfly.org
fs_oracle(ocf:
:
heartbeat:
Filesystem):
Starteddrbd1.linuxfly.org
oracle_lsnrctl(ocf:
:
heartbeat:
oralsnr):
Starteddrbd1.linuxfly.org
oracle_instant(ocf:
:
heartbeat:
oracle):
Starteddrbd1.linuxfly.org
Master/SlaveSet:
ms_drbd_oracle
Masters:
[drbd1.linuxfly.org]
Slaves:
[drbd2.linuxfly.org]
图形下的状态:
※注意:
因为使用的是IPaddr2的RA,虚拟IP地址用ifconfig命令是看不到的,可用ipaddr查看:
引用
#ipaddr
1:
lo:
mtu16436qdiscnoqueue
link/loopback00:
00:
00:
00:
00:
00brd00:
00:
00:
00:
00:
00
inet127.0.0.1/8scopehostlo
inet6:
:
1/128scopehost
valid_lftforeverpreferred_lftforever
2:
eth0:
mtu1500qdiscpfifo_fastqlen1000
link/ether00:
50:
56:
85:
47:
4fbrdff:
ff:
ff:
ff:
ff:
ff
inet192.168.228.133/24brd192.168.228.255scopeglobaleth0
inet192.168.228.136/24brd192.168.228.255scopeglobalsecondaryeth0
inet6fe80:
:
250:
56ff:
fe85:
474f/64scopelink
valid_lftforeverpreferred_lftforever
3:
sit0:
mtu1480qdiscnoop
link/sit0.0.0.0brd0.0.0.0
6、手动切换
执行:
#crmresourcemigrategroup_oracledrbd2.linuxfly.org
状态:
引用
#crmstatus
============
Lastupdated:
ThuJul1515:
45:
032010
Stack:
Heartbeat
CurrentDC:
drbd1.linuxfly.org(ffc0848a-f475-49be-814e-1b247389d819)-partitionwithquorum
Version:
1.0.9-89bd754939df5150de7cd76835f98fe90851b677
2Nodesconfigured,unknownexpectedvotes
2Resourcesconfigured.
============
Online:
[drbd1.linuxfly.orgdrbd2.linuxfly.org]
ResourceGroup:
group_oracle
ip_oracle(ocf:
:
heartbeat:
IPaddr2):
Starteddrbd2.linuxfly.org
fs_oracle(ocf:
:
heartbeat:
Filesystem):
Starteddrbd2.linuxfly.org
oracle_lsnrctl(ocf:
:
heartbeat:
oralsnr):
Starteddrbd2.linuxfly.org
oracle_instant(ocf:
:
heartbeat:
oracle):
Starteddrbd2.linuxfly.org
Master/SlaveSet:
ms_drbd_oracle
Masters:
[drbd2.linuxfly.org]
Slaves:
[drbd1.linuxfly.org]
※注意:
migrate的动作会添加一条位置限制cli-standby-group_oracle,因此,当备机发生问题时,不会自动返回到主机上。
要解决该问题,需要把位置限制删掉。
执行un-migrate操作:
#crmresourceunmigrategroup_oracle
这里的migrate和move、unmigrate和unmove是同义命令。
7、监控测试
可以尝试以oracle用户执行lsnrctlstop停止Oracle监听服务,从后台日志中,会发现monitor的报错信息,自动重新激活整个group_oracle组资源。
8、维护
有时候,我们需要对当前主机进行维护,这时,可先把资源迁移到备机上,然后把主机设置为“非管理”的standby状态:
引用
[root@drbd1~]#crmresourcemigrategroup_oracle
[root@drbd1~]#crmnodestandby`uname-n`
[root@drbd1~]##crmstatus
============
Lastupdated:
ThuJul1516:
00:
472010
Stack:
Heartbeat
CurrentDC:
drbd1.linuxfly.org(ffc0848a-f475-49be-814e-1b247389d819)-partitionwithquorum
Version:
1.0.9-89bd754939df5150de7cd76835f98fe90851b677
2Nodesconfigured,unknownexpectedvotes
2Resourcesconfigured.
============
Nodedrbd