corosync+pacemaker+mysql+drbd

一、什么是DRBD

DRBD(Distributed Replicated Block Device)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。

二、集群中常见的存储类型

DAS:Direct Attached Storage;drbd属于此类

NAS:Network Attached Storage;如nfs

SAN:Storage Area Network;如iSCSI

DAS和SAN输出的是设备接口,前端各节点的内核分别维护文件锁,若前端节点之间要求同时读写而又不能共享锁信息,则可能产生资源争用问题,而NAS输出是的文件系统接口,文件锁由提供NAS的主机维护,所以不会产生资源争用问题

三、DRBD的原理

DRBD由两部分组成:内核模块和用户空间的管理工具。DRBD内核模块程序工作于buffer cache和磁盘高度器之间。DRBD将接收到的数据写入磁盘,并且复制一份通过网络发送给对方节点,对方节点的DRBD将接收到的数据写入本地对应的磁盘上,类似于RAID 1的功能,在高可用(HA)集群中使用DRBD,可以替代使用一个后端共享存储。

DRBD需要构建在底层物理设备之上,然后构建出一个块设备。对于用户来说,一个DRBD设备,就像是一块物理的磁盘,可以在上面内创建文件系统。DRBD所支持的底层设备可以是:
     ①磁盘或磁盘的某个分区;
     ②soft raid;
     ③逻辑卷;,
     ⑤其他块设备

构建DRBD的底层设备的空间大小必须相同

四、DRBD基础概念

1、资源:

资源名称:两个节点上可构建多个DRBD架构,每个独立的DRBD架构用资源名来标识,资源名只能使用ASCII码,且之间不能包含空白字符

DRBD设备:每个DRBD架构对应的DRBD块设备名称,/dev/drbd#,#从0开始

磁盘相关的配置信息:定义创建DRBD设备需要用到的磁盘或分区,以及DRBD的元数据信息的存放位置

网络相关的配置信息:定义是否认证

2、资源角色:Primary or Secondary,目前DRBD只支持双节点:

primary:唯一标识读写操作,可以格式化、挂载

secondary,不允许挂载和读写

3、DRDB工作模式:

primary/secondary(主从模型):任何资源,在任何时刻,只能被主节点读写

primary/primary(双主模型):任何用户,在任何时刻,可以通过任意节点对DRBD进行读写操作,但是双主节点模型需要依靠集群文件系统来实现(将两个节点做成高可用集群,启用分布式锁管理器,将DRBD设备格式化为集群式文件系统)。

4、复制模型

protocol A:异步复制,一旦写入本地磁盘,且复制的数据已在发送队列中,则被认为是完成;此种模型性能最好

protocol B:半同步复制,一旦写入本地磁盘,且复制的数据已到达对方节点的缓冲区,则被认为是完成;

protocol C:完全同步复制,数据已确认写入到本地磁盘和对方节点的磁盘才被认为是完成,默认模型;此种模型的数据安全性最好

下面以案例的方式演示drbd的安装配置

四、案例:corosync+pacemaker+mysql+drbd

1、设计方案

2、准备工作

时间同步、双机互信、名称通信等,此各略。可参考博客http://9124573.blog.51cto.com/9114573/1763980

3、DRBD的安装配置

⑴在两个节点上安装软件包

drbd内核模块代码已经整合进Linux内核2.6.33以后的版本中,因此,如果内核版本高于此版本的话,只需要安装管理工具即可;否则需要同时安装内核模块和管理工具两个软件包,并且此两者的版本号一定要保持对应。

目前适用CentOS 5的drbd版本主要有8.0、8.2、8.3三个版本,其对应的rpm包的名字分别为drbd, drbd82和drbd83,对应的内核模块的名字分别为kmod-drbd, kmod-drbd82和kmod-drbd83。而适用于CentOS 6的版本为8.4,其对应的rpm包为drbd和drbd-kmdl,但在实际选用时,要切记:除了drbd和drbd-kmdl的版本要对应,drbd-kmdl的版本也要与当前系统的内核版本相对应。

uname -r  #确定内核版本

rpm -ivh drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm drbd-8.4.3-33.el6.x86_64.rpm

modprobe drbd

[[email protected] ~]# uname -r
2.6.32-431.el6.x86_64
[[email protected] ~]# yum -y install drbd-8.4.3-33.el6.x86_64.rpm drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm
...
[[email protected] ~]# modprobe -l | grep drbd
updates/drbd.ko
[[email protected] ~]# modprobe drbd
[[email protected] ~]# lsmod | grep drbd
drbd                  326010  0 
libcrc32c               1246  1 drbd
#在另一节点上也安装好软件包

⑵配置drbd

drbd的主配置文件为/etc/drbd.conf;为了管理的便捷性,目前通常会将些配置文件分成多个部分,且都保存至/etc/drbd.d/目录中,主配置文件中仅使用"include"指令将这些配置文件片断整合起来。通常,/etc/drbd.d目录中的配置文件为global_common.conf和所有以.res结尾的文件。其中global_common.conf中主要定义global段和common段,而每一个.res的文件用于定义一个资源。

在配置文件中,global段仅能出现一次,且如果所有的配置信息都保存至同一个配置文件中而不分开为多个文件的话,global段必须位于配置文件的最开始处。目前global段中可以定义的参数仅有minor-count, dialog-refresh, disable-ip-verification和usage-count。

common段则用于定义被每一个资源默认继承的参数,可以在资源定义中使用的参数都可以在common段中定义。实际应用中,common段并非必须,但建议将多个资源共享的参数定义为common段中的参数以降低配置文件的复杂度。

     resource段则用于定义drbd资源,每个资源通常定义在一个单独的位于/etc/drbd.d目录中的以.res结尾的文件中。资源在定义时必须为其命名,名字可以由非空白的ASCII字符组成。每一个资源段的定义中至少要包含两个host子段,以定义此资源关联至的节点,其它参数均可以从common段或drbd的默认中进行继承而无需定义。

drbd的用户空间工具:drbdadm, drbdmeta, drbdsetup

[[email protected] ~]# rpm -ql drbd
/etc/bash_completion.d
/etc/bash_completion.d/drbdadm
/etc/drbd.conf   #主配置文件
/etc/drbd.d
/etc/drbd.d/global_common.conf   #配置文件
/etc/ha.d/resource.d/drbddisk
/etc/ha.d/resource.d/drbdupper
/etc/rc.d/init.d/drbd   #服务脚本
/etc/udev/rules.d/65-drbd.rules
/etc/xen/scripts/block-drbd
/lib/drbd/drbdadm-83
/lib/drbd/drbdsetup-83
/sbin/drbdadm   #用户空间工具
/sbin/drbdmeta
/sbin/drbdsetup
/usr/lib/drbd    #该目录下是一些功能脚本
/usr/lib/drbd/crm-fence-peer.sh
/usr/lib/drbd/crm-unfence-peer.sh
/usr/lib/drbd/notify-emergency-reboot.sh
...
/usr/lib/ocf
/usr/lib/ocf/resource.d
/usr/lib/ocf/resource.d/linbit
/usr/lib/ocf/resource.d/linbit/drbd   #资源代理
/usr/sbin/drbd-overview   #该命令用于观察drbd节点状态
/usr/share/doc/drbd-8.4.3
...
[[email protected] ~]# vim /etc/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镜像的分区;注意:用于drbd镜像的分区大小要相同

[[email protected] ~]# fdisk /dev/sda

WARNING: DOS-compatible mode is deprecated. It‘s strongly recommended to
         switch off the mode (command ‘c‘) and change display units to
         sectors (command ‘u‘).

Command (m for help): p

Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000f3804

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26        1332    10485760   83  Linux
/dev/sda3            1332        1593     2097152   82  Linux swap / Solaris

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e
Selected partition 4
First cylinder (1593-3916, default 1593): 
Using default value 1593
Last cylinder, +cylinders or +size{K,M,G} (1593-3916, default 3916): 
Using default value 3916

Command (m for help): n
First cylinder (1593-3916, default 1593): 
Using default value 1593
Last cylinder, +cylinders or +size{K,M,G} (1593-3916, default 3916): +2G

Command (m for help): p

Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000f3804

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26        1332    10485760   83  Linux
/dev/sda3            1332        1593     2097152   82  Linux swap / Solaris
/dev/sda4            1593        3916    18666534    5  Extended
/dev/sda5            1593        1854     2103487+  83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
[[email protected] ~]# partx -a /dev/sda
...
[[email protected] ~]# partx -a /dev/sda
...
#在另一节点上执行类似操作

◆配置/etc/drbd.d/global-common.conf

[[email protected] ~]# cd /etc/drbd.d
[[email protected] drbd.d]# vim global_common.conf 

global {
        usage-count no;   #是否通知drbd官方新增使用数,一般设为no
        # minor-count dialog-refresh disable-ip-verification
}

common {   #common段指定各资源共享的配置
        protocol C;   #指定节点间的复制模型,缺省即为protocol C
        handlers {
                # These are EXAMPLE handlers only.
                # They may have severe implications,
                # like hard resetting the node under certain circumstances.
                # Be careful when chosing your poison.

                # pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
                # pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
                # local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; 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";
                # before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
                # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
        }

        startup {
                #wfc-timeout 120;
                #degr-wfc-timeout 120;
                #become-primary-on both;   #配置双主模型时需要启用该选项
        }

        options {
                # cpu-mask on-no-data-accessible
        }

        disk {
                on-io-error detach;   #当drbd中的磁盘出现故障时,将其拆除
                #fencing resource-only;
        }

        net {
                cram-hmac-alg "sha1";   #消息认证使用哪种算法
                shared-secret "mydrbdtest";   #共享密钥                
        }

        syncer {
                rate 300M;    #同步的最大速率;初始同步时可调大速率,同步完成后再调小
        }
}

◆定义一个资源/etc/drbd.d/mysql.res

[[email protected] drbd.d]# vim mysql.res

resource mysql {
  on node1 {
    device    /dev/drbd0;   #drbd设备名
    disk      /dev/sda5;   #用到的磁盘或分区
    address   192.168.30.10:7798;
    meta-disk internal;   #元数据存于何处
  }
  on node2 {
    device    /dev/drbd0;
    disk      /dev/sda5;
    address   192.168.30.20:7798;
    meta-disk internal;
  }
}

◆同步配置文件

[[email protected] drbd.d]# ls
global_common.conf  mysql.res
[[email protected] drbd.d]# scp ./* [email protected]:/etc/drbd.d/
global_common.conf                                                     100% 1425     1.4KB/s   00:00    
mysql.res                                                              100%  272     0.3KB/s   00:00

◆初始化资源,在两个节点上分别执行:drbdadm create-md RESOURCE

[[email protected] ~]# drbdadm create-md mysql;ssh [email protected] ‘drbdadm create-md mysql‘
Writing meta data...
initializing activity log
NOT initializing bitmap
lk_bdev_save(/var/lib/drbd/drbd-minor-0.lkbd) failed: No such file or directory
New drbd meta data block successfully created.
lk_bdev_save(/var/lib/drbd/drbd-minor-0.lkbd) failed: No such file or directory
NOT initializing bitmap
lk_bdev_save(/var/lib/drbd/drbd-minor-0.lkbd) failed: No such file or directory
Writing meta data...
initializing activity log
New drbd meta data block successfully created.
lk_bdev_save(/var/lib/drbd/drbd-minor-0.lkbd) failed: No such file or directory

◆启动服务,在两个节点上分别执行:/etc/init.d/drbd start

[[email protected] ~]# service drbd start;ssh [email protected] ‘service drbd start‘
Starting DRBD resources: [
     create res: mysql
   prepare disk: mysql
    adjust disk: mysql
     adjust net: mysql
]
..........
***************************************************************
 DRBD‘s startup script waits for the peer node(s) to appear.
 - In case this node was already a degraded cluster before the
   reboot the timeout is 0 seconds. [degr-wfc-timeout]
 - If the peer was available before the reboot the timeout will
   expire after 0 seconds. [wfc-timeout]
   (These values are for resource ‘mysql‘; 0 sec -> wait forever)
 To abort waiting enter ‘yes‘ [  80]: yes

.
Starting DRBD resources: [
     create res: mysql
   prepare disk: mysql
    adjust disk: mysql
     adjust net: mysql
]
WARN: stdin/stdout is not a TTY; using /dev/console.

◆查看启动状态:cat /proc/drbd或drbd-overview

[[email protected] ~]# drbd-overview
  0:mysql/0  Connected Secondary/Secondary Inconsistent/Inconsistent C r-----

◆将其中一个节点设置为Primary。在要设置为Primary的节点上执行如下命令:

drbdadm primary --force RESOURCE

或 drbdadm -- --overwrite-data-of-peer primary RESOURCE

[[email protected] ~]# drbdadm primary --force mysql
[[email protected] ~]# drbd-overview
  0:mysql/0  SyncSource Primary/Secondary UpToDate/Inconsistent C r---n- 
	[==>.................] sync‘ed: 16.8% (1753172/2103380)K	
[[email protected] ~]#  drbd-overview
  0:mysql/0  Connected Secondary/Primary UpToDate/UpToDate C r-----

◆创建文件系统并挂载

文件系统的挂载只能在Primary节点进行,因此,也只有在设置了主节点后才能对drbd设备进行格式化:

mke2fs -t ext4 -L DRBD /dev/drbd0

mkdir /mydata

mount /dev/drbd0 /mydata

[[email protected] ~]# mke2fs -t ext4 -L DRBD /dev/drbd0
...
[[email protected] ~]# mkdir /mydata
[[email protected] ~]# mount /dev/drbd0 /mydata
[[email protected] ~]# mkdir /mydata/{data,binlogs}
[[email protected] ~]# chown -R mysql.mysql /mydata/{data,binlogs}

◆在两个节点上安装上mysql-server并在Primary节点上执行mysql的初始化

[[email protected] ~]# yum -y install mysql-server;ssh [email protected] ‘yum -y install mysql-server‘
...
[[email protected] ~]# vim /etc/my.cnf

[mysqld]
datadir=/mydata/data
socket=/var/lib/mysql/mysql.sock
user=mysql
log-bin=/mydata/binlogs/mysql-bin
innodb_file_per_table=ON
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
skip-name-resolve

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[[email protected] ~]# scp /etc/my.cnf [email protected]:/etc/
my.cnf                                                                                                                                   100%  326     0.3KB/s   00:00
[[email protected] ~]# service mysqld start
Initializing MySQL database:  Installing MySQL system tables...
OK
Filling help tables...
OK
...
Starting mysqld:                                           [  OK  ]
[[email protected] ~]# ls /mydata/data
ibdata1  ib_logfile0  ib_logfile1  mysql  test
[[email protected] ~]# mysql
...
mysql> create database hellodb;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hellodb            |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.01 sec)

mysql>  grant all on *.* to [email protected]‘192.168.30.%‘ identified by ‘magedu‘;
Query OK, 0 rows affected (0.07 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye

◆Primary和secondary节点的切换

对于Primary/Secondary模型的drbd服务来说,在某个时刻只能有一个节点为Primary,因此,要切换两个节点的角色,只能先将原有的Primary节点设置为secondary后,才能将原来的secondary节点设置为Primary:

node1:

umount /mydata

drbdadm secondary mysql

node2:

drbdadm primary mysql

drbd-overview

mkdir /mydata

mount /dev/drbd0 /mydata

[[email protected] ~]# umount /mydata
umount: /mydata: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
[[email protected] ~]# service mysqld stop
Stopping mysqld:                                           [  OK  ]
[[email protected] ~]# umount /mydata
[[email protected] ~]# drbdadm secondary mysql
[[email protected] ~]# drbd-overview
  0:mysql/0  Connected Secondary/Secondary UpToDate/UpToDate C r-----
[[email protected] ~]# drbdadm primary mysql
[[email protected] ~]# drbd-overview
  0:mysql/0  Connected Primary/Secondary UpToDate/UpToDate C r----- 
[[email protected] ~]# mkdir /mydata
[[email protected] ~]# mount /dev/drbd0 /mydata
[[email protected] ~]# service mysqld start
Starting mysqld:                                           [  OK  ]
[[email protected] ~]# mysql
...
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hellodb            |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.00 sec)
时间: 2024-10-26 13:20:02

corosync+pacemaker+mysql+drbd的相关文章

Corosync+Pacemaker+MySQL+DRBD(二)

上接Corosync+Pacemaker+MySQL+DRBD(一)http://9124573.blog.51cto.com/9114573/1768076 ⑶布署corosync+pacemaker ◆安装软件包 pacemaker依赖corosync,安装pacemaker包会连带安装corosync包 yum -y install pacemaker [[email protected] ~]# yum -y install pacemaker;ssh [email protected]

corosync+pacemaker+mysql+drbd 实现mysql的高可用

corosync corosync的由来是源于一个Openais的项目,是Openais的一个子 项目,可以实现HA心跳信息传输的功能,是众多实现HA集群软件中之一,heartbeat与corosync是流行的Messaging Layer (集群信息层)工具.而corosync是一个新兴的软件,相比Heartbeat这款很老很成熟的软件,corosync与Heartbeat各有优势,博主就不在这里比较之间的优势了,corosync相对于Heartbeat只能说现在比较流行. pacemaker

corosync+pacemaker+crmsh+DRBD实现数据库服务器高可用集群构建

  DRBD (DistributedReplicated Block Device) 是 Linux 平台上的分散式储存系统.其中包含了核心模组,数个使用者空间管理程式及 shell scripts,通常用于高可用性(high availability, HA)丛集.DRBD 类似磁盘阵列的RAID 1(镜像),只不过 RAID 1 是在同一台电脑内,而 DRBD 是透过网络. DRBD 是以 GPL2 授权散布的自由软件. 实验架构图: 一.高可用集群构建的前提条件 1.主机名互相解析,实现

Corosync部署MySQL+DRBD高可用服务

介绍篇 高可用集群主要是有两个或者多个节点进行工作,ha基本组成部分包括四个部分:1.位于最底层的信息和基础架构层(Messaging Layer),主要用于节点之间传递心跳信息,故也称为心跳层.节点之间传递心跳信息可以通过广播,组播,单播等方式.2.第二层为成员关系(Membership)层,这层最重要的作用是主节点通过cluster consensus menbership service(CCM或者CCS)这种服务由第一层提供的信息,来生产一个完整的成员关系.这层主要实现承上启下的作用,承

CentOS 6.5环境实现corosync+pacemaker实现DRBD高可用

DRBD (Distributed Replicated Block Device)分布式复制块设备,它是 Linux 平台上的分散式储存系统,通常用于高可用性(high availability, HA)集群中.DRBD 类似磁盘阵列的RAID 1(镜像),只不过 RAID 1 一般配置在一台服务器内,而 DRBD 是通过网络. DRBD Resource:DRBD所具有的几种属性: resource name:可以使用除空白字符外的任意ACSII表中的字符: drbd设备:drbd的设备的访

corosync+pacemaker and drbd实现mysql高可用集群

DRBD:Distributed Replicated Block Device 分布式复制块设备,原理图如下 DRBD 有主双架构和双主架构的,当处于主从架构时,这个设备一定只有一个节点是可以读写的,另外的节点是不可读的,连挂载都不可能,只有一个节点是主的,其它节 点都是从的.当做为主主架构时,需要达到几个条件,1.在高可用集群中启用DRBD;  2. 启用分布式文件锁功能,即需要把磁盘格式化为集群文件系统(如GFS2,OCFS2等):3. 把DRBD做成资源. 数据的存储过程: 当某个进程存

how-to create a high-availability mysql setup with corosync pacemaker and drbd on ubuntu

前言 坑无处不有.对各个组件大家都是仁者见仁智者见智. 各个组件的工作原理适用场景就不在一 一阐述.--待续--环境准备Corosync 安装与配置Pacemaker 安装与配置DRBD 安装与配置MySQL 安装与配置Crm 资源管理 系统结构 环境准备 $cat /etc/issue Ubuntu 14.04.4 LTS \n \l $uname  -r 4.2.0-27-generic [Both] $grep '10\|20' /etc/hosts 172.16.9.10 eva.suz

pacemaker+mysql+drbd

使用pacemaker创建一个主/备模式的集群,并且创建一个存储(drbd) 会使用到以下软件: corosync:作为通信层和提供关系管理服务,心跳引擎,检测心跳信息 Pacemaker来实现资源管理 DRBD:作为一个经济的共享存储方案. crm shell 来显示并修改配置文件 一 配置pacemaker pacemaker可以去网站上下载,pacemaker有两种心跳引擎:heartbeat和corosync,以下实验使用corosync server1: 1 yum install -

drbd+mariadb+corosync+pacemaker构建高可用,实现负载均衡

DRBD DRBD是由内核模块和相关脚本而构成,用以构建高可用性的集群 drbd 工作原理:DRBD是一种块设备,可以被用于高可用(HA)之中.它类似于一个网络RAID-1功能. 当你将数据写入本地 文件系统时,数据还将会被发送到网络中另一台主机上.以相同的形式记录在一个 文件系统中. 本地(主节点)与远程主机(备节点)的数据可以保证实时同步.当本地系统出现故障时,远 程主机上还会保留有一份相同的数据,可以继续使用.在高可用(HA)中使用DRBD功能,可以代替使用一 个共享盘阵.因为数据同时存在