标签:drbd ha 高可用
DRBD简介:
DRBD是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。主要用于对于服务器之间的磁盘、分区、逻辑卷等进行数据镜像。
DRBD的复制模式:
协议A:异步写入,只要本地磁盘写入完成,另外一份拷贝的数据包在发送队列中,则认为一个写操作过程完成。
协议B:半同步写入,只要本地磁盘写入完成,另外一份拷贝的数据包已经到达远程节点,则认为一个写操作过程完成。
协议C:同步写入,只有本地和远程节点的磁盘都已经确认了写操作完成,则认为一个写操作过程完成。
DRBD的安装和配置
环境如下:
节点1 node1.jwh5566.com 192.168.1.116
节点2 node2.jwh5566.com 192.168.1.117

安装前配置
此处省略1000字......
设定主机名 hosts文件
vi /etc/hosts 192.168.10.116 node1.jwh5566.com node1 192.168.10.117 node2.jwh5566.com node2
关闭防火墙,SELINUX
设定双机互信
node1上 ssh-keygen -t rsa ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2 node2上 ssh-keygen -t rsa ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1
同步系统时间
在两个系统上分别添加第二块硬盘
安装编译环境
yum -y install gcc kernel-devel kernel-headers flex
安装用户空间工具
cd /usr/local/src wget http://oss.linbit.com/drbd/8.4/drbd-8.4.4.tar.gz tar xf drbd-8.4.4.tar.gz cd drbd-8.4.4 ./configure --prefix=/usr/local/drbd --with-km make KDIR=/usr/src/kernels/2.6.32-504.el6.x86_64/ 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
安装drbd模块
cd drbd make clean make KDIR=/usr/src/kernels/2.6.32-504.el6.x86_64/ cp drbd.ko /lib/modules/`uname -r`/kernel/lib/ depmod modprobe drbd //载入 drbd 模块 lsmod|grep drbd //确认 drbd 模块是否载入
格式化硬盘,分区
[root@node1 ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xb52b897c.
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): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-652, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-652, default 652):
Using default value 652
Command (m for help): p
Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb52b897c
Device Boot Start End Blocks Id System
/dev/sdb1 1 652 5237158+ 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
partx /dev/sdb
sdb sdb1
[root@node1 ~]# partx /dev/sdb
# 1: 63- 10474379 ( 10474317 sectors, 5362 MB)
# 2: 0- -1 ( 0 sectors, 0 MB)
# 3: 0- -1 ( 0 sectors, 0 MB)
# 4: 0- -1 ( 0 sectors, 0 MB)配置drbd
cd /usr/local/drbd/etc/drbd.d
vim vim global_common.conf
global {
usage-count no;定义是否参加使用者统计,默认是yes
# minor-count dialog-refresh disable-ip-verification
}
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 degr-wfc-timeout outdated-wfc-timeout wait-after-sb
定义各种超时时间
}
options {
# cpu-mask on-no-data-accessible
}
disk {
# size max-bio-bvecs on-io-error fencing disk-barrier disk-flushes
# disk-drain md-flushes resync-rate resync-after al-extents
# c-plan-ahead c-delay-target c-fill-target c-max-rate
# c-min-rate disk-timeout
on-io-error detach;定义磁盘IO错误的时候,剔除设备。
}
net {
}
syncer { rate 500M; }定义
}设置Resource
vim drbd.res
resource r1 {
on node1.jwh5566.com { 每个主机说明以on开头,后面是hostname(uname -n)
device /dev/drbd0;
disk /dev/sdb1; drbd使用的磁盘分区是/dev/sdb1
address 192.168.10.131:7789;设定drbd的监听端口,与另一台主机通信
meta-disk internal; 设定drbd的磁盘内部保存元数据
}
on node2.jwh5566.com {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.10.132:7789;
meta-disk internal;
}
}将上面两个配置文件复制到node2相同的目录下
启动DRBD
在两个节点执行 drbdadm create-md all 启动drbd服务 service drbd start 查看节点的状态 cat /proc/drbd 或 service drbd status [root@node1 drbd.d]# cat /proc/drbd version: 8.4.4 (api:1/proto:86-101) GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by root@node1.jwh5566.com, 2015-06-23 21:15:01 0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r----- ns:0 nr:4 dw:4 dr:664 al:0 bm:1 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0 注: ro:表示角色信息primary或secondary ds:表示磁盘信息 一致或非一致 第一次显示是非一致的状态,使用如下命令设定主节点,同步一致状态 在任意节点 drbdadm -- --overwrite-data-of-peer primary all 以后再要切换状态的时候可以使用如下命令 drbdadm primary all 执行之后可以看到角色和状态显示正常。 挂载设备和创建文件系统,在primary的主机上执行 mkfs.ext3 /dev/drbd0 mount /dev/drbd0 /mnt
测试DRBD
在primary主机上执行 在/mnt目录下创建文件,在另一台主机上查看是否同步 dd if=/dev/zero of=/mnt/test bs=1M count=100 在secondary主机上 停止drbd服务 service drbd stop 挂载/dev/sdb1,查看文件 mount /dev/sdb1 /mnt ls -al /mnt/ 可以成功看到设备,即正常。
DRBD主备节点切换
在主节点停止drbd服务
server drbd stop
在备节点切换成主节点
drbdadm primary all
或
1.在主节点卸载磁盘分区
a.umount /mnt
2.切换到secondary角色
a.drbdadm secondary all
3.在另一节点切换成主角色
drbdadm primary all
本文出自 “Linux is belong to you” 博客,请务必保留此出处http://jwh5566.blog.51cto.com/7394620/1665076
标签:drbd ha 高可用
原文地址:http://jwh5566.blog.51cto.com/7394620/1665076