参看网址:http://wzlinux.blog.51cto.com/8021085/1712831
##原理:简单来说drbd就是通过网络镜像的两块磁盘设备或者分区。安装配置很简单,网上一大把。下面是我记得笔记,不是很整齐。
####下载完成后直接安装即可:注意两个rpm包版本最好一致,并且drbd-kmdl内核功能模块一定要和你的内核版本对应(uname -r 查看)。否则不兼容。我的是2.6.32-431
1
2
|
wget
ftp
:
//rpmfind
.net
/linux/atrpms/el6-x86_64/atrpms/stable/drbd-8
.4.3-33.el6.x86_64.rpm
wget
ftp
:
//rpmfind
.net
/linux/atrpms/el6-x86_64/atrpms/stable/drbd-kmdl-2
.6.32-431.el6-8.4.3-33.el6.x86_64.rpm
|
1
|
rpm -ivh drbd-8.4.3-33.el6.x86_64.rpm drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm
|
##规划
机器一:ip地址=172.16.100.7
机器二:ip地址=172.16.100.2
##配置drbd前提准备。
1>、配置两个机器的主机名字。必须配置,集群间通信基于此。
hostname node1.magedu.com ###机器1上执行 ,临时生效
vim /etc/sysconfig/network ###机器1上执行,永久生效
hostname node2.magedu.com ###机器2上执行,临时生效
vim /etc/sysconfig/network ##机器2上执行,永久生效
2>、配置两台机器的名称解析(两台机器都执行相同操作),不能基于DNS,来进行主机名《=》ip地址的转换
vim /etc/hosts
172.16.100.7 node1.magedu.com
172.16.100.2 node2.magedu.com
3>、将我们规划的ip配置到两台机器上,并互相ping,是否能ping同
ifconfig eth0 172.16.100.7/16 ##机器一配置ip
ifconfig eth0 172.16.100.2/16 ##机器二配置ip
ping node2.magedu.com ##在node1上
4>、配置ssh互信通信。
ssh -keygen -t rsa -P '' ##制作秘钥,机器一上执行
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node12.magedu.com ##把公钥拷贝到机器二上
然后到机器二上,执行上边相同的操作,把公钥复制到机器一上。
5>、时间同步,必须。集群间需要基于这个标准来进行判断,集群中各节点是否有问题、是否隔离该节点。
service ntpd stop ##两台机器上都需要关闭ntpd服务
chkconfig ntpd off ##两台机器都关闭开机自启动ntpd服务
ntpdate 172.16.0.1 ##从172.16.0.1那台机器同步时间,随便找台机器配置上ip,作为ntpd服务器就行。
如果同步时间失败参看:http://www.blogjava.net/spray/archive/2008/07/10/213964.html
crontab -e ##两台机器上都做成计划任务,每5分钟同步一次。必须 。crontab -l ##查看计划任务
*/5 * * * * /usr/sbin/ntpdate 172.16.0.1 &> /dev/null
####配置drbd
1、drbd的主配置文件为/etc/drbd.conf
include "drbd.d/global_common.conf";
include "drbd.d/*.res";
2、全局配置文件 /etc/drbd.d/global-common.conf
global {
usage-count no; ##不会给开发这个软件的人发送使用他软件的信息。
# minor-count dialog-refresh disable-ip-verification
}
common {
protocol C; ##这个是drbd同步的机制。A为异步,B为半同步,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"
; ##io输入错误时的处理措施
# fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
# split-brain "/usr/lib/drbd/notify-split-brain.sh root";
# out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
# before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
# after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
}
startup {
#wfc-timeout 120;
#degr-wfc-timeout 120;
}
disk {
on-io-error detach; ##io错误时,直接卸载该设备,防止文件系统错乱
#fencing resource-only;
}
net {
cram-hmac-alg
"sha1"
; ##加密算法
shared-secret
"mydrbd"
; ##加密的秘钥,最好随机生成串随机数。
}
syncer {
rate 1000M; ##网络的传输速度,千兆网也才128MB/s.控制下,否则带宽都被他占了。
}
}
3、定义一个资源/etc/drbd.d/web.res,内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
resource web {
on node1.magedu..com {
device
/dev/drbd0
; ##设备文件名字
disk
/dev/sdb
; ##用到的磁盘,所以应该先添加两块磁盘。
address 172.16.100.7:7789; ##使用的ip
meta-disk internal; ##drbd元数据保存位置就在本机上,可以保存在其它磁盘上。
}
on node2.magedu.com {
device
/dev/drbd0
;
disk
/dev/sdb
;
address 172.16.100.2:7789;
meta-disk internal;
}
}
|
注:以上配置在两个节点上必须相同
4、启动和查看
1>、初始化资源
在Node1和Node2上分别执行:
# drbdadm create-md web
2>、启动服务
在Node1和Node2上分别执行:
# service drbd start
3>、查看启动状态
1
|
cat
/proc/drbd
#或者直接使用命令drbd-overview
|
从上面的信息中可以看出此时两个节点均处于Secondary状态。于是,我们接下来需要将其中一个节点设置为Primary。在要设置为Primary的节点上执行如下命令:
1
|
drbdadm primary --force web
|
然后我们再去查看状态,可以看到数据在同步中。
注: 也可以在要设置为Primary的节点上使用如下命令来设置主节点:
# drbdadm -- --overwrite-data-of-peer primary web
等数据同步完成以后再次查看状态,可以发现节点已经牌实时状态,且节点已经有了主次:
5、切换Primary和Secondary节点
对主Primary/Secondary模型的drbd服务来讲,在某个时刻只能有一个节点为Primary,因此,要切换两个节点的角色,只能在先将原有的Primary节点设置为Secondary后,才能原来的Secondary节点设置为Primary:
Node1:
1
2
3
|
cp
/etc/fstab
/var/www/html/
#复制一个测试文件
umount
/var/www/html
drbdadm secondary web
#设定为备节点
|
查看状态:
1
2
|
# drbd-overview
0:web Connected Secondary
/Secondary
UpToDate
/UpToDate
C r----
|
Node2:
1
2
3
|
drbdadm primary web
#提升为主节点
drbd-overview
#查看状态是否提升成功
mount
/dev/drbd0
/var/www/html
#挂载文件
|
使用下面的命令查看在此前在主节点上复制至此设备的文件是否存在:
1
|
ll
/var/www/html/
|
到目前为止WEB服务的数据可以实现实时同步,只要把WEB服务搭建起来就可以直接使用了,非常方便。
####总结,我并不觉得drbd性能有多好,本来磁盘速度就够慢的了,还要经过网卡,还要经过加密传送数据。这就更慢了。
drbd原理参看:http://freeloda.blog.51cto.com/2033581/1275384