共计 8582 个字符,预计需要花费 22 分钟才能阅读完成。
DRBD 简介 安装、编译报错解决 DRBD 的配置、初始化及同步、主备模型
主机环境 RedHat6.5 64 位
实验环境 服务端 1 ip 172.25.25.111 主机名:server1.example.com drbd
服务端 2 ip172.25.25.112 主机名:server2.example.com drbd
安装包 drbd-8.4.3.tar.gz
防火墙状态:关闭
1.Debd 的简介
1. 基本信息
Distributed Replicated Block Device(DRBD) 是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。
DRBD 的位置处于文件系统以下,比文件系统更加靠近操作系统内核及 IO 栈。
2. 工具
drbdadm: 高级管理工具,管理 /etc/drbd.conf,向 drbdsetup 和 drbdmeta 发送指令,
drbdsetup: 配置装载进 kernel 的 DRBD 模块,平时很少直接用
drbdmeta: 管理 META 数据结构,平时很少直接用。
在 DRBD 中,资源是特指某复制的存储设备的所有方面。包括资源名称、DRBD 设备 (/dev/drbdm,这里 m 是设备最小号,最大号可到 147)、磁盘配置(使本地数据可以为 DRBD 所用)、网络配置(与对方通信)
每个资源有个角色,是 Primary 或 Secondary,下面简称 ” 主 ” 和 ” 备 ”
主角色的 DRBD 设备可以不受限制的读和写,比如创建和映射文件系统、对于块设备的 raw 或直接 IO 访问。
备角色的 DRBD 设备接受来自对方的所有修改,但是不能被应用程序读写,甚至只读也不行。
角色可以改变。
3.DRBD 工作原理图
DRBD 是 linux 的内核的存储层中的一个分布式存储系统,可用使用 DRBD 在两台 Linux 服务器之间共享块设备,共享文件系统和数据。类似于一个网络 RAID- 1 的功能,如图所示:
2. 编译、安装 drbd 内核模块计及测试
1. 编译、安装 drbd 内核模块,报错解决及 debd 的配置(服务端 1)
[root@server1 mnt]# ls
drbd-8.4.3.tar.gz
[root@server1 mnt]# tar zxf drbd-8.4.3.tar.gz #解压
[root@server1 mnt]# ls
drbd-8.4.3 drbd-8.4.3.tar.gz
[root@server1 mnt]# cd drbd-8.4.3
[root@server1 drbd-8.4.3]# ./configure –enable-spec –with-km
若报错如下:
则安装:
[root@server1 drbd-8.4.3]# yum install flex -y
[root@server1 drbd-8.4.3]# ./configure –enable-spec –with-km
WARNING 系统可以跳过,如下:
[root@server1 drbd-8.4.3]# yum install rpm-build -y
[root@server1 drbd-8.4.3]# ./configure –enable-spec –with-km
[root@server1 drbd-8.4.3]# rpmbuild -bb drbd.spec #
error: File /root/rpmbuild/SOURCES/drbd-8.4.3.tar.gz: No suchfile or directory
[root@server1 drbd-8.4.3]# cp /mnt/drbd-8.4.3.tar.gz/root/rpmbuild/SOURCES/
[root@server1 drbd-8.4.3]# rpmbuild -bb drbd.spec
[root@server1 drbd-8.4.3]# rpmbuild -bb drbd-km.spec
error: Failed build dependencies:
kernel-devel is neededby drbd-km-8.4.3-2.el6.x86_64 #报错,缺少包[root@server1drbd-8.4.3]# yum install kernel-devel -y
[root@server1 drbd-8.4.3]# rpmbuild -bb drbd-km.spec
[root@server1 drbd-8.4.3]# cd /root/rpmbuild/RPMS/x86_64/ #切换目录
[root@server1 x86_64]# ls #生成 10 个安装包
drbd-8.4.3-2.el6.x86_64.rpm
drbd-bash-completion-8.4.3-2.el6.x86_64.rpm
drbd-debuginfo-8.4.3-2.el6.x86_64.rpm
drbd-heartbeat-8.4.3-2.el6.x86_64.rpm
drbd-km-2.6.32_431.el6.x86_64-8.4.3-2.el6.x86_64.rpm
drbd-km-debuginfo-8.4.3-2.el6.x86_64.rpm
drbd-pacemaker-8.4.3-2.el6.x86_64.rpm
drbd-udev-8.4.3-2.el6.x86_64.rpm
drbd-utils-8.4.3-2.el6.x86_64.rpm
drbd-xen-8.4.3-2.el6.x86_64.rpm
[root@server1 x86_64]# yum install * -y #安装所有的包
[root@server1 x86_64]# scp * root@172.25.25.112:/mnt #将包传给服务端 2
[root@server2 mnt]# ls
drbd-8.4.3-2.el6.x86_64.rpm
drbd-bash-completion-8.4.3-2.el6.x86_64.rpm
drbd-debuginfo-8.4.3-2.el6.x86_64.rpm
drbd-heartbeat-8.4.3-2.el6.x86_64.rpm
drbd-km-2.6.32_431.el6.x86_64-8.4.3-2.el6.x86_64.rpm
drbd-km-debuginfo-8.4.3-2.el6.x86_64.rpm
drbd-pacemaker-8.4.3-2.el6.x86_64.rpm
drbd-udev-8.4.3-2.el6.x86_64.rpm
drbd-utils-8.4.3-2.el6.x86_64.rpm
drbd-xen-8.4.3-2.el6.x86_64.rpm
[root@server2 mnt]# rpm -vih * #安装
Preparing… ########################################### [100%]
1:drbd-utils ########################################### [10%]
2:drbd-bash-completion ########################################### [20%]
3:drbd-heartbeat ########################################### [30%]
4:drbd-pacemaker ########################################### [40%]
5:drbd-udev ########################################### [50%]
6:drbd-xen ########################################### [60%]
7:drbd ###########################################[70%]
8:drbd-km-2.6.32_431.el6.########################################### [80%]
9:drbd-km-debuginfo ########################################### [90%]
10:drbd-debuginfo ###########################################[100%]
在服务端 1 和服务端 2 虚拟机中各添加一块虚拟磁盘或划分一个新的分区,然后进行下面的步骤:
[root@server1 x86_64]# cd /etc/drbd.d/ #切换到 drbd 的主配置文件目录
[root@server1 drbd.d]# vim dbdata.res #创建一个文件,后缀必须是.res
1 resource dbdata{
2 meta-disk internal;
3 device /dev/drbd1;
4 syncer {
5 verify-alg sha1; #设置主备机之间通信使用的信息算法
6 }
# 每个主机的说明以 ”on” 开头, 后面是主机名. 在后面的{} 中为这个主机的配置
7 on server1.example.com{#主机名
8 disk /dev/vdb; #磁盘名称
9 address172.25.29.1:7789; #ip 加端口,端口是指定的
10 }
11 onserver2.example.com{
12 disk /dev/vdb;
13 address172.25.29.2:7789;
14 }
15 }
[root@server1 drbd.d]# scp dbdata.resroot@172.25.29.2:/etc/drbd.d/
root@172.25.29.2’s password:
# 服务端 1 和服务端 2 同时初始化 , 同时开启 drbd
[root@server1 drbd.d]# drbdadm create-md dbdata #初始化
–== Thank you for participating in the globalusage survey ==–
The server’s response is:
Writing meta data…
initializing activity log
NOT initializing bitmap
New drbd meta data block successfully created.
[root@server2 drbd.d]# drbdadm create-md dbdata
–== Thank you for participating in the globalusage survey ==–
The server’s response is:
Writing meta data…
initializing activity log
NOT initializing bitmap
New drbd meta data block successfully created.
2.drbd 的开启初始化、强制主备同步及格式化(主备模型)
[root@server1 drbd.d]# /etc/init.d/drbd start #开启 drbd
[root@server2 drbd.d]# /etc/init.d/drbd start
[root@server1 drbd.d]# cat /proc/drbd #查看
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25
1: cs:Connectedro:Secondary/Secondary ds:Inconsistent/Inconsistent C r—–
ns:0 nr:0 dw:0 dr:0al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:2097052
[root@server2 drbd.d]# cat /proc/drbd
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25
1: cs:Connectedro:Secondary/Secondary ds:Inconsistent/Inconsistent C r—–
ns:0 nr:0 dw:0 dr:0al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:2097052
# 从上面可以看出两个都是 secondary
[root@server1 drbd.d]# drbdadm primary dbdata –force #强制使服务端 1 变成 primary
[root@server1 drbd.d]# cat /proc/drbd #查看,服务端 1 和服务端 2 正在同步
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25
1: cs:SyncSource ro:Primary/Secondaryds:UpToDate/Inconsistent C r—–
ns:496640 nr:0 dw:0dr:497304 al:0 bm:30 lo:0 pe:4 ua:0 ap:0 ep:1 wo:f oos:1604508
[===>…………….]sync’ed: 23.7% (1604508/2097052)K
finish: 0:00:16 speed:98,508 (98,508) K/sec
[root@server1 drbd.d]# cat /proc/drbd
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25
1: cs:SyncSourcero:Primary/Secondary ds:UpToDate/Inconsistent C r—n-
ns:1566436 nr:0 dw:0dr:1569432 al:0 bm:94 lo:0 pe:16 ua:3 ap:0 ep:1 wo:f oos:546716
[=============>……]sync’ed: 74.1% (546716/2097052)K
finish: 0:00:08 speed:64,596 (64,596) K/sec
[root@server1 drbd.d]# cat /proc/drbd #同步完成,服务端 1 为 primary
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25
1: cs:Connectedro:Primary/Secondary ds:UpToDate/UpToDate C r—–
ns:2097052 nr:0 dw:0dr:2097716 al:0 bm:128 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
[root@server2 drbd.d]# cat /proc/drbd
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25
1: cs:Connectedro:Secondary/Primary ds:UpToDate/UpToDate C r—–
ns:0 nr:2097052dw:2097052 dr:0 al:0 bm:128 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
[root@server1 drbd.d]# mkfs.ext4 /dev/drbd1 #格式化
3. 切换主备测试是否同步成功
[root@server1 drbd.d]# mount /dev/drbd1 /mnt/ #将格式化好的磁盘挂载到 /mnt 上
[root@server1 drbd.d]# cd /mnt/ #切换到 /mnt
[root@server1 mnt]# ls
lost+found
[root@server1 mnt]# touch file{1..4} #创建几个文件
[root@server1 mnt]# ls
file1 file2 file3 file4 lost+found
[root@server1 mnt]# cd
[root@server1 ~]# umount /mnt/ #卸载
[root@server1 ~]# drbdadm secondary dbdata #将服务端 1 变成 secondary
[root@server1 ~]# cat /proc/drbd #查看
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25
1: cs:Connectedro:Secondary/Secondary ds:UpToDate/UpToDate C r—–
ns:2163404 nr:0dw:66352 dr:2098429 al:13 bm:128 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
[root@server2 drbd.d]# drbdadm primary dbdata #将服务端 2 变成 primary
[root@server2 drbd.d]# cat /proc/drbd #查看
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build byroot@server1.example.com, 2016-10-08 15:10:25
1: cs:Connectedro:Primary/Secondary ds:UpToDate/UpToDate C r—–
ns:0 nr:2163404dw:2163404 dr:664 al:0 bm:128 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
[root@server2 drbd.d]# mount /dev/drbd1 /mnt/ #挂载
[root@server2 drbd.d]# cd /mnt/
[root@server2 mnt]# ls #查看,同步成功
file1 file2 file3 file4 lost+found
有关 DRBD 的相关知识,可以参考:
DRBD 原理及特性概述 http://www.linuxidc.com/Linux/2015-11/124759.htm
快速安装及部署 DRBD http://www.linuxidc.com/Linux/2015-11/124760.htm
Linux 高可用(HA)集群之 DRBD 详解 http://www.linuxidc.com/Linux/2013-08/89035.htm
DRBD 中文应用指南 PDF http://www.linuxidc.com/Linux/2013-08/89034.htm
CentOS 6.3 下 DRBD 安装配置笔记 http://www.linuxidc.com/Linux/2013-06/85600.htm
基于 DRBD+Corosync 实现高可用 MySQL http://www.linuxidc.com/Linux/2013-05/84471.htm
CentOS 6.4 下 DRBD 安装配置 http://www.linuxidc.com/Linux/2013-09/90536.htm
DRBD 的详细介绍:请点这里
DRBD 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-10/135985.htm