http://www.linuxidc.com/Linux/2012-09/71471.htm
DRDB:分布式复制磁盘块设备,是一个软件级别的,不提供任何共享实现的分布式的磁盘镜像解决方案。 实现方式:在数据写入磁盘前通过TCP/IP网络发送给另外一个服务器,在另外一个服务器上存储一份,从节点drdb设备不能读写也不能挂载。 复制模型: Protocol A:异步: 数据被送到本地的发送缓冲区即返回成功 Protocol B:半异步:数据发送到对方的缓冲区返回成功 Protocol C:同步:数据存储到对方磁盘后才返回成功 一、环境介绍 master: 192.168.56.101 slave: 192.168.56.102 mysql版本:5.5.24 系统版本:RedHat 5.8 x86_32 注意:1、同步两个节点的时间 2、通过修改hosts文件可以使两个节点间能够互相通过主机名访问 3、确保uname -n得到的结果和主机名保持一致 4、禁止mysqld服务开机自动启动 二、DRDB部署 1、创建DRBD使用的磁盘分区 最好使用相同大小的单独分区,也可以使用LVM,创建分区过程这里不再给出,可参考其他文档,假设使用的分区情况如下: master: /dev/sda5 5G slave: /dev/sda5 5G 创建完成后不要格式化 2、安装软件包 kmod-drbd83 drbd83 可以使用yum安装,在系统安装光盘就附带的有,需要在两个节点都安装。 3、配置DRBD 复制配置文件样例 [root@master ~]# cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc cp:是否覆盖“/etc/drbd.conf”? y 打开该配置文件后发现只有两行内容: include "drbd.d/global_common.conf"; include "drbd.d/*.res"; 就是读取drbd.d下的global_common.conf和drbd.d下所有以res结尾的文件,所以不用做任何修改 配置global_common.conf [root@master ~]# cp /etc/drbd.d/global_common.conf /etc/drbd.d/global_common.conf.bak //先备份该配置文件 [root@master ~]# vim /etc/drbd.d/global_common.conf //编辑该配置文件 ... global { usage-count no; //是否对使用信息作统计,默认为yes } startup { wfc-timeout 120; //等待连接的超时时间 degr-wfc-timeout 120; } disk { on-io-error detach; //当IO出现错误时执行的动作 fencing resource-only; //隔离级别 } net { cram-hmac-alg "sha1"; //同步时使用的验证方式 shared-secret "drdb-test"; //使用的密码 } syncer { rate 100M; //同步时占用网络速率的最大值 } ... 创建资源文件,从drbd.conf配置文件中可以看到读取的是以res结尾的文件,所以创建的资源文件必须为res结尾 [root@master ~]# vim /etc/drbd.d/mysql.res resource mysql { //定义资源名称为mysql,名字不能包含空格 on master { //定义mastre节点的配置 device /dev/drbd0; //设置drbd设备 disk /dev/sda5; //定义使用的哪个磁盘分区 address 192.168.56.101:7788; //设置本节点的IP和对应端口,用来和另外一个节点通信 } on slave { device /dev/drbd0 disk /dev/sda5; address 192.168.56.102:7788; meta-disk internal; } } 复制配置文件至slave节点 [root@master ~]# cd /etc/drbd.d/ [root@master drbd.d]# scp -p global_common.conf mysql.res root@192.168.56.102:/etc/drbd.d/ [root@master drbd.d]# scp -p /etc/drbd.conf root@192.168.56.102:/etc/ 4、初始化两个节点 初始化主节点: [root@master drbd.d]# drbdadm create-md mysql Writing meta data... initializing activity log NOT initialized bitmap New drbd meta data block successfully created. 初始化备用节点: [root@slave ~]# drbdadm create-md mysql Writing meta data... initializing activity log NOT initialized bitmap New drbd meta data block successfully created. 5、启动服务并同步磁盘 分别在两个节点上执行: [root@master ~]# service drbd start [root@slave ~]# service drbd start 单独启动一个节点时,会一直处在等待另一个节点上线状态。 查看drbd磁盘状态 [root@master ~]# 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:4891572 可以看到两个节点并未同步而且都处于Secondary状态 设置master节点成为主节点 [root@master ~]# drbdadm -- --overwrite-data-of-peer primary mysql [root@master ~]# 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:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r---- ns:139176 nr:0 dw:0 dr:147072 al:0 bm:8 lo:1 pe:10 ua:247 ap:0 ep:1 wo:b oos:1820920 [>...................] sync'ed: 7.4% (1820920/1959800)K delay_probe: 13 finish: 0:01:44 speed: 17,360 (17,360) K/sec 可以看到已经开始同步7.4% 6、同步完成后格式化并挂载测试 等待同步完成后磁盘状态将转变为UpToDate/UpToDate [root@master ~]# mke2fs -j /dev/drbd0 挂载测试 [root@master ~]# mount /dev/drbd0 /mnt/ [root@master ~]# ls /mnt/ lost+found [root@master ~]# cp /etc/fstab /mnt/ [root@master ~]# umount /mnt/ [root@master ~]# drbdadm secondary mysql //使当前节点的mysql资源转为备用 在备用节点测试 [root@slave ~]# drbdadm primary mysql [root@slave ~]# mount /dev/drbd0 /mnt/ [root@slave ~]# ls /mnt/ fstab lost+found 可以看到在备用节点成功测试。