本教程介绍如何为您的服务器安装和设置DRBD。 在我开始之前,让我解释一下DRBD实际上代表什么以及它用于什么。 DRBD代表分布式复制块设备,一种基于软件的,无共享的复制存储解决方案,用于镜像块设备(如硬盘,分区,逻辑卷等)的内容.DRBD的主要目的是提供一种替代解决方案遇到高可用性的情况,如FailOver或灾难恢复。 您可以在这里查看该网站的基本细节。
初步说明
对于本教程,我使用的是32位版本的CentOS 6.4。 示例最终结果将显示如何在服务器A上的分区中创建文件或文件夹,并使用DRBD成功显示另一台服务器(服务器B)上的所有内容。
以下是服务器体系结构的草图:
+ ----------------------------------- + + ------------ ----------------- +
| [DRBD服务器A] | 192.168.43.101 | 192.168.43.102 | [DRBD服务器B] |
| OEL641 + ---------------------- + ----------------------- + OEL642 |
| 文件夹A | | folderB |
+ ----------------------------------- + + ------------ ----------------- +
本教程与任何版本的CentOS / Redhat / Oracle Linux 6兼容。 您需要安装DRBD的服务器有必要有一个空闲的块设备。 此示例显示如何配置和使用block-device / dev / sdb1
。
2.安装阶段
在开始之前,我们需要更新系统并安装DRBD依赖关系所需的软件包。 以下是需要运行的命令和更新或安装的软件包列表。 对于这种情况,我们使用yum命令从公共CentOS存储库获取最新的包。
yum -y update
yum -y install gcc make automake autoconf libxslt libxslt-devel flex rpm-build kernel-devel
Setting up Install Process
Package gcc-4.4.7-3.el6.i686 already installed and latest version
Package 1:make-3.81-20.el6.i686 already installed and latest version
Package automake-1.11.1-4.el6.noarch already installed and latest version
Package autoconf-2.63-5.1.el6.noarch already installed and latest version
Package libxslt-1.1.26-2.0.2.el6_3.1.i686 already installed and latest version
Package libxslt-devel-1.1.26-2.0.2.el6_3.1.i686 already installed and latest version
Package flex-2.5.35-8.el6.i686 already installed and latest version
Package rpm-build-4.8.0-32.el6.i686 already installed and latest version
Package kernel-devel-2.6.32-358.el6.i686 already installed and latest version
我们必须在两台服务器上执行上述步骤。
在两台服务器上完成依赖程序包安装后,我们将开始安装DRBD程序包。 包可以从这个网站下载。
以下是步骤。
首先,我在/ root / path下创建名为BUILD,BUILDROOT等的文件夹。在构建DRBD软件包之后,需要这个路径来存储rpm文件。
mkdir -p /root/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
下载DRBD软件包。
wget http://oss.linbit.com/drbd/drbd-utils-latest.tar.gz http://oss.linbit.com/drbd/8.4/drbd-8.4.7-1.tar.gz
提取包drbd-8.4.7-1.tar.gz和drbd-utils-latest.tar.gz文件。
tar -zxvf drbd-8.4.7-1.tar.gz
tar -zxvf drbd-utils-latest.tar.gz
编译DRBD包。
cd drbd-8.4.7-1
drbd-8.4.7-1]# make km-rpm
...
...
You have now:
/root/rpmbuild/RPMS/i686/drbd-km-debuginfo-8.4.7-1.i686.rpm
/root/rpmbuild/RPMS/i686/drbd-km-2.6.32_358.el6.i686-8.4.7-1.i686.rpm
编译和配置包。
cd ..
cd drbd-utils-8.9.6
./configure
make rpm
...
...
You have now:
/root/rpmbuild/RPMS/i686/drbd-utils-8.9.6-1.el6.i686.rpm
/root/rpmbuild/RPMS/i686/drbd-debuginfo-8.9.6-1.el6.i686.rpm
/root/rpmbuild/RPMS/i686/drbd-heartbeat-8.9.6-1.el6.i686.rpm
/root/rpmbuild/RPMS/i686/drbd-xen-8.9.6-1.el6.i686.rpm
/root/rpmbuild/RPMS/i686/drbd-km-debuginfo-8.4.7-1.i686.rpm
/root/rpmbuild/RPMS/i686/drbd-pacemaker-8.9.6-1.el6.i686.rpm
/root/rpmbuild/RPMS/i686/drbd-bash-completion-8.9.6-1.el6.i686.rpm
/root/rpmbuild/RPMS/i686/drbd-km-2.6.32_358.el6.i686-8.4.7-1.i686.rpm
/root/rpmbuild/RPMS/i686/drbd-8.9.6-1.el6.i686.rpm
/root/rpmbuild/RPMS/i686/drbd-udev-8.9.6-1.el6.i686.rpm
转到/ root / rpmbuild / RPMS / i686。 来自编译的rpm的包将存在于那里,并且我安装相关的rpm包。
cd /root/rpmbuild/RPMS/i686
rpm -Uvh drbd-xen* drbd-udev* drbd-pacemaker* drbd-bash-completion* drbd-utils-*.rpm drbd-km-*.rpm drbd-8*
Preparing... ########################################### [100%]
1:drbd-utils ########################################### [ 13%]
2:drbd-xen ########################################### [ 25%]
3:drbd-udev ########################################### [ 38%]
4:drbd-pacemaker ########################################### [ 50%]
5:drbd-bash-completion ########################################### [ 63%]
6:drbd ########################################### [ 75%]
7:drbd-km-2.6.32_358.el6.########################################### [ 88%]
8:drbd-km-debuginfo ########################################### [100%]
在第一台服务器上完成后,在服务器OEL642上执行相同的步骤。
验证阶段
现在我们已经完成了一半。 我们专注于OEL641 配置方面。 首先,验证您的服务器主机名,这很重要,因为DRBD的配置将需要与其主机名相同的名称。 以下步骤如下:
uname -n
OEL641
然后更新DRBD模块
modprobe drbd
lsmod |grep drbd
drbd 341783 0
libcrc32c 841 1 drbd
就是这样,现在我们将创建一个新的磁盘分区作为DRDB磁盘。 这里我有一个新的磁盘/ dev / sdb
。 我将创建一个分区/ dev / sdb1
并将其用作DRBD磁盘。
fdisk -l
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: 0x00000000
fdisk /dev/sdb
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):
Using default value 130
Command (m for help): p
Device Boot Start End Blocks Id System
/dev/sdb1 1 130 1044193+ 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
fdisk -l
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: 0x89770d51
Device Boot Start End Blocks Id System
/dev/sdb1 1 130 1044193+ 83 Linux
完成后,重复OEL642上的步骤
DRBD配置
现在我们来到DRBD配置的最后一步。 基本上,我们需要设置哪个分区磁盘和服务器应该在DRBD模块下执行。 为此,我们将创建一个响应文件如下,并复制到OEL642 ,以便两个服务器具有相同的配置。
cd /etc/drbd.d/
vi s1.res
resource s1 {
on OEL641 {
device /dev/drbd1;
disk /dev/sdb1;
address 192.168.43.101:7799;
meta-disk internal;
}
on OEL642 {
device /dev/drbd1;
disk /dev/sdb1;
address 192.168.43.102:7799;
meta-disk internal;
}
}
将scp文件复制到第二台服务器:
scp /etc/drbd.d/s1.res root@OEL642:/etc/drbd.d/s1.res
完成后,我们需要在两台服务器上初始化分区。 以下步骤如下:
drbdadm create-md s1
initializing activity log
NOT initializing bitmap
Writing meta data...
New drbd meta data block successfully created.
success
s1是我们在上面的s1.res文件中定义的资源名称。
请登录到服务器OEL642 ,并从上面执行相同的步骤:
drbdadm create-md s1
initializing activity log
NOT initializing bitmap
Writing meta data...
New drbd meta data block successfully created.
success
现在回到服务器OEL641 ,我们可以启动DRBD服务。 以下是步骤:
/etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by root@OEL641, 2016-08-20 01:23:44
m:res cs ro ds p mounted fstype
[root@OEL641 ~]# /etc/init.d/drbd start
Starting DRBD resources: [
create res: s1
prepare disk: s1
adjust disk: s1
adjust net: s1
]
..........
***************************************************************
DRBD's startup script waits for the peer node(s) to appear.
- If 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
is 0 seconds. [wfc-timeout]
(These values are for resource 's1'; 0 sec -> wait forever)
To abort waiting enter 'yes' [ 26]:
.
请注意,DRBD服务确实没有启动。 这是由于服务器OEL641 正在寻找在OEL642上的DRBD服务。
因此,在此期间,请登录OEL642 并以与OEL641相同的方式启动DRBD服务。 您会注意到,一旦启动了OEL642的 DRBD服务, OEL641的 DRBD服务将停止等待并启动。
一旦完成,DRBD服务状态将在两个服务器上显示如下:
/etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by root@OEL641, 2016-08-20 01:23:44
m:res cs ro ds p mounted fstype
1:s1 Connected Secondary/Secondary Inconsistent/Inconsistent C
现在, 仅在服务器OEL641上执行以下步骤。 这是初始化谁将是初始主服务器。
drbdadm -- --overwrite-data-of-peer primary s1
/etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by root@OEL641, 2016-08-20 01:23:44
m:res cs ro ds p mounted fstype
... sync'ed: 0.8% (1037872/1044124)K
1:s1 SyncSource Primary/Secondary UpToDate/Inconsistent C
然后检查OEL642:
/etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by root@OEL641, 2016-08-20 01:23:44
m:res cs ro ds p mounted fstype
... sync'ed: 12.2% (921244/1044124)K
1:s1 SyncTarget Secondary/Primary Inconsistent/UpToDate C
您将在上述状态报告中注意到,现在服务器OEL641 已被验证为主服务器, OEL642 已被验证为辅助服务器。
这意味着现在我们在服务器OEL641下的DRBD分区下创建的任何文件或文件夹都将同步到OEL642的DRBD 分区 。
DRBD测试阶段
现在,我们来到最终的部分,即测试DRBD服务,以确保其达到目标。
首先,我们来安装DRBD分区。
在主服务器OEL641上执行以下第一步次!
mkfs.ext3 /dev/drbd1
...
...
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
这将使用ext3文件系统格式化分区。
现在创建一个文件夹并将DRBD分区装入它。
mkdir /folderA
mount /dev/drbd1 /folderA
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/drbd1 1004M 18M 936M 2% /folderA
cd /folderA/
ls -h
lost+found
如上所示,已成功创建名为folderA的新文件夹。
现在让我们在文件夹里创建一个大小为30Mb的文件:
dd if=/dev/zero of=/folderA/testfile bs=1M count=30
30+0 records in
30+0 records out
31457280 bytes (31 MB) copied, 0.178448 s, 176 MB/s
ls -lh
total 31M
drwx------. 2 root root 16K Aug 21 08:55 lost+found
-rw-r--r--. 1 root root 30M Aug 21 09:09 testfile
这些都是先决条件,我们开始测试过程。
作为最终结果,一旦我们在服务器OEL642上安装DRBD 分区 ,测试文件应该存在于文件夹中。
现在我们来卸载OEL641中的DRBD分区, 并将其作为辅助状态。 次级状态意味着您无法将DRBD分区装载到操作系统中以供使用。
/etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by root@OEL641, 2016-08-20 01:23:44
m:res cs ro ds p mounted fstype
1:s1 Connected Primary/Secondary UpToDate/UpToDate C /folderA ext3
umount /folderA
drbdadm secondary s1
/etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by root@OEL641, 2016-08-20 01:23:44
m:res cs ro ds p mounted fstype
1:s1 Connected Secondary/Secondary UpToDate/UpToDate C
现在,两台DRBD服务器都处于二级状态。 我们来到服务器OEL642 ,并将其从次级更改为主状态。
首先创建一个空文件夹并挂载到OEL642上的DRBD 分区 :
mkdir /folderB
cd /folderB
ls -lh
total 0
/etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by root@OEL641, 2016-08-20 01:23:44
m:res cs ro ds p mounted fstype
1:s1 Connected Secondary/Secondary UpToDate/UpToDate C
drbdadm primary s1
/etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.4.7-1 (api:1/proto:86-101)
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by root@OEL641, 2016-08-20 01:23:44
m:res cs ro ds p mounted fstype
1:s1 Connected Primary/Secondary UpToDate/UpToDate C
mount /dev/drbd1 /folderB
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_oel641-lv_root
96G 3.5G 88G 4% /
tmpfs 640M 80K 640M 1% /dev/shm
/dev/sda1 485M 32M 428M 7% /boot
/dev/drbd1 1004M 48M 906M 5% /folderB
ls -lh /folderB/
total 31M
drwx------. 2 root root 16K Aug 21 08:55 lost+found
-rw-r--r--. 1 root root 30M Aug 21 09:09 testfile
将DRBD分区成功安装到新文件夹之后,您会注意到,您在服务器OEL641中创建的文件自动存在!
完成! 您已经成功地在CentOS上设置和配置DRBD!