标签: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