推荐-HA专题: 编译安装并配置DRBD

HA专题: 编译安装并配置DRBD

前言

上篇我们讲到使用corosync+pacemaker实现MySQL高可用, 但是NFS容易成为单点故障从而导致数据丢失等严重问题, 我们可以使用drbd来实现MySQL数据的高可用, 本文介绍如何编译安装drbd并配置drbd实现不同主机的分区镜像

实验环境

今天实验环境比较简单, 所以就不画图了

主机 IP 功用
node1.anyisalin.com 172.16.1.2 drbd节点
node2.anyisalin.com 172.16.1.3 drbd节点

注意: 本文实验中所有主机SElinux和iptables都是关闭的

DRBD介绍

The Distributed Replicated Block Device (DRBD) is a software-based, shared-nothing, replicated storage solution mirroring the content of block devices (hard disks, partitions, logical volumes etc.) between hosts. 转自官方文档: Chapter 1. DRBD Fundamentals

分布式文件块(DRBD)是一种基于软件, 无共享的, 复制, 镜像主机间块设备的内容(lvm, partition, disk..)的解决方案

DRBD镜像数据的特点:

  • 实时(in real time): 实时复制镜像设备的内容

  • 透明(transparently): 对于用户和应用程序镜像数据的过程是透明的

  • 同步、异步(synchronously、asynchronously): 同步模式下, 程序会通知所欲主机并在所有的写操作写入所有主机才会写入本地磁盘、异步模式下, 程序会在通知写操作写入其他主机之前就写入本地磁盘

DRBD在Linux内核I/O栈的位置
Alt textblob.png

DRBD的三种协议
上面的图可以看出DRBD在I/O栈的位置, 也大体可以了解DRBD的工作流程, 其实DRBD有三种工作模型, 我们称它为三种工作协议, 分别为protcol A, protcol B, protocol C, 我们大体说一下这三种工作协议

  • Protocol A: Asynchronous, 也称为异步模型, 当DRBD将数据流传到本机网卡接口时就视为完成传输

  • Protocol B: Semi-Synchronous, 也成为半同步模型, 当DRBD将数据流传到目标主机的网卡接口时视为完成传输

  • Protocol C: Synchronous, 也成为同步模型, 当DRBD将数据流传到目标主机并且目标主机将数据写入DRBD设备时才视其为完成传输

DRBD在用户空间的管理命令

  • drbdadm: 在drbd套件用较为高级的程序, 配置方法较为简单, 获取配置文件中的参数来进行配置, 算是drbdsetup和drbdmeta的前端工具

  • drbdsetup: 可以直接配置加载的DRBD模块, 配置较为复杂

  • drbdmeta: 允许创建、转储、还原和修改DRBD元数据结构, 配置更为复杂

安装前准备工作

配置一个HA集群的前提需要配置时间同步, 双机互信, 主机名解析
由于我们以前的博文已经讲解过如何配置:可以查看
HA配置准备工作

获取并编译安装DRBD

我这里系统是CentOS 6.7, 通过官方站点DRBD DownLoad下载drbd-8.4.4.tar.gz

[root@node1 ~]# yum groupinstall "Development Tools" "Server Platform Development" -y --nogpgcheck #安装开发包组

[root@node1 ~]# wget http://oss.linbit.com/drbd/8.4/drbd-8.4.4.tar.gz #下载drbd
[root@node1 ~]# tar xf drbd-8.4.4.tar.gz -C /usr/src/
[root@node1 ~]# cd /usr/src/drbd-8.4.4/


#编译安装
[root@node1 drbd-8.4.4]# ./configure --prefix=/usr/local/drbd --sysconfdir=/etc/ --with-km

[root@node1 drbd-8.4.4]# make DIR=/usr/src/kernels/2.6.32-573.el6.x86_64/
[root@node1 drbd-8.4.4]# make install
[root@node1 drbd-8.4.4]# cd drbd
[root@node1 drbd]# make KDIR=/usr/src/kernels/2.6.32-573.el6.x86_64/
[root@node1 drbd]# cp drbd.ko /lib/modules/2.6.32-573.el6.x86_64/kernel/lib/

#装载模块
[root@node1 drbd]# depmod
[root@node1 drbd]# modprobe drbd
[root@node1 drbd]# lsmod | grep drbd
drbd                  327242  0 
libcrc32c               1246  1 drbd

node2的操作同上, 由于篇幅原因不做叙述

配置DRBD

分区

注意:创建完分区后不能对其进行格式化, 下面的操作在node1和node2都需要执行

[root@node1 ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xa5927bb4.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

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): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-2610, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +10G

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

Calling ioctl() to re-read partition table.
Syncing disks.
[root@node1 ~]# partx -a /dev/sdb
BLKPG: Device or resource busy
error adding partition 1
[root@node1 ~]# partx -a /dev/sdb
BLKPG: Device or resource busy
error adding partition 1

配置文件

配置文件如下, /etc/drbd.d/glob-common.conf, 并复制到node2上

global {
        usage-count no;
        # minor-count dialog-refresh disable-ip-verification
}

common {
        protocol C;

        handlers {
                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;
        }

        disk {
                on-io-error detach;
                #fencing resource-only;
        }

        net {
                cram-hmac-alg "sha1";
                shared-secret "mydrbdlab";
        }

        syncer {
                rate 1000M;
        }

配置文件如下, /etc/drbd.d/data.res, 并复制到node2上

resource data {
        on node1.anyisalin.com  {
         device  /dev/drbd0;
         disk   /dev/sdb1;
         address 172.16.1.2:7789;
         meta-disk   internal;
        }
        on node2.anyisalin.com {
         device  /dev/drbd0;
         disk   /dev/sdb1;
         address 172.16.1.3:7789;
         meta-disk  internal;
        }

}

启动并设置DRBD

首先我们先在node1node2分别初始化资源

[root@node1 drbd.d]# drbdadm create-md data  #node1运行
[root@node2 drbd.d]# drbdadm create-md data  #node2运行

同时在node1node2上启动drbd

[root@node1 drbd.d]# service drbd start  #node1运行
[root@node2 drbd.d]# service drbd start  #node2运行

设置node1为主节点

[root@node1 drbd.d]# drbdadm primary --force data 
[root@node1 drbd.d]# cat /proc/drbd #可以看到同步过程, 手慢了没截到图

# 同步完成后
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/Diskless C r-----
 ns:0 nr:0 dw:0 dr:792 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:10490052

格式化并挂载

我们需要对drbd设备格式化并挂载才能使用, P.S drbd正常情况下只有主节点能够挂载

[root@node1 drbd.d]# mkfs.ext4 /dev/drbd0  #格式化drbd设备
[root@node1 drbd.d]# mkdir /data
[root@node1 drbd.d]# mount /dev/drbd0 /data/ #挂载到data目录
[root@node1 drbd.d]# cd /data/
[root@node1 data]# touch node1.anyisalin.com  #创建文件在data目录

验证冗余性

我们将node1设置为seondary并将node2设置为primary

[root@node1 ~]# umount /data/   #首先要卸载drbd0
[root@node1 ~]# drbdadm secondary data  #设置为secondary
[root@node2 ~]# drbdadm primary data   #设置node2为primary

[root@node2 ~]# cat /proc/drbd   #现在为Primary
 2016-04-12 10:29:41 0: cs:Connected ro:Primary/Secondary ds:Diskless/UpToDate C r-----
    ns:0 nr:664 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

[root@node2 ~]# mkdir /data
[root@node2 ~]# mount /dev/drbd0 /data/  #挂载到/data
[root@node2 ~]# cd /data/  
[root@node2 data]# ls  #还是能查看到node1创建的文件
lost+found  node1.anyisalin.com
[root@node2 data]# touch node2.anyisalin.com

总结

本篇文章的DRBD还不算特别完整, 只能通过手动来切换主从, 我们下篇文章介绍如何将DRBD配置成集群资源并结合MySQL, 实现MySQL数据库的高可用

作者水平很低, 如果有错误及时指出, 如果你觉得本文写的好请点一波赞~(≧▽≦)/~
作者: AnyISaIln QQ: 1449472454
感谢: MageEdu

原创文章,作者:Net18-AnyISalIn,如若转载,请注明出处:http://www.178linux.com/14703

(0)
上一篇 2016-04-11 17:06
下一篇 2016-04-12 16:00

相关推荐

  • 主流Linux发行版对比

      对服务器来说,没有最好的Linux发行版。一切都取决于企业的实际需求。 如今Linux已不再只是一款自由操作系统,它还承载了许多企业的核心应用。在对比流行的Linux发行版时,不仅要考虑有吸引力的功能集,还要关注系统的支持与服务。 服务器管理员担心操作系统的维护和支持周期。维护生命周期指的是Linux发行版持续提供产品补丁和更新的时间。支持方面…

    Linux干货 2016-10-31
  • shell三剑客之grep

    正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 给定一个正则表达式和另一个字符串,我们可以达到如下的目的: 1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”); 2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。 正…

    Linux干货 2016-08-08
  • Boot目录下内容丢失导致系统无法启动

    Boot目录下内容丢失导致系统无法启动 笔者朋友近期在一次学习过程中不慎将虚拟机中boot目录下内容丢失,导致系统无法启动。当然此前他并不知道是这样,只是应为莫名的弹出框报错所有导致系统无法启动。此后朋友将此故障告知笔者,笔者本身其实也是小白刚刚学习linux不就,但是对这些稀奇古怪的故障感觉很有兴趣,所以笔者就掉进坑里搞了好久才搞出来点眉目来。为了让更多学…

    Linux干货 2016-10-24
  • 正则表达式与例题

    正则表达式与例题  一BRE 和ERE 由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能 程序支持:grep ;sed ;  awk ; vim ; less ; nginx ; varnish 元字符分类:字符匹配  匹配次数  位置锚定  分组 二.基…

    Linux干货 2017-07-29
  • Week3 Linux用户和组管理及文本处理工具

      用户和组管理 groupadd命令:添加组     groupadd [选项] group_name         -g GID:指定GID;默认是上一个组的GID+1;  …

    Linux干货 2017-02-11
  • 搭建简单的ftp和http

    搭建简单的ftp和http 我们主要尝试光盘和编译两种方式安装 ftp 首先我们先安装ftp ftp可以用来做文件传输,也可以搭建ftp作为我我们的网络yum源 首先我们要先把镜像连接到我们的Linux中 进入/etc/yum.repos.d/创建一个.repo结尾的文件,在里面配置自己的yum源 [base] baseurl=file:///misc/cd…

    2017-06-15