业务需求描述 | 假设有两台服务器A、B 其实际ip 10.0.0.22 和10.0.0.23 配置目标: 两台服务器分别配置好drdb,实现在A服务器上/dev/sdb分区上写入数据,数据实时同步到B 机器上,一旦服务器A宕机或硬盘损坏导致数据不可用,B服务器上的数据此事是A的一个完整备份,且可以瞬间接替服务器A,实现数据异机的实时数据同步。 |
部署结构 图 | 主备模式 新存储服务器 I 新存储服务器ii ------》 drdb/md1 drdb分区1主 《------》 drdb分区1从 heartbeat 主主模式: 新存储服务器 I 新存储服务器ii ------》 drdb/md1 drdb分区1主 《------》drdb分区1从 heartbeat
drdb分区2从 《------ drdb分区2主 |
环境准备 | 参照:http://linuxboys.blog.51cto.com/9150052/1671201 此处两台服务器各添加一块硬盘, 且分区 使用 parted 分区(mkfs无法格式化大于16 T分区,可使用XFS或e2fsprogs) http://blog.ronnyegner-consulting.de/2011/08/18/ext4-and-the-16-tb-limit-now-solved/ 分区命令 parted /dev/sdb mklabel gpt yes parted /dev/sdb mkpart primary ext4 0 1000 ignore parted /dev/sdb mkpart primary ext4 1001 2000 Yes ignore parted /dev/sdb p 提示:这里的meta data分区一定不能格式化建立文件系统,交给drdb管理 格式化好的分区不要进行挂载(mount) 生产环境drdb meta data分区一般可设为1-2G ,数据分区可以格式化 (mkfs.ext4 /dev/sdb1;tune2fs -c -1 /dev/sdb1 )
检查格式化的方法: [root@B ~]# mount /dev/sdb2 /tools mount: you must specify the filesystem type #此处说明meda data分区是正确的 |
软件安装 | rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm #注意此处的elrepo源 yum install -y kmod-drbd84 [root@B tools]# rpm -qa drbd84-utils kmod-drbd84 kmod-drbd84-8.4.6-1.el6.elrepo.x86_64 drbd84-utils-8.9.2-1.el6.elrepo.x86_64 [root@B tools]# modprobe drbd #手动加载内核模块 [root@B tools]# lsmod | grep drbd drbd 365931 0 libcrc32c 1246 1 drbd [root@B tools]# echo "modprobe drbd" >>/etc/rc.local #此处不是必须 [root@B tools]# echo "modprobe drbd" >/etc/sysconfig/modules/drbd.modules [root@B tools]# chmod 755 /etc/sysconfig/modules/drbd.modules #问题,加载模块是遇到找不见,可重启服务器。 |
配置文件 | 默认的配置路径:/etc/drbd.conf [root@B tools]# cat /etc/drbd.conf # You can find an example in /usr/share/doc/drbd.../drbd.conf.example #样例 include "drbd.d/global_common.conf"; #相当于公共文件 include "drbd.d/*.res"; #相当于nginx 的虚拟主机 |
/etc/drbd.conf 范例详细注释 | global { usage-count no; #是否参加DRBD使用者统计,默认为yes } #全局配置选项(global) common { syncer { rate 10M; #设置主备节点同步时的网络速率最大值,单位时字节 verify-alg crc32c; #数据校验方法 } } #公共配置项(common)这里的common,指的是drbd所管理的多个资源之间的common。配置项里主要是配置drbd所有resource可以设置为相同的参数项,比如protocol、syncer等等 # primary for drbd1 resource data { #resource资源 data名称 protocol C; #协议 disk { #磁盘控制 on-io-error detach; #磁盘io错误,分离 } on A { #节点1, drbd1 主机名(host解析) device /dev/drbd0; #指定设备 disk /dev/sdb1; #节点对应磁盘 address 10.0.0.22:7788; #监听地址,端口 meta-disk /dev/sdb2[0]; #存放meta信息 } on drbd2 { #节点2 device /dev/drbd0; disk /dev/sdb1; address 10.0.0.23:7788; meta-disk /dev/sdb2[0]; } } #可以添加多个资源,但需要作用于不同的设备 #注意两边的配置相同 |
Enabling DRBD资源(两台操作相同): | |
创建drbd纪录信息的metadata | [root@B ~]# drbdadm create-md data initializing activity log NOT initializing bitmap Writing meta data... New drbd meta data block successfully created. # 如果此处格式化就无法创建 |
启动服务 | drbdadm create-md data 或 drbdadm up all |
状态查看 | cat /proc/drbd 或 /etc/init.d/drbd status version: 8.4.6 (api:1/proto:86-101) GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by phil@Build64R6, 2015-04-09 14:35:00 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:f oos:976548 Connected表示连接通信正常 Secondary/Secondary表示角色未确定 :Inconsistent/Inconsistent表示磁盘状态数据不一致 |