[原]构建Heartbeat 3.0.3 GUI+DRBD+Oracle 10g 双机互备集群

    本文与之前构建Heartbeat 2.1.3 GUI+DRBD+Oracle 10g 双机互备集群一文唯一的差别,是用Heartbeat 3.0.3替换原来的Heartbeat 2.1.3,其他系统环境保持不变。

一、系统环境

引用
操作系统:Asianux 3.0 SP2 for x86_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实例)

二、安装Heartbeat 3.0.3
这里将使用我自行编译的rpm 包,通过yum来安装。
1、配置yum 环境
假设把压缩包解压到/root/rpms 目录下。然后在/etc/yum.repos.d中创建以下文件:

引用
# cat heartbeat.repo
[heartbeat]
name=Heartbeat 3
baseurl=file:///root/rpms
enabled=1

2、安装
先卸载旧的包:

# rpm -e `rpm -qa|grep heartbeat`
# rpm -e `rpm -qa|grep openais`

然后用yum安装:

# yum install pacemaker corosync heartbeat ldirectord pacemaker-mgmt pacemaker-mgmt-client ldirectord

※ ldirectord 用于LVS环境,若您不需要,可不安装
三、配置Heartbeat 3
实际上,Heartbeat 3 与 2.x 的配置差别并不大,很多内容都是相通的。
1、配置authkeys
这里我用随机数来获得密钥:

引用
# (echo -ne “auth 1\n1 sha1 “;dd if=/dev/urandom bs=512 count=1 | openssl md5) > authkeys
# cat authkeys
auth 1
1 sha1 0366577bdaed36f08b5f1c29431812dc

※ 注意,authkeys 的权限必须是600

2、配置ha.cf

引用
# grep -v ‘^#’ 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

两文件保存后,同步到另一节点上:

# /usr/share/heartbeat/ha_propagate

3、启动heartbeat
在两节点上启动heartbeat 3:

# service heartbeat start

四、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组的用户:

# useradd linuxing -G haclient
# passwd linuxing

进入Xwin后,即可通过hb_bui 命令打开图形的配置和管理工具:
点击在新窗口中浏览此图片关闭STONITH支持
默认的情况下pacemaker中启用了stonith,但是我们实际部署集群时可能一般都不会用到stonith资源。当启用了stonith而集群中又没有stonith资源时,集群中的资源都是无法启动的。在启动资源时会报错:

引用
Jul 15 02:01:19 drbd1 mgmtd: [25127]: ERROR: unpack_resources: Resource start-up disabled since no STONITH resources have been defined
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_attribute -t crm_config -n stonith-enabled -v false
# crm configure property stonith-enabled="false"

若要进入crm 的交互模式,可直接运行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 configure erase

或者以crm 交互方式提交:

引用
# 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 no-quorum-policy=ignore
# crm configure property stonith-enabled="false"

这是当前的配置情况:

引用
# crm configure show
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 configure
crm(live)configure#

然后在configure状态下输入以下内容:

引用
primitive drbd_oracle ocf:linbit:drbd \
        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 提交即可。
※ 说明:

引用
a、根据DRBD官网的资料,ocf:heartbeat:drbd 已经被丢弃,不建议使用,故用ocf:linbit:drbd 代替;
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资源组
配置提交后,两资源会自动运行(根据全局配置,有延迟),也可手动启动:

# crm resource start group_oracle

5、查看状态:

引用
# crm status
============
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查看:

引用
# ip addr
1: lo: mtu 16436 qdisc noqueue
    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: mtu 1500 qdisc pfifo_fast qlen 1000
    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: mtu 1480 qdisc noop
    link/sit 0.0.0.0 brd 0.0.0.0

6、手动切换
执行:

# crm resource migrate group_oracle drbd2.linuxfly.org

状态:

引用
# crm status
============
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操作:

# crm resource unmigrate group_oracle

这里的migrate和move、unmigrate和unmove是同义命令。

7、监控测试
可以尝试以oracle用户执行lsnrctl stop停止Oracle监听服务,从后台日志中,会发现monitor的报错信息,自动重新激活整个group_oracle组资源。

8、维护
有时候,我们需要对当前主机进行维护,这时,可先把资源迁移到备机上,然后把主机设置为“非管理”的standby状态:

引用
[root@drbd1 ~]# crm resource migrate group_oracle
[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`

9、配置文件
可通过下面的命令把当前的配置文件导出为命令文件drbd_oracle_finish_cli:

# crm configure save drbd_oracle_finish_cli

或反向导入到CRM中:

# crm configure load drbd_oracle_finish_cli

以下是我当前的配置文件:

[原]构建Heartbeat 3.0.3 GUI+DRBD+Oracle 10g 双机互备集群下载文件
点击这里下载文件

六、参考文档
Using DRBD in Pacemaker clusters
Using DRBD with Heartbeat v2 in CRM mode
heartbeat2.x-pacemaker Configuration Explained翻译笔记02(关于shadow功能的介绍)
官方Heartbeat 3.0 User’s Guide
离线pdf 版:

[原]构建Heartbeat 3.0.3 GUI+DRBD+Oracle 10g 双机互备集群下载文件
点击这里下载文件
使用SNMP监控Heartbeat状态
搭建Master-Master Mysql Replication 集群
在Windows下使用红旗HA Cluster  配置工具
Heartbeat 3.0.3 介绍及rpm

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/104195.html

(0)
上一篇 2021年8月25日
下一篇 2021年8月25日

相关推荐

发表回复

登录后才能评论