DRBD简介
DRBD (Distributed Replicated Block Device) 是 Linux 平台上的分散式储存系统。其中包含了核心模组,数个使用者 空间管理程式及 shell scripts,通常用于高可用性(high availability, HA)丛集。DRBD 类似磁盘阵列的RAID 1(镜像),只不过 RAID 1 是在同一台电脑内,而 DRBD 是透过网络。
DRBD 是以 GPL2 授权散布的自由软件。 — 此处摘自 wikipedia
规划:
ip 主机名 存储磁盘 drbd设备
172.16.43.1 slave1.king.com /dev/sda3 /dev/drbd0
172.16.43.2 slave2.king.com /dev/sda3 /dev/drbd0
一. 实现基本DRBD功能
以下操作没有特殊说明,皆为双个节点都要操作
i) 主机互信(双节点之间)
| 1 2 3 4 5 6 7 8 9 10 |
# 确保 hostname 与 uname -n 一致 sed –i ‘s@^(HOSTNAME=).*@slave1.king.com@’ /etc/sysconfig/network hostname slave1.king.com uname –n # 确保 /etc/hosts 文件中添加两节点非DNS解析信息 172.16.43.1 slave1.king.com 172.16.43.2 slave2.king.com # 双机互信 ssh–keygen–trsa–P ” ssh–copy–id –i.ssh/id_rsa.pub root@slave2.king.com |
|---|---|
ii) drbd配置安装
| 1 2 3 4 |
# 下载drbd rpm包(注意drbd-kmdl版本号前一半与操作系统要相对应) drbd–8.4.3–33.el6.x86_64.rpm drbd–kmdl–2.6.32–431.el6–8.4.3–33.el6.x86_64.rpm rpm–ivh *.rpm |
|---|---|
1 配置/etc/drbd.d/global-common.conf
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
global{ usage–count no; # minor-count dialog-refresh disable-ip-verification } common{ protocolC; handlers{ # 当承载drbd的物理文件损坏时处理 # echo b > /proc/sysrq-trigger # 立即重启机器,而且不会将缓冲区同步到硬盘,也不会卸载已挂载的硬盘 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”; # 当同步过程中主设备失去联系处理 # echo b > /proc/sysrq-trigger # 立即重启机器,而且不会将缓冲区同步到硬盘,也不会卸载已挂载的硬盘 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”; # 当同步过程中发生io错误处理 # echo o > /proc/sysrq-trigger # 关闭系统 local–io–error “/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/ notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f”; # 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 —–c16k“; # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh; } startup { #wfc-timeout 120; #degr-wfc-timeout 120; } disk { # 当磁盘io异常,将分离当前设备 on-io-error detach; #fencing resource-only; } net { # 消息验证校验码 cram-hmac-alg “sha1“; shared-secret “9bb9f0ea87ca30cfbc094c7dad12d1ea“; # openssl dgst sha1 install.log 对任意文件进行信息摘要取得交换码 } syncer{ # drbd设备同步速率 rate1000M; } } |
|---|---|
- 格式化磁盘
| 1 | fdisk /dev/sda |
|---|---|
3、定义一个资源/etc/drbd.d/web.res,内容如下:
| 1 2 3 4 5 6 7 8 9 10 11 |
resourceweb{ device /dev/drbd0; disk /dev/sda3; meta–disk internal; on master1.king.com{ address 172.16.43.1:7789; } on master2.king.com{ address 172.16.43.2:7789; } } |
|---|---|
- 同步以上操作或文件,并初始化资源及启动服务
| 1 2 3 4 5 6 7 |
drbdadm create–md web service drbd start # 此处只能提升一个节点为主资源 drbdadm primary—force web # 查看信息等待同步完成 drbd–overview #0:web Connected Primary/Secondary UpToDate/UpToDate C r—- |
|---|---|
- 挂载使用
| 1 2 3 4 5 6 |
mke2fs–j–LDRBD /dev/drbd0 # 仅在一个节点执行 mkdir /mnt/drbd mount /dev/drbd0 /mnt/drbd # 如果之前提升二个节点都为主资源时,在这个 /mnt/drbd # 目录下同时读写可能会有IO异常,导致drbd设备失效 # 为了解决这个问题则使用 gfs + cman 实现分布式文件锁方案 |
|---|---|
二) gfs集群文件系统(重点)
- 在 /etc/drbd.d/global-common.conf文件common 中添加
| 1 2 |
# 在配置文件的 net 选项中 allow–two–primaries yes; |
|---|---|
- 安装 cman 底层消息通讯 + 全局锁功能
| 1 2 3 4 5 6 7 8 9 10 |
ccs_tool create gfscluster ccs_tool addnode–n1–v 1slave1.king.com ccs_tool addnode–n2–v 1slave2.king.com # 查看节点 ccs_tool lsnode #Cluster name: gfscluster, config_version: 3 . #Nodename Votes Nodeid Fencetype #slave1.king.com 1 1 #slave2.king.com 1 2 |
|---|---|
- 启动cman之前禁用 NetworkManager
| 1 2 |
chkconfig NetworkManager off service cman restart |
|---|---|
- 准备新磁盘
| 1 2 |
fdisk /dev/sda partx–a /dev/sda |
|---|---|
- 再次启动 drbd 服务
| 1 2 3 4 5 6 7 8 9 10 11 12 |
# 如果之前做过 ii) 步实验的话,请确定弹出的信息 drbdadm create–md web service drbd start # # 提升第一节点为主资源 [slave1:~]drbdadm primary—force web # # 此处可以提升二个节点为主资源(分别执行) # 请注意请确保一个主已经同步完成 # 0:web/0 Connected Primary/Secondary UpToDate/UpToDate C r—– # 再提升一下个为主节点 [slave2:~]drbdadm primary—force web |
|---|---|
- 格式化gfs2并多处挂载
| 1 2 3 4 5 |
# 将drbd格式化为gfs2 (这一步只需要一个节点操作即可) mkfs.gfs2–j2–plock_dlm–tgfscluster:gfslocktable /dev/drbd0 # # 多处挂载使用 mount /dev/drbd0 /gfs |
|---|---|
iv) 测试
v) 总结
基于drbd的单,双主配置到此为止,有些童鞋会问双主模型用在什么情况下,它的用法恰恰在不需要集群的场景.例如两台httpd服务器做负载均衡,两台httpd都需要
访问一个共享储存,无论那一台httpd服务器都可以上传修改共享存储的数据,这是单主的drbd所不能实现的.当然这里的gfs也可以做集群lvm,在下一篇中我们将继续。
文章来自:http://apprentice.blog.51cto.com/2214645/1400869
转载请注明:爱开源 » DRBD使用gfs2,cman实现双主分布式文件存储方案
转载请注明:爱开源 » DRBD使用gfs2,cman实现双主分布式文件存储方案
