有 一台 nfs ,单点故障 所以就要用到DRBD.
DRBD:Distributed Replicated Block Device 分布式复制 块设备。开源软件, 内核2.6.33 版本后是直接做进内核
DRBD 工作原理 如下图:
数据传到DRBD时,DRBD复制一份到tcp/ip封装压缩再通过网卡 传递给另外一个节点,通过网卡传递给tcp/ip协议栈,在传到DRBD。
默认一主一从,但可以互换 类似于mysql
数据 传递到 DRBD 是分两路:一段工作内核,一段工作在用户
配置工具: drbdadm 一段工作在内核空间中,一段工作在用户空间,可以定义把那些设备式作为drbd分布式复制块设备,还可以定义drbdadm 还可以监控工作状态。主配置文件 /etc/drbd.conf
Drbdsetup 和drbdmeta 用的非常少
DRBD 特征:复制的解决 把两个节点复制
DRBD 特征:
1.分布式块设备
2.基于软件,没有任何东西是共享的,复制的存储解决方案,把两个节点上磁盘或者分区做成了镜像
DRBD在实现数据镜像的时候特点:
1.IN real time实时
2. Transparently 透明的
3.synchonously or asynchronously 同步或异步
DRBD 相关概念:
1.resource name 资源名字 在两个节点上可以做多个DRBD ,不能包含空白任意字符
2. DRBD device DRBD设备 软设备 ,主设备块设备 147编号,次设备号0到任意字符
3.Disk configuration指定 创建DRBD ,需要用到那个节点,那个分区,DRBD 元数据放在什么位置
4. network configuration 关于DRBD磁盘相关配置信息
每一个资源都有决策:
资源决策:
Primary:标记为primary的既能读也能写操作 ,挂载 ..都可以,提供裸设备
Secondary :标记为 secondary 不能挂载和 读写,只允许另外一个发来的数据,不允许用户或工作在本节点上应用程序读写操作
单主节点: 对文件系统并没有要求
双主节点:可以通过任意节点,进行操作,但是drbd要结合集群 需要加锁, 只有8.0版本才支持
对于DRBD 多个节点复制可以是:
Protocol A :表示异步 只要本地存储完成了,就认为完成了
缺点:不可靠
Protocol B:半同步 只要主节点存储内存中完成了 ,就认为 完成了
只要俩节点不断电,数据就不会丢失
Protocol C:完全同步 任何存储都要存储在硬盘上就宣告结束
默认就是 C 效率低
所以要借助 raid,大型企业可以借助 硬raid ,因为硬盘raid 有电池,可以存储缓存
大约 99.95% down机时间
也会出现脑裂:双节点都无法探测到彼此了,都认为自己可以读写了。如果两节点都写数据,会产生覆盖。
解决方法:
谁改的少,丢弃谁的
把修改的 合并到没有修改的,这是drbd内置的脑裂出现的解决方法
实验:
需要两个软件包:一个是 内核模块,一个是工作在用户空间的工具
配置
两个节点 要通过主机名互相访问
都各自准备一个空间大小空间一样分区
各自安装软件
搭建环境 需要两个测试节点,分别node1.a.org和node2.a.org,相的IP地址分别为192.168.0.10和192.168.0.11;
1.node1和node2两个节点上各提供了一个大小相同的分区作为drbd设备;这里为在两个节点上均为/dev/sda5,大小为512M;
两个节点的主机名称和对应的IP地址解析服务可以正常工作,且每个节点的主机名称需要跟"uname -n“命令的结果保持一致;因此,需要保证两个节点上的/etc/hosts文件均为下面的内容:
#/etc/hosts 最后添加
192.168.0.10 node1.a.org node1
192.168.0.11 node2.a.org node2
在节点一上:
该主机名字
HOSTANME=node1.a.org
#hostname node1.a.org
在节点二上:
# vim /etc/sysconfig/network
HOSTANME=node2.a.org
#hostname node2.a.org
在节点一和二上创建分区
#fdisk /dev/sda
…
#partprobe /dev/sda
下载软件包:
在节点一上都操作,在节点二上只用 yum 安装就行了
#cd /usr/share/doc/brbd83-8.3.8/
#cp drbd.conf /etc
#cd
#vim /etc/drbd.conf
把 usage-count no;
把原来的删除,在把这些从新添加上
startup {
wfc-timeout 120;
degr-wfc-timeout 120;
}
disk {
on-io-error detach;
fencing resource-only;
}
net {
cram-hmac-alg "sha1";
shared-secret "mydrbdlab";
}
syncer {
rate 100M;
}
}
#vim web.res 定义资源,只要以res结尾就行
resource web {
on node1.a.org {
device /dev/drbd0;
disk /dev/sda5;
address 192.168.0.10:7789;
meta-disk internal;
}
on node2.a.org {
device /dev/drbd0;
disk /dev/sda5;
address 192.168.0.11:7789;
meta-disk internal;
}
}
把这两个文件cp到 从节点上:
接下来初始化:
初始化资源,在Node1和Node2上分别执行:
# drbdadm create-md web web是资源名
启动服务,在Node1和Node2上分别执行:
#Service drbd start
#cat /proc/drbd 查看启动状态
最后一行 可以看出 还没有同步
把node1 设置为主节点,可以看到正在同步效果
都是在主节点上 配置:
#watch -nl ‘cat /proc/drba' 可以看到正在同步
格式化
#mkfs -t ext3 -L DRBDWED /dev/drbd0
#mkdir /web
#mount /dev/drbd0 /web 挂载到web 目录下
为了看到效果在这里创建个网页:
#cd /web
#vim index.html
<h>ceshi 1. </h>
#drbdadm role web
在从节点上
#drbdadm role web
如果需要换一下主从节点配置: 注 必须要先把主的设成从的,在把从的设置成主的
在主节点上:
#umount /web
#drbdadm secondary web
会看到 secondary/secondary
在第二节点上:
#drbdadm primary web
#
挂载:
# mount /dev/drbd0 /web
#cd /web
#ls
会显示 index.html
如果在把从的换回成主的:
在 node2 配置:
先创建个网页
# vim test.html
<h1> ceshi 2</h>
#umount /web 卸载
#drbdadm secondary web
在node1上配置: