高可用集群(HA)之DRBD原理和基础配置
1.工作原理图-->

主从架构:primary/secondary
双主模型:
因为drbd工作在内核,故需要用户空间工具提供规则,所以它由用户空间工具和内核模块组成,就如同iptables和LVS一样.
不支持多个从,至少当前不支持
一定要使用与内核相匹配的包(google或者rpmfind搜索)
每一组drbd叫做drbd资源(资源名必须是小写字符),并以文件形式存放在/etc/drbd.d/资源名.res,资源之间以套接字方式互相通信
每一组drbd,主从所在的磁盘分区必须大小相等
global {
usage-count no;
#是否给官方发送统计报告,这个不用说,还是关了吧
# minor-count dialog-refresh disable-ip-verification
}
#定义drbd节点的共同点属性
common {
protocol 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";
# 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;
#fencing resource-only;
}
net {
cram-hmac-alg "sha1";
shared-secret "mydrbdlab";
}
#定义同步速率
syncer {
rate 1000M;
}
}
resource mysql {
on node1 {
device /dev/drbd0;
disk /dev/sdc5;
address 172.16.100.15:7789;
#internal表示将drbd自己的源数据放在drbd资源磁盘空间中
meta-disk internal;
}
on node2 {
device /dev/drbd0;
disk /dev/sdc5;
address 172.16.100.16:7789;
meta-disk internal;
}
}
以上文件在两个节点上必须相同,因此,可以基于ssh将刚才配置的文件全部同步至另外一个节点。
# scp /etc/drbd.d/* node2:/etc/drbd.d/
# drbdadm create-md mysql
Writing meta data...
initializing activity log
NOT initializing bitmap
New drbd meta data block successfully created.
此处可能会报 Command 'drbdmeta 0 v08 /dev/sdc5 internal create-md' terminated with exit code 40 错误,解决办法:首先看提示命令中的磁盘是否是你配置文件中的磁盘,如果不是,说明生效的配置文件不是你所认为的那个,其次,如果是,说明配置文件没错,那么可以使用dd命令往对应磁盘中输入些数据,此处磁盘分区是sdc5,故命令如下:dd if=/dev/zero of=/dev/sdc5 bs=100M count=1
#/etc/init.d/drbd start
# watch -nl "cat /proc/drbd"
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:16
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:b oos:505964
# drbd-overview
0:mysql Connected Secondary/Secondary Inconsistent/Inconsistent C r----
# drbdadm primary --force mysql
也可以在要设置为Primary的节点上使用如下命令来设置主节点:
# drbd-overview
0:mysql SyncSource Primary/Secondary UpToDate/Inconsistent C r----
[============>.......] sync'ed: 66.2% (172140/505964)K delay_probe: 35
# drbd-overview
0:mysql Connected Primary/Secondary UpToDate/UpToDate C r----
需要注意的是,只需要在主节点上进行格式化,且只能在主节点上挂载,若主节点下线,从节点上线,则从节点可以直接挂载,不需要再次格式化.
# mke2fs -t ext4 -L DRBD /dev/drbd0
# mkdir /mydata
# mount /dev/drbd0 /mydata
# cd /mydata
# vi test
# date >> test
# cat test
Thu Mar 13 17:00:18 CST 2014
# cd .. && umount /test
# drbdadm secondary mysql --降级(下线)
# drbd-overview
0:mysql Connected Secondary/Secondary UpToDate/UpToDate C r----
# drbdadm primary mysql --升级(上线)
# drbd-overview
0:mysql Connected Primary/Secondary UpToDate/UpToDate C r----
# mkdir /mydata
# mount /dev/drbd0 /mydata
# ls /mydata
lost+found test
# cat test
Thu Mar 13 17:00:18 CST 2014
问题描述:设备被其他人占用,无法停止或者下线资源
解决办法:查看是否设备挂载,umount即可
问题描述:0:mydrbd WFConnection Primary/Unknown UpToDate/DUnknown C r-----,即总有一个节点是未知状态
解决办法:drbdadm connect all
从节点上执行:
drbdadm -- --discard-my-data connect all
高可用集群(HA)之DRBD原理和基础配置的更多相关文章
- 高可用集群(HA)之Keeplived原理+配置过程
原理--> 通过vrrp协议,定义虚拟路由,在多个服务节点上进行转移. 通过节点优先级,将初始虚拟路由到优先级高的节点上,checker工作进程检测到主节点出问题时,则降低此节点优先级,从而实现 ...
- Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】
No cross,no crown . 不经历风雨,怎么见彩虹. Redis哨兵模式,用现在流行的话可以说就是一个"哨兵机器人",给"哨兵机器人"进行相应的配置 ...
- linux高可用集群(HA)原理详解(转载)
一.什么是高可用集群 高可用集群就是当某一个节点或服务器发生故障时,另一个 节点能够自动且立即向外提供服务,即将有故障节点上的资源转移到另一个节点上去,这样另一个节点有了资源既可以向外提供服务.高可用 ...
- linux高可用集群(HA)原理详解
高可用集群 一.什么是高可用集群 高可用集群就是当某一个节点或服务器发生故障时,另一个节点能够自动且立即向外提供服务,即将有故障节点上的资源转移到另一个节点上去,这样另一个节点有了资源既可以向外提供服 ...
- (四)FastDFS 高可用集群架构学习---后期运维--基础知识及常用命令
1.fastdfs 七种状态 FDFS_STORAGE_STATUS:INIT :初始化,尚未得到同步已有数据的源服务器 FDFS_STORAGE_STATUS:WAIT_SYNC :等待同步,已得到 ...
- corosync+pacemaker and drbd实现mysql高可用集群
DRBD:Distributed Replicated Block Device 分布式复制块设备,原理图如下 DRBD 有主双架构和双主架构的,当处于主从架构时,这个设备一定只有一个节点是可以读写的 ...
- Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)
声明:作者原创,转载注明出处. 作者:帅气陈吃苹果 一.服务器环境 主机名 IP 用户名 密码 安装目录 master188 192.168.29.188 hadoop hadoop /home/ha ...
- Hadoop部署方式-高可用集群部署(High Availability)
版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客的高可用集群是建立在完全分布式基础之上的,详情请参考:https://www.cnblogs.com/yinzhengjie/p/90651 ...
- LVS+Keepalived-DR模式负载均衡高可用集群
LVS+Keepalived DR模式负载均衡+高可用集群架构图 工作原理: Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能. VRRP,虚拟路由冗余协议,是针对路由器的 ...
随机推荐
- 分享到QQ空间、新浪微博、腾讯微博的代码!
给网页加上分享代码,借助网友的力量推广网站,目前已经很流行了 以下是网页代码 QQ空间分享代码如下: <a href="javascript:void(0);" onclic ...
- python学习第二天 --变量及其字符串
python变量: 在计算机程序中,变量不仅可以是数字,还可以是任意数据类型. 在Python程序中,变量是用一个变量名表示,变量名必须是大小写英文.数字和下划线(_)的组合,且不能用数字开头. 在P ...
- asp.net mvc4 eui datagrid视图重写分页
效果图 前端代码: @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="vi ...
- IIS7 MVC网站生成、发布
imihiro IIS7 MVC网站生成.发布 (1)生成. 确保System.Web.Mvc.dll在bin目录下 (2)发布网站到文件系统 (3)在IIS中为网站添加应用程序池(一个虚拟目录,一个 ...
- Idea使用记录--每次修改JS文件都需要重启Idea才能生效解决方法
最近开始使用Idea,有些地方的确比eclipse方便.但是我发现工程每次修改JS或者是JSP页面后,并没有生效,每次修改都需要重启一次Tomcat这样的确不方便.我想Idea肯定有设置的方法,不可能 ...
- 读mongoose api 记录
mongoose 需要在Schemas基础上进行使用 var mongoose = require('mongoose'); var Schema = mongoose.Schema; var blo ...
- Google Chrome源码剖析【序】
[序(本人什么都没做,完全转载)] 开源是口好东西,它让这个充斥着大量工业垃圾代码和教材玩具代码的行业,多了一些艺术气息和美的潜质.它使得每个人,无论你来自米国纽约还是中国铁岭,都有机会站在巨人的肩膀 ...
- LeetCode_Recover Binary Search Tree
Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...
- cmake编译Debug和Release
CMake 中有一个变量 CMAKE_BUILD_TYPE ,可以的取值是 Debug Release Rel WithDebInfo 和 MinSizeRel.当这个变量值为 Debug 的时候,C ...
- 搜索Collections元素,用DateFormatSymbols 获得月份
import java.util.Collections; import java.util.List; import java.text.DateFormatSymbols; import java ...