DRBD编译安装配置
2016-01-07 10:21
393 查看
一、简介
DRBD的全称为:Distributed ReplicatedBlock Device(DRBD)分布式块设备复制,DRBD 是由内核模块和相关脚本而构成,用以构建高可用性的集群。其实现方式是通过网络来镜像整个设备。它允许用户在远程机器上建立一个本地块设备的实时镜像。与心跳连接结合使用,也可以把它看作是一种网络RAID。
DRBD是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。 DRBD Logo数据镜像:实时、透明、同步(所有服务器都成功后返回)、异步(本地服务器成功后返回)。DBRD的核心功能通过Linux的内核实现,最接近系统的IO栈,但它不能神奇地添加上层的功能比如检测到EXT文件系统的崩溃。DBRD的位置处于文件系统以下,比文件系统更加靠近操作系统内核及IO栈。
二、工作模式及协议
①工作模式
单主模式:典型的高可靠性集群方案。DRBD负责接收数据,把数据写到本地磁盘,然后发送给另一个主机,另一个主机再将数据存到自己的磁盘中。
复主模式:需要采用共享cluster文件系统,如GFS和OCFS2。用于需要从2个节点并发访问数据的场合,需要特别配置。
②复制协议
协议A:异步复制协议。本地写成功后立即返回,数据放在发送buffer中,可能丢失。
协议B:内存同步(半同步)复制协议。本地写成功并将数据发送到对方后立即返回,如果双机掉电,数据可能丢失。
协议C:同步复制协议。本地和对方写成功确认后返回。如果双机掉电或磁盘同时损坏,则数据可能丢失。
一般用协议C。选择协议将影响流量,从而影响网络时延。
三、安装依赖并编译drbd
①安装相关程序
注:安装kernel-devel一定要和uname -r看到的内核版本一致.
②编译drbd-utils
③编译drbd
④安装drbd模块
⑤查看drbd版本及路径
四、添加新磁盘并分区
五、配置drbd
①主配置文件drbd.conf
②配置global_common.conf
③新建资源配置文件:
a.定义资源文件
b.配置resource
六、drbd同步测试
①配置primary node
设置node1为primary node:
node2状态:
格式化并挂载(node1):
②进行同步测试
node1:
在node1下的挂载点/drbd写入一些数据
node2:
已实现同步!
附:
本地和对等节点的硬盘可能为下列状态之一:
diskless(无盘):本地没有块设备分配给DRBD使用,表示无可用设备,或是使用drbdadm命令手工分离;
或是底层的I/O错误导致自动分离。
attaching:读取无数据时的瞬间状态。
failed(失败):本地块设备报告I/O错误的下一个状态,其下一个状态为diskless无盘。
negotiating:在已连接的DRBD设置进行attach读取无数据前的瞬间状态。
inconsistent:数据不一致,在两个节点上(初始的完全同步前)这种状态出现后立即创建一个新的资源。
outdated:数据资源一致,但已过时。
dunknown:当对等节点网络连接不可用时会出现该状态
consistent:一个没有连接的节点数据一致,当建立连接时,它决定数据是uptodate或outdated
uptodate:一致的最新的数据状态,为正常状态
本文出自 “记事本” 博客,请务必保留此出处/article/7194550.html
DRBD的全称为:Distributed ReplicatedBlock Device(DRBD)分布式块设备复制,DRBD 是由内核模块和相关脚本而构成,用以构建高可用性的集群。其实现方式是通过网络来镜像整个设备。它允许用户在远程机器上建立一个本地块设备的实时镜像。与心跳连接结合使用,也可以把它看作是一种网络RAID。
DRBD是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。 DRBD Logo数据镜像:实时、透明、同步(所有服务器都成功后返回)、异步(本地服务器成功后返回)。DBRD的核心功能通过Linux的内核实现,最接近系统的IO栈,但它不能神奇地添加上层的功能比如检测到EXT文件系统的崩溃。DBRD的位置处于文件系统以下,比文件系统更加靠近操作系统内核及IO栈。
二、工作模式及协议
①工作模式
单主模式:典型的高可靠性集群方案。DRBD负责接收数据,把数据写到本地磁盘,然后发送给另一个主机,另一个主机再将数据存到自己的磁盘中。
复主模式:需要采用共享cluster文件系统,如GFS和OCFS2。用于需要从2个节点并发访问数据的场合,需要特别配置。
②复制协议
协议A:异步复制协议。本地写成功后立即返回,数据放在发送buffer中,可能丢失。
协议B:内存同步(半同步)复制协议。本地写成功并将数据发送到对方后立即返回,如果双机掉电,数据可能丢失。
协议C:同步复制协议。本地和对方写成功确认后返回。如果双机掉电或磁盘同时损坏,则数据可能丢失。
一般用协议C。选择协议将影响流量,从而影响网络时延。
三、安装依赖并编译drbd
①安装相关程序
123456 | # yum -y install gcc make automake autoconf kernel-devel kernel-headers flex libxslt libxslt-devel asciidoc# wget http://oss.linbit.com/drbd/9.0/drbd-9.0.0.tar.gz # wget http://oss.linbit.com/drbd/drbd-utils-8.9.4.tar.gz # getenforce 0# systemctl stop firewalld |
②编译drbd-utils
1234567 | # tar -zxvf drbd-utils-8.9.4.tar.gz# cd drbd-utils-8.9.4# ./autogen.sh# ./configure --prefix=/usr/ --localstatedir=/var --sysconfdir=/etc# make KDIR=/usr/src/kernels/3.10.0-229.14.1.el7.x86_64# make install# cp drbd-utils-8.9.4/scripts/drbd /etc/init.d/ ##复制启动脚本 |
12345 | # tar -zxvf drbd-9.0.0.tar.gz# cd drbd-9.0.0# make KDIR=/usr/src/kernels/3.10.0-229.14.1.el7.x86_64# make install# make -C drbd install |
123456789101112 | # cd drbd-9.0.0/drbd# cp drbd.ko /lib/modules/3.10.0-229.el7.x86_64/kernel/lib/# cp drbd_transport_tcp.ko /lib/modules/3.10.0-229.el7.x86_64/kernel/lib/# depmod ##更新内核包关联文件# modprobe drbd ##安装内核模块# modprobe drbd_transport_tcp# lsmod |grep drbd ##查看模块是否加载成功drbd 463948 0 libcrc32c 12644 2 xfs,drbd# lsmod|grep drbd_transport_tcpdrbd_transport_tcp 17731 0 drbd 463948 2 drbd_transport_tcp |
123456 | # cat /proc/drbd ##查看版本信息version: 9.0.0 (api:2/proto:86-110)GIT-hash: e0e3bc833053a0ed6b4b593b32e40223a9373fb7 build by root@node1, 2015-10-29 19:16:18Transports (api:8): tcp (1.0.0)# whereis drbd ##查看drbd安装路径drbd: /usr/lib/drbd /etc/drbd.conf /etc/drbd.d /usr/share/man/man8/drbd.8 |
1234567891011121314151617181920212223 | # fdisk -l# fdisk /dev/sdb欢迎使用 fdisk (util-linux 2.23.2)。更改将停留在内存中,直到您决定将更改写入磁盘。使用写入命令前请三思。Device does not contain a recognized partition table使用磁盘标识符 0xd9a29d5a 创建新的 DOS 磁盘标签。命令(输入 m 获取帮助):nPartition type: p primary (0 primary, 0 extended, 4 free) e extendedSelect (default p): Using default response p分区号 (1-4,默认 1):起始 扇区 (2048-2097151,默认为 2048):将使用默认值 2048Last 扇区, +扇区 or +size{K,M,G} (2048-2097151,默认为 2097151):+300M分区 1 已设置为 Linux 类型,大小设为 300 MiB命令(输入 m 获取帮助):wThe partition table has been altered!Calling ioctl() to re-read partition table.正在同步磁盘。# fdisk -l |
①主配置文件drbd.conf
1234 | # cat /etc/drbd.conf ##查看drbd的主配置文件# You can find an example in /usr/share/doc/drbd.../drbd.conf.exampleinclude "drbd.d/global_common.conf";include "drbd.d/*.res"; |
12345678910111213141516 | # cat /etc/drbd.d/global_common.conf|grep -v "#" global { usage-count no; ##是否参加drbd的使用者统计,默认此选项为YES}common { handlers { } startup { } options { } disk { } net { }} |
a.定义资源文件
123456789101112131415161718192021222324252627 | # vi /etc/drbd.d/drbd.res ##新建资源配置文件为drbd.resresource r1 { ##定义资源组名称为r1 net { cram-hmac-alg sha1; ##使用sha1加密 shared-secret "123456"; ##生成加密密钥 } volume 1 { ##定义卷组 device /dev/drbd1; ##逻辑设备路径(建立块设备) disk /dev/sdb1; ##物理设备路径(用于复制的分区) meta-disk internal; ##meta data信息存放的方式,该处为内部存储,即和真实数据放在一起存储 } on node1 { ##on开头,后面是主机名称(需与uname -n相同) node-id 0; address 192.168.10.132:7000; ##设置drbd监听地址和端口 } on node2 { node-id 1; address 192.168.10.133:7000; } connection { host node1 port 7000; host node2 port 7000; net { protocol C; ##使用drbd的第三种同步协议,表示收到对方主机写入确认后,则认为写入完成 } }} |
1234567 | # dd if=/dev/zero of=/dev/sdb1 bs=1M count=100 ##用指定大小的块拷贝一个文件# drbdadm -c /etc/drbd.conf create-md all ##创建设备元数据initializing activity logNOT initializing bitmapWriting meta data...New drbd meta data block successfully created.success |
12345678910 | # drbdadm create-md r1 ##创建r1设备元(注:使用上命令,则该命令非必须)You want me to create a v09 style flexible-size internal meta data block.There appears to be a v09 flexible-size internal meta data blockalready in place on /dev/sdb1 at byte offset 314568704Do you really want to overwrite the existing meta-data?[need to type 'yes' to confirm] yesinitializing activity logNOT initializing bitmapWriting meta data...New drbd meta data block successfully created. |
123 | # drbdadm up r1 ##启用该资源Device '1' is configured!Command 'drbdmeta 1 v09 /dev/sdb1 internal apply-al' terminated with exit code 20 |
12 | # drbd-overview ##查看状态 1:r1/0 Connected(1*) Secondary(1*) Inconsistent(1*) |
①配置primary node
设置node1为primary node:
123 | # drbdadm primary r1# drbd-overview 1:r1/1 Connected(2*) Primar/Second UpToDa/UpToDa |
12 | # drbd-overview 1:r1/1 Connected(2*) Second/Primar UpToDa/UpToDa |
12345 | # mkdir /drbd # mkfs.ext4 /dev/drbd1 ##格式化/dev/drbd1# mount /dev/drbd1 /drbd ##挂载# drbd-overview ##查看状态 1:r1/1 Connected(2*) Primar/Second UpToDa/UpToDa /drbd ext4 283M 2.1M 262M 1% |
node1:
在node1下的挂载点/drbd写入一些数据
1234 | # umount /dev/drbd1 ##卸载/dev/drbd1# drbdadm secondary r1 ##将主节点降级为备节点# drbd-overview 1:r1/1 Connected(2*) Secondary(2*) UpToDa/UpToDa |
node2:
1234 | # mount /dev/drbd1 /drbd ##挂载设备# drbdadm primary r1 ##将node2升级为主节点# drbd-overview 1:r1/1 Connected(2*) Primar/Second UpToDa/UpToDa /drbd ext4 283M 3.2M 261M 2% |
已实现同步!
附:
12 | # drbdadm role r1 ##查看节点状态Secondary |
1 | # drbdadm dstate r1 ##查看硬盘状态 |
diskless(无盘):本地没有块设备分配给DRBD使用,表示无可用设备,或是使用drbdadm命令手工分离;
或是底层的I/O错误导致自动分离。
attaching:读取无数据时的瞬间状态。
failed(失败):本地块设备报告I/O错误的下一个状态,其下一个状态为diskless无盘。
negotiating:在已连接的DRBD设置进行attach读取无数据前的瞬间状态。
inconsistent:数据不一致,在两个节点上(初始的完全同步前)这种状态出现后立即创建一个新的资源。
outdated:数据资源一致,但已过时。
dunknown:当对等节点网络连接不可用时会出现该状态
consistent:一个没有连接的节点数据一致,当建立连接时,它决定数据是uptodate或outdated
uptodate:一致的最新的数据状态,为正常状态
本文出自 “记事本” 博客,请务必保留此出处/article/7194550.html
相关文章推荐
- 解决github unable to access 'https://github.com/...: Failed to connect to github.com port 443
- Java解释器模式
- 设置圆角按钮 iOS开发
- android studio 出现 Gradle sync failed:Plugin is too old, please update to a more recent v
- parse,tryparse区别
- 在CentOS7中开启httpd的mod_ssl 模块及配置
- Html5添加轻量级响应式打字机特效插件教程
- Mobileye采用单目摄像头做ADAS太不精确?用双目摄像头的“中科慧眼”认为双目测距算法才是最精确的
- C# 调用 JavaWebservice服务遇到的问题汇总
- 【Caffe实践】基于Caffe的人脸检测实现
- 笨方法学Python(41-45)
- 互联网常见的攻击与防御
- java模拟http get和post 提交 httpclient
- Centos 6.2 32位安装zabbix
- Java 8:如何使用流方式查询数据库?
- 001、iOS 在使用 performSelector时 异常"performSelector may cause a leak because its selector is unknown"
- Heartbeat的编译安装配置
- HMM参数理解
- angularjs页面切换动画(ui-view)
- kaggle titanic 入门实例 基于性别的预测