前言:
因公司发展需求,最近开始实施PF的项目。这篇文档针对PF高可用之DRBD+MYSQL+HEARTBEAT进行了亲测和搭建,并已通过。
实施前准备:
二台版本相同的PF服务器。(PF6.4)
CentOS6或CentOS7(本篇文档针对CentOS6系统)
二台服务器的管理口需要在同一个二层网段
二台服务器的HOSTNAME必须可以被DNS解析
二台服务器需要一个单独的没有被挂载的分区
MYSQL+DRBD+HEARTBEAT原理图
开始DRBD配置:
一、分区
使用fdisk进行分区,这个自行上网进行查询(要求:分好区之后不要挂载到目录,后面DRBD会用到)
二、安装DRBD和HA-Linux
添加ELRepo
# yum localinstall http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
编辑Repo文件如下:
#/etc/yum.repos.d/elrepo.repo
[elrepo]
name=ELRepo.org Community Enterprise Linux Repository - el6
baseurl=http://elrepo.org/linux/elrepo/el6/$basearch/
mirrorlist=http://elrepo.org/mirrors-elrepo.el6
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org
protect=0
安装DRBDV8.4:
# yum install kmod-drbd84 --enablerepo=elrepo
DRBD配置如下:
首先加载DRBD内核
# modprobe drbd
编辑/etc/drbd.d/global_common.conf文件:
global {
usage-count yes;
}
common {
protocol C;
startup {
degr-wfc-timeout 120;
}
syncer {
rate 100M;
al-extents 257;
}
disk {
on-io-error detach;
}
}
在/etc/drbd.d/目录下创建mysql.res文件:
on <pf1_server_name> {
device /dev/drbd0;
disk <storage_device>;
meta-disk internal;
address <ha_interface_ip_address_1>:7788;
}
on <pf2_server_name> {
device /dev/drbd0;
disk <storage_device>;
meta-disk internal;
address <ha_interface_ip_address_2>:7788;
}
handlers {
split-brain "/usr/lib/drbd/notify-split-brain.sh alert@acme.com";
}
}
注:
mysql是DRBD的资源名
pf1_server_name和pf2_server_name是二台服务器的hostname
ha_interface_ip_address_1及2是二台服务器的manager口IP
storage_device是新分区(/dev/sdb1)
**建议创建资源之前在二台机器上配置:dd if=/dev/zero of=/dev/sda1 bs=1M count=100
初始化分区:
[root@pf_01 ~]# drbdadm create-md mysql
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
success
二台服务器上同时运行DRBD服务:
# /etc/init.d/drbd start
然后,通过cat /proc/drbd可以看下和下面相似的内容:
0: cs:Connected ro: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 ep:1 wo:b oos:30702640
提示:如果有问题,确保你的iptables和selinux是关闭的。
接下来,通过命令将一台服务器变成主的DRBD:
# drbdadm primary --force mysql
提示:这个时候通过cat/proc/drbd,你可以看到数据在二台机器上同步。
数据同步完成后,在主节点上输入如下命令:
# mkfs.ext4 /dev/drbd0
三、启动DRBD并关连MYSQL。
首先确保MYSQL不要开机自启。
# chkconfig mysql off
目前二台机器上的DRBD已经都安装好,并测试无问题。
在MASTER上,输入如下命令:
# chkconfig mysql off
注:mysql是DRBD分区资源的名字。
输入命令cat /proc/drbd会看下如下相似的信息:
...
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----
ns:145068 nr:4448 dw:149516 dr:10490 al:31 bm:14 lo:0 pe:0 ua:0 ap:0 ep:1 wo:d oos:0
停止MYSQL服务并将DRBD挂载到MYSQL数据目录:
# service mysqld stop
# mount /dev/drbd0 /var/lib/mysql
# service mysqld start
注:期间无任何报错,既成功。
开始HEARTBEAT配置:
一、安装HEARTBEAT:
输入如下命令:
# yum localinstall http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
编辑/etc/yum.repos.d/repo,如下:
[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
安装:
# yum install heartbeat --enablerepo=epel
创建/etc/ha.d/ha.cf文件并添加如下内容:
bcast eth0
keepalive 2
warntime 30
deadtime 60
auto_failback off
initdead 120
node
node
use_logd yes
logfile /var/log/ha-log
注:这里我们假设HEARTBEAT的通信端口是ETH0。
创建/etc/ha.d/haresources并添加如下内容:
IPaddr::192.168.11.100/24/eth0 drbddisk::mysql Filesystem::/dev/drbd0::/var/lib/mysql::ext4 \ mysqld
注:确保主机名正确。
IPaddr::192.168.11.100/.24/eth0:用IPaddr脚本配置浮动VIP
drbddisk::r0:用drbddisk脚本实现DRBD主从节点资源组的挂载和卸载
Filesystem::/dev/drbd0::/data::ext4:用Filesystem脚本实现磁盘挂载和卸载
创建/etc/ha.d/authkeys并添加如下内容:
auth 1
1 sha1 10abf064f24a3e807dde7b945d0303392f10777d
注:确定/etc/ha.d/authkeys的权限为600。
# chmod 600 /etc/ha.d/authkeys
配置好heartbeat之后,需要将mysql从自启动服务器中去掉,因为主heartbeat启动的时候会挂载drdb文件系统以及启动mysql,切换的时候会将主上的mysql停止并卸载文件系统,从上会挂载文件系统,并启动mysql。因此需要做如下操作(两台服务器):
# chkconfig mysqld off
# chkconfig heartbeat off
# chkconfig drbd off
二台服务服务器上同时启动HEARTBEAT:
#/etc/init.d/heartbeat stop
#Stopping High-Availability services: Done.
测试方法:
1.停掉master上的mysqld,看看是否切换(因为heartheat不检查服务的可用性,因此需要通过而外的脚本来实现)。
2.停掉master的heartheat看看是否能正常切换。
3.停掉master的网络或者直接将master系统shutdown,看看能否正常切换。
4.启动master的heartbeat看看是否能正常切换回来。
5.重新启动master看看能否切换过程是否OK。
注意:这里说的切换是不是已经将mysql停掉、是否卸载了文件系统等等。
我就停止master(192.168.11.1)上的heartbeat来测试是否会自动切换,这里除了第一条无法实现,其他的都可以切换: