搜档网
当前位置:搜档网 › heartbeat+drbd双机热备搭建手册

heartbeat+drbd双机热备搭建手册

heartbeat+drbd双机热备搭建步骤

本文章介绍的是纯软件双机方式,也就是通过镜像软件drbd,将数据实时复制到另一台服务器上,用到的双机软件是开源的heartbeat。

Ubuntu下搭建heartbeat+drbd双机环境

环境如下:

硬件需求如下:一个路由器、一根串口心跳线(用于心跳通信)

一、Ubuntu下安装与配置drbd

1、修改hosts文件和主机名

在eton上

echo “192.168.1.3 eton” >> /etc/hosts

echo “192.168.1.4 eton2” >> /etc/hosts

echo “eton”> /etc/hostname

在eton2上

echo “192.168.1.3 eton”>> /etc/hosts

echo “192.168.1.4 eton2”>> /etc/hosts

echo “eton2”> /etc/hostname

(需要重启后才能生效)

2、创建一个空白分区用于镜像分区(主从节点都要)

3、安装drbd(主从都要安装)

apt-get install drbd8-utils

4、配置drbd.conf(/etc/drbd.conf主从都要配置)

vim /etc/drbd.conf默认信息为:

include "drbd.d/global_common.conf";

include "drbd.d/*.res";

这样你需要去配置global_common.conf以及新建一个以res结尾的资源文件,这里为r0.res。

vim /etc/drbd.d/global_common.conf

global {

usage-count no; //帮LINBIT公司统计drbd使用量

}

common {

protocol C; //C为最安全同时也是性能最好的一种确认写操作完成的方法

syncer {

rate 100M; //同步的速率

}

}

vim /etc/drbd.d/r0.res

resource r0 { //r0资源名称,以后很多地方会用到

on eton {

device /dev/drbd0; //逻辑设备的路径

disk /dev/sda3; //物理设备

address 192.168.181.3:7788; //主节点

meta-disk internal;

}

on eton2 {

device /dev/drbd0;

disk /dev/sda3;

address 192.168.181.4:7788; //从节点

meta-disk internal;

}

}

5、初始化drbd的metadata(在主节点上操作就行)

drbdadm create-md r0

(如果出现如下错误:

md_offset 21467942912

al_offset 21467910144

bm_offset 21467254784

Found ext3 filesystem

20964792 kB data area apparently used

20964116 kB left usable by current configuration

Device size would be truncated, which

would corrupt data and result in'access beyond end of device' errors.

You need to either

* use external meta data (recommended)

* shrink that filesystem first

* zero out the device (destroy the filesystem)

Operation refused.

Command 'drbdmeta 1 v08 /dev/sdb1 internal create-md' terminated with exit code 40

drbdadm create-md r0exited with code 40 )

执行如下命令:

dd if=/dev/zero bs=1M count=1 of=/dev/sda3;sync

再次执行drbdadm create-md r0看到success则表示成功。

图1.1 创建drbd分区成功

6、启动drbd服务(主从都执行)

/etc/init.d/drbd start

cat /proc/drbd

ro:Secondary/ Secondary表示还没有建立主盘

ds:Inconsistent/Inconsistent表示两节点的逻辑设备(即/dev/drbd0)中的数据未同步

7、初始化网络硬盘(主节点执行)

drbdsetup /dev/drbd0 primary –o

cat /proc/drbd

ro: primary / Secondary表示在主节点建立了主盘

ds: UpToDate /Inconsistent表示两节点正在同步数据

等同步完后将会变成

ds: UpToDate / UpToDate

8、格式化磁盘,现在将磁盘格式化后并可以向其中写数据,这些数据会同步到从节点中。

在eton上(主节点)

mkfs.ext4 /dev/drbd0

mount /dev/drbd0 /var/www

(注意:只有主盘节点才能挂载镜像分区)

cd /var/www

mkdir testfile //新建名为testfile的测试文件

umount /dev/drbd0 //卸载镜像分区

drbdadm secondary r0 //主降为次,现在降为从节点

在eton2上(从节点)

drbdadm primary r0 //次升为主,这样才能从机器读取磁盘的数据。

mount /dev/drbd0 /var/www //升主后才有挂载权限

cd /var/www

ls –l

将会看到我们在主节点中建立的名为testfile的文件夹。

二、安装Mysql(配置Mysql数据到drbd)

1、安装Mysql

apt-get install mysql-server

2、更改Mysql数据库的存储位置

默认情况下数据库的存储位置是/var/lib/mysql(可以在/etc/mysql/https://www.sodocs.net/doc/ab12720761.html,f中的datadir位置找到),现在要将其改为存在/var/www/mysql下。

将/var/lib/mysql下的数据复制到/var/www/mysql下

cp –r /var/lib/mysql /var/www/

注意:可能会由于mysql数据库文件权限导致启动失败,修改数据库目录归属者和权限。命令如下,

chown –R mysql:mysql /var/www/mysql

chmod –R 700 /var/www/mysql

vim /etc/mysql/https://www.sodocs.net/doc/ab12720761.html,f

找到datadir这一行将其值改为/var/www/mysql

自Ubuntu 7.10开始,

Ubuntu就开始使用一种安全软件叫做AppArmor,这个安全软件会在你的文件系统中创建一个允许应用程序访问的区域(专业术语:应用程序访问控制)。

如果不为MySQL修改AppArmor配置文件,永远也无法为新设置的存储位置启动服务。

配置AppArmor:

nano /etc/apparmor.d/usr.sbin.mysqld

找到/var/lib/mysql/这两行,注释掉这两行,在这两行前分别添加一个符号“#”即可注释,在这两行之前或之后加上下面内容:

/var/www/mysql/ r,

/var/www/mysql/** rwk,

3、测试

当eton节点是主节点时,在eton上启动mysql 建立一个名为test的数据库。

之后关闭数据服务

service mysql stop

drbdadm secondary r0

umount /dev/drbd0

在eton2上

drbdadm primary r0

mount /dev/drbd0 /var/www

service mysql start

进去mysql中查看是否已有从eton同步过来的名为test的数据库。

OK至此测试就完成了。

三、安装heartbeat

1、安装heartbeat

apt-get install heartbeat

图3.1 apt-get安装heartbeat

图3.2 heartbeat安装成功界面

(ps: Heartbeat的主要配置文件有ha.cf、haresources和authkeys。在Heartbeat 安装后,默认并没有这3个文件,可以从官方网站下载得到,也可以直接从目录/usr/share/doc/heartbeat中找到)

2、配置认证文件(/etc/ha.d/authkeys)

authkeys文件用于设定Heartbeat的认证方式,共有3种可用的认证方式,即crc、md5和sha1。3种认证方式的安全性依次提高,但是占用的系统资源也依次增加。如果Heartbeat集群运行在安全的网络上,可以使用crc方式;如果HA每个节点的硬件配置很高,建议使用sha1,这种认证方式安全级别最高;如果是处于网络安全和系统资源之间,可以使用md5认证方式。这里我们使用md5认证方式,设置如下:

auth 3

#1 crc

#2 sha1 sha1_any_password

3 md5 hellonimei

需要说明的一点是:无论auth后面指定的是什么数字,在下一行必须作为关键字再次出现,例如指定了"auth 6",下面一定要有一行"6 认证类型"。最后确保这个文件的权限是600。

在终端输入命令:chmod 600 /etc/ha.d/authkeys

3、配置ha.cf

logfacility local0 #这个是设置heartbeat的日志,这里是用的系统日志keepalive 2 #多长时间检测一次

deadtime 60 #连续多长时间联系不上后认为对方挂掉了

warntime 20 #连续多长时间联系不上后开始警告提示

initdead 120 #这里主要是给重启后预留的一段忽略时间段(比如:重启后启动网络等,如果在网络还没有通,keepalive检测肯定通不过,但这时候并不能切换)

udpport 694

baud 115200 #有时候速率设置太小,导致心跳包错位,心跳通信失败serial /dev/ttyS0

ucast eth1 192.168.181.4(对方eth1的IP地址)

#auto_failback off #恢复正常后是否需要再自动切换回来,

node eton #节点名(必须是集群中机器的主机名,通过uname -n取得)node eton2 #节点名(必须是集群中机器的从机名,通过uname -n取得)#ping 192.168.1.1(默认网关,可以通过route命令得到)

#respawn root /usr/lib/heartbeat/ipfail #这里是配置ip绑定和切换的功能,由于使用的是heartbeat3.0.5版本,ipfail不起作用,所以选择注释

#ipfail就是控制ip切换的程序

#apiauth ipfail gid=root uid=root #控制ip切换的时候所使用的用户

crm respawn

4、配置Pacemaker

进行crm资源的配置,首先要配置STONITH,我们将stonith-enabled设置为false来关闭STONITH。

还要设置法定人数,一般是有一半节点在线才认为合法,我们可以控制Pacemaker发现集群达不到法定人数时候的行为,我们告诉集群忽略它。crm configure property stonith-enabled=false no-quorum-policy=ignore

接下来就要监控资源服务了,包括drbd、创建虚拟Virtual IP(IPaddr)、mysql、apache、文件挂载(filesystem)等等。

终端crm命令如下:

primitive MailTo ocf:heartbeat:MailTo \

params email="576564855@https://www.sodocs.net/doc/ab12720761.html," subject="heartbeat take over" \

meta target-role="Started" //用于当发生故障导致主备切换时,接管服的服务器给管理员发邮件提醒。

primitive apache ocf:heartbeat:apache \

op monitor interval="60" timeout="80" \

params configfile="/etc/apache2/apache2.conf"

statusurl="http://localhost/server-status" \

meta target-role="Started" //监控apache服务,注意statusurl参数不可少。

primitive drbd ocf:linbit:drbd \

params drbd_resource="r0" \

op monitor interval="59s" role="Master" timeout="60s" //监控drbd服务。primitive fs ocf:heartbeat:Filesystem \

op monitor interval="30" timeout="60" \

params device="/dev/drbd0" directory="/var/www" fstype="ext4" \

meta target-role="Started" //文件系统服务,用于挂载镜像分区。primitive mysql ocf:heartbeat:mysql \

params binary="/usr/bin/mysqld_safe" config="/etc/mysql/https://www.sodocs.net/doc/ab12720761.html,f"

datadir="/var/www/mysql" socket="/var/run/mysqld/mysqld.sock"

pid="/var/run/mysqld/mysqld.pid" \

op monitor interval="61" timeout="121" //监控mysql服务

primitive ping-gateway ocf:pacemaker:ping \

params host_list="192.168.1.1" \

op monitor interval="60" //用于检测网络状态,在网络不通的情况下进行主备切换。

primitive vip ocf:heartbeat:IPaddr \

op monitor interval="20" timeout="40" \

params ip="192.168.1.145" \

meta target-role="Started" //监控虚拟IP的生成

group group1 fs vip mysql apache MailTo //组资源

ms ms-drbd drbd \

meta master-max="1" master-node-max="1" clone-max="2"

clone-node-max="1" notify="true" //多状态资源,一种特殊的克隆资源。clone pingclone ping-gateway \

meta interleave="true" //克隆资源

location cli-prefer-mysql group1 \

rule $id="cli-prefer-rule-mysql" inf: #uname eq eton2 //位置约束规则,使得group1组资源倾向在eton2节点运行,也就是实际效果的主节点上。location goodping-location group1 \

rule $id="goodping-location-rule" -inf: not_defined pingd or pingd lte 0 //使group1组资源在网络状态好的节点上运行。

colocation group-on-drbd inf: group1 ms-drbd:Master //相对约束规则,用于决定哪些资源应在相同主机上运行。

order drbd-before-group1 inf: ms-drbd:promote group1:start //排序约束,定义启动资源的顺序。先使drbd为主状态,然后才启动group1资源。

配置完pacemaker之后的crm 配置信息如下,

图3.3 crm命令下pacemaker配置信息

pacemaker监控服务运行情况,crm命令查看如下,

图3.4 通过crm命令查看服务运行

四、测试双机热备运行

这里我们以eton2节点为主节点,也就是使得整套服务倾向于在eton2节点上运行,运行结果如上图3.4所示。

1、正常关闭和重启主节点的Heartbeat

2、在主节点上拔去网线

拔去主节点连接公共网络的网线后,Heartbeat监控的ping-gateway服务可以立刻检测到网络连接失败,接着自动释放资源。

图5.1 拔掉eton2主节点公共网线后,eton节点接管服务

3、在主节点上拔去电源

由于主节点服务器被拔掉电源,双方心跳侦测不到对方的存在,所以备节点接管相应的服务。

图5.2 eton备节点正在启动相关服务

图5.3 整套服务已经被备节点eton接管

五、一些实现和注意细节

在安装drbd之前要创建镜像分区,需要系统单独分出一个空白分区用于镜像分区。如果没有多余空间用于镜像分区,需要调整分区大小,分

割一部分空间用于新分区。当前系统由于只有两个分区,使用live usb

Magic Parted分区工具来调整不能卸载的根目录分区大小。

由于在双机热备调试的过程当中会出现“脑裂行为”,可能是心跳信号断掉的原因,导致侦测不到对方的存在而接管服务,从而主备服务器

都在运行,使得两台服务器都是主节点状态,drbd发现对方也是primary

状态后,会断掉drbd连接。此时要重新使得drbd连接正常,操作如下,

备节点:drbdadm disconnect resourcename

drbdadm secondary resourcename

drbdadm -- --discard-my-data connect resourcename

主节点:cat /proc/drbd 查看drbd连接状态,如果连接状态正常的话,

无需任何操作,否则输入命令:drbdadm connect resourcename 此次用到的串口心跳线是一种特殊RS232串口线,9针接线线序如下,9针什么也不接、3接对端2、2接对端3、7接对端8、8接对端7、5

接对端5、1和6接对端4、4接对端1和6。

相关主题