设为首页 收藏本站
查看: 1270|回复: 0

[经验分享] DRBD磁盘镜像技术详细配置

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-1-27 08:07:25 | 显示全部楼层 |阅读模式
QQ截图20150127080446.jpg
磁盘镜像技术DRBD
什么是DRBD
DRBD是由内核模块和相关脚本构成,用以构建高可用性的集群。其实现方式是通过网络来镜像整个设备。它允许用户在远程机器上建立一个本地块设备的实时镜像。也可以把它看成一个网络RAID1
工作原理:
DRBD负责接收数据,把数据写到本地磁盘,然后发送给另一个主机。另一个主机再将数据存到自己的磁盘中。目前,DRBD每次只允许对一个节点进行读写访问,这对于通常的故障切换高可用性集群已经够了。
DRBD协议:
A:数据一旦写入磁盘并发送到网络中就认为完成了写入操作
B:收到接受确认就认为完成了写入操作
C:收到写入确认就完成了写入操作
目前运用最多的就是C协议
DRBD的三个进程:
drbd0——worker:主进程
drbd0——asender:primary上drbd0的数据发送进程
drbd0——receiver;secondary上drbd0的数据接受进程
配置DRBD前需要注意几点:
mount drbd设备以前必须把设备切换到primary状态
两个节点中,同一时刻只能有一台处于primary状态,另一台处于secondary状态,处于secondary状态的服务器上不能加载drbd设备。主备服务器同步的两个分区大小最好相同,这样不至于浪费磁盘空间,因为drbd镜像相当于网络raid1
前提:
1)本配置共有两个测试节点,分别master-drbd和slave-drbd ,相的IP地址分别为192.168.32.200和192.168.32.202;
2)master-drbd和slave-drbd两个节点上各提供了一个大小相同的分区作为drbd设备;我们这里为在两个节点上均为/dev/sdb1,大小为20GB;
3)系统为centos6.5平台;
4)内核:2.6.32-431.el6.x86_64
1、准备工作
两个节点的主机名称和对应的IP地址解析服务可以正常工作,且每个节点的主机名称需要跟"uname -n“命令的结果保持一致;因此,需要保证两个节点上的/etc/hosts文件均为下面的内容:
192.168.32.200 master-drbd
192.168.32.202 slave-drbd
2.下载软件包
wget http://oss.linbit.com/drbd/8.4/drbd-8.4.3.tar.gz
drbd共有两部分组成:内核模块和用户空间的管理工具。
3.准备环境
首先确认他的内核版本
[iyunv@master-drbd drbd.d]# uname -r
2.6.32-431.el6.x86_64
然后挂载光盘
mount /dev/sr0 /media/   #这里因为是虚拟机,所以他的系统盘就叫sr0
cd /media/Packages/
rpm -ivh flex-2.5.35-9.el6.x86_64 kernel-devel-2.6.32-431.el6.x86_64 kernel-headers-2.6.32-504.3.3.el6.x86_64
4.安装drbd
tar zxvf drbd-8.4.1.tar.gz
cd drbd-8.4.1
./configure --prefix=/usr/loca/drbd --with-km #--prefix是制定安装路径。--with-km是启用内核模块
make KDIR=/usr/src/kernels/2.6.32-431.el6.x86_64/ #KDIR指的是自己的内核路径
make install
mkdir -p /usr/local/drbd/var/run/drbd  #这里必须创建这个目录,不然启动服务会报错
cp /usr/local/drbd/etc/rc.d/init.d/drbd  /etc/rc.d/init.d/
chkconfig --add drbd  
chkconfig drbd on
接下来安装drbd模块
cd drbd
make clean
make KDIR=/usr/src/kernels/2.6.32-431.el6.x86_64/
cp drbd.ko /lib/modules/2.6.32-431.el6.x86_64/kernel/lib/
moprobe drbd #加载内核模块
lsmod | grep drbd
drbd                  303476  0
libcrc32c               1246  1 drbd
5.配置DRBD

drbd的主配置文件为/usr/local/drbd/etc/drbd.conf;为了管理的便捷性,目前通常会将些配置文件分成多个部分,
且都保存至/usr/local/drbd/etc/drbd.d目录中,主配置文件中仅使用"include"指令将这些配置文件片断整合起来。
通常,/etc/drbd.d目录中的配置文件为global_common.conf和所有以.res结尾的文件。其中global_common.conf中主要定义global段和common段,而每一个.res的文件用于定义一个资源。
resource段则用于定义drbd资源,每个资源通常定义在一个单独的位于/etc/drbd.d目录中的以.res结尾的文件中。资源在定义时必须为其命名,名字可以由非空白的ASCII字符组成。每一个资源段的定义中至少要包含两个host子段,以定义此资源关联至的节点,其它参数均可以从common段或drbd的默认中进行继承而无须定义。
下面的操作在master-drbd上完成。
1)配置global-common.conf
global {
        usage-count no;#是否参加drbd的使用者统计,默认为yes
        # minor-count dialog-refresh disable-ip-verification
}
common {
        protocol C;#使用drbd的同步协议
        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;#配置I/O错误处理策略为分离
                rate 50M;#设置主备节点同步时的网络速率
        }
        net {
                cram-hmac-alg "sha1";
                shared-secret "mydrbdlab";
        }
}
2)定义一个资源drbd.res,内容如下:
resource r0 {   #r0是定义资源的名字
   on master-drbd {   #on后面是主机名称
   address 192.168.32.200:7801;#设置DRBD的监听端口,用于与另一台主机通信。
   volume 0 {
   device /dev/drbd0; #drbd设备名称
   disk /dev/sdb1;    #drbd使用的磁盘分区为sdb1
   meta-disk internal;
   }
}
  on slave-drbd {
  address 192.168.32.202:7801;
   volume 0 {
   device /dev/drbd0;
   disk /dev/sdb1;
   meta-disk internal;
   }
}
}
以上文件在两个节点上必须相同,因此,可以基于ssh将刚才配置的文件全部同步至另外一个节点。
6.在两个节点上初始化已定义的资源并启动服务:
1)启动服务,在master-drbd和slave-drbd上分别执行:
/etc/init.d/drbd start
2)查看启动状态:
# cat /proc/drbd
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:16
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:505964
也可以使用drbd-overview命令来查看:
3)查看监听端口
[iyunv@master-drbd drbd.d]# netstat -lanput | grep 7801
tcp        0      0 192.168.32.200:7801         192.168.32.202:34061        ESTABLISHED -                  
tcp        0      0 192.168.32.200:59747        192.168.32.202:7801         ESTABLISHED -               
4)从上面的信息中可以看出此时两个节点均处于Secondary状态。于是,我们接下来需要将其中一个节点设置为Primary。在要设置为Primary的节点上执行如下命令:
#drbdsetup primary all
  注: 也可以在要设置为Primary的节点上使用如下命令来设置主节点:
     drbdadm -- --overwrite-data-of-peer primary r0
而后再次查看状态,可以发现数据同步过程已经开始:
# drbd-overview
  0:r0  SyncSource Primary/Secondary UpToDate/Inconsistent C r----
    [============>.......] sync'ed: 66.2% (172140/505964)K delay_probe: 35
   
等数据同步完成以后再次查看状态,可以发现节点已经牌实时状态,且节点已经有了主次:
# drbd-overview
  0:r0  Connected Primary/Secondary UpToDate/UpToDate C r----
7.格式化文件系统
mkfs.ext4 /dev/drbd0
mkdir /data  #创建挂载目录
mount /dev/drbd0 /data#挂载文件系统
df -h #查看挂载
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root   18G  1.7G   15G  10% /
tmpfs                         495M     0  495M   0% /dev/shm
/dev/sda1                     485M   34M  426M   8% /boot
/dev/drbd0                     20G  182M   19G   1% /data
注意:文件系统的挂载只能在Primary节点进行,因此,也只有在设置了主节点后才能对drbd设备进行格式化:
7.写入文件
cd /data
dd if=/dev/zero of=test bs=1M count=10 #创建一个10M的文件
[iyunv@slave-drbd data]# ll
total 10256
-rw-r--r-- 1 root root 10485760 Jan 10 01:54 1.txt
drwx------ 2 root root    16384 Jan 10 01:53 lost+found
8、切换Primary和Secondary节点
对主Primary/Secondary模型的drbd服务来讲,在某个时刻只能有一个节点为Primary,因此,要切换两个节点的角色,
只能在先将原有的Primary节点设置为Secondary后,才能原来的Secondary节点设置为Primary:
master-drbd:
drbdadm secondary  all
查看 状态
cat /proc/drbd
version: 8.4.1 (api:1/proto:86-100)
GIT-hash: 91b4c048c1a0e06777b5f65d312b38d47abaea80 build by root@localhost.localdomain, 2015-01-10 04:56:32
0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
    ns:21011460 nr:24 dw:473584 dr:20539309 al:137 bm:1280 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
slave-drbd:
drbdadm primary all
[iyunv@slave-drbd ~]# cat /proc/drbd
version: 8.4.1 (api:1/proto:86-100)
GIT-hash: 91b4c048c1a0e06777b5f65d312b38d47abaea80 build by root@puppet-client, 2015-01-23 20:48:04
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:24 nr:21011460 dw:21011484 dr:1021 al:3 bm:1280 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

mkdir /data
mount /dev/drbd0 /data
使用下面的命令查看在此前在主节点上复制至此设备的文件是否存在:
[iyunv@slave-drbd data]# ll
total 10256
-rw-r--r-- 1 root root 10485760 Jan 10 01:54 1.txt
drwx------ 2 root root    16384 Jan 10 01:53 lost+found
drbd 8.4中第一次设置某节点成为主节点的命令
# drbdadm primary --force resource


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-41499-1-1.html 上篇帖子: MYsql编译安装及主从复制 下篇帖子: Navicat备份mysql数据库的方法 技术
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表