侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

DRBD 配置

2023-11-12 星期日 / 0 评论 / 0 点赞 / 67 阅读 / 18162 字

DRBD(Distributed Replicated Block Device)分布式复制块设备,这是一种基于软件、无共享、复制的解决方案。在服务器之间的块设备(包括硬盘、分区、逻辑卷)进行镜像。也

 

.

DRBD(Distributed Replicated Block Device) 分布式复制块设备,这是一种基于软件、无共享、复制的解决方案。在服务器之间的块设备(包括硬盘、分区、逻辑卷)进行镜像。也就是说当某一个应用程序完成写操作后,它提交的数据不仅仅会保存在本地块设备上,DRBD也会将这份数据复制一份,通过网络传输到另一个节点的块设备上,这样,两个节点上的块设备上的数据将会保存一致,这就是镜像功能。

.

环境说明

  主机1 主机2
hostname s1 s2
IP 192.168.1.202 192.168.1.203
DRDB    

基础环境配置

设置主机名

[root@s1 /]# hostname s1[root@s1 /]#vim /etc/sysconfig/network               HOSTNAME=s1[root@s2 /]# hostname s2[root@s2 /]#vim /etc/sysconfig/network               HOSTNAME=s2 

关闭防火墙和selinux    

s1,s2:       

service iptables stopsetenforce 0sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

host设置

s1,s2:

cat /etc/hosts192.168.1.202 s1192.168.1.203 s2

内核验证

验证内核是否可用,执行下面命令,如果返回非0,需要升级,如果为0,跳过下一步。
s1,s2:

ls /usr/src/kernels/`uname -r`/  >/dev/null &&echo $?

内核升级

s1,s2:

yum clean all && yum makecacheyum groupinstall "Development tools" "Server Platform Development" yum update yum install kernel-devel kernel-headers flex

升级完执行[内核验证]的命令,必要情况需要重启。

安装

官方下载仓库地址: http://oss.linbit.com/drbd/
本文使用 8.4.4 版本 http://oss.linbit.com/drbd/8.4/drbd-8.4.4.tar.gz
s1,s2:

tar xf drbd-8.4.3.tar.gzcd drbd-8.4.3./configure --prefix=/usr/local/drbd --sysconfdir=/etc/drbd /--datarootdir=/usr/local/share/ --with-utils --with-km   make KDIR=/usr/src/kernels/`uname -r`/make installmkdir -p /usr/local/drbd/var/run/drbdcp -a /etc/drbd/rc.d/init.d/drbd  /etc/rc.d/init.d/chkconfig --add drbdchkconfig drbd oncd drbdmake cleanmake KDIR=/usr/src/kernels/`uname -r`/cp drbd.ko /lib/modules/`uname -r`/kernel/lib/

加载模块

s1,s2:

[root@s1 drbd]# modprobe drbd[root@s1 drbd]# lsmod |grep drbddrbd                  326986  0 libcrc32c               1246  1 drbd[root@s1 drbd]# ln -sd /usr/local/drbd/sbin/drbd-overview /usr/local/sbin/

准备同步所用的磁盘

因为测试,我直接从虚拟机加载了一块.(因为我已经加好了一块,此文新加一个/dev/sdc仅作为演示,后面配置还是使用/dev/sdb)

#fdisk -lDisk /dev/sdc: 321 MB, 321912832 bytes255 heads, 63 sectors/track, 39 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x00000000

分区
s1,s2:

[root@s1 drbd]# fdisk  /dev/sdc      <------------------命令在此Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabelBuilding a new DOS disklabel with disk identifier 0x2e8e99bb.Changes will remain in memory only, until you decide to write them.After that, of course, the previous content won't be recoverable.Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)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): m        <------------------命令在此Command action   a   toggle a bootable flag   b   edit bsd disklabel   c   toggle the dos compatibility flag   d   delete a partition   l   list known partition types   m   print this menu   n   add a new partition   o   create a new empty DOS partition table   p   print the partition table   q   quit without saving changes   s   create a new empty Sun disklabel   t   change a partitions system id   u   change display/entry units   v   verify the partition table   w   write table to disk and exit   x   extra functionality (experts only)Command (m for help): n     <------------------命令在此Command action   e   extended   p   primary partition (1-4)pPartition number (1-4): 1            <------------------命令在此First cylinder (1-39, default 1):   <------------------命令在此Using default value 1Last cylinder, +cylinders or +size{K,M,G} (1-39, default 39):   <------------------命令在此Using default value 39Command (m for help): p    <------------------命令在此Disk /dev/sdc: 321 MB, 321912832 bytes255 heads, 63 sectors/track, 39 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x2e8e99bb   Device Boot      Start         End      Blocks   Id  System/dev/sdc1               1          39      313236   83  LinuxCommand (m for help): w     <------------------命令在此The partition table has been altered!Calling ioctl() to re-read partition table.Syncing disks.[root@s1 drbd]# fdisk  -l    <------------------命令在此Disk /dev/sdc: 321 MB, 321912832 bytes255 heads, 63 sectors/track, 39 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x2e8e99bb   Device Boot      Start         End      Blocks   Id  System/dev/sdc1               1          39      313236   83  Linux[root@s2 drbd.d]# partx /dev/sdC   <------------------命令在此# 1:        63-   417689 (   417627 sectors,    213 MB)# 2:         0-       -1 (        0 sectors,      0 MB)# 3:         0-       -1 (        0 sectors,      0 MB)# 4:         0-       -1 (        0 sectors,      0 MB)

DRBD配置

配置DRBD配置文件

    drbd的主配置文件为 /etc/drbd/drbd.conf;为了管理的便捷性,目前通常会将些配置文件分成多个部分,且都保存至/etc/drbd/drbd.d目录中,主配置文件中仅使用"include"指令将这些配置文件片断整合起来。通常,/etc/drbd/drbd.d目录中的配置文件为global_common.conf和所有以.res结尾的文件。其中global_common.conf中主要定义global段和common段,而每一个.res的文件用于定义一个资源。
    在配置文件中,global段仅能出现一次,且如果所有的配置信息都保存至同一个配置文件中而不分开为多个文件的话,global段必须位于配置文件的最开始处。目前global段中可以定义的参数仅有minor-count, dialog-refresh, disable-ip-verification和usage-count。
    common段则用于定义被每一个资源默认继承的参数,可以在资源定义中使用的参数都可以在common段中定义。实际应用中,common段并非必须,但建议将多个资源共享的参数定义为common段中的参数以降低配置文件的复杂度。

s1:

vim /etc/drbd/drbd.d/global_common.conf global {        usage-count no;}common {        protocol C;        handlers {                pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";                pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";                local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";        }        startup {                wfc-timeout 120;                degr-wfc-timeout 120;        }        disk {                on-io-error detach;                fencing resource-only;        }        net {                cram-hmac-alg "sha1";                shared-secret "mydrbdlab";        }        syncer {                rate 100M;        }}
vi myres1.res  resource myres1 {                     #定义资源的名字    on s1 {                          #主机名        device /dev/drbd0;           #drbd设备名称        disk /dev/sdb1;              #drbd0使用的磁盘        address 192.168.1.202:7789;  #drbd监听地址与端口        meta-disk internal;    }    on s2 {                  device /dev/drbd0;                 disk /dev/sdb1;                     address 192.168.1.203:7789;        meta-disk internal;    }}

将配置文件拷贝到另一台机器完全对端配置

scp /etc/drbd/drbd.d/myres1.res /etc/drbd/drbd.d/global_common.conf root@s2:/etc/drbd/drbd.d/

启动

s1,s2:

资源初始化

[root@s1 drbd.d]# drbdadm  create-md myres1 Writing meta data...initializing activity logNOT initializing bitmapNew drbd meta data block successfully created.success

启动服务

s1,s2:

[root@s1 drbd.d]# service drbd startStarting DRBD resources: [     create res: myres1   prepare disk: myres1    adjust disk: myres1     adjust net: myres1]outdated-wfc-timeout has to be shorter than degr-wfc-timeoutoutdated-wfc-timeout implicitly set to degr-wfc-timeout (120s)[root@s1 drbd.d]# service drbd status #或 drbdadm role myres1 或 cat /proc/drbd 或 drbd-overviewdrbd driver loaded OK; device status:version: 8.4.4 (api:1/proto:86-101)GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@s1, 2017-05-07 00:05:41m:res     cs         ro                   ds                 p  mounted  fstype0:myres1  Connected  Secondary/Secondary  UpToDate/UpToDate  C

此时,默认两端都是Secondary状态。接下来需要设置两端的主次关系.

置主

s1:

将s1设为主节点。第一次设置主节点时,需要使用--force参数来初始化设备同步,之后切换节点则不在需要

[root@s1 drbd.d]# drbdadm -- --overwrite-data-of-peer primary myres1[root@s1 drbd.d]# service drbd status                               drbd driver loaded OK; device status:version: 8.4.4 (api:1/proto:86-101)GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@s1, 2017-05-07 00:05:41m:res     cs         ro                 ds                 p  mounted  fstype0:myres1  Connected  Primary/Secondary  UpToDate/UpToDate  C

查看日志可看到
May  7 01:32:15 s1 kernel: block drbd0: role( Secondary -> Primary ) 
对方日志也接收到消息
May  7 11:43:55 s2 kernel: block drbd0: peer( Secondary -> Primary )

创建文件系统

s1:
注意,只需要在当前主节点操作。

[root@s1 drbd.d]# mke2fs -t ext4 -L drbdmyres1 /dev/drbd0 mke2fs 1.41.12 (17-May-2010)文件系统标签=drbdmyres1操作系统:Linux块大小=1024 (log=0)分块大小=1024 (log=0)Stride=0 blocks, Stripe width=0 blocks52208 inodes, 208768 blocks10438 blocks (5.00%) reserved for the super user第一个数据块=1Maximum filesystem blocks=6737100826 block groups8192 blocks per group, 8192 fragments per group2008 inodes per groupSuperblock backups stored on blocks:         8193, 24577, 40961, 57345, 73729, 204801正在写入inode表: 完成                            Creating journal (4096 blocks): 完成Writing superblocks and filesystem accounting information: 完成This filesystem will be automatically checked every 24 mounts or180 days, whichever comes first.  Use tune2fs -c or -i to override.[root@s1 drbd.d]# mkdir /myres1 #创建同步文件夹  [root@s1 drbd.d]# mount /dev/drdrbd0  dri/   [root@s1 drbd.d]# mount /dev/drbd0  /myres1/  #挂载[root@s1 drbd.d]# df -h Filesystem            Size  Used Avail Use% Mounted on/dev/mapper/vg_localhost-lv_root                       18G  2.9G   14G  18% /tmpfs                 186M     0  186M   0% /dev/shm/dev/sda1             477M   54M  398M  12% /boot/dev/drbd0            194M  1.8M  182M   1% /myres1[root@s1 drbd.d]# cd /myres1/ && touch  IamS1  #创建测试数据[root@s1 myres1]# ll /myres1/总用量 12-rw-r--r-- 1 root root     0 5月   7 01:43 IamS1drwx------ 2 root root 12288 5月   7 01:39 lost+found[root@s1 myres1]# df -h Filesystem            Size  Used Avail Use% Mounted on/dev/mapper/vg_localhost-lv_root                       18G  2.9G   14G  18% /tmpfs                 186M     0  186M   0% /dev/shm/dev/sda1             477M   54M  398M  12% /boot/dev/drbd0            194M  1.8M  182M   1% /myres1

将主节点置从

[root@s1 ~]#  umount /dev/drbd0 [root@s1 ~]# drbdadm  secondary myres1

注:一定不能在 /myres1 当前目录操作,会报错
umount: /myres1: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

坑了我好长时间。

将从节点置主

[root@s2 drbd.d]# drbdadm  primary myres1[root@s2 drbd.d]# mount /dev/drbd0  /myres1/[root@s2 myres1]# cd /myres1/ && lltotal 12-rw-r--r-- 1 root root     0 May  7 01:43 IamS1drwx------ 2 root root 12288 May  7 01:39 lost+found


s1的数据已经同步到s2了。

广告 广告

评论区