Packetfence集群clustering之MYSQL+DRBD+HEARTBEAT配置

前言:

因公司发展需求,最近开始实施PF的项目。这篇文档针对PF高可用之DRBD+MYSQL+HEARTBEAT进行了亲测和搭建,并已通过。

实施前准备:

二台版本相同的PF服务器。(PF6.4)
CentOS6或CentOS7(本篇文档针对CentOS6系统)
二台服务器的管理口需要在同一个二层网段
二台服务器的HOSTNAME必须可以被DNS解析
二台服务器需要一个单独的没有被挂载的分区

MYSQL+DRBD+HEARTBEAT原理图

image

开始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&amp;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来测试是否会自动切换,这里除了第一条无法实现,其他的都可以切换:

至此,DRBD、HEARTBEAT配置完成。