本文与之前构建Heartbeat 2.1.3 GUI+DRBD+Oracle 10g 双机互备集群一文唯一的差别,是用Heartbeat 3.0.3替换原来的Heartbeat 2.1.3,其他系统环境保持不变。
一、系统环境
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实例)
二、安装Heartbeat 3.0.3
这里将使用我自行编译的rpm 包,通过yum来安装。
1、配置yum 环境
假设把压缩包解压到/root/rpms 目录下。然后在/etc/yum.repos.d中创建以下文件:
[heartbeat]
name=Heartbeat 3
baseurl=file:///root/rpms
enabled=1
2、安装
先卸载旧的包:
# rpm -e `rpm -qa|grep openais`
然后用yum安装:
※ ldirectord 用于LVS环境,若您不需要,可不安装
三、配置Heartbeat 3
实际上,Heartbeat 3 与 2.x 的配置差别并不大,很多内容都是相通的。
1、配置authkeys
这里我用随机数来获得密钥:
# cat authkeys
auth 1
1 sha1 0366577bdaed36f08b5f1c29431812dc
※ 注意,authkeys 的权限必须是600
2、配置ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
initdead 30
udpport 694
mcast eth0 239.0.0.1 694 1 0 # 使用多播方式进行相互通信
auto_failback on
node drbd1.linuxfly.org
node drbd2.linuxfly.org
compression bz2
compression_threshold 2
crm respawn
# 以下两行是pacemaker-mgmt提供的hb_gui 连接所必须的,2.1.4时没有
apiauth mgmtd uid=root
# 注意,下面文件的路径不能有错(可查询pacemaker-mgmt包),并且一定是可执行文件
respawn root /usr/lib64/heartbeat/mgmtd -v
两文件保存后,同步到另一节点上:
3、启动heartbeat
在两节点上启动heartbeat 3:
四、pacemaker(CRM)
pacemaker是heartbeat项目将原有的crm组件独立出来形成的项目(当然,除了Heartbeat外,还支持OpenAIS),它在Heartbeat3集群中的角色就是CRM(其实如今CRMd也只是pacemaker的一个部分)。只有heartbeat不能完成任何工作,packemaker负责整个集群资源的定义、调度,是集群的核心内容。
简单而言,整个集群的运行情况是这样的:heartbeat确保节点之间通信;packemaker确定集群拥有那些资源,根据服务器的性能状态、资源的约束关系确定资源在哪一个节点上运行;LRM(lrm程序包含在cluster-glue中)按照CRM的要求启动相应的资源,并将资源的状态返回给pacemaker;pacemaker根据LRM的返回决定下一步的动作。
pacemaker提供crm shell 工具,而pacemaker-mgmt和pacemaker-mgmt-client则提供了hb_gui 图形工具。
1、设定用户
为可以使用hb_gui 图形工具,需要设定一个用户。该用户可以是默认的hacluster,可以是属于haclient组的用户:
# passwd linuxing
进入Xwin后,即可通过hb_bui 命令打开图形的配置和管理工具:
关闭STONITH支持
默认的情况下pacemaker中启用了stonith,但是我们实际部署集群时可能一般都不会用到stonith资源。当启用了stonith而集群中又没有stonith资源时,集群中的资源都是无法启动的。在启动资源时会报错:
Jul 15 02:01:19 drbd1 mgmtd: [25127]: ERROR: unpack_resources: Either configure some or disable STONITH with the stonith-enabled option
Jul 15 02:01:19 drbd1 mgmtd: [25127]: ERROR: unpack_resources: NOTE: Clusters with shared data need STONITH to ensure data integrity
解决办法,就是把stonith-enabled选项禁用。
a、crm shell 方式
在pacemaker 包中提供crm shell 方式。
其中,crm 是一个非常友好的,同时支持交互和非交互两种模式的集成命令;此外,还有一些按功能划分的独立命令,例如:crm_mon、crm_resource、cibadmin等(可参考heartbeat 2.x)。
下面两条命令都能关闭STONITH:
# crm configure property stonith-enabled="false"
若要进入crm 的交互模式,可直接运行crm 即可:
crm(live)#
在该环境下,敲入help 可获取帮助信息。敲入对应的命令,可进入下一层菜单,用cd、或end、up都可以返回上一层,exit 退出。
※ 注意,独立的管理命令及非交互模式下的crm,在输入命令后会马上生效;而交互默认下的crm,必须手动用commit 命令提交后,配置才能生效。因crm 使用方便,在管理时经常使用。
b、hb_gui 方式
这是在Xwin下面的GUI 管理方式,从heartbeat 2.x就已经提供。在heartbeat 3中必须独立安装pacemaker-mgmt和pacemaker-mgmt-client才能用到,并且,需要在ha.cf中打开mgmtd 支持。
以关闭STONITH为例,可在下面的窗口中修改:
hb_gui 的设定,在点击“应用”或“确认”后会马上生效。
五、使用pacemaker进行配置
为方便说明,我将以crm 命令方式讲解,当然,同样的,你也可以用hb_gui 来实现。
1、清空旧配置文件
执行:
或者以crm 交互方式提交:
crm(live)# configure
crm(live)configure# erase
crm(live)configure# commit
crm(live)configure# exit
bye
2、关闭quorum
pacemaker中有quorum的概念,即集群中必须有一半的节点处于online的状态,则集群被认为是have quorum(可以认为是达到合法节点数要求)。如果少于一半的节点在线,那么pacemaker认为集群达不到节点数要求,从而拒绝启动集群中的资源。但是这种策略对于2个节点的集群明显是不合理的,所以就会发生当2个节点的集群其中一个节点失效时所有的集群都无法启动的情况。
同样的,也关闭STONITH,执行:
# crm configure property stonith-enabled="false"
这是当前的配置情况:
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
如构建Heartbeat 2.1.3 GUI+DRBD+Oracle 10g 双机互备集群一文中提到的一样,把DRBD设置为主备资源,其他oracle资源放在同一个组里面,并通过“顺序”、“协同”等限制条件让两资源配合运行。根据监控的情况,加入start 超时、monitor 间隔时间等操作。
进入crm 交互模式:
crm(live)configure#
然后在configure状态下输入以下内容:
params drbd_resource=”oradata” \
op monitor interval=”15s”
primitive fs_oracle ocf:heartbeat:Filesystem \
params device=”/dev/drbd/by-res/oradata” directory=”/oradata” fstype=”ext3″
primitive ip_oracle ocf:heartbeat:IPaddr2 \
params ip=”192.168.228.136″ nic=”eth0″ cidr_netmask=”24″
primitive oracle_instant ocf:heartbeat:oracle \
op monitor interval=”120″ timeout=”30″ \
op start interval=”0″ timeout=”120″ \
params sid=”orcl”
primitive oracle_lsnrctl ocf:heartbeat:oralsnr \
params sid=”orcl” \
operations $id=”oracle_lsnrctl-operations” \
op monitor interval=”10″ timeout=”30″
group group_oracle ip_oracle fs_oracle oracle_lsnrctl oracle_instant \
meta target-role=”Started” is-managed=”true”
ms ms_drbd_oracle drbd_oracle \
meta master-max=”1″ master-node-max=”1″ \
clone-max=”2″ clone-node-max=”1″ notify=”true”
colocation oracle_on_drbd inf: group_oracle ms_drbd_oracle:Master
order oracle_after_drbd inf: ms_drbd_oracle:promote group_oracle:start
最后用commit 提交即可。
※ 说明:
b、IP的设定RA,用ocf:heartbeat:IPaddr2,其用ip 命令设定虚拟IP,虚拟IP生效后,用ifconfig命令看不到,可用ip addr 查看;
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资源组
配置提交后,两资源会自动运行(根据全局配置,有延迟),也可手动启动:
5、查看状态:
============
Last updated: Thu Jul 15 15:39:20 2010
Stack: Heartbeat
Current DC: drbd1.linuxfly.org (ffc0848a-f475-49be-814e-1b247389d819) – partition with quorum
Version: 1.0.9-89bd754939df5150de7cd76835f98fe90851b677
2 Nodes configured, unknown expected votes
2 Resources configured.
============
Online: [ drbd1.linuxfly.org drbd2.linuxfly.org ]
Resource Group: group_oracle
ip_oracle (ocf::heartbeat:IPaddr2): Started drbd1.linuxfly.org
fs_oracle (ocf::heartbeat:Filesystem): Started drbd1.linuxfly.org
oracle_lsnrctl (ocf::heartbeat:oralsnr): Started drbd1.linuxfly.org
oracle_instant (ocf::heartbeat:oracle): Started drbd1.linuxfly.org
Master/Slave Set: ms_drbd_oracle
Masters: [ drbd1.linuxfly.org ]
Slaves: [ drbd2.linuxfly.org ]
图形下的状态:
※ 注意:
因为使用的是IPaddr2的RA,虚拟IP地址用ifconfig命令是看不到的,可用ip addr查看:
1: lo:
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0:
link/ether 00:50:56:85:47:4f brd ff:ff:ff:ff:ff:ff
inet 192.168.228.133/24 brd 192.168.228.255 scope global eth0
inet 192.168.228.136/24 brd 192.168.228.255 scope global secondary eth0
inet6 fe80::250:56ff:fe85:474f/64 scope link
valid_lft forever preferred_lft forever
3: sit0:
link/sit 0.0.0.0 brd 0.0.0.0
6、手动切换
执行:
状态:
============
Last updated: Thu Jul 15 15:45:03 2010
Stack: Heartbeat
Current DC: drbd1.linuxfly.org (ffc0848a-f475-49be-814e-1b247389d819) – partition with quorum
Version: 1.0.9-89bd754939df5150de7cd76835f98fe90851b677
2 Nodes configured, unknown expected votes
2 Resources configured.
============
Online: [ drbd1.linuxfly.org drbd2.linuxfly.org ]
Resource Group: group_oracle
ip_oracle (ocf::heartbeat:IPaddr2): Started drbd2.linuxfly.org
fs_oracle (ocf::heartbeat:Filesystem): Started drbd2.linuxfly.org
oracle_lsnrctl (ocf::heartbeat:oralsnr): Started drbd2.linuxfly.org
oracle_instant (ocf::heartbeat:oracle): Started drbd2.linuxfly.org
Master/Slave Set: ms_drbd_oracle
Masters: [ drbd2.linuxfly.org ]
Slaves: [ drbd1.linuxfly.org ]
※ 注意:migrate的动作会添加一条位置限制cli-standby-group_oracle,因此,当备机发生问题时,不会自动返回到主机上。要解决该问题,需要把位置限制删掉。
执行un-migrate操作:
这里的migrate和move、unmigrate和unmove是同义命令。
7、监控测试
可以尝试以oracle用户执行lsnrctl stop停止Oracle监听服务,从后台日志中,会发现monitor的报错信息,自动重新激活整个group_oracle组资源。
8、维护
有时候,我们需要对当前主机进行维护,这时,可先把资源迁移到备机上,然后把主机设置为“非管理”的standby状态:
[root@drbd1 ~]# crm node standby `uname -n`
[root@drbd1 ~]# # crm status
============
Last updated: Thu Jul 15 16:00:47 2010
Stack: Heartbeat
Current DC: drbd1.linuxfly.org (ffc0848a-f475-49be-814e-1b247389d819) – partition with quorum
Version: 1.0.9-89bd754939df5150de7cd76835f98fe90851b677
2 Nodes configured, unknown expected votes
2 Resources configured.
============
Node drbd1.linuxfly.org (ffc0848a-f475-49be-814e-1b247389d819): standby
Online: [ drbd2.linuxfly.org ]
Resource Group: group_oracle
ip_oracle (ocf::heartbeat:IPaddr2): Started drbd2.linuxfly.org
fs_oracle (ocf::heartbeat:Filesystem): Started drbd2.linuxfly.org
oracle_lsnrctl (ocf::heartbeat:oralsnr): Started drbd2.linuxfly.org
oracle_instant (ocf::heartbeat:oracle): Started drbd2.linuxfly.org
Master/Slave Set: ms_drbd_oracle
Masters: [ drbd2.linuxfly.org ]
Stopped: [ drbd_oracle:0 ]
[root@drbd1 ~]# crm node online `uname -n`