1、对10.10.13.7 和 10.10.13.9两台机器进行DRBD重新的安装测试。
参考:http://www.cnblogs.com/f-ck-need-u/p/8673178.html
https://www.cnblogs.com/f-ck-need-u/p/8678883.html
https://www.cnblogs.com/f-ck-need-u/p/8684648.html
https://www.cnblogs.com/f-ck-need-u/p/8691373.html
先简单描述一下这次的过程,最后做一下调研结果的总结:
(1)修改了之前的不好记忆的主机名,因为drbd是基于主机名解析的。将其更改为:
hostnamectl set-hostname drbd1.yzs.com #10.10.13.7
hostnamectl set-hostname drbd2.yzs.com #10.10.13.9
(2)修改hosts文件。将主机名配置成数据同步专用通道eth1的地址。#两台机器都配置
10.10.13.7 drbd1.yzs.com node1
10.10.13.9 drbd2.yzs.com node2
(3)时间同步。#两台机器都运行
ntpdate ntp1.aliyun.com
(4)提供分区。分别在两台上服务器上添加一块硬盘,然后都分为两个区。
注意,作为metadata的分区不要格式化,而用作data的分区格式化后不要挂载。
此处实验分区为/dev/sdb1(metadata区)和/dev/sdb5(数据区)。
for i in /sys/class/scsi_host/*;do echo "- - -" >$i/scan;done
# 主分区(metadata区)/dev/sdb1:100G,扩展分区/dev/sdb2,逻辑分区(data区)/dev/sdb5:100G
parted /dev/sdb mklabel msdos
parted /dev/sdb mkpart p 1 100G
parted /dev/sdb "mkpart e 100G -1"
parted /dev/sdb mkpart l 100G 200G
fdisk /dev/sdb
mke2fs -t ext4 /dev/sdb5
注:可能出现错误:/dev/sdb5 is apparently in use by the system; will not make a filesystem here! 解决参考:http://blog.51cto.com/openlinuxfly/1362113
(5)两种安装drbd的方式 :1、yum安装 2、编译安装 。——这次使用的是yum安装
drbd工具分为两部分:内核模块(kmod-drbd)和用户空间的管理工具(drbd-utils),
其中内核模块已经整合到了2.6.33版本及以后版本的上游内核中。如果早于这个版本,则需要安装和管理工具相同版本的模块。
在elrepo源中,可以找到drbd的内核模块和管理工具。 查看:cat /etc/yum.repos.d/elrepo.repo
安装drbd90-utils和对应版本的模块kmod-drbd90。安装后装载drbd模块。
yum -y install drbd90-utils kmod-drbd90
modprobe drbd
如果需要开机加载drbd模块,请参考链接1
(6)drbd配置文件。注意:此配置是drbd8.4的,与drbd9版本的配置差别比较大
drbd的主配置文件/etc/drbd.conf,为了管理的便捷性,在此文件中使用了include指令指定了包含的配置文件段,默认的是在/etc/drbd.d/目录下。在此目录有全局配置文件global_common.conf和其他配置文件*.res文件。
其中在主配置文件中include全局配置文件的指令只能出现一个,且必须出现在最前面。
两个节点的配置文件应尽量完全一致。
global_common.conf 配置内容如下:
global {
usage-count no;
}
common {
handlers{ # 定义出现以下问题(如splitbrain或out-of-sync错误)时处理策略
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";
split-brain "/usr/lib/drbd/notify-split-brain.sh root";
out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
}
disk {
on-io-error detach; # 当发生io错误时,直接拔除备节点设备
resync-rate 600M;
}
protocol C; # 定义使用C协议,即同步复制。可不定义,此为默认
}
再新建一个配置文件data1.res,里面定义资源。
resource data1 {
device /dev/drbd0;
disk /dev/sdb5;
meta-disk /dev/sdb1[0];
on drbd1.yzs.com {
address 10.10.13.7:7788;
}
on drbd2.yzs.com {
address 10.10.13.9:7788;
}
}
注:在on hostname段中,hostname必须和uname -n一致,因为drbd默认是基于主机名进行解析的。
但是,drbd支持基于ip地址的解析,这时drbd根据ip地址进行漂移,ip地址在哪个主机上,就解析到哪个主机上。
(7)对两节点都进行初始化。
[root@drbd1 drbd.d]# drbdadm create-md data1
initializing activity log
NOT initializing bitmap Writing meta data...
New drbd meta data block successfully created.
注:可能会出现以下问题:
解决方法:
初始化成功后,可以使用下面几个命令来获取drbd的metadata区信息。
drbdadm up data1
注:如果启动报以下错误:0: Failure: (119) No valid meta-data signature found.,
则可能是因为对metadata进行了格式化。解决方法是将其删除再重新创建但不要格式化。
(9)查看/proc/drbd文件来查看drbd中配置的资源的状态。
如果角色ro是从/从,则表明配置成功,若有一端是unknown,则表明和对方不能通信,
可能是主机路由的问题,这样会导致脑裂的问题。
(10)实现drbd主从同步
在需要设置为主机点的机器上执行:drbdadm primary --force data1
其中"--force"表示强制升级为primary,这会导致本节点的数据强制同步到对端上。
可以看到本端已经设置为主节点,且ds的一端是uptodate状态,最后还看到了镜像到对方的进度信息。
当镜像完成后,再查看资源的信息。可以发现两端的ds都变成uptodate状态了。说明镜像完成了。
(11)数据同步和主从角色切换
现在已经有一端是主节点了。drbd的主从节点中,只有主节点是可以挂载并进行读写的。
所以在主节点上挂载drbd设备.
挂载drbd到mnt,然后向其中拷贝一个文件。
如果对端也有这个文件则说明同步成功了,但是对端是从节点,无法读取数据,所以只能切换主从角色再查看。
不过在,实验环境下直接把从节点的drbd给down掉,再直接挂载/dev/sdb5也是可以的。
---所以首先将主节点切换为从节点,必须先卸载挂载点才行。
---再在从节点上将自己设置为主节点,然后挂载drbd设备,再查看是否有文件同步过来了。
这说明实现了数据同步。但是这样手动切换来切换去的很麻烦,我们可以将其交给heartbeat或者corosync来管理,
实现drbd的自动切换。
2 – 到目前为止,安装测试,实现单主模式已经完成。相比较昨天的来说,这个比较成功,并且所存在的问题也少
----------但是有个蛋疼的现象就是,我yum安装的是drbd-utils包,还有kmod-drbd包都是90 的版本,
配置是8.4版本的,没出现问题,正常。还有就是我查看状态 cat /proc/drbd 时,显示的version是8.4.5的
drbd有三种复制协议:同步、半同步、异步。
A协议:异步复制(asynchronous),如上图A标识,指的是当数据写到本地磁盘上,并且复数据已经复制到tcp的send buffer缓冲区以后,此时就认为写入磁盘成功。此复制协议性能好,但可能会丢失一些最近的数据。
B协议:半同步复制(semi sync),也称为内存复制,如上图B标识,指的是数据已经写到本地磁盘上,并且已经被对方的tcp协议栈接收到(即写入到了对方的recv buffer中),此时就认为此次写操作成功。此复制协议性能较好,且只有当两节点都断电时才会丢失最近处于socket buffer中的数据。因此性能和数据可靠性介于协议A和C之间。
C协议:同步复制(sync),如上图C标识,指的是数据已经写入到本地磁盘,也已经写入到远程磁盘上,此时就认为此次写操作成功。此复制协议性能较差,但数据可靠性高。
C复制协议是drbd默认使用的协议。
在drbd构造的集群中,资源具有角色的概念,分别为primary和secondary(主从的概念)。
所有primary的资源将不受限制进行读写操作,可以创建文件系统,可以使用裸设备,可以直接io。而所有secondary的设备中不能挂载,不能读、写。
Ctrl + B
Ctrl + I
Ctrl + Q
Ctrl + L
Ctrl + K
Ctrl + G
Ctrl + H
Ctrl + O
Ctrl + U
Ctrl + R
Ctrl + Z
Ctrl + Y
Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的HTML页面。 —— [ 维基百科 ]
使用简单的符号标识不同的标题,将某些文字标记为粗体或者斜体,创建一个链接等,详细语法参考帮助?。
本编辑器支持 Markdown Extra , 扩展了很多好用的功能。具体请参考Github.
Markdown Extra 表格语法:
项目 | 价格 |
---|---|
Computer | $1600 |
Phone | $12 |
Pipe | $1 |
可以使用冒号来定义对齐方式:
项目 | 价格 | 数量 |
---|---|---|
Computer | 1600 元 | 5 |
Phone | 12 元 | 12 |
Pipe | 1 元 | 234 |
###定义列表
Markdown Extra 定义列表语法:
项目1
项目2
: 定义 A
: 定义 B
定义 C
定义 D
定义D内容
代码块语法遵循标准markdown代码,例如:
@requires_authorization
def somefunc(param1='', param2=0):
'''A docstring'''
if param1 > param2: # interesting
print 'Greater'
return (param2 - param1 + 1) or None
class SomeClass:
pass
>>> message = '''interpreter
... prompt'''
###脚注
生成一个脚注1.
用 [TOC]
来生成目录:
使用MathJax渲染LaTex 数学公式,详见math.stackexchange.com.
x = − b ± b 2 − 4 a c 2 a x = \dfrac{-b \pm \sqrt{b^2 - 4ac}}{2a} x=2a−b±b2−4ac
更多LaTex语法请参考 这儿.
可以渲染序列图:
或者流程图:
即使用户在没有网络的情况下,也可以通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入write.blog.csdn.net/mdeditor即可。Markdown编辑器使用浏览器离线存储将内容保存在本地。
用户写博客的过程中,内容实时保存在浏览器缓存中,在用户关闭浏览器或者其它异常情况下,内容不会丢失。用户再次打开浏览器时,会显示上次用户正在编辑的没有发表的内容。
博客发表后,本地缓存将被删除。
用户可以选择 把正在写的博客保存到服务器草稿箱,即使换浏览器或者清除缓存,内容也不会丢失。
**注意:**虽然浏览器存储大部分时候都比较可靠,但为了您的数据安全,在联网后,请务必及时发表或者保存到服务器草稿箱。
##浏览器兼容
这里是 脚注 的 内容. ↩︎