Apr
20
[原]使用heartbeat配置双机互备集群
heartbeat v2支持多个节点、多个应用及不对称集群的功能。这里以一个比较简单的例子,就是集群托管两个应用:httpd和mysqld,实现双机互备功能,来讲解一下具体的配置工作。
一、系统架构
还是以前一篇日志的架构为基础,但增加了一个mysqld的应用。
mysqld的实际数据放在模拟的盘柜/dev/sdb1上,以便机器切换后能保证数据的完整和持续。
二、增加mysqld应用
前面关于authkeys和ha.cf等的设定工作就不再重复了,httpd的配置也与前面的相同。接下来要做的,就是添加mysqld服务的托管工作。
1、准备盘柜
把盘柜分别挂载到机器上,在其中一台机器上进行分区和格式化的工作。
然后分别在参与集群的两台服务器上挂载和测试,看看能否分别看到盘柜上的数据信息。(不能同时挂载和读写)
若测试通过后,则准备完成。
2、添加资源组
打开hb_gui配置工具,登陆后,添加一个资源组:
3、添加IP资源
4、添加挂载点资源
5、添加启动资源
这里可以选择ocf格式的mysql或lsb格式的mysqld,我的建议是选择lsb格式,虽然其提供的参数比较少,但因为与系统兼容性更好,启动应用一般不会有问题。
当然,您也可以根据实际情况修改/usr/lib/ocf/resource.d/heartbeat/mysql脚本中对应的参数路径,让mysql脚本可以顺利运行。
一句话就是,要用该脚本启动、关闭和监控应用是正常的!
6、添加资源监控
对stop失败时的处理:
7、添加位置限制条件
修改权重为正值,并添加表达式:
8、添加顺序限制条件
通常情况下,httpd和mysqld两个应用的启动是没有什么先后顺序的。但某些特殊应用,例如tomcat等,可能存在数据库连接池的情况。也就是说,数据库的启动必须先于tomcat的启动,否则tomcat会提示找不到可用于连接数据库的地址池错误。
在这里,我们就添加一个顺序限制条件,来模拟该项动作。
(定义mysqld组比httpd组先启动)
这是确认“应用”后的状态,可见httpd组会被先停止:
9、启动资源组
在两个节点上分别停止heartbeat服务:
然后再一起启动:
可以发现,mysqld组会比httpd组先启动:
然后全部启动完成:
同样的,您可以试试强制终止mysqld服务,会发现httpd组同样也会先停止,然后等待mysqld重启或切换到组中另一台服务器上后,httpd组才会重新启动,完全满足我们的要求。
当然,两组资源也是可以运行在同一台服务器上的,执行强制移动资源组的操作:
结果:
※ 注意,图中红色标记的属性是在手动执行上述的命令后自动创建的,其目的就是为了限制group_mysqld组不要运行在默认的hatest4上(也就是移走)。删除该位置限制后,资源组即可恢复。
下面是最终生成的cib.xml文件:
三、更复杂的案例
下面的链接提供了一个更复杂的高可用案例:
实现复合应用程序的高可用性
这里不单配置了多个集群,还涉及启动顺序、权限、quorum 服务器等内容。
内容打包下载:
一、系统架构
还是以前一篇日志的架构为基础,但增加了一个mysqld的应用。
引用
hatest3: 192.168.228.233,默认运行httpd;
hatest4: 192.168.228.234,默认运行mysqld;
httpd:192.168.228.235
mysqld: 192.168.228.236
共享盘柜: /dev/sdb1 —— /data
hatest4: 192.168.228.234,默认运行mysqld;
httpd:192.168.228.235
mysqld: 192.168.228.236
共享盘柜: /dev/sdb1 —— /data
mysqld的实际数据放在模拟的盘柜/dev/sdb1上,以便机器切换后能保证数据的完整和持续。
二、增加mysqld应用
前面关于authkeys和ha.cf等的设定工作就不再重复了,httpd的配置也与前面的相同。接下来要做的,就是添加mysqld服务的托管工作。
1、准备盘柜
把盘柜分别挂载到机器上,在其中一台机器上进行分区和格式化的工作。
然后分别在参与集群的两台服务器上挂载和测试,看看能否分别看到盘柜上的数据信息。(不能同时挂载和读写)
若测试通过后,则准备完成。
2、添加资源组
打开hb_gui配置工具,登陆后,添加一个资源组:
3、添加IP资源
4、添加挂载点资源
5、添加启动资源
这里可以选择ocf格式的mysql或lsb格式的mysqld,我的建议是选择lsb格式,虽然其提供的参数比较少,但因为与系统兼容性更好,启动应用一般不会有问题。
当然,您也可以根据实际情况修改/usr/lib/ocf/resource.d/heartbeat/mysql脚本中对应的参数路径,让mysql脚本可以顺利运行。
一句话就是,要用该脚本启动、关闭和监控应用是正常的!
6、添加资源监控
对stop失败时的处理:
7、添加位置限制条件
修改权重为正值,并添加表达式:
8、添加顺序限制条件
通常情况下,httpd和mysqld两个应用的启动是没有什么先后顺序的。但某些特殊应用,例如tomcat等,可能存在数据库连接池的情况。也就是说,数据库的启动必须先于tomcat的启动,否则tomcat会提示找不到可用于连接数据库的地址池错误。
在这里,我们就添加一个顺序限制条件,来模拟该项动作。
(定义mysqld组比httpd组先启动)
这是确认“应用”后的状态,可见httpd组会被先停止:
9、启动资源组
在两个节点上分别停止heartbeat服务:
# service heartbeat stop
然后再一起启动:
# service heartbeat start
可以发现,mysqld组会比httpd组先启动:
然后全部启动完成:
同样的,您可以试试强制终止mysqld服务,会发现httpd组同样也会先停止,然后等待mysqld重启或切换到组中另一台服务器上后,httpd组才会重新启动,完全满足我们的要求。
当然,两组资源也是可以运行在同一台服务器上的,执行强制移动资源组的操作:
# crm_resource -M -r group_mysqld
结果:
※ 注意,图中红色标记的属性是在手动执行上述的命令后自动创建的,其目的就是为了限制group_mysqld组不要运行在默认的hatest4上(也就是移走)。删除该位置限制后,资源组即可恢复。
下面是最终生成的cib.xml文件:
下载文件
三、更复杂的案例
下面的链接提供了一个更复杂的高可用案例:
实现复合应用程序的高可用性
这里不单配置了多个集群,还涉及启动顺序、权限、quorum 服务器等内容。
内容打包下载:
下载文件
kevinbin
2010/09/27 16:42
请教个问题 在hb2.x下 关闭auto failback 就是说 当一个节点down后切换到另外一个,而这个节点起来后并不会切换回来。能邮箱联系下我么 谢谢了
linuxing 回复于 2010/09/28 23:32
可以通过emos#linuxfly.org联系我。
分页: 1/1 1