DRBD使用gfs2,cman实现双主集群文件存储方案

简介:

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 -t rsa -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
global {
     usage-count no;
     # minor-count dialog-refresh disable-ip-verification
}
common {
     protocol C;
     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 -- -c 16k";
         # 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设备同步速率
         rate 1000M;
     }
}

       2. 格式化磁盘

1
fdisk  /dev/sda

       3、定义一个资源/etc/drbd.d/web.res,内容如下:

1
2
3
4
5
6
7
8
9
10
11
resource web {
     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;
     }
}

       4. 同步以上操作或文件,并初始化资源及启动服务

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----

        5. 挂载使用

1
2
3
4
5
6
mke2fs -j -L DRBD  /dev/drbd0  # 仅在一个节点执行
mkdir  /mnt/drbd
mount  /dev/drbd0  /mnt/drbd
# 如果之前提升二个节点都为主资源时,在这个 /mnt/drbd
# 目录下同时读写可能会有IO异常,导致drbd设备失效
# 为了解决这个问题则使用 gfs + cman 实现分布式文件锁方案

二) gfs集群文件系统(重点)

       1. 在 /etc/drbd.d/global-common.conf文件common 中添加      

1
2
# 在配置文件的 net 选项中
allow-two-primaries  yes ;

       2. 安装 cman 底层消息通讯 + 全局锁功能

1
2
3
4
5
6
7
8
9
10
ccs_tool create gfscluster
ccs_tool addnode -n 1 - v  1 slave1.king.com
ccs_tool addnode -n 2 - v  1 slave2.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

       3. 启动cman之前禁用 NetworkManager

1
2
chkconfig NetworkManager off
service cman restart

       4. 准备新磁盘 

1
2
fdisk  /dev/sda
partx -a  /dev/sda

       5. 再次启动 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

       6. 格式化gfs2并多处挂载     

1
2
3
4
5
# 将drbd格式化为gfs2 (这一步只需要一个节点操作即可)
mkfs.gfs2 -j 2 -p lock_dlm -t gfscluster:gfslocktable  /dev/drbd0
#
# 多处挂载使用
mount  /dev/drbd0  /gfs

    iv) 测试

wKioL1NWuofilHA1AAUtEucpflg450.jpg

   v) 总结

   基于drbd的单,双主配置到此为止,有些童鞋会问双主模型用在什么情况下,它的用法恰恰在不需要集群的场景.例如两台httpd服务器做负载均衡,两台httpd都需要

访问一个共享储存,无论那一台httpd服务器都可以上传修改共享存储的数据,这是单主的drbd所不能实现的.当然这里的gfs也可以做集群lvm,在下一篇中我们将继续





     本文转自My_King1 51CTO博客,原文链接:http://blog.51cto.com/apprentice/1400869,如需转载请自行联系原作者



目录
打赏
0
0
0
0
347
分享
相关文章
云原生时代容器文件存储方案
云原生时代如何解决海量容器的编排和存储,如何提升容器存储的性能和稳定性
232 0
云原生时代容器文件存储方案
阿里云的文件存储NAS使用心得
阿里云的文件存储NAS使用心得
426 0
阿里云服务器1TB存储收费标准(数据盘/对象存储OSS/文件存储NAS)
阿里云服务器1TB存储多少钱?系统盘最大可选到500GB,数据盘选到1TB价格为3655元一年。也可以选择对象存储OSS和文件存储NAS
6569 2
阿里云服务器1TB存储收费标准(数据盘/对象存储OSS/文件存储NAS)
阿里云文件存储NAS通用型、极速型和文件存储CPFS有什么区别?
阿里云文件存储NAS极速型NAS低时延,适合企业级时延敏感型核心业务;文件存储CPFS拥有高吞吐和高IOPS,适合高性能计算业务;通用型NAS大容量、高性价比、弹性扩展,支持低频介质,适合通用类文件共享业务。
1888 0
阿里云文件存储NAS通用型、极速型和文件存储CPFS有什么区别?
云计算问题之阿里云文件存储CPFS如何满足大模型智算场景的存储需求
云计算问题之阿里云文件存储CPFS如何满足大模型智算场景的存储需求
130 2
在高性能计算(HPC)场景下,阿里云存储的文件存储产品的实践
在高性能计算(HPC)场景下,阿里云存储的文件存储产品具有以下的应用需求和实践
518 4
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等