DRBD数据镜像与搭建
一、数据安全工具DRDB
1. 数据镜像软件DRDB介绍
分布式块设备复制,是基于软件、基于网络的块复制存储解决方案
作用:用于服务器之间的磁盘、分区、逻辑卷等进行数据镜像。
例如:当用户将数据写入本地磁盘时,数据也将会同步到同一网络的另一台主机的磁盘上,实现了本地与备机的实时同步。
当本地数据出现问题,备机还保留着同一份相同的数据, 保证了数据的安全。
基本功能:
数据镜像类似网络的RAID1功能
特点:实时性、透明性、同步镜像、异步镜像。
2.DRBD的组成
一个DRBD有两个以上节点构成,分为主用节点和备用节点
在主用节点上:
DRBD设备不受限制的读写操作,可以用来初始化、创建、挂载文件系统。
在备用节点上:
DRBD无法挂载只能用来接收主用节点发送过来的数据(备用节点不能用于读写访问)
两个节点之间是可以实现之间切换的
DRBD负责接收数据,把数据写到本地磁盘,然后把数据发送给另外一台主机,另外一台主机将数据保存到自己的磁盘中。
DRBD经常用于高可用集群和负载均衡集群系统中作为共享存储设备。
DRBD系统是在IP网络中运行,所以在集群中作为共享存储,不需要其他硬件投资,节约资金
DRBD用于数据备份,数据容灾等方面
3.DRBD主要特性
单主模式:使用比较频繁的一种模式,主用于高可用集群的数据存储方面,解决集群中的共享问题,此模式下,集群中只有一个主用节点可以对数据进行读写操作。 文件系统有ext3,4 xfs等
双主模式:只能在DRBD8.0以后版本中使用,主要用于负载均衡集群中,解决数据共享和一致性问题。
这种模式,集群中存在两个集群节点 文件系统有GFS、OCFS2
复制模式:
传输完整性校验
脑列通知和自动修复
由于集群节点间的网络连接临时故障、集群软件管理干预或者人为错误,导致DRBD两个节点切换为主用节点而断开连接。即脑列问题。
二、DRBD安装和测试
1.实验要求
DRBD(Distributed Replicated Block Device)安装测试
2.架构拓扑
网络要求:所有服务器位于同一VLan
3.系统环境
操作系统:Centos6.5
相关软件:drbd-8.4.6.tar.gz drbd-utils-8.9.6.tar.gz
网络要求:/etc/hosts 之间相互解析 需要手动添加
主用节点和备用节点/dev/sdb1是未经格式化的物理磁盘分区,空间大小相同(推荐)
4.地址规划
名称 | 角色 | IP地址 | 虚拟IP地址 | 镜像磁盘分区 |
ser5.hyzc.com | 主服务器 | 192.168.2.10 | 192.168.2.15 | /dev/sdb1 |
ser6.hyzc.com | 从服务器 | 192.168.2.11 | 192.168.2.15 | /dev/sdb1 |
5.软件安装
1>、安装依赖的软件
#在编译安装之前,必须安装内核开发包,以及支持库
# yum -y install gcc kernel-devel kernel-headers
# yum -y install perl perl-libs
# yum -y install flex libxslt libxslt-devel
2>、编译安装DRBD
安装drbd内核模块
## Linux Kernel 2.6.32 起已包含DRBD内核模块,无需再安装。核心版本与DRBD版本对应关系详情参见:http://drbd.linbit.com/download/mainline/
[root@ser5 Desktop]# uname -r
2.6.32-431.el6.x86_64
[root@ser5 Desktop]# tar xf drbd-8.4.6.tar.gz
[root@ser5 Desktop]# cd drbd-8.4.6
[root@ser5 drbd-8.4.6]# make KDIR=/usr/src/kernels/2.6.32-431.el6.x86_64
[root@ser5 drbd-8.4.6]# cp drbd/drbd.ko /lib/modules/`uname -r`/kernel/lib/
[root@ser5 drbd-8.4.6]# depmod ## 更新内核包关联文件modules.dep
[root@ser5 drbd-8.4.6]# modprobe drbd ## 安装内核模块
[root@ser5 drbd-8.4.6]# modinfo drbd ## 查看drbd内核模块是否加载成功
## KDIR= 指定的系统内核源码路径,根据实际情况设置
3>. 安装drbd管理工具
安装依赖工具:
# yum -y install docbook-style-xsl
安装软件drbd-utils
[root@ser5 Desktop]# tar xf drbd-utils-8.9.6.tar.gz
[root@ser5 Desktop]# cd drbd-utils-8.9.6
[root@ser5 drbd-utils-8.9.6]# ./configure --prefix=/usr/local/drbd --sysconfdir=/etc/ --localstatedir=/var/ --with-pacemaker
[root@ser5 drbd-utils-8.9.6]#make && make install
## --with-pacemaker,启用pacemaker集群支持,会创建ocf格式资源文件:/usr/lib/ocf/resource.d/linbit/drbd 及(drbddisk、drbdupper)二个服务脚本。
4>.链接文件/启动服务
[root@ser5 drbd-utils-8.9.6]# ln -s /usr/local/drbd/sbin/drbdadm /usr/sbin/drbdadm
[root@ser5 drbd-utils-8.9.6]# ln -s /usr/local/drbd/sbin/drbdmeta /usr/sbin/drbdmeta
[root@ser5 drbd-utils-8.9.6]# ln -s /usr/local/drbd/sbin/drbdsetup /usr/sbin/drbdsetup
5>.启动软件
[root@ser5 drbd-utils-8.9.6]# /etc/rc.d/init.d/drbd start
## 为方便管理,可配置为系统服务自动启动
6.软件配置
1>.DRBD主配置文件(/etc/drbd.conf):
# vim /etc/drbd.conf
# You can find an example in /usr/share/doc/drbd.../drbd.conf.example
include "/etc/drbd.d/global_common.conf";
include "/etc/drbd.d/*.res";
## global_common.conf文件包含global和common的DRBD全局配置部分;
## *.res文件包含DRBD资源的配置信息。
## 编辑全局配置文件(global_common.conf):
# vim /etc/drbd.d/global_common.conf
# DRBD is the result of over a decade of development by LINBIT.
# In case you need professional services for DRBD or have
# feature requests visit http://www.linbit.com
global {
usage-count no; # 是否加入DRBD官方统计
}
common {
syncer {
verify-alg sha1; # 定义网络传输速率,一般传输速度的30%
rate 200M; }
}
resource r0 {
# 公用相同部分可以放到顶部,各节点会自动继承
protocol C; # 使用drbd的第三种同步协议,表示收到远程主机的写入确认后,则认为写入完成
handlers {
# 定义处理机制程序,/usr/lib/drbd/ 里有大量的程序脚本。
pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";
pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";
local-io-error "echo o > /proc/sysrq-trigger ; halt -f";
fence-peer "/usr/lib64/heartbeat/drbd-peer-outdater -t 5";
pri-lost "echo pri-lost. Have a look at the log files. | mail -s 'DRBD Alert' denglei@ctfo.com";
split-brain "/usr/lib/drbd/notify-split-brain.sh denglei@ctfo.com";
out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh denglei@ctfo.com";
}
startup {
wfc-timeout 120;
degr-wfc-timeout 120;
}
options {
# cpu-mask on-no-data-accessible
}
disk { # 磁盘相关公共设置,比如I/O、数据状态
on-io-error detach; # 配置I/O错误处理策略为分离
fencing resource-only;
}
net {
# 设置DRBD同步时使用的验证方式和密码信息。
cram-hmac-alg sha1;
shared-secret "drbd";
}
device /dev/drbd0; # DRBD逻辑设备的路径
meta-disk internal; # drbd的元数据存放方式,DRBD磁盘内部。
# 每个主机的说明以"on"开头,后面是主机名.在后面的{}中为这个主机的配置.
on ser5.hyzc.com { # 此处是节点的主机名‘uname -n’
address 192.168.2.10:7788; # 设置DRBD的监听端口
disk /dev/sdb1; # 节点物理设备
meta-disk internal;
}
on ser6.hyzc.com {
address 192.168.2.11:7788;
disk /dev/sdb1;
meta-disk internal; #DRBD的元数据存储方式
}
}
3>.启用DRBD资源
a.在两个节点执行
## 创建设备元数据。这一步必须仅在创建初始化设备时完成。它初始化DRBD元数据。
# drbdadm create-md r0
initializing activity log
NOT initializing bitmap
Writing meta data...
New drbd meta data block successfully created.
b.在两个节点执行启动服务
# /etc/init.d/drbd start
# /etc/init.d/drbd start
最好在两个节点同时启动DRBD服务。
# netstat -anptul | grep :7788
c.在任意节点查看节点状态
登录任意drbd节点,然后执行”cat /proc/drbd”命令,输出结果如下:
[root@ser5 Desktop]# cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@ser5.hyzc.com, 2016-08-05 02:12:56
0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:20980176
输出的含义解释:
ro表示角色信息,第一次启动drbd时,两个drbd节点默认都处于Secondary状态,
ds是磁盘状态信息,“Inconsistent/Inconsisten”,即为“不一致/不一致”状态,表示两个节点的磁盘数据处于不一致状态。
Ns表示网络发送的数据包信息。
Dw是磁盘写信息
Dr是磁盘读信息
d.设置主用节点
由于默认没有主用节点和备用节点之分,所以需要手动设置两个主机的主次节点。选择需要设置为主用节点的主机,然后执行如下命令:
[root@ser5 drbd0]# drbdadm -- --overwrite-data-of-peer primary all
也可执行下边命令
# drbdsetup /dev/drbd1 primary -o
第一次执行完此命令后,如果需要设置那个为主用节点,就可以使下边的命令
# /sbin/drbdadm primary r0 或者 # /sbin/drbdadm primary all
执行完命令后,开始同步两台机器对应的数据:
从ser5的drbd状态看出:“ro状态现在变为“Primary/Secondary”,“ds”状态也变为“UpToDate/Inconsistent”,也就是“实时/不一致”状态,现在数据正在主备两个主机的磁盘间进行同步,且同步进度为14.6%,同步速度每秒8M左右。
等一会在查看drbd的状态:
“ds”状态也变为“UpToDate/UpToDate”,也就是“实时/实时”状态
备注:
e.挂载DRBD设备
由于mount操作只能在主用节点上进行,所以只有设置了主用节点后才能格式化磁盘分区,同时,在两个节点中,同一时刻只能有一台处于primary状态,另一台处于secondary状态。
且处于secondary状态的节点上不能挂载DRBD设备,要在备用节点上挂载DRBD设备,要在备用节点上挂载DRBD设备,必须停用备用节点的DRBD服务或者将备用节点的服务提升为主用节点。
# mkfs.ext4 /dev/drbd0
# mount /dev/drbd0 /mnt
# df –hT
/dev/drbd0 ext4 20G 172M 19G 1% /mnt
完成挂载后,就可以在/mnt下面读写数据,且数据会自动同步到备用节点上。
6. 测试DRBD数据镜像
第一种方法:
[root@ser5 Desktop]# cd /mnt/
[root@ser5 mnt]# ls
lost+found
[root@ser5 mnt]# mkdir haha
[root@ser5 mnt]# cd haha/
[root@ser5 haha]# echo success > pjc.txt
[root@ser5 /]# umount /mnt/
然后使用drbdadm secondary r0把ser5主机变为备机
[root@ser5 /]# drbdadm secondary r0
[root@ser5 /]# cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@ser5.hyzc.com, 2016-08-05 02:12:56
0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
ns:21444324 nr:0 dw:464148 dr:20981929 al:119 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
现在ser5变成了备机,我们接下来到ser6里操作,使用drbdadm primary r0,使ser6变成主机
[root@ser6 mnt]# drbdadm primary r0
[root@ser6 mnt]# cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@ser5.hyzc.com, 2016-08-05 02:12:56
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:0 nr:21444324 dw:21444324 dr:672 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
从ser6的drbd输出可以看到,ser6成为了主机
然后把drbd挂载到mnt目录下,查看是否有ser5里建立的文件
[root@ser6 mnt]# mount /dev/drbd0 /mnt/
[root@ser6 mnt]# cd /mnt/
[root@ser6 mnt]# ll
total 20
drwxr-xr-x 2 root root 4096 Aug 5 06:09 haha
drwx------ 2 root root 16384 Aug 5 05:58 lost+found
[root@ser6 mnt]# cd haha/
[root@ser6 haha]# ls
pjc.txt
可以看出,ser6成为主机时,收到了之前主机ser5建立的文件夹。
第二种方法:
停止备用节点ser6上面的DRBD服务 注:停用服务必须退出当前挂载的目录,不然报
r0: State change failed: (-12) Device is held open by someone
additional info from kernel:
failed to demote
ERROR: Module drbd is in use
[root@ser6 /]# /etc/init.d/drbd stop
[root@ser6 /]# mount /dev/sdb1 /mnt/
[root@ser6 /]# df
[root@ser6 /]# cd /mnt/
[root@ser6 mnt]# ls
[root@ser6 haha]# ls
haha pjc.txt tets
注:测试完后,要重新启动备用节点上面的DRBD服务,此时必须先卸载/dev/sdb1设备,然后才能成功启动DRBD服务。
这里挂载的是/dev/sdb1设备,而不是DRBD设备,因为DRBD服务只有到DRBD服务启动的时候才能加载到系统中。
7.DRBD主备节点切换
在系统维护或者在高可用集群中,当主用节点出现故障,就需要主备节点的角色切换
A、停止DRBD服务切换
关闭主用节点服务,此时挂载的DRBD分区就自动在主用节点卸载了,操作如下:
[root@ser6 /]# /etc/init.d/drbd stop
Stopping all DRBD resources: .
查看备用节点DRBD状态
[root@ser5 /]# cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@ser5.hyzc.com, 2016-08-05 02:12:56
0: cs:WFConnection ro:Secondary/Unknown ds:UpToDate/DUnknown C r-----
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
从标志unknown状态,然后在备用节点切换
[root@ser5 /]# drbdadm primary all
[root@ser5 /]# cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@ser5.hyzc.com, 2016-08-05 02:12:56
0: cs:WFConnection ro:Primary/Unknown ds:UpToDate/DUnknown C r-----
ns:0 nr:0 dw:0 dr:672 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
此时已变为primary状态,启动原来ser6主用节点服务后,处于unknown会自动变为secondary状态
然后挂载DRBD设备,完成主备切换
[root@ser5 /]# mount /dev/drbd0 /mnt/
B、正常切换
首先在主用节点卸载磁盘分区,后执行:
[root@ser5 /]# umount /mnt/
[root@ser5 /]# drbdadm secondary all
此时查看ser5主状态
[root@ser5 /]# cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@ser5.hyzc.com, 2016-08-05 02:12:56
0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
ns:8 nr:0 dw:8 dr:1025 al:1 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
此时看到两个:Secondary/Secondary 状态,所以指定一个主状态,在备用节点执行以下命令:
[root@ser6 /]# drbdadm primary all
[root@ser6 /]# cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@ser5.hyzc.com, 2016-08-05 02:12:56
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:0 nr:8 dw:8 dr:672 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
然后挂载DRBD设备,完成主备切换
[root@ser5 /]# mount /dev/drbd0 /mnt/
8.drbd脑裂手动恢复过程(以ser6的数据位主,放弃ser5不同步数据):
1)将ser6设置为主节点并挂载测试,r0为定义的资源名
#drbdadm primary r0
# mount /dev/drbd0 /mnt/
# ls -lh /mnt/ 查看文件情况
2)将ser5设置为从节点并丢弃资源数据
# drbdadm secondary r0
# drbdadm -- --discard-my-data connect r0
3)在ser6主节点上手动连接资源
# drbdadm connect r0
4)最后查看各个节点状态,连接已恢复正常
#cat /proc/drbd
遇到的问题:
A、软件编译时,错误解决办法:
make[1]: *** [drbdsetup.8] Error 4
make[1]: Leaving directory `/root/Desktop/drbd-utils-8.9.6/documentation/v9'
make: *** [doc] Error 2
解决办法:
# yum -y install docbook-style-xsl
configure: error: Cannot build utils without flex, either install flex or pass the --without-utils option.
解决方式:yum install flex
B、软件运行时,错误解决办法:
/etc/rc.d/init.d/drbd start
Starting DRBD resources: no resources defined!
解决办法:没有配置DRBD资源,或编译时没指定配置文件路径(/etc/drbd.conf)。
2、当执行命令”drbdadm create-md r0”时,出现以下错误信息。
Device size would be truncated, which would corrupt data and result in
'access beyond end of device' errors.
You need to either
* use external meta data (recommended)
* shrink that filesystem first
* zero out the device (destroy the filesystem)
Operation refused.
Command 'drbdmeta 0 v08 /dev/xvdb internal create-md' terminated with exit code 40
drbdadm create-md r0: exited with code 40
解决办法:初始化磁盘文件格式, dd if=/dev/zero of=/dev/sdXYZ bs=1M count=1
C、主备切换过程中遇到报错
DRBD数据镜像与搭建的更多相关文章
- DRBD 数据镜像软件
1>DRBD介绍 1>数据镜像软件DRBD介绍 分布式块设备复制(Distributed Relicated Block Deivce,DRBD),是一种基于软件.基于网络的块复制存储解 ...
- DRBD 数据镜像软件介绍
简介: DRBD (Distributed Replicated Block Device) 分布式块设备复制,是一种基于软件.网络的块复制存储解决方案.主要用于对服务器之间的磁盘.分区.逻辑卷等进行 ...
- DRBD(数据镜像)+hearbeat(自动切换)
DRBD 数据镜像软件 一.DRBD介绍 1.1.数据镜像软件DRBD介绍 分布式块设备复制(Distributed Relicated Block Deivce,DRBD),是一种基于软件.基于网络 ...
- 使用国内的镜像源搭建 kubernetes(k8s)集群
1. 概述 老话说的好:努力学习,提高自己,让自己知道的比别人多,了解的别人多. 言归正传,之前我们聊了 Docker,随着业务的不断扩大,Docker 容器不断增多,物理机也不断增多,此时我们会发现 ...
- Ambari——大数据平台的搭建利器之进阶篇
前言 本文适合已经初步了解 Ambari 的读者.对 Ambari 的基础知识,以及 Ambari 的安装步骤还不清楚的读者,可以先阅读基础篇文章<Ambari——大数据平台的搭建利器>. ...
- 性能测试五十:Jmeter+Influxdb+Grafana实时数据展示系统搭建
如果用生成jtl文件再分析结果的方式的话,每一次请求就会往jtl里面写一条数据,在进行长时间的稳定性测试的时候,特别是当TPS很高的时候,写入的数据会非常的大,这个时候等稳定性测试完成,再对jtl进行 ...
- 第 3 章 镜像 - 020 - 搭建本地 Registry
Docker Hub 虽然非常方便,但还是有些限制,比如: 需要 internet 连接,而且下载和上传速度慢. 上传到 Docker Hub 的镜像任何人都能够访问,虽然可以用私有 reposito ...
- docker 私有镜像服务器搭建
1.准备一台服务器A(已安装docker, IP:192.168.39.111) 2.在服务器A上通过运行registry容器进行搭建 docker run -itd -v /my_registry: ...
- (数据科学学习手札81)conda+jupyter玩转数据科学环境搭建
本文示例yaml文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们在使用Python进行数据分析时,很 ...
随机推荐
- function 与 => 的区别
在JS中,箭头函数并不是简单的function(){}匿名函数的简写语法糖,实际上,箭头函数和匿名函数有个明显的区别:箭头函数内部的this是词法作用域,在编写函数时就已经确定了.而匿名函数的this ...
- Oracle分割字符串 REGEXP_SUBSTR用法
分割字符串中所有指定字符,然后成多行参数说明,参数1: 待分割字符串参数2:正则表达式参数3:起始位置,从第几个字符开始正则表达式匹配(默认为1)参数4:标识第几个匹配组,默认为1参数5:模式('i' ...
- iOS利用Application Loader打包提交到App Store时遇到错误The filename 未命名.ipa in the package contains an invalid character(s). The valid characters are:A-Z ,a-z,0-9,dash,period,underscore,but the name cannot start w
iOS利用Application Loader打包提交到App Store时遇到错误: The filename 未命名.ipa in the package contains an invalid ...
- 【Unity】讯飞语音识别SDK
1.进入讯飞官网,注册帐号,进入控制台,创建新应用UnityXunfeiDemo,平台选Android.在当前应用这点下载SDK,添加AI能力(添加新服务),选择语音听写,即可下载安卓SDK(下称讯飞 ...
- Java知多少(40)接口和抽象类的区别
类是对象的模板,抽象类和接口可以看做是具体的类的模板. 由于从某种角度讲,接口是一种特殊的抽象类,它们的渊源颇深,有很大的相似之处,所以在选择使用谁的问题上很容易迷糊.我们首先分析它们具有的相同点. ...
- excel 2007 无法输入中文
解决方法: 1.32位系统:找到C:\Program Files\Common Files\Microsoft Shared\OFFICE12\Office Setup Controller,将这个文 ...
- (实用)CentOS 6.3更新内置Python2.6
在安装Kilo版的OpenStack时,我们发现社区已经将Python升到2.7,而CentOS 6.3上仍然在使用2.6版的Python.本文记录将CentOS 6.3内置的Python2.6更新为 ...
- 占位 Bootstrap
中文网 http://www.bootcss.com/
- WAS生成的文件:javacore.***.txt 、heapdump.***.phd、core.***.dmp、Snap.***.trc
WAS生成的常见文件有哪些? 原文链接:http://blog.csdn.net/pqh20085101092/article/details/39370389 javacore.***.txt : ...
- java-信息安全(十二)-数字签名【Java证书体系实现】
概述 信息安全基本概念 数字证书 数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,数字证书不是数字身份证,而是身份认证机构盖在数字身份证上 ...