drbd 数据镜像

Posted on Posted in 安全
Tips: 本文创建于2015年11月15日,已超过 2 年,内容或图片可能已经失效!

数据镜像软件 drbd
[官网][1]

drbd 的三种模式

单主模式。主要用在高可用集群的数据存储方面,解决集群中数据共享的问题,这种模式,集群中只有一个主用节点可以对数据进行读写操作。
双主模式。解决负载均衡集群中,数据共享和一致性的问题。
复制模式
1)协议 A,只要本地磁盘写入已经完成,数据包已经在发送队列中,则认为一个写操作过程已经完成。
这种方式在远程节点故障或者网络故障时,可能造成数据丢失,因为要写入到远程节点的数据可能在发送队列中。
2)协议 B,只要本地磁盘写入已经完成,而且数据包已经达到远程节点,则认为一个写操作已经完成。
这种方式在远程节点发生故障时,可能造成数据丢失。
3)协议 C,只有本地和远程节点的磁盘已经都确认了写操作完成,则认为一个写操作过程已经完成。
这种方式没有任何数据丢失,就目前而言应用最多、最广泛的就是协议 C。但在此方式下的磁盘 I/O 吞吐量依赖于网络带宽。建议在网络带带宽好的情况下使用这种方式。

一、安装
1、安装源
[源][2]

2、划区

在两台机器上执行

建议主节点和备用节点的磁盘大小一致。

对磁盘分区(不要格式化)

  1. fdisk /dev/sdb  
  2.   
  3. The device presents a logical sector size that is smaller than  
  4. the physical sector size. Aligning to a physical sector (or optimal  
  5. I/O) size boundary is recommended, or performance may be impacted.  
  6.   
  7. WARNING: DOS-compatible mode is deprecated. It's strongly recommended to  
  8.          switch off the mode (command 'c') and change display units to  
  9.          sectors (command 'u').  
  10.   
  11. Command (m for help): n  
  12. Command action  
  13.    e   extended  
  14.    p   primary partition (1-4)  
  15. p  
  16. Partition number (1-4): 1  
  17. First cylinder (1-652, default 1):  
  18. Using default value 1  
  19. Last cylinder, +cylinders or +size{K,M,G} (1-652, default 652):  
  20. Using default value 652  
  21.   
  22. Command (m for help): w  
  23. The partition table has been altered!  
  24.   
  25. Calling ioctl() to re-read partition table.  
  26. Syncing disks.  

3、安装 drbd

  1. yum -y install kernel kernel-devel kernel-headers  
  2. yum -y install kmod-drbd83 drbd83  

加载 drbd 到内核

  1. modprobe drbd  

检查 drbd 是否安装成功

  1. lsmod | grep -i drbd  
  2.   
  3. root@mac-centos: drbd                  332493  0  
  4. root@mac-centos01: drbd                  332493  0  

查看 drbd.ko 安装路径

  1. modprobe -l | grep -i drbd  
  2.   
  3. root@mac-centos: weak-updates/drbd83/drbd.ko  
  4. root@mac-centos01: weak-updates/drbd83/drbd.ko  

配置

drbd 默认配置文件 /etc/drbd.conf (样例目录/usr/share/doc/drbd83-utils-8.3.16)
主要分为三个部分:global/common/resource

  1. cat /etc/drbd.conf  
  2. # You can find an example in  /usr/share/doc/drbd.../drbd.conf.example  
  3.   
  4. include "drbd.d/global_common.conf";  
  5. include "drbd.d/*.res";  

一般情况,global_common.conf文件包含 drbd 的 global 和 common 部分,而在drbd.d目录下已经创建*.res 资源文件,只要所创建的文件是以文件名 res 结尾的,drbd 启动时就会自动读取。将配置文件独立出来,便于管理和维护。

下面是一个完成的范例(两台主机的配置一致)

  1. global {  
  2.     usage-count  no;    #是否参加 drbd 使用者统计,默认是 yes  
  3.     # minor-count dialog-refresh disable-ip-verification  
  4. }  
  5.   
  6. common {  
  7.     syncer {  
  8.         # rate after al-extents use-rle cpu-mask verify-alg csums-alg  
  9.         rate    200M;   #设置主用节点和备用节点同步时的网络速率的最大值,单位是字节  
  10.     }  
  11. }  
  12.   
  13. resource r0 {   #资源名称为 r0  
  14.     protocol    C;  #使用 drbd 的第三种同步协议  
  15.     handlers    {  
  16.         pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";  
  17.         pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";  
  18.         local-io-error "echo o > /proc/sysrq-trigger ; halt -f";  
  19.         fence-peer "/usr/lib/drbd/crm-fence-peer.sh";  
  20.         split-brain "/usr/lib/drbd/notify-split-brain.sh root";  
  21.         out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";  
  22.     }  
  23.     net {  
  24.         cram-hmac-alg   "sha1";     #drbd 同步时使用的验证方式和密码信息  
  25.         shared-secret   "MySQL-HA";  
  26.     }  
  27.     disk {  #使用 drbd 功能(drbd outdate-peer daemon)保证数据不同步时,不进行切换  
  28.         on-io-error detach;  
  29.         fencing resource-only;  
  30.     }  
  31.     startup {  
  32.         wfc-timeout 120;  
  33.         degr-wfc-timeout 120;  
  34.     }  
  35.     device /dev/drbd0;  
  36.     on mac-centos {     #每个主机的说明以on 开头,后面是 hostname(uname -n)  
  37.         disk /dev/sdb1;     #/dev/drbd0 使用的磁盘分区是 /dev/sdb1  
  38.         address 192.168.2.108:7788;     #设置 drbd 的监听端口,  
  39.         meta-disk internal;     #drbd 的元数据存放方式  
  40.     }  
  41.     on mac-centos01 {  
  42.         disk /dev/sdb1;  
  43.         address 192.168.2.116:7788;  
  44.         meta-disk internal;  
  45.     }  
  46. }  

4、启动 drbd

创建供 drbd 记录信息的数据块,在两台主机上执行

  1. drbdadm create-md r0    或者执行         drbdadm create-md all  
  2. /etc/init.d/drbd start  
  3.   
  4. cat /proc/drbd  
  5. version: 8.3.16 (api:88/proto:86-97)  
  6. GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2014-11-24 14:51:37  
  7.  0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----  
  8.     ns:0 nr:0 dw:0 dr:4 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0  
  9. #ro 表示角色信息,第一次启动 drbd 时,两个 drbd 节点默认都处于Secondary状态  
  10. #ds 表示磁盘状态信息,Inconsistent/Inconsistent 即 不一致/不一致 状态,表示两个节点的磁盘数据处于不一致状态  
  11. #ns 表示网络发送的数据包信息  
  12. #dw 表示磁盘写信息  
  13. #dr 表示磁盘读信息  

设置主用节点(在主用节点上执行)

由于默认没有主用节点和备用节点,因此需要设置两个主机的主次节点。
在主用节点的主机上执行

  1. drbdsetup /dev/drbd0 primary -o  
  2. #或者  
  3. drbdadm -- --overwrite-data-of-peer primary all  

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

  1. /sbin/drbdadm primary r0 或者 /sbin/drbdadm primary all  
  2.   
  3. cat /proc/drbd  
  4. version: 8.3.16 (api:88/proto:86-97)  
  5. GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2014-11-24 14:51:37  
  6.  0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----  
  7.     ns:753664 nr:0 dw:0 dr:754328 al:0 bm:46 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:4483296  
  8.     [=>..................] sync'ed: 14.5% (4376/5112)M  
  9.     finish: 0:01:46 speed: 41,868 (41,868) K/sec  

可以看到 ro 状态变成Primary/Secondary,ds 状态也变成UpToDate/Inconsistent(实时/不一致),主备同步进度为14.5%,同步速度为41.9Mbit/s 左右

  1. cat /proc/drbd  
  2. version: 8.3.16 (api:88/proto:86-97)  
  3. GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2014-11-24 14:51:37  
  4.  0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----  
  5.     ns:4 nr:0 dw:0 dr:668 al:0 bm:1 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0  
  6. #ds 状态为UpToDate/UpToDate(实时/实时)完成同步  

挂载 drbd 设备

  1. mkfs.ext4 /dev/drbd0  
  2. mount /dev/drbd0 /mnt  

5)测试 drbd 数据镜像

  1. dd if=/dev/zero of=/mnt/testdrbd.tmp bs=10M count=20  
  2. 记录了20+0 的读入  
  3. 记录了20+0 的写出  
  4. 209715200字节(210 MB)已复制,0.536101 秒,391 MB/秒  
  5.   
  6. ls -al /mnt/  
  7. 总用量 204824  
  8. drwxr-xr-x.  3 root root      4096 10月 30 04:50 .  
  9. dr-xr-xr-x. 22 root root      4096 10月 29 00:37 ..  
  10. drwx------.  2 root root     16384 10月 30 04:48 lost+found  
  11. -rw-r--r--.  1 root root 209715200 10月 30 04:50 testdrbd.tmp  

在备机上查看,为了保证数据一致,需要停止备用节点的 drbd 服务

  1. /etc/init.d/drbd stop  
  2. Stopping all DRBD resources: .  
  3. mount /dev/sdb1 /mnt  
  4. ls -al /mnt  
  5. 总用量 204824  
  6. drwxr-xr-x.  3 root root      4096 10月 30 04:50 .  
  7. dr-xr-xr-x. 22 root root      4096 11月 13 23:53 ..  
  8. drwx------.  2 root root     16384 10月 30 04:48 lost+found  
  9. -rw-r--r--.  1 root root 209715200 10月 30 04:50 testdrbd.tmp  

测试完毕,恢复 drbd 服务,在备机上执行

  1. umount /mnt  
  2. /etc/init.d/drbd start  
  3. Starting DRBD resources: [ d(r0) s(r0) n(r0) ].  

二、主备切换

1)停止 drbd 服务进行切换
关闭主用节点服务

  1. /etc/init.d/drbd stop  
  2. Stopping all DRBD resources:  
  3. .  

在备机上查看

  1. cat /proc/drbd  
  2. version: 8.3.16 (api:88/proto:86-97)  
  3. GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2014-11-24 14:51:37  
  4.  0: cs:WFConnection ro:Secondary/Unknown ds:UpToDate/DUnknown C r-----  
  5.     ns:0 nr:20 dw:20 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0  
  6. #看到 ro 状态主节点变为 Unknown,接着在备机上执行  
  7. drbdsetup /dev/drbd0 primary -o  
  8. cat /proc/drbd  
  9. version: 8.3.16 (api:88/proto:86-97)  
  10. GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2014-11-24 14:51:37  
  11.  0: cs:WFConnection ro:Primary/Unknown ds:UpToDate/Outdated C r-----  
  12.     ns:0 nr:20 dw:20 dr:664 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0  
  13. #看到 ro 变为 primary  

挂载 drbd 设备

  1. mount /dev/drbd0 /mnt  

启用原来的主节点 drbd

  1. /etc/init.d/drbd start  
  2. Starting DRBD resources: [ d(r0) s(r0) n(r0) ].  
  3. cat /proc/drbd  
  4. version: 8.3.16 (api:88/proto:86-97)  
  5. GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2014-11-24 14:51:37  
  6.  0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----  
  7.     ns:0 nr:4 dw:4 dr:0 al:0 bm:1 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0  

2)正常切换
在主节点上卸载磁盘分区

  1. umount /mnt  
  2. drbdadm secondary all  
  3.   
  4. cat /proc/drbd  
  5. version: 8.3.16 (api:88/proto:86-97)  
  6. GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2014-11-24 14:51:37  
  7.  0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----  
  8.     ns:8 nr:20 dw:28 dr:1017 al:1 bm:1 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0  

在备用节点上执行

  1. drbdadm primary all  
  2. cat /proc/drbd  
  3. version: 8.3.16 (api:88/proto:86-97)  
  4. GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2014-11-24 14:51:37  
  5.  0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----  
  6.     ns:0 nr:8 dw:8 dr:664 al:0 bm:1 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0  
  7.   
  8. mount /dev/drbd0 /mnt  

[1]: http://drbd.linbit.com/download/mainline/
[2]: http://elrepo.org/tiki/tiki-index.php

» 转载请注明来源:若我若鱼 » drbd 数据镜像

Leave a Reply

Your email address will not be published. Required fields are marked *

sixteen − four =