《高性能Linux服务器构建实战:系统安全、故障排查、自动化运维与集群架构》——3.3 DRBD的管理与维护

简介:

本节书摘来自华章计算机《高性能Linux服务器构建实战:系统安全、故障排查、自动化运维与集群架构》一书中的第3章,第3.3节,作者:高俊峰著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.3 DRBD的管理与维护

3.3.1 启动DRDB
1 . 在两个节点执行
在启动DRBD之前,需要分别在两台主机的hdb1分区上创建供DRBD记录信息的数据块。具体是分别在两台主机上执行:

[root@master-drbd ~]# drbdadm create-md r0 或者执行drbdadm create-md all
[root@master-drbd ~]# drbdadm create-md r0

2 . 在两个节点启动服务
接着在两个drbd节点启动DRBD服务,操作如下:

[root@master-drbd ~]# /etc/init.d/drbd start
[root@slave-drbd  ~]# /etc/init.d/drbd start

最好是在两个节点同时启动DRBD服务。
3 . 在任意节点查看节点状态
登录任意drbd节点,然后执行“cat /proc/drbd”命令,输出结果如下:

[root@master-drbd ~]# cat /proc/drbd
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:b oos:2007644

对输出的含义解释如下:
ro表示角色信息,第一次启动drbd时,两个drbd节点默认都处于Secondary状态。
ds表示磁盘状态信息,“Inconsistent/Inconsistent”即“不一致/不一致”状态,表示两个节点的磁盘数据处于不一致状态。
ns表示网络发送的数据包信息。
dw表示磁盘写信息。
dr表示磁盘读信息。
4 . 设置主用节点
由于默认没有主用节点和备用节点之分,因此需要设置两个主机的主次节点。选择需要设置为主用节点的主机,然后执行如下命令:

[root@master-drbd ~]# drbdsetup /dev/drbd0 primary -o

也可以执行下面命令:

[root@master-drbd ~]# drbdadm -- --overwrite-data-of-peer primary all

第一次执行完此命令后,如果需要设置哪个是主用节点,就可以使用另外一个命令:

[root@master-drbd ~]# /sbin/drbdadm primary r0或者/sbin/drbdadm primary all

执行此命令后,开始同步两台机器对应磁盘的数据:

[root@master-drbd ~]# cat /proc/drbd
version: 8.3.13 (api:88/proto:86-96)
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
  ns:338640 nr:0 dw:0 dr:346752 al:0 bm:20 lo:1 pe:7 ua:64 ap:0 ep:1wo:b oos:10144232
        [>....................] sync'ed:  3.3% (9904/10236)M
        finish: 0:46:26 speed: 3,632 (3,184) K/sec

从输出可知:
“ro”状态现在变为“Primary/Secondary”,“ds”状态也变为“UpToDate/Inconsistent”,也就是“实时/不一致”状态。现在数据正在主备两台主机的磁盘间进行同步,且同步进度为3.3%,同步速度3.1Mbit/s左右。
等待片刻,再次查看同步状态,输出如下:

[root@master-drbd ~]# cat /proc/drbd
version: 8.3.13 (api:88/proto:86-96)
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
  ns:10482024 nr:0 dw:0 dr:10482024 al:0 bm:640 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

可以看到同步完成了,并且“ds”状态也变为“UpToDate/UpToDate”,即“实时/实时”状态了。
如果第一次设置主用节点和备用节点时使用“/sbin/drbdadm primary r0”命令,那么会提示如下错误:

0: State change failed: (-2) Need access to UpToDate data
Command '/sbin/drbdsetup 0 primary' terminated with exit code 17

只要第一次执行上面命令成功,以后就可以用“/sbin/drbdadm primary r0”命令设置主用节点了。
5 . 挂载DRBD设备
由于mount操作只能在主用节点上进行,因此只有设置了主用节点后才能格式化磁盘分区,同时,在两个节点中,同一时刻只能有一台处于primary状态,另一台处于secondary状态,而处于secondary状态的节点上不能挂载DRBD设备,要在备用节点上挂载DRBD设备,必须停止备用节点的DRBD服务或将备用节点角色升级为主用节点。
下面首先将DRBD设备格式化为ext3文件系统,然后在主用节点挂载,操作如下:

[root@master-drbd ~]# mkfs.ext3 /dev/drbd0
[root@master-drbd ~]# mount /dev/drbd0 /mnt

完成挂载后,就可以在/mnt目录下写数据了,此目录下的数据会自动同步到备用节点上。
3.3.2 测试DRBD数据镜像
为了验证DRBD的数据镜像功能,我们做一个简单的测试,首先在DRBD主用节点上的/mnt目录下创建一个200MB的文件,操作如下:

[root@master-drbd ~]# dd if=/dev/zero of=/mnt/testdrbd.tmp bs=10M count=20
[root@master-drbd ~]# ls –al    /mnt/testdrbd.tmp
-rw-r--r-- 1 root root 209715200 Mar 17 14:03 testdrbd.tmp

完成操作后,接着在备机上查看文件是否已经同步过去,为了保证数据的一致性,需要首先停止备用节点的DRBD服务,操作如下:

[root@slave-drbd /]# /etc/init.d/drbd  stop
Stopping all DRBD resources: .
[root@slave-drbd /]# mount /dev/sdb1  /mnt
[root@slave-drbd /]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                      75226176  15156412  56186756  22% /
/dev/sda1               101086     19526     76341  21% /boot
tmpfs                  2025204         0   2025204   0% /dev/shm
/dev/sdb1             10317472    359240   9434132   4% /mnt
[root@slave-drbd /]# cd /mnt
[root@slave-drbdmnt]# ll
total 205020
drwx------ 2 root root     16384 Mar 17 13:58 lost+found
-rw-r--r-- 1 root root 209715200 Mar 17 14:03 testdrbd.tmp

可以看到,在主用节点master-drbd上产生的文件testdrbd.tmp也完整地保存到备用节点slave-drbd的镜像磁盘设备上。
测试完毕后,要重新启动备用节点的DRBD服务,此时必须先卸载/dev/sdb1设备,然后才能成功启动DRBD服务。
 这里挂载的是/dev/sdb1设备,而不是DRBD设备,因为DRBD设备只有在DRBD服务启动的时候才加载到系统中。
3.3.3 DRBD主备节点切换
在系统维护的时候,或者在高可用集群中,当主用节点出现故障时,就需要将主备节点的角色互换。主备节点切换有两种方式,分别是停止DRBD服务切换和正常切换,下面依次介绍。
1 . 停止DRBD服务切换
关闭主用节点服务,此时挂载的DRBD分区就自动在主用节点卸载了,操作如下:

[root@master-drbd /]# /etc/init.d/drbd  stop
Stopping all DRBD resources:

然后查看备用节点的DRBD状态:

[root@slave-drbd /]# cat /proc/drbd 
version: 8.3.13 (api:88/proto:86-96)
0: cs:WFConnection ro:Secondary/Unknown ds:UpToDate/DUnknown C r-----
  ns:0 nr:16 dw:16 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

从输出可以看到,现在主用节点的状态变为“Unknown”,接着在备用节点执行切换命令:

[root@slave-drbd  ~]# drbdadm primary all

此时会出现如下报错信息:

2: State change failed: (-7) Refusing to be Primary while peer is not outdated
Command 'drbdsetup 2 primary' terminated with exit code 11

因此,必须在备用节点执行如下命令:

[root@slave-drbd  ~]# drbdsetup /dev/drbd0 primary -o

或者

[root@slave-drbd ~]# drbdadm -- --overwrite-data-of-peer primary all

现在就可以正常切换了。接着查看此节点的状态,信息如下:

[root@slave-drbd /]# cat /proc/drbd 
version: 8.3.13 (api:88/proto:86-96)
0: cs:WFConnection ro:Primary/Unknown ds:UpToDate/Outdated C r-----
 ns:0 nr:16 dw:16 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

可以看出,原来的备用节点已经处于“Primary”状态了,而原来的主用节点由于DRBD服务未启动,还处于“Unknown”状态,在原来的主用节点服务启动后,会自动变为“Secondary”状态,无需在原来主用节点上再次执行切换到备用节点的命令。
最后,在新的主用节点上挂载DRBD设备即可完成主备节点的切换:

[root@slave-drbd /]# mount /dev/drbd0 /mnt

2 . 正常切换
首先在主用节点卸载磁盘分区:

[root@ master-drbd /]# umount /mnt

然后执行:

[root@master-drbd ~]# drbdadm secondary all

如果不执行这个命令,直接在备用节点执行切换到主用节点的命令,会报如下错误:

2: State change failed: (-1) Multiple primaries not allowed by confi
Command 'drbdsetup 2 primary' terminated with exit code 11

此时查看master-drbd节点的DRBD状态,信息如下:

[root@master-drbd ~]# cat /proc/drbd 
version: 8.3.13 (api:88/proto:86-96)
0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
  ns:36 nr:16 dw:52 dr:97 al:2 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

可以看到,两个节点都处于“Secondary”状态了,那么接下来就要指定一个主用节点,在备用节点执行如下命令:

[root@slave-drbd ~]# drbdadm primary all
[root@slave-drbd ~]# cat /proc/drbd 
version: 8.3.13 (api:88/proto:86-96)
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
 ns:0 nr:36 dw:36 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

至此,主备节点成功切换角色。最后在新的主用节点挂载DRBD磁盘分区即可:

[root@slave-drbd ~]# mount /dev/drbd0 /mnt
相关文章
|
1天前
|
运维 负载均衡 应用服务中间件
自动化运维:使用Ansible进行服务器配置管理
【9月更文挑战第34天】在现代IT运维工作中,自动化已成为提升效率、减少错误的关键。本文将介绍如何使用Ansible这一强大的自动化工具来简化和加速服务器的配置管理工作。我们将通过实际案例展示如何利用Ansible的Playbooks来自动化常见任务,并讨论其对提高运维团队工作效率的影响。
|
6天前
|
存储 运维 Ubuntu
自动化运维:使用Ansible管理服务器
【8月更文挑战第61天】本文将介绍如何使用Ansible工具进行服务器的自动化管理。我们将从基础概念开始,逐步深入到实际的应用案例,最后通过代码示例展示如何实现自动化部署和配置管理。无论你是初学者还是有经验的运维工程师,这篇文章都会为你提供有价值的参考。
|
15天前
|
运维 Ubuntu 应用服务中间件
自动化运维:使用Ansible进行服务器配置管理
【9月更文挑战第20天】在当今快速发展的信息技术时代,自动化运维已成为提升工作效率、减少人为错误的关键技术手段。本文将引导读者了解如何使用Ansible这一强大的自动化工具来简化和加速服务器的配置管理工作。通过实际代码示例,我们将一起探索Ansible的核心概念、基本操作以及如何构建可重复使用的Playbooks,旨在为读者提供一种清晰、高效的服务器管理方法。无论你是运维新手还是希望提高现有工作流程的效率,这篇文章都将为你提供宝贵的指导和启发。
|
9天前
|
运维 监控 应用服务中间件
自动化运维:使用Ansible管理服务器
【9月更文挑战第26天】在这篇文章中,我们将探索如何使用Ansible来自动化运维任务。Ansible是一种简单而强大的自动化工具,可以简化服务器管理和配置过程。通过学习Ansible的基础知识和实践应用,您将能够更高效地管理您的服务器,并减少人为错误。无论您是初学者还是有经验的系统管理员,这篇文章都将为您提供宝贵的见解和实用的技巧。让我们一起开始学习如何利用Ansible来提升您的运维效率吧!
22 4
|
1月前
|
网络协议
keepalived对后端服务器的监测方式实战案例
关于使用keepalived进行后端服务器TCP监测的实战案例,包括配置文件的编辑和keepalived服务的重启,以确保配置生效。
37 1
keepalived对后端服务器的监测方式实战案例
|
22天前
|
运维 应用服务中间件 网络安全
自动化运维:使用Ansible进行服务器配置管理
【9月更文挑战第13天】在IT运维领域,自动化工具的应用日益成为提升效率、降低错误率的关键。本文将介绍如何使用Ansible这一流行的自动化工具来简化和加速服务器的配置管理工作,通过实际案例展示其应用,并分享一些最佳实践。文章旨在帮助读者理解Ansible的核心概念,掌握基本使用方法,并鼓励大家探索更多可能的应用场景。
36 2
|
22天前
|
运维 应用服务中间件 网络安全
自动化运维的魔法:使用Ansible进行服务器配置管理
【9月更文挑战第13天】在这篇文章中,我们深入探讨如何利用Ansible这一强大的自动化工具来简化和加速你的服务器配置管理工作。我们将从基础概念出发,逐步引导你了解如何使用Ansible编写Playbooks,实现对服务器群的快速部署、配置更新与维护任务。通过实际案例,你将看到Ansible如何节省时间、减少人为错误并提高运维效率。无论你是初学者还是有经验的运维工程师,这篇文章都将带给你新的视角和启发。
|
24天前
|
存储 数据挖掘 Linux
服务器数据恢复—Linux操作系统网站服务器数据恢复案例
服务器数据恢复环境: 一台linux操作系统服务器上跑了几十个网站,服务器上只有一块SATA硬盘。 服务器故障: 服务器突然宕机,尝试再次启动失败。将硬盘拆下检测,发现存在坏扇区
|
1月前
|
运维 Ubuntu Linux
掌握自动化运维:使用Ansible进行服务器配置管理
【9月更文挑战第5天】本文旨在通过深入浅出的方式,介绍如何利用Ansible这一强大的自动化工具来简化和加速日常的服务器配置管理工作。文章将首先概述自动化运维的重要性,接着详细讲解Ansible的基本概念、安装过程及其在服务器配置中的应用实例。我们将通过具体的操作步骤和代码示例,展示如何使用Ansible编写任务,以及如何执行这些任务以实现批量的服务器配置。最后,文章将探讨一些高级用法,帮助读者进一步提升自动化运维的能力。
|
2月前
|
运维 关系型数据库 MySQL
自动化运维:使用Ansible管理服务器
【8月更文挑战第31天】在这篇文章中,我们将探讨如何使用Ansible进行自动化运维。Ansible是一种开源的IT自动化工具,可以用于配置管理、应用部署、任务执行等。我们将通过一个简单的例子,展示如何使用Ansible来管理服务器。无论你是初学者还是有经验的开发者,都可以从这篇文章中获得一些有用的信息。
下一篇
无影云桌面