MysqlDBA高级运维学习之路-MySQL高可用工具drbd实战-成都快上网建站

MysqlDBA高级运维学习之路-MySQL高可用工具drbd实战

1.DRBD介绍

Distributed Replicated Block Device (DRBD)是基于块设备在不同的高可用服务器对之间同步和镜像数据的软件,通过它可以实现在网络中的两台服务器之间基于块设备级别的实时或异步镜像或同步复制,类似于rsync+inotify这样的系统架构项目软件。只不过drbd是基于文件系统底层的,即block层级的同步;而rsync+inotify是在文件系统之上的实际物理文件同步。所以dbrd效率更高。
块设备可以是磁盘分区,LVM逻辑卷,或整块磁盘。

站在用户的角度思考问题,与客户深入沟通,找到黄龙网站设计与黄龙网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:做网站、成都网站建设、企业官网、英文网站、手机端网站、网站推广、国际域名空间、雅安服务器托管、企业邮箱。业务覆盖黄龙地区。

2.DRBD的工作原理

DRBD是linux的内核的存储层中的一个分布式存储系统,可以使用DRBD在两台Linux服务器之间共享块设备、文件系统和数据。类似于一个网络RAID-1的功能,在基于DBRD的高可用(HA)的两台服务器主机上,当我们将数据写入到本地磁盘系统时,数据还会被实时的发送到网络中的另一台主机上并以相同的形式记录在另一个磁盘系统中,使得本地(主节点)与远程主机(备节点)的数据保持实时数据同步。这时,如果本地系统(主节点)出现故障,那么远程主机(备节点)上还会保留有一份和主节点相同的数据备份可以继续使用,不但数据不会丢失,还会提升访问数据的用户的体验。更多详细请查看dbrd官方网站http://www.dbrd.org/

drbd 工作原理图如下图所示:

Mysql DBA 高级运维学习之路-MySQL高可用工具drbd实战

3.DRBD的复制模式

协议A:

异步复制协议。一旦本地磁盘写入已经完成,数据包已在发送队列中,则写被认为是完成的。在一个节点发生故障时,可能发生数据丢失,因为被写入到远程节点上的数据可能仍在发送队列。尽管在故障转移节点上的数据是一致的,但没有及时更新。

协议B:

内存同步(半同步)复制协议。一旦本地磁盘写入已完成且复制数据包达到了对等节点则认为写在主节点上被认为是完成的。数据丢失可能发生在参加的两个节点同时故障的情况下,因为在传输中的数据可能不会被提交到磁盘。

协议C:

同步复制协议。只有在本地和远程节点的磁盘已经确认了写操作完成,写才被认为完成。没有任何数据丢失,所以这是一个集群节点的流行模式,但IO吞吐量依赖于网络带宽。

一般使用协议C,但选择C协议将影响流量,从而影响网络时延。为了数据可靠性,我们在生产环境使用时须慎重选项使用哪一种协议。

4.DBRD的企业应用场景

生产场景中drbd常用于基于高可用服务器之间的数据同步解决方案。

例如:heartbeat+drbd+nfs/mfs/gfs、heartbeat+drbd+MySQL/oracle等。实际上drbd可以配合任意需要数据同步的所有服务的应用场景。

5.常见的数据同步工具

(1)rsync(sersync,inotify,lsyncd)

(2)scp

(3)nc

(4)nfs(网络文件系统)

(5)union双机同步

(6)csync2多机同步

(7)软件的自身同步机制(mysql,oracle,mongdb,ttserver,redis..)文件放到数据库,同步到从库,再把文件拿出来。

(8)Drbd

6.部署Drbd服务需求描述

6.1 业务需求描述

业务需求可以结合前面配置的heartbeat来搭建dbrd服务,hearbeat的安装和部署我前面的文章已经写了。主服务器为heartrbeat-1-114,从服务器为heartbeat-1-115。

6.2 DRBD部署结构图

Mysql DBA 高级运维学习之路-MySQL高可用工具drbd实战

Mysql DBA 高级运维学习之路-MySQL高可用工具drbd实战

(1)Drbd服务通过直连线或以太网实时互相数据同步。

(2)两台存储服务器互相备份,正常情况下两端各提供一个主分区供NFS使用。

(3)存储服务器之间,存储服务和交换机之间都是双千兆网卡绑定。

(4)应用服务器通过NFS访问存储。

7.DRBD软件安装实验准备

7.1 操作系统:

CentOS-6.8-x86_64

7.2 DRBD服务主机资源准备

主服务器A:

主机名:heartbeat-1-114

eth0网卡地址:192.168.136.114(管理IP)

eth2网卡地址:10.0.10.4/255.255.255.0 (心跳IP)

从服务器B:

主机名:heartbeat-1-115

eth0网卡地址:192.168.136.115(管理IP)

eth2网卡地址:10.0.10.5/255.255.255.0(心跳IP)

虚拟VIP:

虚拟VIP在主服务器heartbeat-1-114上,VIP:192.168.136.116

需要修改主机名,关闭防火墙和selinux这些准备工作和heartbeat一样,我前面的安装heartbeat的文章有讲,这里就不讲了。就用安装heartbeat的那两台机器,主服务器heartbeat-1-114、从服务器heartbeat-1-115。

7.3 创建可用分区

Drbd是基于分区的,没有可用的分区肯定不行。我们先把heartbeat-1-114和heartbeat-1-1115两个虚拟机关机,然后在主节点heartbeat-1-114上添加一块1G的硬盘,在从节点heartbeat-1-115上添加一块2G的硬盘。添加硬盘就不演示了,然后启动两台机器。

7.4 对/dev/sdb进行分区

(1)对主节点/dev/sdb进行分区

[root@heartbeat-1-114 html]# fdisk -l|grep "/dev/sdb"
Disk /dev/sdb: 1073 MB, 1073741824 bytes
[root@heartbeat-1-114 html]# fdisk /dev/sdb

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/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 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: 0x000bb201

   Device Boot  Start End  Blocks   Id  System

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

Command (m for help): N
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (100-130, default 100): 
Using default value 100
Last cylinder, +cylinders or +size{K,M,G} (100-130, default 130): 
Using default value 130

Command (m for help): p

Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 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: 0x000bb201

   Device Boot  Start End  Blocks   Id  System
/dev/sdb1   1  99  795186   83  Linux
/dev/sdb2 100 130  249007+  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.
[root@heartbeat-1-114 html]# partprobe   
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).  As a result, it may not reflect all of your changes until after reboot.
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sdb (Device or resource busy).  As a result, it may not reflect all of your changes until after reboot.
Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has been opened read-only.
Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has been opened read-only.
Error: Invalid partition table - recursive partition on /dev/sr0.
[root@heartbeat-1-114 html]# fdisk -l|grep "/dev/sdb"
Disk /dev/sdb: 1073 MB, 1073741824 bytes
/dev/sdb1   1  99  795186   83  Linux
/dev/sdb2 100 130  249007+  83  Linux

(2)对备节点/dev/sdb进行分区

[root@heartbeat-1-115 etc]# fdisk -l|grep "/dev/sdb"
Disk /dev/sdb: 2147 MB, 2147483648 bytes
[root@heartbeat-1-115 etc]# fdisk /dev/sdb

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/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 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: 0x0003d93c

   Device Boot  Start End  Blocks   Id  System

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

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

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.
[root@heartbeat-1-115 etc]# partprobe
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sda (Device or resource busy).  As a result, it may not reflect all of your changes until after reboot.
Warning: WARNING: the kernel failed to re-read the partition table on /dev/sdb (Device or resource busy).  As a result, it may not reflect all of your changes until after reboot.
Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has been opened read-only.
Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has been opened read-only.
Error: Invalid partition table - recursive partition on /dev/sr0.
[root@heartbeat-1-115 etc]# fdisk -l|grep "/dev/sdb"
Disk /dev/sdb: 2147 MB, 2147483648 bytes
/dev/sdb1   1 197 1582371   83  Linux
/dev/sdb2 198 261  514080   83  Linux

因此,我们需要做的就是对/dev/sdb进行分区,需要分区的具体内容见下图:

Mysql DBA 高级运维学习之路-MySQL高可用工具drbd实战

提示:

1.这里的meta data分区一定不能格式化建立文件系统。

2.分好的分区现在不能直接挂在(mount)。

3.生产环境DRBD meta data分区一般可设为1-2G。这里的/dev/sdb2分区的预期大小1G应该是主节点和备节点的sdb2分区大小之和(305M+611M=916M),本次演示的大小是1G。

8.安装DRBD软件

DRDB软件可以编译安装也可以下载包含的源yum安装,本次事件采用编译安装的方式。

8.1 编译安装DRDB软件(注意下面步骤两台机器都要操作)

(1)下载drbd软件(两台机器都要操作)

可以在官网上下载http://oss.linbit.com/drbd/,然后用rz命令传到服务器

(2)安装gcc和gcc-c++

[root@heartbeat-1-114 tools]# yum install gcc gcc-c++ -y

(3)编译drbd

[root@heartbeat-1-114 tools]# pwd
/home/linzhongniao/tools
[root@heartbeat-1-114 tools]# export LC_ALL=C
[root@heartbeat-1-114 tools]# ls
drbd-8.4.4.tar.gz 
[root@heartbeat-1-114 tools]# tar –xf drbd-8.4.4.tar.gz
[root@heartbeat-1-114 tools]# cd drbd-8.4.4
[root@heartbeat-1-114 drbd-8.4.4]# ./configure --prefix=/usr/local/drbd8.4.4 --with-km --with-heartbeat --sysconfdir=/etc/

出现下面问题yum安装dpkg、dpkg-dev、dpkg-devel再编译

checking for udevinfo... false
configure: WARNING: No dpkg-buildpackage found, building Debian packages is disabled.
出现下面问题yum安装flex,重新编译
configure: error: Cannot build utils without flex, either install flex or pass the --without-utils option.

为了防止编译发生错误,最好提前安装上,下面是我在编译的时候需要安装的包。

yum install dpkg dpkg-dev dpkg-devel gcc gcc-c++ git rpm-build kernel-devel kernel-headers flex -y

(4)加载内核

1.先查找内核源码

[root@heartbeat-1-114 drbd-8.4.4]# ls -ld /usr/src/kernels/$(uname -r)/
ls: 无法访问/usr/src/kernels/2.6.32-642.el6.x86_64/: 没有那个文件或目录

没有内核源码文件路径yum安装kernel-devel kernel-headers在查看就有了

[root@heartbeat-1-114 drbd-8.4.4]# ls -ld /usr/src/kernels/$(uname -r)/
drwxr-xr-x 22 root root 4096 3月   5 05:55 /usr/src/kernels/2.6.32-696.20.1.el6.x86_64/

如果uname –r命令显示的系统内核和在/usr/src/kernels/下查找的系统内核不一样怎么办呢,很简单升级系统内核,重启系统后再查看内核就一样了。

[root@heartbeat-1-114 drbd-8.4.4]# ls -ld /usr/src/kernels/2.6.32-696.20.1.el6.x86_64/
drwxr-xr-x 22 root root 4096 Mar  6 19:24 /usr/src/kernels/2.6.32-696.20.1.el6.x86_64/
[root@heartbeat-1-114 drbd-8.4.4]# uname -r
 2.6.32-642.el6.x86_64
[root@heartbeat-1-114 drbd-8.4.4]# yum -y install kernel
[root@heartbeat-1-114 ~]# uname -r
 2.6.32-696.20.1.el6.x86_64

2.加载系统内核

[root@heartbeat-1-114 drbd-8.4.4]# make KDIR=/usr/src/kernels/$(uname -r)/
[root@heartbeat-1-114 drbd-8.4.4]# echo $?
0

(5)安装drbd

[root@heartbeat-1-114 drbd-8.4.4]# make install

echo $?为零安装成功

9.图片数据/data各配置参数

比较重要的是下面标黄的部分,我们还用部署heartbeat的那个环境,heartbeat的环境部署前面文章有,这里就不再演示了。

Mysql DBA 高级运维学习之路-MySQL高可用工具drbd实战

10.配置DRBD参数 (两台机器都要操作)

10.1 加载DRBD模块到内核

这个DRBD模块在重启电脑之后就会失效不会自动加载到系统内核中,我们可以放在/etc/rc.local里生效,让它开机生效。生产中是不需要放在/etc/rc.local里面的,不让自动启动,自动启动会导致一些不必要的问题。用lsmod |grep drbd查看有这个内容了就说明内核加载完成。

[root@heartbeat-1-114 drbd-8.4.4]# lsmod|grep drbd
[root@heartbeat-1-114 drbd-8.4.4]# mo
modinfo  modutil  mountmount.nfsmountpoint   mount.tmpfs  
modprobe more mount.cifs   mount.nfs4   mountstats  
[root@heartbeat-1-114 drbd-8.4.4]# modprobe drbd
[root@heartbeat-1-114 drbd-8.4.4]# lsmod|grep drbd
drbd  327370  0 
libcrc32c   1246  1 drbd
[root@heartbeat-1-114 drbd-8.4.4]# echo 'modprobe drbd' >>/etc/rc.local
[root@heartbeat-1-114 drbd-8.4.4]# tail -1 /etc/rc.local
modprobe drbd

10.2 编译DRBD的配置文件drbd.conf

(1)配置DRBD的配置文件

DRBD的配置文件在我们编译的时候指定的那个路径/etc/下。

[root@heartbeat-1-114 etc]# pwd
/etc
[root@heartbeat-1-114 etc]# cp drbd.conf{,.bak} 
[root@heartbeat-1-114 etc]# rm -f drbd.conf
[root@heartbeat-1-114 etc]# cat drbd.conf
global {
usage-count no;
}
common {
syncer {
# wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb
rate 1000M;
verify-alg crc32c;
}
}
resource data {
protocol C;

disk {
on-io-error detach;
}
on heartbeat-1-114 {
device/dev/drbd0;
disk  /dev/sdb1;
address   10.0.10.4:7788;
meta-disk /dev/sdb2[0];
}
on heartbeat-1-115 {
device/dev/drbd0;
disk  /dev/sdb1;
address   10.0.10.5:7788;
meta-disk /dev/sdb2[0];
}
} 

(2)配置文件参数说明

global {
    usage-count no;
}

前三行是你全局配置,一般网站都会同步开源网站的安装量,usage-count的值等于no,就是不允许官方统计。

common {
    syncer {
        # wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb
        rate 1000M;
        verify-alg crc32c;
    }
}

Common段里面设置了同步的速度比如1000M,crc32c是一个算法

resource data {
        protocol C;

    disk {
        on-io-error    detach;
    }
    on heartbeat-1-114 {
        device      /dev/drbd0;
        disk      /dev/sdb1;
        address      10.0.10.4:7788;
        meta-disk /dev/sdb2[0];        
    }
    on heartbeat-1-115 {
        device      /dev/drbd0;
        disk      /dev/sdb1;
        address      10.0.10.5:7788;
        meta-disk /dev/sdb2[0];        
    }
}

上面resource段是drbd的资源,protocol C是一个实时同步数据的协议,用A或B都是异步同步或半同步,这样会导致数据的丢失,除非业务需求数据不总要并发要求高的情况下。disk表示一个磁盘出现io错误怎么处理。resource后面的data是drbd的资源启动drbd的时候会用到,注意这里resource可以有多个资源,比如说再想增加一个资源,我们可以把resource这段复制一个就好了,需要修改的有resource后面的资源名称以及disk、meta-disk和同步的地址的端口号,例如7788。这里on heartbeat-1-114的on后面跟的是机器名,注意这里的机器名必须是uname –n返回的结果,device表示drbd的设备,disk表示对应本机/dev/sdb的第一个分区,address这里的地址是一个同步的地址,meta-disk是meta设备的数据分区对应本机/dev/sdb的第二个分区,0是meta 设备的一个格式。

11.启用 DRBD资源 (两台机器都要操作)

两台机器都要操作以heartbeat-1-114为例

11.1 初始化DRBD的metadata(Create device metadata)

初始化资源,注意我们初始的资源就是drbd.conf里resource后面的data。

[root@heartbeat-1-114 etc]# drbdadm create-md data
Writing meta data...
initializing activity log
NOT initializing bitmap
New drbd meta data block successfully created.

11.2 启动DRBD服务

启动drbd服务的命令:drbdadm up data

停止drbd服务的命令:drbdadm down data

drbdadm up 后跟的是resource设置的资源data,也可以指定所有资源drbdadm up all。准备节点都要启动以主节点为例:

[root@heartbeat-1-114 etc]# drbdadm up data
/usr/local/drbd8.4.4/var/run/drbd: No such file or directory
/usr/local/drbd8.4.4/var/run/drbd: No such file or directory

我们看有错误提示/usr/local/drbd8.4.4/var/run/drbd: No such file or directory

这个目录找不到centos6版本以上需要有这个目录,好我们就创建一个这个目录再启动drbd。

[root@heartbeat-1-114 ~]# mkdir -p /usr/local/drbd8.4.4/var/run/drbd
[root@heartbeat-1-114 etc]# drbdadm create-md data
Device '0' is configured!
Command 'drbdmeta 0 v08 /dev/sdb2 0 create-md' terminated with exit code 2

11.3 可以通过/proc/drbd查看drbd的状态

[root@heartbeat-1-114 etc]# cat /proc/drbd
version: 8.4.4 (api:1/proto:86-101)
GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@heartbeat-1-114, 2018-11-10 23:08:21
 0: 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:f oos:749984

这里显示ro:Secondary/Secondary ds:Inconsistent/Inconsistent是正确的都是从,处于无主(primary)的状态。

11.4 指定数据同步的主节点

指定数据同步的主节点的命令:drbdadm -- --overwrite-data-of-peer primary data

将主节点变为从节点的命令(前提服务器已经是主节点的情况下):/usr/share/heartbeat/hb_standby

说明:

1.如果为空硬盘。可以随意执行操作不需要考虑数据。

2.如果两边数据不一样(要特别注意同步数据的方向,否则可能丢失数据)如果对端磁盘有数据要提前备份,否则会把对端数据覆盖掉。

注意:在主服务器上操作我们的主服务器是heartbeat-1-114,同步DRBD数据到对端SERVER使数据保持一致

(1)指定主节点同步数据

[root@heartbeat-1-114 etc]# drbdadm -- --overwrite-data-of-peer primary data

查看主节点同步的信息

[root@heartbeat-1-114 etc]# cat /proc/drbd
version: 8.4.4 (api:1/proto:86-101)
GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@heartbeat-1-114, 2018-11-10 23:08:21
 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
ns:40960 nr:0 dw:0 dr:41631 al:0 bm:2 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:709024
[>...................] sync'ed:  6.0% (709024/749984)K
finish: 0:00:17 speed: 40,960 (40,960) K/sec
[root@heartbeat-1-114 etc]# cat /proc/drbd
version: 8.4.4 (api:1/proto:86-101)
GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@heartbeat-1-114, 2018-11-10 23:08:21
 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
ns:164556 nr:0 dw:0 dr:168607 al:0 bm:10 lo:0 pe:1 ua:4 ap:0 ep:1 wo:f oos:586144
[===>................] sync'ed: 22.3% (586144/749984)K
finish: 0:00:14 speed: 40,960 (40,960) K/sec
[root@heartbeat-1-114 etc]# cat /proc/drbd
version: 8.4.4 (api:1/proto:86-101)
GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@heartbeat-1-114, 2018-11-10 23:08:21
 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
ns:230100 nr:0 dw:0 dr:234143 al:0 bm:14 lo:0 pe:1 ua:4 ap:0 ep:1 wo:f oos:520608
[=====>..............] sync'ed: 31.0% (520608/749984)K
finish: 0:00:11 speed: 45,872 (45,872) K/sec

(2)从节点同步的信息

[root@heartbeat-1-115 etc]# cat /proc/drbd
version: 8.4.4 (api:1/proto:86-101)
GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@heartbeat-1-115, 2018-11-10 23:08:42
 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
ns:0 nr:749983 dw:749983 dr:0 al:0 bm:46 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

(3)参数说明

以主节点为例

cs:Connected:Connected是连接的状态,用zabbix做监控主要看Connected。
ro:Primary/Secondary: Primary是主,Secondary是从;也就是说本地是主对端是从。
ds:UpToDate/UpToDate:UpToDate是两边都更新完成。
ns(network send):网络发送。
nr(network receive):网络收到。备节点的这个点应该和主节点的ns的值是一样的。
dw(disk write):硬盘写入。把网络数据写到硬盘。如果备节点的dw、nr和主节点的ns的值一样说明数据时完全同步的

12.可能出现的问题及解决方法

cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----

cs:WFConnection ro:Secondary/Unknown ds:UpToDate/DUnknown 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:f oos:8444

解决方法:

1.检查两台物理网络连接或者IP及主机路由是否正确。

2.停止iptables防火墙。

3.还可能是发生列脑导致的结果。

出现上面问题可用下面操作解决:

(1)在从节点slave上操作:

drbdadm secondary data
drbdadm disconnect data
drbdadm -- --discard-my-data connect data ---> 丢弃本端数据进行连接

(2)在主节点上操作:

通过查看cat/proc/drbd状态,如果不是WFConnection状态,则需要用下面命令手动重新连接资源

drbdadm connect data

然后再启动备节点的drbd资源

13.挂载测试数据库同步及查看备节点同步状态

(1)创建DRBD文件系统

格式化主节点的drbd0,备节点不需要格式化。

[root@heartbeat-1-114 etc]# mkfs.ext4 -b 4096 /dev/drbd0
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
46944 inodes, 187495 blocks
9374 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=192937984
6 block groups
32768 blocks per group, 32768 fragments per group
7824 inodes per group
Superblock backups stored on blocks: 
32768, 98304, 163840

Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 37 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

(2)挂载设备

[root@heartbeat-1-114 etc]# mount /dev/drbd0 /data

提示:如果在从节点格式化会报错,需要用drbdadm -- --overwrite-data-of-peer primary data命令指定主节点的,从节点不能用这个命令不需要格式化drb0.

[root@heartbeat-1-115 ~]# mkfs.ext4 -b 4096 /dev/drbd0
mke2fs 1.41.12 (17-May-2010)
mkfs.ext4: 错误的介质类型 while trying to determine filesystem size

(3)测试备节点数据同步情况

先在主节点的data文件系统中插入数据,我们插入个20个文件

[root@heartbeat-1-114 data]# touch `seq 10`
[root@heartbeat-1-114 data]# ls
1  10  2  3  4  5  6  7  8  9  lost+found

查看备节点的数据同步情况,需要先挂载DRBD存储设备,我们看数据已经同步过来了。

[root@heartbeat-1-115 etc]# mount /dev/sdb1 /mnt
mount: you must specify the filesystem type
[root@heartbeat-1-115 etc]# drbdadm down data  为什么启动从节点的drbd资源的情况下挂载sdb1会报错,这时把从节点的drbd资源停掉就可以挂载了查看数据是否同步了;在实践中从节点只启动drbd资源就可以了不必挂载文件系统,如果想查看文件是否同步把从节点drbd资源停止在挂载查看就好了
[root@heartbeat-1-115 etc]# mount /dev/sdb1 /mnt
[root@heartbeat-1-115 etc]# ll /mnt/
total 16
 -rw-r--r-- 1 root root 0 Nov 11 15:26 1
 -rw-r--r-- 1 root root 0 Nov 11 15:26 10
 -rw-r--r-- 1 root root 0 Nov 11 15:26 2
 -rw-r--r-- 1 root root 0 Nov 11 15:26 3
 -rw-r--r-- 1 root root 0 Nov 11 15:26 4
 -rw-r--r-- 1 root root 0 Nov 11 15:26 5
 -rw-r--r-- 1 root root 0 Nov 11 15:26 6
 -rw-r--r-- 1 root root 0 Nov 11 15:26 7
 -rw-r--r-- 1 root root 0 Nov 11 15:26 8
 -rw-r--r-- 1 root root 0 Nov 11 15:26 9
drwx------ 2 root root 16384 Nov 11 15:20 lost+found

出现上面同步的数据表示drbd完成了,完成了下面我们再启动备节点的drbd服务

[root@heartbeat-1-115 ~]# umount /mnt/
[root@heartbeat-1-115 ~]# drbdadm up data
[root@heartbeat-1-115 ~]# cat /proc/drbd 
version: 8.4.4 (api:1/proto:86-101)
GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@heartbeat-1-129, 2018-03-05 07:38:05
 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
ns:0 nr:56 dw:56 dr:0 al:0 bm:2 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

网站标题:MysqlDBA高级运维学习之路-MySQL高可用工具drbd实战
当前链接:http://kswjz.com/article/jdjohj.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流