Mysql+DRBD+Heartbeat 实现mysql高可用的双击热备(DRBD篇)

DRBD官方tar包下载地址:   http://oss.linbit.com/drbd/

环境介绍:

系统版本:CentOS 6.4 (64位)

内核版本  2.6.32-358.el6.x86_64

软件版本:drbd-8.4.3.tar.gz

主:10.0.0.1   从:10.0.0.2

两台机器上的hosts都需要修改:

[[email protected] ~]# vim /etc/hosts

10.0.0.1    node1

10.0.0.2    node2

两台服务器双网卡,其中10.0.0.x的网卡用于传输drbd数据,两台服务器网线直连,用做传输心跳线。

****为了方便实验,两台机器都各自加一块15G的硬盘,用过来做DRBD存储盘 (两台机器都需要此操作)

对新添加的硬盘进行分区:

#fdisk /dev/sdb                                                  //准备为 sdb 建立分区

The number of cylinders for this disk is set to 20805.

There is nothing wrong with that, but this is larger than 1024,

and could in certain setups cause problems with:

1) software that runs at boot time (e.g., old versions of LILO)

2) booting and partitioning software from other OSs

(e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): n                                              //键入 n 表示要建立分区

Command action

e   extended

p   primary partition (1-4)

p                                                                    //键入 p 表示建立主要分区

Partition number (1-4): 1                                            //键入 1 为此主要分区代号

First cylinder (1-20805, default 1):                                 //开始磁柱值,按下 enter 即可

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-20805, default 20805): //结束磁柱值,按下 enter 即可

Using default value 20805

Command (m for help): w                                              //键入 w 表示确定执行刚才设定

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

[[email protected] ~]# partprobe                                  //使刚才的 partition table 变更生效

分区进行格式化:

[[email protected] ~]# mkfs.ext4 /dev/sdb1

编译安装drbd-8.4.3  :

[[email protected] soft]# tar zxf drbd-8.4.3.tar.gz

[[email protected] soft]# cd drbd-8.4.3

[[email protected] soft]# mkdir /usr/local/drbd/

[[email protected] drbd-8.4.3]# ./configure --prefix=/usr/local/drbd --with-km 注意:--with-km是启用内核模块

[[email protected] ~]# make KDIR=/usr/src/kernels/2.6.32-358.el6.x86_64/      注意KDIR的路径 (这个内核源码路径需要根据自己的系统修改)

[[email protected] drbd-8.4.3]# make install

[[email protected] ~]# mkdir -p /usr/local/drbd/var/run/drbd

配置启动脚本以及开机自启动

[[email protected] ~]# cp /usr/local/drbd/etc/rc.d/init.d/drbd  /etc/rc.d/init.d/

[[email protected] ~]# chkconfig --add drbd

[[email protected] ~]# chkconfig drbd on

拷贝DRBD模块到内核,并加载DRBD模块。

[[email protected] drbd]# cp drbd.ko /lib/modules/2.6.32-358.el6.x86_64/kernel/lib/

[[email protected] drbd]# modprobe drbd

查看模块是否加载成功

[[email protected] drbd]#lsmod |grep drbd

drbd                  325626  3

libcrc32c               1246  1 drbd

*********别忘了同样在node2上也进行以上步骤操作****************

********************************配置DRBD************************************

[[email protected] ~]# cd /usr/local/drbd/etc/

[[email protected] etc]# cat drbd.conf

# You can find an example in  /usr/share/doc/drbd.../drbd.conf.example

include "drbd.d/global_common.conf";

include "drbd.d/*.res";

由此可见:主配置文件里面已经包含了全局配置文件和drbd目录下以.res结尾的文件

修改全局配置文件:                    *****下面是笔者所用配置,为了高效配制成功,请务必保证文件各项配置一致********

[[email protected] etc]# cd drbd.d/

[[email protected] drbd.d]# cat global_common.conf

global {

usage-count no;    #是否参加DRBD使用者统计,默认为yes

}

common {

syncer { rate 200M; }   #设置主、备节点同步时的网络速率最大值,单位是字节

protocol        C;  #使用DRBD的第三种同步协议,表示收到远程主机的写入确认后,认为写入完成

handlers {

pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";

pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";

local-io-error "echo o > /proc/sysrq-trigger ; halt -f";

#fence-peer "/usr/lib/drbd/crm-fence-peer.sh";

# split-brain "/usr/lib/drbd/notify-split-brain.sh root";

# out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";

}

net {

cram-hmac-alg   "sha1";

shared-secret   "MySQL-HA";   #DRBD 同步时使用的验证方式和密码信息

}

disk {

on-io-error     detach;       #配置I/O错误处理策略为分离

#       fencing resource-only;

}

startup {

#       wfc-timeout     120;

#       degr-wfc-timeout    120;

}

}

修改资源配置文件,默认没有此文件,需要手动创建:    *****下面是笔者所用配置,为了高效配制成功,请务必保证文件各项配置一致********

[[email protected] ~]# vim /usr/local/drbd/etc/drbd.d/drbd.res

resource r0 {     #这个r0是定义资源的名字

on node1 { #每个主机的说明以on开头,后面的名称需要与hostname、uname -n一致,其后的{}中的配置是此主机的配置

device /dev/drbd0;         #drbd设备名称

disk    /dev/sdb1; #/dev/drbd0使用的磁盘分区为sdb1

address         10.0.0.1:7788;      #设置drbd监听地址与端口

meta-disk       internal;    #DRBD的元数据存放方式

}

on node2 {

device  /dev/drbd0;

disk    /dev/sdb1;

address         10.0.0.2:7788;

meta-disk       internal;

}

}

****************************此时,DRBD的配置文件完成!***************************

为了保证配置项一致,将两个配置文件拷贝到node2上:

[[email protected] drbd]#scp etc/drbd.d/global_common.conf etc/drbd.d/drbd.res [email protected]:/root/

切换到node2 将配置文件放到drbd目录:

[[email protected] ~]#mv drbd.res global_common.conf /usr/local/drbd/etc/drbd.d/

在node1上初始化资源

[[email protected] ~]# drbdadm create-md r0

You want me to create a v08 style flexible-size internal meta data block.

There appears to be a v08 flexible-size internal meta data block

already in place on /dev/sdb1 at byte offset 16105058304

Do you really want to overwrite the existing v08 meta-data?

[need to type ‘yes‘ to confirm] yes

Writing meta data...

initializing activity log

NOT initializing bitmap

New drbd meta data block successfully created.

同样,在node2上初始化资源

[[email protected] ~]# drbdadm create-md r0

***注意:如果初始化资源报错:

Command ‘drbdmeta 0 v08 /dev/sdb1 internal create-md‘ terminated with exit code 40

这是因为sdb1已经有文件系统了,已经有数据存在了(进行下面的操作前,请保证/dev/sdb1里的数据是否备份)

解决方法:

[[email protected] ~]# dd if=/dev/zero bs=1M count=1 of=/dev/sdb1  ***注意,此处就是/dev/sdb1此硬盘,而不是他的挂载目录

请务必在两台服务器上同时启动服务:

[[email protected] ~]# service drbd start

Starting DRBD resources: [

create res: r0

prepare disk: r0

adjust disk: r0

adjust net: r0

]

......

[[email protected] ~]# service drbd start

查看drbd监听端口:

[[email protected] ~]# netstat -anptul |grep 7788

tcp        0      0 10.0.0.2:50569              10.0.0.1:7788               ESTABLISHED -

tcp        0      0 10.0.0.2:7788               10.0.0.1:39663              ESTABLISHED -

********************************设置DRBD主、备节点***************************************

注意:第一次启动drbd时,两个drbd节点默认都处于Secondary状态:

[[email protected] ~]# drbdadm role r0         #查看r0主、备节点的命令

Secondary/Secondary

由于默认没有主备节点之分,因而需要设置两个主机的主备节点,选择需要设置为主节点的主机,然后执行如下命令:

[[email protected] ~]# drbdadm -- --overwrite-data-of-peer primary all

第一次执行完此命令后,在后面如果需要设置哪个是主节点时,就可以使用另外一个命令:

drbdadm primary all

查看资源的连接状态:

[[email protected] ~]# drbdadm cstate r1

SyncSource

资源连接状态可能有以下状态中的一种:

StandAlone 独立的:网络配置不可用;资源还没有被连接或是被管理断开(使用 drbdadm disconnect 命令),或是由于出现认证失败或是脑裂的情况

Disconnecting 断开:断开只是临时状态,下一个状态是StandAlone独立的

Unconnected 悬空:是尝试连接前的临时状态,可能下一个状态为WFconnection和WFReportParams

Timeout 超时:与对等节点连接超时,也是临时状态,下一个状态为Unconected悬空

BrokerPipe:与对等节点连接丢失,也是临时状态,下一个状态为Unconected悬空

NetworkFailure:与对等节点推动连接后的临时状态,下一个状态为Unconected悬空

ProtocolError:与对等节点推动连接后的临时状态,下一个状态为Unconected悬空

TearDown 拆解:临时状态,对等节点关闭,下一个状态为Unconected悬空

WFConnection:等待和对等节点建立网络连接

WFReportParams:已经建立TCP连接,本节点等待从对等节点传来的第一个网络包

Connected 连接:DRBD已经建立连接,数据镜像现在可用,节点处于正常状态

StartingSyncS:完全同步,有管理员发起的刚刚开始同步,未来可能的状态为SyncSource或PausedSyncS

StartingSyncT:完全同步,有管理员发起的刚刚开始同步,下一状态为WFSyncUUID

WFBitMapS:部分同步刚刚开始,下一步可能的状态为SyncSource或PausedSyncS

WFBitMapT:部分同步刚刚开始,下一步可能的状态为WFSyncUUID

WFSyncUUID:同步即将开始,下一步可能的状态为SyncTarget或PausedSyncT

SyncSource:以本节点为同步源的同步正在进行

SyncTarget:以本节点为同步目标的同步正在进行

PausedSyncS:以本地节点是一个持续同步的源,但是目前同步已经暂停,可能是因为另外一个同步正在进行或是使用命令(drbdadm pause-sync)暂停了同步

PausedSyncT:以本地节点为持续同步的目标,但是目前同步已经暂停,这可以是因为另外一个同步正在进行或是使用命令(drbdadm pause-sync)暂停了同步

VerifyS:以本地节点为验证源的线上设备验证正在执行

VerifyT:以本地节点为验证目标的线上设备验证正在执行

查看资源角色的命令:

[[email protected] ~]# drbdadm role r1

Primary/Secondary (在前面为当前节点)

Parimary 主:资源目前为主,并且可能正在被读取或写入,如果不是双主只会出现在两个节点中的其中一个节点上

Secondary 备:资源目前为备,正常接收对等节点的更新

Unknown 未知:资源角色目前未知,本地的资源不会出现这种状态

查看硬盘状态:

[[email protected] ~]# drbdadm dstate r1

UpToDate/UpToDate

本地和对等节点的硬盘有可能为下列状态之一:

Diskless 无盘:本地没有块设备分配给DRBD使用,这表示没有可用的设备,或者使用drbdadm命令手工分离或是底层的I/O错误导致自动分离

Attaching:读取无数据时候的瞬间状态

Failed 失败:本地块设备报告I/O错误的下一个状态,其下一个状态为Diskless无盘

Negotiating:在已经连接的DRBD设置进行Attach读取无数据前的瞬间状态

Inconsistent:数据是不一致的,在两个节点上(初始的完全同步前)这种状态出现后立即创建一个新的资源。此外,在同步期间(同步目标)在一个节点上出现这种状态

Outdated:数据资源是一致的,但是已经过时

DUnknown:当对等节点网络连接不可用时出现这种状态

Consistent:一个没有连接的节点数据一致,当建立连接时,它决定数据是UpToDate或是Outdated

UpToDate:一致的最新的数据状态,这个状态为正常状态

查看同步进度:

[[email protected] ~]# cat /proc/drbd

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by [email protected], 2014-06-09 15:12:58

0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----

ns:24 nr:16108076 dw:16108100 dr:1017 al:2 bm:960 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

【注】:

从输出的”ds“ 信息得知,磁盘状态都是“UpToDate”,表示数据同步已经完成了

ro是角色信息,Primary/Secondary 说明了当前主机是primary主节点,另一台是secondary备节点

ds是磁盘状态,显示数据是否一致,(如果显示UpToDate/UpToDate 表明同步没有延时)

ns是网络发送的数据包,以K字节计算

dw是磁盘写信息

dr是磁盘读信息

**************************最后一步,挂载drbd0设备**************************

注意:

*****挂载DRBD分区之前,首先需要确认当前主机的DRBD分区是Primary状态,可以从"/cat/proc/drbd" 命令中查询到

[[email protected] ~]# cat /proc/drbd |grep ro

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by [email protected], 2014-06-09 15:12:58

0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----

*****处于主状态的主机,才能进行挂载*****

格式化文件系统(文件格式根据自己的系统环境选择)

[[email protected] ~]# mkfs.ext4 /dev/drbd0

挂载此文件系统

[[email protected] ~]# mkdir /data

[[email protected] ~]# mount /dev/drbd0  /data/

[[email protected] ~]# df -Th

文件系统    类型      容量  已用  可用 已用%% 挂载点

/dev/sda3     ext4     11G  3.5G  6.9G  34% /

tmpfs        tmpfs    499M     0  499M   0% /dev/shm

/dev/sda1     ext4    2.0G   68M  1.9G   4% /tmp

/dev/drbd0    ext4     15G  166M   14G   2% /data

**************************此时,DRBD的配置已经完成!***************************

**************************测试验证***********************************************

命题:在挂载的data目录中创建一个测试文件,然后卸载挂载目录,然后切换主备节点,在备用节点上查看刚刚建立的测试文件还是否存在

[[email protected] ~]# touch /data/test

[[email protected] ~]# umount /data/

然后将node1变为备用节点:

[[email protected] ~]# drbdadm secondary r0

[[email protected] ~]# drbdadm role r1

Secondary/Secondary

DRBD执行角色切换前,需要在主节点执行 umount 命令, 去掉对DRBD设备的挂载,然后在另一台主机上将DRBD的角色修改为”Primary“,最后再进行挂载

接着在node2上进行操作:

[[email protected] ~]# drbdadm primary all

[[email protected] ~]# mount /dev/drbd0  /data

查看文件是否存在:

[[email protected] ~]# ls /data/

lost+found  test

******************************此时表明DRBD配置已成功!!!**************************

Mysql+DRBD+Heartbeat 实现mysql高可用的双击热备(DRBD篇),布布扣,bubuko.com

时间: 2024-10-13 12:36:53

Mysql+DRBD+Heartbeat 实现mysql高可用的双击热备(DRBD篇)的相关文章

Mysql+DRBD+Heartbeat 实现mysql高可用的双机热备(mysql+heartbeat篇)

*************************************部署MYSQL******************************************* yum -y install  gcc gcc-c++ gcc-g77 autoconf automake zlib* fiex* libxml* ncurses-devel libmcrypt* libtool-ltdl-devel* make cmake bison* useradd mysql -d /usr/loc

启博VPN高可用(HA)双机热备解决方案

有些用户的业务系统的特殊性,不允许长时间断网要保证系统的可靠性.通用的做法是布署两台相同配置的硬件VPN网关,一台设备设置为主模式,另一台设备设置为从模式.两台设备同时工作,如果主设备出现问题,另一台从设备会自动切换成主设备模式接管主设备的工作,不需要人工干预. 启博VPN双机热备(HA)功能除了支持常见的主从模式切换,还支持当主设备恢复工作后,会自动抢占成为主设备,从设备自动降为从设备工作模式.接线方式是通过网线把两台设备的LAN口连接起来,或者把两台设备LAN口接在同一个交换机上. 另外启博

heartbeat v1(CRM)+DRBD实现数据库服务器高可用集群搭建

一. 方案简介 本方案采用Heartbeat双机热备软件来保证数据库的高稳定性和连续性,数据的一致性由DRBD这个工具来保证.默认情况下只有一台mysql在工作,当主mysql服务器出现问题后,系统将自动切换到备机上继续提供服务,当主数据库修复完毕,又将服务切回继续由主mysql提供服务. 二. 方案优缺点 优点:安全性高.稳定性高.可用性高,出现故障自动切换, 缺点:只有一台服务器提供服务,成本相对较高.不方便扩展.可能会发生脑裂. 三. 方案架构图 四.  方案适用场景 本方案适用于数据库访

[转帖]【MySQL+keepalived】用keepalived实现MySQL主主模式的高可用

[MySQL+keepalived]用keepalived实现MySQL主主模式的高可用 https://www.jianshu.com/p/8694d07595bc 一.实验说明 MySQL主主模式,是两台MySQL数据库互为主从. 此实验是用keepalived实现MySQL主主模式的高可用,基于已经安装好了主主架构的MySQL,然后配置keepalived,验证高可用性! 二.实验环境 操作系统:CentOS 7.5 serverA:192.168.1.104 serverB: 192.1

基于drbd的mariaDB 的高可用集群

Distributed Replicated Block Device(DRBD)是一个用软件实现的.无共享的.服务器之间镜像块设备内容的存储复制解决方案. 数据镜像:实时.透明.同步(所有服务器都成功后返回).异步(本地服务器成功后返回) DRBD的核心功能通过Linux的内核实现,最接近系统的IO栈,但它不能神奇地添加上层的功能比如检测到EXT3文件系统的崩溃. 在DRBD中,资源是特指某复制的存储设备的所有方面.包括资源名称.DRBD设备(/dev/drbdm,这里m是设备最小号,最大号可

高可用分布式存储(Corosync+Pacemaker+DRBD+MooseFS)

========================================================================================= 一.服务器分布及相关说明 ========================================================================================= 1.服务器信息 2.总体架构   3.网络参数 4.元数据节点上需要额外部署的服务 Corosync + Pace

Linux基于heartbeat配置httpd高可用服务

Heartbeat是一个基于Linux开源的,被广泛使用的高可用集群系统.我们可以基于Heartbeat构建web高可用服务环境.本文在CentOS 6.5下做了一个简单示例,并对其日志进行了初步分析,供大家参考. 有关Heartbeat的相关知识,可以参考: Heartbeat 集群组件概述 Heartbeat 安装及配置 一.配置host解析及网络 ###主机名配置,与/etc/hosts中的解析两者配置保持一致 [[email protected] ~]# more /etc/syscon

Heartbeat+LVS+Ldirectord高可用&负载均衡

集群技术主要分为三大类: 高可用性(High Available Cluster),例:Linux-HA 负载均衡(Load balancing Cluster),例:LVS.MOSIX 高性能计算(High Performance Computing),例:Beowulf 我们这里使用 RHEL5.2,LVS,Linux-HA,Ldirectord,构造一个高可用的负载均 衡集群系统.如图: Load Balancer 是整个集群系统的前端,负责把客户请求转发到 Real Server 上.

MHA大杀器——mysql主、从双击热备配置安装解析

MHA的主要作用: 在mysql的主从复制中,当master崩溃了,利用mha实现backup顶替崩溃的master自动切换为master继续工作,从而实现高可用. 下面介绍本次实验的环境: MHA分为manager管理节点和node节点,一般来讲最少是三台服务器,两台node节点,一台manager节点,但本次环境限制,只能使用两台,所以把manager也装在一台node节点上. 两台服务器,两个网口: IP: 10.2.16.253     10.0.0.1  node1 10.2.16.2