drbd:distributedreplicatedblockdevice分布式复制块设备,原理图如下drbd有主双架构和双主架构的,当处于主从架构时,这个设备一定只有一个节点是可以读写的,
drbd:distributed replicated block device 分布式复制块设备,原理图如下
drbd有主双架构和双主架构的,当处于主从架构时,这个设备一定只有一个节点是可以读写的,另外的节点是不可读的,连挂载都不可能,只有一个节点是主的,其它节点都是从的。当做为主主架构时,需要达到几个条件,1.在高可用集群中启用drbd; 2. 启用分布式文件锁功能,即需要把磁盘格式化为集群文件系统(如gfs2,ocfs2等);3. 把drbd做成资源。
数据的存储过程:当某个进程存储数据时在内核中通过drbd模块复制一分通过tcp/ip套接字发送到从节点上去,从节点的drbd在套接字上接收数据并通过drbd模块存储到磁盘,并把结果返回给主节点 。但是内核传输的速度很快,而tcp报文的传输速度相对来说要慢得多,于是会把数据存入tcp协议栈的发送缓冲区,然后从缓冲区慢慢传递到从节点上。这个数据传输过程有三个模型:
a : 异步模型,当内核把drbd模块中复制的数据已经以报文方式发送到本地的tcp协议栈的缓冲区,至是从节点的数据是否已经传送到,保存是否完整,无法保证;
b : 半同步模型,报文已经发送到从节点的套接字上,已经接收,并发往内核,但从节点的存储过程没有回应过程。
c:同步模型,,报文发往从节点,从节点已经接收,并发往内核,内核已经把数据报文存储到磁盘,并把结果返回给主节点,这个是默认的数据传输模型,可以保证数据的完整性。
安装环境:
centos6.5,安装corosync和pacemaker过程请参见上一篇博客,上一个环境安装的配置接口是crmsh,这里安装的是pcs,安装pcs比较简单,#yum install pcs –y 即可
安装完成后集群状态如下:
现在看到两个集群节点mysql1 mysql2在线,pacemaker是做为插件在使用的,没有stonith设备,只有两个节点,所以quorum也要忽略
#pcs property set stonith-enabled=false
# pcs property set no-quorum-policy=ignore
#pcs config show 查看配置文件
显示错误还没有集群配置文件,stonith已经禁用,quorum已经忽略
安装drbd:
根据官方文档,drbd在内核2.6.33版本以后就已经装载进了内核,不需要再额外安装drbd,只需要安装drbdadm管理软件就行,我这里用的是centos6.5,内核版本是2.6.32,所以还需要安装
drbd版本有8.1 8.2 8.3 8.4,我这里用的是已经做好的rpm包进行安装,下载目录:ftp://rpmfind.net/linux/atrpms/
把drbd的两个rpm包放在/root目录下,然后执行# yum --nogpgcheck localinstall *.rpm
--nogpgcheck 不执行gpg检测,因为在centos里面没有认证文件
在两个节点上安装完成。加载drbd模块
[root@mysql1 ~]# modprobe drbd[root@mysql1 ~]# lsmod | grep drbddrbd325978 0 libcrc32c1246 1 drbd创建一个新的磁盘分区做为drbd的共享磁盘,我这里是xen虚拟机添加的一个磁盘/dev/xvdb,创建的磁盘为/dev/xvdb1[root@mysql1 drbd.d]# fdisk /dev/xvdbdevice contains neither a valid dos partition table, nor sun, sgi or osf disklabelbuilding a new dos disklabel with disk identifier 0x218cde3e.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 toswitch off the mode (command 'c') and change display units tosectors (command 'u').command (m for help): ncommand action e extended p primary partition (1-4)ppartition number (1-4): 1first cylinder (1-2610, default 1): using default value 1last cylinder, +cylinders or +size{k,m,g} (1-2610, default 2610): using default value 2610command (m for help): pdisk /dev/xvdb: 21.5 gb, 21474836480 bytes255 heads, 63 sectors/track, 2610 cylindersunits = cylinders of 16065 * 512 = 8225280 bytessector size (logical/physical): 512 bytes / 512 bytesi/o size (minimum/optimal): 512 bytes / 512 bytesdisk identifier: 0x218cde3edevice bootstartendblocks id system/dev/xvdb112610 20964793+ 83 linuxcommand (m for help): wthe partition table has been altered!calling ioctl() to re-read partition table.syncing disks.在mysql2节点上执行同样的操作。
配置drbd:
在/etc目录下有一个文件drbd.conf 主配置文件,里面主要调用了/etc/drbd.d/目录下的配置文件
