Archive for the ‘heartbeat’ Category.

heartbeat替换集群中的一台主机

今天完成了替换双master其中一台主机的任务。特将具体过程记录下来以供以后参考。
背景描述:
a,b互为主备,a提供应用访问。c是a的备机,画一个最挫的图如下
a<->b
|
c
现在,我想用c替换掉b。
a和b是用heartbeat来做HA的,要求在替换主机过程中,应用不能停,对应用必须要透明。
方案:
我们采用修改b的IP,并停掉b。然后把c的hostname,IP修改为b的方法,顶替b来避免对应用的影响
1、停止主机a的slave。这个是为了避免c替换掉b的IP起来的时候,a从错误的位置开始复制binlog。因为b和c的binlog不可能为同一个位置
2、b修改Ip并停机。修改/etc/sysconfig/network-scripts/ifcfg-bond0中的IP;/etc/init.d/network restart重启网络;poweroff关机
3、用c顶替b。
a)修改主机名。利用hostname命令设置主机名;修改/etc/hosts中的节点名称;修改/etc/sysconfig/network中的主机名
b)修改IP.同2.
c)修改heartbeat。这里是比较关键的地方,经过详细测试得出:
一:如果是全新安装的机器,需要从主机a中拷贝ha.cf,authkey,cib.xml以及通过crm_uuid -w 生成正确的uuid
二:如果是从a拷贝过来的heartbeat,那么需要删除(我的安装目录为/usr/heartbeat):
/usr/heartbeat/var/lib/heartbeat/hostcache
/usr/heartbeat/var/lib/heartbeat/hb_uuid
/usr/heartbeat/var/lib/heartbeat/hb_generation
hostcache为缓存主备机节点以及uuid的地方,
hb_uuid为本节点的uuid,
hb_generation为主备机协商时握手的数值。
hb_uuid和hb_generation如果顶替的时候跟之前的节点不一样,那么主机就会报:heartbeat[11165]: 2011/03/21_18:19:40 ERROR: should_drop_message: attempted replay attack [jyl-idle-db3b]? [gen = 1245825415, curgen = 1245825416]错误。
hb_uuid需要用crm_uuid -w 来生成,不能由heartbeat默认生成。从主机a的/usr/heartbeat/var/lib/heartbeat/hostcache获得b机器的uuid,然后crm_uuid -w uuid生成。
具体的信息可以参照下面的介绍:
4.5.2. Heartbeat
The seven-step guide to replacing an existing cluster node:
Make sure the old node is completely stopped
Give the new machine the same hostname as the old one
Go to an active cluster node and look up the UUID for the old node in /var/lib/heartbeat/hostcache
Install the cluster software
Copy ha.cf and authkeys to the new node
On the new node, populate it’s UUID using crm_uuid -w and the UUID from step 2
Start the new cluster node
http://www.clusterlabs.org/doc/en-US/Pacemaker/1.0/html/Pacemaker_Explained/s-replace-heartbeat.html
4、主机a,change master 搭建c到a的复制(这里可以随意的在c上show master status获得位置,因为c是备机,它自己没有应用访问生成binlog)
5、启用c机器的heartbeat和MySQL。检查crm_resource的输出
may your success