heartbeat+drbd+mysql:实现最廉价的高可用组合

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

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 秒,真是穷人的绝佳集群解决方案。

heartbeat的安装这里小编就不细讲了,读者可以看看的小编的博客http://wnqcmq.blog.51cto.com/5200614/1179525

以下的配置两个节点都必须一致,为了减少工作量,小编这里在主节点上配置,然后使用scp传输到备份节点

5.hosts文件以及主机名的配置

[root@primary ~]# vim /etc/hosts

192.168.110.6 primary.zzdx.com

192.168.110.7 standby.zzdx.com

[root@primary ~]# scp /etc/hosts 192.168.20.2:/etc

修改主机名

[root@primary ~]# vim /etc/sysconfig/network 

HOSTNAME=primary.zzdx.com //备份节点的主机名是standby.zzdx.com

6.drbd的安装

由于小编使用的是5.4的红帽啦,内核(2.6.18)中不包含drbd(2.6.33的内核中已经有了),小编这里安装相应的软件包和内核模块就是了

kmod-drbd83-8.3.8-1.el5.centos.i686.rpm

drbd83-8.3.8-1.el5.centos.i386.rpm

使用rpm -ivh 安装就是了

drbd83安装后包含的文件

[root@primary ~]# rpm -ql drbd83

clip_image002

7.drbd配置

[root@primary ~]# cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc/

[root@primary ~]# cd /etc/drbd.d/

[root@primary drbd.d]# cp global_common.conf global_common.conf.bak

[root@primary drbd.d]# vim global_common.conf //修改成为下面的内容

global {

usage-count no;

# minor-count dialog-refresh disable-ip-verification

}

 

common {

protocol C;

 

startup {

wfc-timeout 120;

degr-wfc-timeout 120;

}

disk {

on-io-error detach;

fencing resource-only;

 

}

net {

cram-hmac-alg "sha1";

shared-secret "mydrbdlab";

}

syncer {

rate 100M;

}

 

}

8.定义资源

小编这里有一块2G的磁盘(/dev/sdb),那就作为块设备吧

[root@primary drbd.d]# vim mysql.res

resource mysql{

on primary.zzdx.com { # 每个主机的说明以”on”开头,后面是主机名在{}内的是配置

device /dev/drbd1; # 今后生成使用的设备名;不用和实际分区号一样.不过最好规范

disk /dev/sdb; # 该节点上用于存放数据的分区号

address 192.168.20.1:7898; # 该节点的IP地址

meta-disk internal; # meta data信息存放方式“网络”

}

 

on standby.zzdx.com { # 每个主机的说明以”on”开头,后面是主机名在{}内的是配置

device /dev/drbd1; # 今后生成使用的设备名;不用和实际分区号一样.不过最好规范

disk /dev/sdb; # 该节点上用于存放数据的分区号

address 192.168.20.2:7898; # 该节点的IP地址

meta-disk internal; # meta data信息存放方式“网络”

}

}

将配置文件、全局配置文件以及资源文件传输到备份节点上

[root@primary drbd.d]# scp global_common.conf mysql.res 192.168.20.2:/etc/drbd.d/

9.创建drbd资源

[root@primary drbd.d]# drbdadm create-md mysql //在备份节点上也要做

Writing meta data...

initializing activity log

NOT initialized bitmap

New drbd meta data block successfully created.

[root@standby drbd.d]# drbdadm create-md mysql

Writing meta data...

initializing activity log

NOT initialized bitmap

New drbd meta data block successfully created.

10.开启两个节点上的drbd服务

主节点上的状态

[root@primary ~]# service drbd start

Starting DRBD resources: [ 

mysql

Found valid meta data in the expected location, 2147479552 bytes into /dev/sdb.

d(mysql) s(mysql) n(mysql) ].

备份节点上的状态

[root@standby drbd.d]# service drbd start

Starting DRBD resources: [ 

mysql

Found valid meta data in the expected location, 2147479552 bytes into /dev/sdb.

d(mysql) s(mysql) n(mysql) ].

查看drbd状态

[root@primary drbd.d]# cat /proc/drbd

version: 8.3.8 (api:88/proto:86-94)

GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:16

 

1: 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:2097052

/proc/drbd/中显示了DRBD当前的状态.

ro显示两台主机的状态.都是“备机/备机”.ds是磁盘状态.都是“不一致/不一致”

11.主节点抢占资源

[root@primary drbd.d]# drbdsetup /dev/drbd1 primary -o //首次使用用这种方式

[root@primary drbd.d]# drbdadm primary all

[root@primary drbd.d]# cat /proc/drbd //这时候会同步更新数据的

version: 8.3.8 (api:88/proto:86-94)

GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:16

 

1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r----

ns:780040 nr:0 dw:0 dr:788224 al:0 bm:47 lo:1 pe:2 ua:256 ap:0 ep:1 wo:b oos:1317052

[======>.............] sync'ed: 37.4% (1317052/2097052)K delay_probe: 47

finish: 0:00:23 speed: 55,672 (55,712) K/sec

ro:显示两台主机的状态.”主机/备机” ds:是磁盘状态.都是“upTodate/不一致”

可以看出[>....................] sync'ed: 正在同步了已经进度37.4%

 

12.格式化/dev/drbd1的文件系统,建立相应的挂载点,以便后续使用

[root@primary drbd.d]# mkfs -t ext3 /dev/drbd1

[root@primary ~]# mkdir /mnt/mysql/ //主节点上建立mysql的挂载点

修改两个节点mysql的配置文件,将数据目录修改为/mnt/mysql(小编这里的mysql是使用linux 5.4自带的)

[root@primary ~]# vim /etc/my.cnf

datadir=/mnt/mysql

13.heartbeat的配置

如果读者你的heartbeat的安装都是按照小编博客的步骤来的话,那么接下来的修改配置就很简单啦

首先修改ha.cf文件,将两个节点加进去(如果已经加过了就不用加了)

[root@primary ~]# cd /etc/ha.d/

[root@primary ha.d]# vim ha.cf

node primary.zzdx.com

node standby.zzdx.com

创建新的资源脚本(这些资源脚本都放在/etc/ha.d/resource.d/目录下啦),当然同样的,两端都服务器得有,作为资源让heartbeat控制

[root@primary ~]# cd /etc/ha.d/resource.d/

[root@primary resource.d]# vim usemysql

#!/bin/bash

unset LC_ALL ; export LC_ALL

unset LANGUAGE ; export LANGUAGE

prefix=/usr

exec_prefix=/usr

. /etc/ha.d/shellfuncs

 

function start(){

/sbin/drbdadm primary all #提升为primary

/bin/mount /dev/drbd1 /mnt/mysql #挂载

service mysqld start

}

 

function stop(){

service mysqld stop

/bin/umount /mnt/mysql #注意释放权限的时候必须先卸载

/sbin/drbdadm secondary all #降为secondary

}

case $1 in

start)

start

;;

 

stop)

stop

;;

 

*)

echo “Usage: $0 { start | stop }”

;;

 

esac

exit 0

[root@primary resource.d]# chmod a+x usemysql

[root@primary resource.d]# scp usemysql 192.168.20.2:/etc/ha.d/resource.d/

添加资源控制到配置文件

[root@primary resource.d]# cd ..

[root@primary ha.d]# vim haresources

primary.zzdx.com IPaddr::192.168.110.1/28/eth0/192.168.110.15 usemysql

[root@primary ~]# scp /etc/ha.d/haresources 192.168.20.2:/etc/ha.d/

启动heartbeat服务

[root@primary ~]# service heartbeat start

[root@standby ~]# service heartbeat start

14.测试并查看状态

在主节点上查看资源状态

clip_image004

在主节点上使用mysql,创建数据库文件,看看在当资源切换的时候是否能看见

[root@primary ~]# mysqladmin -u root password 123456 //初始化root密码

clip_image006

主节点主动释放资源,备份节点接管资源

[root@primary ~]# /usr/lib/heartbeat/hb_standby 

2013/06/15_08:32:51 Going standby [all].

查看primary节点日志状态

clip_image008

查看备份节点日志状态

clip_image010

在备份节点上使用mysql试试能不能查看到在主节点创建的数据库

clip_image012

看到了吧,成功了吧,呵呵

好了,到这里小编算是吧要想实现的东西整完了,读者自己试试吧,正如前面所说的,目前使用drbd是为了最少的花钱,但是效率上可想而知啦,个人觉得IP-SAN是比较折中的方案啦



本文转自 chenming421  51CTO博客,原文链接:http://blog.51cto.com/wnqcmq/1222297


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 SQL 关系型数据库
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
139 3
Mysql高可用架构方案
|
4月前
|
运维 容灾 关系型数据库
MySQL高可用方案--Xenon全解
MySQL高可用方案--Xenon全解
|
4月前
|
SQL 关系型数据库 MySQL
orchestrator搭建mysql高可用
orchestrator搭建mysql高可用
54 0
|
4月前
|
缓存 关系型数据库 MySQL
如何实现mysql高可用集群
如何实现mysql高可用集群
55 0
|
4月前
|
安全 关系型数据库 MySQL
【MySQL】Orchestrator最简单的 mysql 高可用方案最细细细细~
【MySQL】Orchestrator最简单的 mysql 高可用方案最细细细细~
|
11天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
81 15
|
5天前
|
SQL 关系型数据库 MySQL
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。
|
12天前
|
关系型数据库 MySQL 数据库
数据库数据恢复—MYSQL数据库文件损坏的数据恢复案例
mysql数据库文件ibdata1、MYI、MYD损坏。 故障表现:1、数据库无法进行查询等操作;2、使用mysqlcheck和myisamchk无法修复数据库。
|
16天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
24天前
|
关系型数据库 MySQL 数据库
GBase 数据库如何像MYSQL一样存放多行数据
GBase 数据库如何像MYSQL一样存放多行数据
下一篇
DataWorks