2011年12月7日星期三

设置Heartbeat + DRBD + MySQL

有两台虚拟机, DB1:192.168.56.101, DB2:192.168.56.102, 拟设虚拟IP为192.168.56.100. 使用/dev/sdb作为DRBD盘
DB1 & DB2: /etc/hosts
127.0.0.1               localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6
192.168.56.101  db1
192.168.56.102  db2
DB1:/etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=db1
DB2:/etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=db2
DB1:/etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=static
ONBOOT=yes
HWADDR=08:00:27:bb:7d:71
IPADDR=192.168.56.101
NETMASK=255.255.255.0
GATEWAY=192.168.56.1
DB2:/etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=static
ONBOOT=yes
HWADDR=08:00:27:bb:7d:71
IPADDR=192.168.56.102
NETMASK=255.255.255.0
GATEWAY=192.168.56.1

安装DRBD以及HEARTBEAT
DB1 & DB2:
yum install -y drbd83 kmod-drbd83
yum install -y heartbeat heartbeat-ldirectord heartbeat-pils heartbeat-stonith

配置DRBD
DB1 & DB2: 修改/etc/drbd.conf
主要是配置两个node
on db1{
    device     /dev/drbd0;
    disk       /dev/sdb1;
    address    192.168.56.101:7788;
    meta-disk  internal;
  }
  on db2{
    device    /dev/drbd0;
    disk      /dev/sdb1;
    address   192.168.56.102:7788;
    meta-disk internal;
  }
DB1 & DB2:
在/dev/sdb上建立分区 /dev/sdb1/, 并创建文件系统
/etc/init.d/drbd restart
drbdadm create-md all
/etc/init.d/drbd restart

DB1:
drbdsetup /dev/drbd0 primary -o
mkfs.ext3 /dev/drbd0
mkdir /data
mount /dev/drbd0 /data/
drbdadm primary all

DB2:
mkdir /data
检查DRBD切换:
DB1:
umount /data
drbdadm secondary all
DB2:
drbdadm primary all
mount /dev/drbd0 /data

在DB1 & DB2上安装mysql, 放在/data下面

配置HEARTBEAT, 主要编辑3个文件:
DB1 & DB2:
/etc/ha.d/authkeys
auth 3
3 md5 HelloDRBD

/etc/ha.d/haresources, 这里可以都设置成db1, 表示db1为主node, 也可以各自设子自己的db name, 这样就没有主从了, 哪个先获得资源就以哪个为主
db1 IPaddr::192.168.56.100/24/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/data::ext3 mysql

不过这样配置后虚拟IP只能在本网段内被访问, 如果需要被其他网段访问, 还必须在网络配置中手动加上网关:
vi /etc/network/interfaces

auto em1:0
iface em1:0 inet static
address 192.168.56.100
netmask 255.255.255.0
gateway 192.168.56.1

DB1:
/etc/ha.d/ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility     local0
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694
baud    19200
ucast eth1 192.168.56.102 (对方的心跳地址)
auto_failback on
node    db1
node    db2

DB2:
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility     local0
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694
baud    19200
ucast eth1 192.168.56.101(对方的心跳地址)
auto_failback on
node    db1
node    db2

DB1 & DB2:
service heartbeat restart

查看当前哪个server为主, 然后将该server的heartbeat服务停掉或者关机或者eth1 down, 观察另外一台是否能够切换为主server.