DRBD是一种块设备的实现,与heartbeat的搭配,被广泛用于linux下的高可用(HA)方案中,本文是介绍如何在已经含有数据的分区或硬盘上搭建drbdheartbeat高可用的mysql服务。

在对含有数据的分区或硬盘建立drbd高可用的时候,请确认以下三件事。

1,所在分区或硬盘可以扩容,比如使用lvm
2,所在分区或硬盘上的文件系统支持shrinking
3,如果以上两条都不能满足,请使用外部metadata

这里使用的是第一种方法,具体请接着往下看

测试环境:

Vmware6.0
             linux01 192.168.211.128  /dev/VG/data分区,存放数据库文件,320M
             linux02 192.168.211.129 /dev/VG/data分区,存放数据库文件,320M

mysql数据路径/data/mysql
因为没有合适的mysql数据所以使用wordpress的数据,wordpress2.8.5
nginx version: nginx/0.8.20
PHP 5.2.11 (cli) (built: Oct 23 2009 21:01:40)

一,准备工作

linux01上完成的内容

1,heartbeat的安装

yum –y install heartbeat heartbeat-devel

2,drbd的安装

tar zxvf drbd-8.3.4.tar.gz
cd drbd-8.3.4
make all
make install
make install-tools

3,准备一个含有mysql数据的硬盘分区

这里没有现成的mysql数据,就使用wordpress的数据库内容了,mysql的版本不限,可以是二进制解压用的,也可以是源码编译的,蚊子这里是用的二进制的,操作如下

清空分区内容
[root@linux01 ~]# mkfs.ext3 /dev/VG/data

挂载分区
[root@linux01 ~]# mount /dev/VG/data  /data/

初始化数据库

[root@linux01 mysql]# /usr/local/mysql/scripts/mysql_install_db –user=mysql –datadir=/data/mysql
Installing MySQL system tables…
091025 19:33:53 [Warning] option ‘thread_stack’: unsigned value 65536 adjusted to 131072
OK
Filling help tables…
091025 19:33:53 [Warning] option ‘thread_stack’: unsigned value 65536 adjusted to 131072
OK

在此处安装wordpress,将wordpress数据库安装到blog库中,如下
[root@linux01 mysql]# ll /data/mysql/
total 20572
drwx—— 2 mysql mysql     4096 Oct 27 17:26 blog
-rw-rw—- 1 mysql mysql 10485760 Oct 27 17:25 ibdata1
-rw-rw—- 1 mysql mysql  5242880 Oct 27 17:25 ib_logfile0
-rw-rw—- 1 mysql mysql  5242880 Oct 27 17:25 ib_logfile1
-rw-rw—- 1 mysql root      1247 Oct 27 17:25 linux01.err
-rw-rw—- 1 mysql mysql        5 Oct 27 17:25 linux01.pid
drwx—— 2 mysql root      4096 Oct 27 17:25 mysql
drwx—— 2 mysql root      4096 Oct 27 17:25 test

卸载/data分区
[root@linux01 ~]# umount /data/

4,备份分区前1M空间

[root@linux01 mysql]# dd if=/dev/VG/data of=/root/back bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.049084 seconds, 21.4 MB/s

5,计算metadata容量并扩展分区,计算近似值如下公式

计算出来的近似值是1M左右,因为环境的lvm最小PE-size就是32Mb,所以扩展一个pe就行了

lvextend –l +1 /dev/VG/data

6,清空分区前1M空间

[root@linux01 mysql]# dd if=/dev/zero of=/dev/VG/data bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.0131647 seconds, 79.7 MB/s

7,创建drbd.conf文件,内容如下

  1. global {  
  2.     usage-count yes;   
  3. }  
  4.  
  5. common {   
  6.   syncer { rate 10M; }   
  7. }  
  8.  
  9. resource r0 {  
  10.   protocol C;  
  11.  
  12.   handlers {   
  13.     pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";  
  14.     pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";  
  15.     local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";  
  16.     fence-peer "/usr/lib/heartbeat/drbd-peer-outdater -t 5";  
  17.   }  
  18.  
  19.   disk {   
  20.     on-io-error   detach;   
  21.   }  
  22.  
  23.   net {  
  24.  
  25.     after-sb-0pri disconnect;  
  26.     after-sb-1pri disconnect;  
  27.     after-sb-2pri disconnect;  
  28.     rr-conflict disconnect;  
  29.   }  
  30.  
  31.   syncer {   
  32.     rate 10M;   
  33.     al-extents 257;  
  34.   }  
  35.  
  36.   on linux01 {   
  37.     device     /dev/drbd0;   
  38.     disk       /dev/VG/data;   
  39.     address    192.168.211.128:7788;   
  40.     flexible-meta-disk  internal;   
  41.   }  
  42.  
  43.   on linux02 {   
  44.     device    /dev/drbd0;   
  45.     disk      /dev/VG/data;   
  46.     address   192.168.211.129:7788;   
  47.     meta-disk internal;   
  48.   }   
8,初始化drbd磁盘

[root@linux01 mysql]# drbdadm create-md r0
Writing meta data…
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
success

[root@linux01 mysql]# /etc/init.d/drbd start
Starting DRBD resources: [ d(r0) s(r0) n(r0) ].

确认drbd是否启动
[root@linux01 mysql]# cat /proc/drbd
version: 8.3.4 (api:88/proto:86-91)
GIT-hash: 70a645ae080411c87b4482a135847d69dc90a6a2 build by root@linux01, 2009-10-22 21:01:53
0: cs:WFConnection ro:Secondary/Unknown ds:UpToDate/DUnknown C r—-
    ns:0 nr:589768 dw:589768 dr:0 al:0 bm:36 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

将当前机器上的drbd设为primary
[root@linux01 mysql]# drbdsetup /dev/drbd0 primary –o

查看当前状态

[root@linux01 mysql]# cat /proc/drbd
version: 8.3.4 (api:88/proto:86-91)
GIT-hash: 70a645ae080411c87b4482a135847d69dc90a6a2 build by root@linux01, 2009-10-22 21:01:53
0: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r—-
    ns:0 nr:589768 dw:589768 dr:0 al:0 bm:36 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

9,恢复分区第一分区,这也是保证数据还在的关键一步

[root@linux01 mysql]# dd if=/root/back of=/dev/drbd0
2048+0 records in
2048+0 records out
1048576 bytes (1.0 MB) copied, 0.113655 seconds, 9.2 MB/s

10,重启drbd服务

[root@linux01 mysql]# /etc/init.d/drbd restart
Restarting all DRBD resources: .

到此为止,linux01上的准备工作就做好了,下面看下linux02上的操作

因为linux02是备份用的,基本不用怎么设置,如果分区里面含有数据的话,就直接执行下面的操作就行

1,heartbeat的安装

yum –y install heartbeat heartbeat-devel

2,drbd的安装

tar zxvf drbd-8.3.4.tar.gz
cd drbd-8.3.4
make all
make install
make install-tools

3,初始化drbd

拷贝linux01上/etc/drbd.conf到linux02上的/etc下

[root@linux02 ~]# dd if=/dev/zero of=/dev/VG/data bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.0141756 seconds, 74.0 MB/s

扩展分区
[root@linux02 ~]# lvextend –l +1 /dev/VG/data

创建metadata
[root@linux02 ~]# drbdadm create-md r0
Writing meta data…
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
success

[root@linux02 ~]# /etc/init.d/drbd start        
Starting DRBD resources: [ d(r0) ].

查看一下状态

[root@linux02 ~]# cat /proc/drbd
version: 8.3.4 (api:88/proto:86-91)
GIT-hash: 70a645ae080411c87b4482a135847d69dc90a6a2 build by root@linux02, 2009-10-22 21:01:33
0: cs:SyncTarget ro:Secondary/Secondary ds:Inconsistent/UpToDate C r—-
    ns:0 nr:184320 dw:184320 dr:0 al:0 bm:11 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:405448
        [=====>..............] sync’ed: 32.0% (405448/589768)K
        finish: 0:00:34 speed: 11,696 (10,240) K/sec

现在两台机器上的准备工作都完毕了,进入到下面一个阶段

二,drbd,Heartbeat和mysql整合工作

两台机器上的公共操作

编辑ha.cf文件,内容如下

debugfile /var/log/ha-debug
logfacility     local0
keepalive 2
deadtime 5
warntime 10
initdead 10
ucast eth0 192.168.211.129    #在两台机器上的内容是不一样的,都是指向对方的ip地址
auto_failback on
node    linux01
node    linux02
ping 192.168.211.2
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster

编辑authkeys文件,内容如下

auth 1
1 crc

修改此文件权限为600

编辑haresources,内容如下

linux01 drbddisk::r0 Filesystem::/dev/drbd0::/data 192.168.211.120 mysqld

第一个字段是主机名,是uname -n得到的
第二个字段作用是当前主机设置为primary
第三个字段作用将/dev/drbd0 mount到/data目录上
第四个字段作用是启动VIP
第五个字段启动mysql进程

这个文件在启动的时候是由左往右启动,停止就是相反的由右往左停止。

分配权限:

chgrp haclient /sbin/drbdsetup
chmod o-x /sbin/drbdsetup
chmod u+s /sbin/drbdsetup
chgrp haclient /sbin/drbdmeta
chmod o-x /sbin/drbdmeta
chmod u+s /sbin/drbdmeta

三,启动测试阶段

到现在,全部配置就已经完成了,可以进行测试了

现在两台机器上都启动heartbeat,可以看到第一台机器的状态

VIP已经启动
eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:71:2E:11 
          inet addr:192.168.211.120  Bcast:192.168.211.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:169 Base address:0×2000

mysql已经顺利启动
2845 ?        S      0:00 /bin/sh ./bin/mysqld_safe –datadir=/data/mysql –pid-file=/data/mysql/linux01.pid
2945 ?        Sl     0:00 /usr/local/mysql/bin/mysqld –basedir=/usr/local/mysql –datadir=/data/mysql –user=mysql –log-error=/data/mysql/linux01.err –pid-file=/data/mysql/linux01.pid –socket=/tmp/mysql.sock –port=3306

drbd0设备mount上了
/dev/drbd0            567M   38M  501M   8% /data

这时停止linux01上的heartbeat,看下linux02上的状态

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:50:E4:62 
          inet addr:192.168.211.120  Bcast:192.168.211.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:169 Base address:0×2000

[root@linux02 ~]# ps ax|grep mysql|grep -v grep
2582 ?        S      0:00 /bin/sh ./bin/mysqld_safe –datadir=/data/mysql –pid-file=/data/mysql/linux02.pid
2682 ?        Sl     0:00 /usr/local/mysql/bin/mysqld –basedir=/usr/local/mysql –datadir=/data/mysql –user=mysql –log-error=/data/mysql/linux02.err –pid-file=/data/mysql/linux02.pid –socket=/tmp/mysql.sock –port=3306

[root@linux02 ~]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/VG-root    6919612   1866388   4696056  29% /
/dev/sda1               101086     12072     83795  13% /boot
tmpfs                   127772         0    127772   0% /dev/shm
/dev/drbd0              580540     38872    512180   8% /data

这时如果在linux02上也启动nginx的话,使用vip是可以正常访问wordpress的页面的,这里蚊子就不上图了。到此这篇文章就全部完成了,需要的朋友可以亲自去试试,切记,如果需要在正式环境中应用并保证原有数据存在,请做好相应的备份工作。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------  

mysql+drbd+heartbeat实现高可用性

一、简介

1,什么是DRBD
DRBD(Distributed Replicated Block Device),DRBD 号称是 "网络 RAID",开源软件,由 LINBIT 公司开发。
2,DRBD的主要功能
DRBD实际上是一种块设备的实现,主要被用于Linux平台下的高可用(HA)方案之中。他是有内核模块和相关程序而组成,通过网络通信来同步镜像整个设备,有点类似于一个网络RAID的功能。也就是说当你将数据写入本地的DRBD设备上的文件系统时,数据会同时被发送到网络中的另外一台主机之上,并以完全相同的形式记录在一个文件系统中(实际上文件系统的创建也是由DRBD的同步来实现的)。本地节点(主机)与远程节点(主机)的数据可以保证实时的同步,并保证IO的一致性。所以当本地节点的主机出现故障时,远程节点的主机上还会保留有一份完全相同的数据,可以继续使用,以达到高可用的目的。
3,DRBD的主要应用
如果主服务器宕机,造成的损失是不可估量的。要保证主服务器不间断服务,就需要对服务器实现冗余。在众多的实现服务器冗余的解决方案中,heartbeat为我们提供了廉价的、可伸缩的高可用集群方案。我们通过heartbeat + drbd在Linux下创建一个高可用(HA)的集群服务器,在高可用(HA)解决方案中使用DRBD的功能,可以代替使用一个共享盘阵存储设备。因为数据同时存在于本地主机和远程主机上,在遇到需要切换的时候,远程主机只需要使用它上面的那份备份数据,就可以继续提供服务了。
4,DRBD于mysql的关系
MySQL 与 LINBIT 达成了合作关系,大张旗鼓的搞了这个 "12 天 Scale-Out" 活动,也是这个商业合作驱动的吧。DRBD 助力 MySQL, 号称可以得到四个 9 的可靠性,这不低于任何一款商业数据库软件了。
DRBD 的出现的确对 MySQL 集群的可用性有很大提高。而且,有独到的特点,非常适合面向互联网的应用。因为是在存储层的数据块同步,很容易的做到应用层的 IO 负载均衡(备机承担一定的读压力),不但支持数据库失败接管,还能做到 IP 失败接管,接管时间小于 30 秒,真是穷人的绝佳集群解决方案。

二、配置安装

本文所提到试验环境为:
操作系统:
Red Hat Enterprise Linux AS release 4 (Nahant Update 4)
软件:
drbd-8.2.6.tar.gz
heartbeat-2.1.3-3.el4.centos
heartbeat-pils-2.1.3-3.el4.centos
heartbeat-stonith-2.1.3-3.el4.centos
mysql-5.1.26-rc-linux-i686-icc-glibc23.tar.gz
主机环境:
drbd 主机列表         IP 地址     主机名
主机1(primary)         192.168.1.241     drbd-1
主机2(secondary)     192.168.1.242    drbd-2   
另外,2个主机都预留一个空白的分区:/dev/sdb1,不需要创建任何文件系统。
1,编译与安装DRBD,heartbeat
在2台主从机器上都要安装DRBD
[root@drbd-1 ~] tar -xvzf drbd-8.2.6.tar.gz
[root@drbd-1 ~] cd drbd-8.2.6 && make && make rpm
[root@drbd-1 ~] cd dist/RPMS/i386                     
[root@drbd-1 ~] ls
drbd-8.2.6-3.i386.rpm
drbd-debuginfo-8.2.6-3.i386.rpm
drbd-km-2.6.9_42.EL-8.2.6-3.i386.rpm
[root@drbd-1 ~] rpm -ivh drbd-8.2.6-3.i386.rpm
[root@drbd-1 ~] rpm -ivh drbd-debuginfo-8.2.6-3.i386.rpm
[root@drbd-1 ~] rpm -ivh drbd-km-2.6.9_42.EL-8.2.6-3.i386.rpm
[root@drbd-1 ~] yum install heartbeat
yum升级安装的软件包下载保存在:/var/cache/yum/extras/packages
安装mysql就太简单了,这里就不废话了!
2,加载DRBD模块
[root@drbd-1 ~] modprobe drbd
[root@drbd-1 ~] lsmod |grep drbd
drbd                  242924  2
如果有,则表示成功了!!!
3,配置/etc/drbd.conf
编辑配置文件,2个主机上的内容一样,内容如下:

  1. #让linbit公司收集目前drbd的使用情况,yes为参加。  
  2. global {  
  3.   usage-count yes;  
  4. }  
  5. #drbd所管理的多个资源之间的common,主要是配置drbd的所有resource可以设置为相同的参数项,比如protocol,syncer等等.  
  6. common {  
  7.   syncer { rate 100M; }  
  8. }  
  9. #创建一个资源,名字叫”db”  
  10. resource db {  
  11.     #使用协议C.表示收到远程主机的写入确认后,则认为写入完成。  
  12.     protocol C;  
  13.     startup {   
  14.         wfc-timeout 0;   
  15.         degr-wfc-timeout 120;   
  16.     }  
  17.     #由于实验环境下两台服务器硬盘大小可能不同,所以需要设置drbd的大小。  
  18.     disk {   
  19.         on-io-error detach;  
  20.         size 6G;   
  21.     }  
  22.     net {  
  23.         max-buffers 2048;  
  24.         ko-count 4;  
  25.     }  
  26.     syncer {   
  27.         rate 100M;   
  28.     }  
  29.     #设定一个节点,分别以各自的主机名命名  
  30.     on drbd-1 {  
  31.         #设定资源设备/dev/drbd0 指向实际的物理分区 /dev/sdb1  
  32.         device /dev/drbd0;   
  33.         disk /dev/sdb1;    
  34.           
  35.         #设定监听地址以及端口  
  36.         address 192.168.1.241:8888;   
  37.         #设定元数据保存方式:可以用 internal(即保存在同一个物理分区下)  
  38.         #也可以保存在其他分区上  
  39.          meta-disk internal;   
  40.     }  
  41.     on drbd-2 {  
  42.         device /dev/drbd0;   
  43.         disk /dev/sdb1;      
  44.         address 192.168.1.242:8888;   
  45.         meta-disk internal;   
  46.     }  


4,启动drbd
准备启动之前,需要分别在2个主机上的 /dev/sdb1 分区上创建相应的元数据保存的数据块:
[root@drbd-1 ~] drbdadm create-md db
[root@drbd-2 ~] drbdadm create-md db
2次输入“yes”,如果出现下面的提示信息,表示成功
[root@drbd-1 /]# drbdadm create-md db
md_offset 8587153408
al_offset 8587120640
bm_offset 8586858496
Found ext3 filesystem which uses 6291456 kB
current configuration leaves usable 8385604 kB
==> This might destroy existing data!  wait forever)
To abort waiting enter 'yes' [  47]:
此时,2台机器的DRBD服务都起来了,检查进程是否存在:
[root@drbd-1 /]# ps aux | grep drbd
root      3758 14.5  0.0     0    0 ?        S    15:56   0:20 [drbd0_worker]
root      3762  9.6  0.0     0    0 ?        S    15:56   0:13 [drbd0_receiver]
root      3787  2.4  0.0     0    0 ?        S    15:56   0:03 [drbd0_asender]
root      3794  0.0  0.2   644  128 pts/0    R+   15:58   0:00 grep drbd
可以看到两个节点的进程都起来了,每个drbd设备会有三个进程:drbd0_worker是drbd0的主要进城,drbd0_asender是primary上drbd0的数据发送进程,drbd0_receiver是secondary上drbd0的数据接收进程。
看看刚启动后的drbd状态:
[root@drbd-1 /]# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by root@drbd-1, 2008-09-17 17:46:45
0: cs:Connected st:Secondary/Secondary ds:Inconsistent/Inconsistent C r---
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 oos:6291456
[root@drbd-2 /]# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by root@drbd-2, 2008-09-17 17:51:50
0: cs:Connected st:Secondary/Secondary ds:Inconsistent/Inconsistent C r---
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 oos:6291456
注意:这个时候,2台服务器都为从节点状态(st:Secondary/Secondary),因为还没有指定哪一台为主节点。
然后,设置启动的一个节点为主节点,我们设置drbd-1为主节点:
[root@drbd-1 /]#  drbdadm primary db
State change failed: (-2) Refusing to be Primary without at least one UpToDate disk
Command 'drbdsetup /dev/drbd0 primary' terminated with exit code 11
[root@drbd-1 /]# drbdsetup /dev/drbd0 primary -o
可以看到,第一次设置主节点时用 drbdadm 命令会失败,所以先用drbdsetup 来做,以后就可以用 drbdadm 了。
再次查看2台服务器的drbd状态:
[root@drbd-1 /]# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by root@drbd-1, 2008-09-17 17:46:45
0: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r---
    ns:3483280 nr:0 dw:0 dr:3491456 al:0 bm:212 lo:1 pe:8 ua:256 ap:0 oos:2808416
        [==========>.........] sync'ed: 55.5% (2742/6144)M
        finish: 0:11:24 speed: 4,084 (4,648) K/sec
[root@drbd-2 /]# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by root@drbd-2, 2008-09-17 17:51:50
0: cs:SyncTarget st:Secondary/Primary ds:Inconsistent/UpToDate C r---
    ns:0 nr:3556832 dw:3556832 dr:0 al:0 bm:217 lo:1 pe:2464 ua:0 ap:0 oos:2734624
        [==========>.........] sync'ed: 56.7% (2670/6144)M
        finish: 0:07:35 speed: 5,856 (4,128) K/sec
此时可以看到,已经开始同步数据了。设置完之后的第一次同步耗时比较长,因为需要把整个分区的数据全部同步一遍。
第一次同步完成之后,就可以对drbd的设备创建文件系统了:
[root@drbd-1 /]# mkfs.ext3 /dev/drbd0
将文件系统mount上:
[root@drbd-1 /]# mount /dev/drbd0 /drbddata
在主节点上测试数据写入:
[root@drbd-1 drbddata]# ll
total 4
drwx------  4 mysql root 4096 Oct 13 16:29 mysql
然后,我们把primary降级成secondary,把secondary提升成primary:
[root@drbd-1 /]# umount /drbddata/
[root@drbd-1 /]# drbdadm secondary db
把primary降级前,一定要先umount设备才行。然后提升secondary:
[root@drbd-2 /]# drbdadm primary db
[root@drbd-2 /]# mount /dev/drbd0 /drbddata/
[root@drbd-2 drbddata]# ll
total 4
drwx------  4 mysql root 4096 Oct 13 16:29 mysql
可以看到,数据已经完全同步过去了。

5,整合Heartbeat
下面就要开始和heartbeat的整合了,前面heartbeat已经安装过,只需要修改下配置文件就可以了,
cp /usr/share/doc/heartbeat-2.1.3/ha.cf .
cp /usr/share/doc/heartbeat-2.1.3/authkeys .
cp /usr/share/doc/heartbeat-2.1.3/haresources .
配置ha.cf(ha主要配置文件):
[root@drbd-1 ha.d]# more ha.cf
logfile /var/log/ha-log
logfacility     local0
keepalive       2
deadtime        30
warntime        10
initdead        120
udpport         694
bcast           eth0
auto_failback   off
node            drbd-1
node            drbd-2
ping_group group1 192.168.1.1 192.168.1.254
respawn root /usr/lib/heartbeat/ipfail
apiauth ipfail gid=root uid=root
配置authkeys认证:
[root@drbd-1 ha.d]# more authkeys
auth 1
1 crc
配置haresources资源文件:
drbd-1 drbddisk Filesystem::/dev/drbd0::/drbddata::ext3 mysql 192.168.1.243
注意:
    资源组配置文件主要是配置切换过程需要管理的各种资源的,有一个很关键的点,那就是一个资源组中的各个资源的排列顺序是需要注意的,在hearbeat管理资源组的时候,获取资源的过程是从左往右依次处理,释放资源的时候是从右往左依次处理。
    资源组的第一列是我们在ha.cf配置文件中的node之一,而且应该是当前准备作为primary节点的那一个node。
    上面资源组中的各项含义如下:
        drbd-1            当前primary节点名(uname -n)
        
        drbddisk          告诉heartbeat要管理drbd的资源
        Filesystem        这里是告诉heartbeat需要管理文件系统资源,其实实际上就是执行mount/umount命令,后面的“::”符号之后是跟的Filesystem的参数                         设备名和mount点)
        mysql             告诉需要管理mysql
    192.168.1.243   这里是让heartbeat帮你管理一个service ip,会跟着主节点一起漂移
        
测试切换:
    1) 手工调用heartbeat的节点切换脚本:
    执行/usr/lib/heartbeat/hb_standby 脚本,让heartbeat通知对方节点自己请求变成standby节点,请求对方成为primary节点,切换工作在10s左右即完成.
    2) 拔掉网线,测试在primary节点的网络断开后的切换情况
    通过测试,在拔掉网线后,当主节点发现无法和standby节点无法通信后,会在log中记录warn信息,如果延续时间达到在ha.cf中设定的时长后,会开始释放资     源,standby节点发现无法和主节点通信一段时间(ha.cf设定)后,开始尝试启动资源并将自己active成primary节点。切换过程除开ha.cf中设定的时长之外      的时间段同样非常短。
    3) shutdown primary主机,测试是否能够正常切换,基本上和上面测试2差不多。
    4) primary node 掉电测试,这里还没有到机房实际操作过,后面会继续测试这个操作。
测试结果:
    1,正常切换,数据完整。
    2,正常切换,但是主从数据相差一条。
    3,正常切换,数据完整。
    4,正常切换,数据完整。

此文章由 flyinweb 于 2010-07-23 14:48:27 编辑

本日志由 flyinweb 于 2010-07-23 14:31:38 发表,目前已经被浏览 4225 次,评论 0 次;

作者添加了以下标签: drbd+heartbeat+mysql

引用通告:http://www.517sou.net/Article/495/Trackback.ashx

评论订阅:http://www.517sou.net/Article/495/Feeds.ashx

评论列表

    暂时没有评论
(必填)
(必填,不会被公开)