Jul 15

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

linuxing , 21:42 , 网络服务 » HA , 评论(5) , 引用(0) , 阅读(28237) , Via 本站原创 | |
    本文与之前[原]构建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 命令打开图形的配置和管理工具:
点击在新窗口中浏览此图片
点击在新窗口中浏览此图片
crm shell 不需要特定的用户,主要管理员登陆到机器上即可使用。

2、使用不同的管理工具
pacemaker 既然提供多种管理工具,例如我这里提到的crm shell 、hb_gui 等,它们的作用是相同的,在其官网上还提供了其他,如基于Ajax web方式的管理工具等,可从这里获得源码包。
下面,我以修改其中一个属性为例简单说明一下:

关闭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为例,可在下面的窗口中修改:
点击在新窗口中浏览此图片
在pacemaker-mgmt 提供了新的管理界面,并且可以跨机器登陆管理。远程管理时,必须使用远端机器上的hacluster用户,或属于haclinet组的管理账号(heartbeat 2.x 只能在本机127.0.0.1上登陆管理)。另外,若当前连接的是本地,而手动把heartbeat 服务关闭时,hb_gui 会通过相同的用户名和密码尝试连接到集群节点中的其他机器上,继续追踪集群状态。
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 ]

点击在新窗口中浏览此图片
之后,就可以把主机上的heartbeat服务关掉,甚至关闭该机器或进行维护的工作。
维护完毕,可以重新online:

[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

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


六、参考文档
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 版:
Tags: , ,
sunmuyuan
2011/06/18 15:31
楼主 你好 我在配置DRBD+Oracle,运行如下命令

primitive drbd_oracle ocf:linbit:drbd \
        params drbd_resource="oradata" \
        op monitor interval="15s"

会出现

ERROR: ocf:linbit:drbd: could not parse meta-data:
ERROR: ocf:linbit:drbd: no such resource agent

不知道这是什么原因,资源代理只的是什么
link Email
2011/03/15 22:35
你好,我想问你的是,你说浮动 IP 用 ifconfig 看不到必须要用ip addr 看到。那设置的时候不是用 ifconfig 设置的吗?为什么用 ifconfig 看不到呢?
linuxing 回复于 2011/03/18 17:08
没仔细看源码,但应该不是用ifconfig设置虚拟IP的。ip命令也可以设置虚拟IP的,两种方式写入核心的过程有点不同。具体可以看看Resource的源码就知道了。另外,可以试试用ifconfig -a看看有没有发现虚拟IP。
ufo
2010/09/21 12:08
多谢答复,还有现在的需求是监控节点上有两个mysql,我不知2.14可以不?我看官网介绍,V3版本是可以的,但V3版本安装总是不顺利!
linuxing 回复于 2010/09/21 13:51
实际上,2.1.4与3.0.3并没有太大的差别,3.0.3可理解为把各个组件拆分为几个独立的项目而已,部分监控Agent也是通用的,因此,2.1.14是可以监控两个以上的资源的。如果你要监控两个资源,并且是独立的,那最好是建立两个组,否则,可能需要修改Agnet的脚本。
ufo
2010/09/21 11:50
你好,非常感谢您的答复,我想问的是,如果一节点的服务死掉,另一节点需接管服务,但资源在光纤存储上,他能够自己把磁盘当资源一起挂载在令一磁盘上吗?需要监控的资源除了mysql外,还需要什么?

如果不麻烦的话,能与我联系吗?不胜感激!
QQ:13319085
Email: zhangbouu@gmail.com
linuxing 回复于 2010/09/21 11:59
这个是FileSystem Agent负责的事情,以mysql为例,一般是建立一个组,然后添加IPAddr2(负责浮动IP设定)、 FileSystem(挂载分区)、Mysql(负责启动Mysql)这几个Agent。当启动这个组时,就会自动自行这些步骤,有问题的时候,切换到另一台机器上也一样的。
可通过emos#linuxfly.org 联系我,谢谢。
ufo
2010/09/19 11:20
资源挂载在光纤存储上,应该监控什么呢?
linuxing 回复于 2010/09/20 09:47
你可以试试用LinuxSCSI Agent。但一般在共享存储的情况下,我们会用物理冗余的方式来确保存储的可用,例如绑定的HBA卡等。单盘柜的情况下,除非盘柜本身出现问题,否则一般可认为存储是稳定的。若盘柜坏了,切换也没意义咯。
分页: 1/1 第一页 1 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]