drbd+heartbeat构建分布式存储

简介:

 

一、部署

Role        hostname     IP                       Gateway  LVM

Primary     node2        eth0:192.168.32.32/24   192.168.32.254 /dev/vg01/lv01

                         eth1:10.160.100.32/24

Secondary   node2        eth0:192.168.32.33/24   192.168.32.254  /dev/vg01/lv01

                         eth1:10.160.100.33/24

 

二、软件安装

1. drbd安装

[root@node3 ~]# rpm -ivh drbd83-8.3.10-2.el5.centos.i386.rpm

 

2. heartbeat的安装(略)

 

三、drbd配置(两节点drbd配置文件完全一样)

1. 主配置文件(/etc/drbd.conf)

[root@node2 ~]# vim /etc/drbd.conf 

# You can find an example in  /usr/share/doc/drbd.../drbd.conf.example

include "drbd.d/global_common.conf";

include "drbd.d/*.res";

#drbd的主配置文件为/etc/drbd.conf;为了管理的便捷性,目前通常会将些配置文件分成多个部分,且都保存至/etc/drbd.d目录中,主配置文件中仅使用"include"指令将这些配置文件片断整合起来。通常,/etc/drbd.d目录中的配置文件为global_common.conf和所有以.res结尾的文件。其中global_common.conf中主要定义global段和common段,而每一个.res的文件用于定义一个资源。

 

2. 全局配置文件(/etc/drbd.d/global_common.conf)

[root@node2 ~]# vim /etc/drbd.d/global_common.conf

global {                    #global段仅能出现一次,global段必须位于配置文件的最开始处

 usage-count no;

 #是否参与DRBD使用者统计,默认为yes。

 # minor-count dialog-refresh disable-ip-verification

 #minor-count:从(设备)个数,取值范围1~255,默认值为32。该选项设定了允许定义的resource个数,当要定义的resource超过了此选项的设定时,需要重新载入drbd内核模块。

 #dialog-refresh time:time取值0,或任一正数。默认值为1。我没理解官方对该选项的解释。很少见到此选项被启用。

 #disable-ip-verification:是否禁用ip检查

}

 

common {        #common段则用于定义被每一个资源默认继承的参数,可以在资源定义中使用的参数都可以在common段中定义;非必须。

 protocol C;    #使用DRBD的第三种同步协议,写I/O到达本地磁盘和远程节点的磁盘之后,返回操作成功

                #procoto A :写I/O到达本地磁盘和本地的TCP发送缓存区之后,返回操作成功

                #protocol B :写I/O到达本地磁盘和远程节点的缓存之后,返回操作成功

 

 handlers {      #用来定义一系列处理器,用来回应特定事件。

  fence-peer "/usr/lib/drbd/crm-fence-peer.sh";

  #outdate-peer "/usr/lib/drbd/obliterate-peer.sh";

  split-brain "/usr/lib/drbd/notify-split-brain.sh root";

  out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";

  after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;

 }

 

 startup {

  #become-primary-on both;

  wfc-timeout 120;    #该选项设定一个时间值,单位是秒。在启用DRBD块时,初始化脚本drbd会阻塞启动进程的运行,直到对等节点的出现。该选项就是用来限制这个等待时间的,默认为0,即不限制,永远等待

  degr-wfc-timeout 120;  #选项也设定一个时间值,单位为秒。也是用于限制等待时间,只是作用的情形不同:它作用于一个降级集群(即那些只剩下一个节点的集群)在重启时的等待时间。

 }

 

disk {

  on-io-error detach;    

  #on-io-error选项:此选项设定了一个策略,如果底层设备向上层设备报告发生I/O错误,将按照该策略进行处理。有效的策略包括:

   #pass_on:把I/O错误报告给上层设备。如果错误发生在primary节点,把它报告给文件系统,由上层设备处理这些错误(例如,它会导致文件系统以只读方式重新挂载),它可能会导致drbd停止提供服务;如果发生在secondary节点,则忽略该错误(因为secondary节点没有上层设备可以报告)。该策略曾经是默认策略,但现在已被detach所取代。

   #call-local-io-error:调用预定义的本地local-io-error脚本进行处理。该策略需要在resource配置段的handlers部分,预定义一个相应的local-io-error命令调用。该策略完全由管理员通过local-io-error命令(或脚本)调用来控制如何处理I/O错误。

   #detach:发生I/O错误的节点将放弃底层设备,以diskless mode继续工作。在disklessmode下,只要还有网络连接,drbd将从secondary node读写数据,而不需要failover。该策略会导致一定的损失,但好处也很明显,drbd服务不会中断。官方推荐和默认策略。

   

  fencing resource-only;

  #fencing选项:该选项设定一个策略来避免split brain的状况。有效的策略包括:

    #dont-care:默认策略。不采取任何隔离措施。

    #resource-only:在此策略下,如果一个节点处于split brain状态,它将尝试隔离对等端的磁盘。这个操作通过调用fence-peer处理器来实现。fence-peer处理器将通过其它通信路径到达对等节点,并在这个对等节点上调用drbdadm outdate res命令。

    #resource-and-stonith:在此策略下,如果一个节点处于split brain状态,它将停止I/O操作,并调用fence-peer处理器。处理器通过其它通信路径到达对等节点,并在这个对等节点上调用drbdadm outdate res命令。如果无法到达对等节点,它将向对等端发送关机命令。一旦问题解决,I/O操作将重新进行。如果处理器失败,你可以使用resume-io命令来重新开始I/O操作

 }

 

net {

  cram-hmac-alg "sha1";

  shared-secret "Myhttpd";

  #DRBD同步时使用的验证方式和密码

 }

 

syncer {

  rate 20M;   #同步时网络速率的最大值

 }

 

 3. 资源配置文件(/etc/drbd.d/*.conf)

[root@node2 ~]# vim /etc/drbd.d/web.res 

resource web {                    #资源名

  on node2 {                       #主机说明,必须以on开头,后面接hostname(uname -n)

     device /dev/drbd0;            #drbd生成的磁盘分区

     disk   /dev/vg01/lv01;        #drbd使用的磁盘逻辑分区(lvm)

     address 10.160.100.32:7788;   #通信协议端口

     meta-disk internal;           #drbd的元数据存储方式

   }

  on node3 {

     device /dev/drbd0;

     disk   /dev/vg01/lv01;

     address 10.160.100.33:7788;

     meta-disk internal;

   }

}

 

四. 在两个节点上初始化已定义的资源并启动服务:

1. 初始化资源,在node2和node3上分别执行:

[root@node2 ~]# drbdadm create-md web    #可用all表示为所有资源创建元数据库信息

#如出现创建不成功的情况,这时需覆盖文件系统中的设备块信息,可进行如下操作:

[root@node2 ~]#dd if=/dev/zero of=/dev/vg01/lv01 bs=1M count=128

#执行完dd命令后,再重新创建

 

2. 启动服务,在node2和node3上分别执行:

[root@node2 ~]# /etc/init.d/drbd start

 

3. 查看启动状态:

[root@node2 ha.d]# cat /proc/drbd 

version: 8.3.10 (api:88/proto:86-96)

GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by mockbuild@builder17.centos.org, 2011-02-11 10:05:34

 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----

    ns:140768 nr:12 dw:140780 dr:1925 al:145 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

# ro:角色信息

# ds:磁盘状态,显示数据是否一致,(UpToDate/UpToDate表面同步没有延时)   

# ns:网络发送的数据包,单位Kb

# dw:磁盘写操作

# dr:磁盘读操作

 

#也可以使用drbd-overview命令来查看:

[root@node2 ~]# drbd-overview 

  0:web  Connected Secondary/Secondary Inconsistent/Inconsistent C r----

#从上面的信息中可以看出此时两个节点均处于Secondary状态。需要将其中一个节点设置为Primary。

 

4. 设置节点为Primary

[root@node2 ~]# drbdsetup /dev/drbd0 primary -o

 

#也可以在要设置为Primary的节点上使用如下命令来设置主节点:

[root@node2 ~]# drbdadm -- --overwrite-data-of-peer primary web

 

#以后再设置节点为primary节点是可用如下命名:

[root@node2 ~]# drbdadm primary web

     

[root@node2 ~]# drbd-overview 

#再次查看状态,可以发现数据同步过程已经开始,等数据同步完成以后再次查看状态,可以发现节点已经牌实时状态,且节点已经有了主次。

 

5、创建文件系统

文件系统的挂载只能在Primary节点进行,因此,也只有在设置了主节点后才能对drbd设备进行格式化:

[root@node2 ~]# mke2fs -j -L DRBD /dev/drbd0

[root@node2 ~]# mount /dev/drbd0 /var/www/html

 

6、切换Primary和Secondary节点

对主Primary/Secondary模型的drbd服务来讲,在某个时刻只能有一个节点为Primary,因此,要切换两个节点的角色,只能在先将原有的Primary节点设置为Secondary后,才能原来的Secondary节点设置为Primary:

[root@node2 ~]# touch /var/www/html/index{1,2,3}.html

[root@node2 ~]# umount /mnt/drbd

[root@node2 ~]# drbdadm secondary web

[root@node2 ~]# drbd-overview 

  0:web  Connected Secondary/Secondary UpToDate/UpToDate C r----

  

[root@node3 ~]# drbdadm primary web

[root@node3 ~]# drbd-overview 

  0:web  Connected Primary/Secondary UpToDate/UpToDate C r---- 

[root@node3 ~]# mount /dev/drbd0 /var/www/html

使用下面的命令查看在此前在主节点上复制至此设备的文件是否存在:

[root@node3 ~]#ls /var/www/html

index1.html index2.html index3.html

 

五. drbd的相关问题处理

1. 脑裂之后的手工处理

(1)首先在确定要作为secondary的节点上面切换成secondary并放弃该资源的数据:

drbdadm disconnect resource_name/all

drbdadm secondary resource_name/all

drbdadm -- --discard-my-data connect resource_name/all

(2)在要作为primary的节点重新连接secondary(如果这个节点当前的连接状态为WFConnection的话,可以省略)

drbdadm connect resource_name/all

 

2.主从都StandAlone的情况

重启服务仍然无法链接成功,可以在两端分别执行:

drbdadm disconnect resource_name/all

drbdadm connect resource_name/all

 

六. drbd相关命令的使用

1. drbdsetup

drbsetup是drbd 程序套件中的底层配置工具。您可以使用该工具把低层模块设备和drbd 设备联系起来、安装drbd设备对,以便镜像它们的低层模块设备和检查运行drbd 设备的配置。

如:

在节点node2上,您可以发出以下命令

[root@node2 ~]# insmod drbd.o

[root@node2 ~]# drbdsetup /dev/drbd0 disk /dev/vg01/lv01

[root@node2 ~]# drbdsetup /dev/drbd0 net 10.160.100.33 10.160.100.32 B   #B:同步协议

 

在节点node3上,您可以发出以下命令:

[root@node2 ~]# insmod drbd.o

[root@node2 ~]# drbdsetup /dev/drbd0 disk /dev/vg01/lv01

[root@node2 ~]# drbdsetup /dev/drbd0 net 10.160.100.32 10.160.100.33 B

[root@node2 ~]# drbdsetup /dev/drbd0  primary

此时,您就可以像在其他设备一样使用/dev/drbd0 了。

 

七. heartbeat的配置(两节点配置一样)

1. ha.cf配置略

2. authkeys配置略

3. haresource配置

[root@node2 ha.d]# vim /etc/ha.d/haresources 

node2 drbddisk::web Filesystem::/dev/drbd0::/var/www/html

#drbddisk: heartbeat默认提供的DRBD管理脚本,web是drbd的资源

 

4. 启动heartbeat

[root@node2 ha.d]#service heartbeat start 

 

 

本文转自netsword 51CTO博客,原文链接:http://blog.51cto.com/netsword/770770

相关文章
|
1月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
321 3
|
6月前
|
消息中间件 分布式计算 并行计算
Python 高级编程与实战:构建分布式系统
本文深入探讨了 Python 中的分布式系统,介绍了 ZeroMQ、Celery 和 Dask 等工具的使用方法,并通过实战项目帮助读者掌握这些技术。ZeroMQ 是高性能异步消息库,支持多种通信模式;Celery 是分布式任务队列,支持异步任务执行;Dask 是并行计算库,适用于大规模数据处理。文章结合具体代码示例,帮助读者理解如何使用这些工具构建分布式系统。
|
负载均衡 Java 双11
使用Java构建高可用的分布式系统
使用Java构建高可用的分布式系统
|
10月前
|
存储 运维 负载均衡
构建高可用性GraphRAG系统:分布式部署与容错机制
【10月更文挑战第28天】作为一名数据科学家和系统架构师,我在构建和维护大规模分布式系统方面有着丰富的经验。最近,我负责了一个基于GraphRAG(Graph Retrieval-Augmented Generation)模型的项目,该模型用于构建一个高可用性的问答系统。在这个过程中,我深刻体会到分布式部署和容错机制的重要性。本文将详细介绍如何在生产环境中构建一个高可用性的GraphRAG系统,包括分布式部署方案、负载均衡、故障检测与恢复机制等方面的内容。
522 4
构建高可用性GraphRAG系统:分布式部署与容错机制
|
11月前
|
运维 供应链 安全
SD-WAN分布式组网:构建高效、灵活的企业网络架构
本文介绍了SD-WAN(软件定义广域网)在企业分布式组网中的应用,强调其智能化流量管理、简化的网络部署、弹性扩展能力和增强的安全性等核心优势,以及在跨国企业、多云环境、零售连锁和制造业中的典型应用场景。通过合理设计网络架构、选择合适的网络连接类型、优化应用流量优先级和定期评估网络性能等最佳实践,SD-WAN助力企业实现高效、稳定的业务连接,加速数字化转型。
SD-WAN分布式组网:构建高效、灵活的企业网络架构
|
10月前
|
监控 算法 网络协议
|
10月前
|
存储 监控 大数据
构建高可用性ClickHouse集群:从单节点到分布式
【10月更文挑战第26天】随着业务的不断增长,单一的数据存储解决方案可能无法满足日益增加的数据处理需求。在大数据时代,数据库的性能、可扩展性和稳定性成为企业关注的重点。ClickHouse 是一个用于联机分析处理(OLAP)的列式数据库管理系统(DBMS),以其卓越的查询性能和高吞吐量而闻名。本文将从我的个人角度出发,分享如何将单节点 ClickHouse 扩展为高可用性的分布式集群,以提升系统的稳定性和可靠性。
981 0
|
监控 Java 开发者
随着软件开发的发展,传统单体应用已难以适应现代业务需求,微服务架构因此兴起,成为构建可伸缩、分布式系统的主流
随着软件开发的发展,传统单体应用已难以适应现代业务需求,微服务架构因此兴起,成为构建可伸缩、分布式系统的主流。本文探讨Java微服务架构的设计原则与实践。核心思想是将应用拆分为独立服务单元,增强模块化与扩展性。Java开发者可利用Spring Boot等框架简化开发流程。设计时需遵循单一职责、自治性和面向接口编程的原则。以电商系统为例,将订单处理、商品管理和用户认证等拆分为独立服务,提高可维护性和容错能力。还需考虑服务间通信、数据一致性及监控等高级话题。掌握这些原则和工具,开发者能构建高效、可维护的微服务应用,更好地应对未来挑战。
168 1
|
存储 负载均衡 中间件
构建可扩展的分布式数据库:技术策略与实践
【8月更文挑战第3天】构建可扩展的分布式数据库是一个复杂而具有挑战性的任务。通过采用数据分片、复制与一致性模型、分布式事务管理和负载均衡与自动扩展等关键技术策略,并合理设计节点、架构模式和网络拓扑等关键组件,可以构建出高可用性、高性能和可扩展的分布式数据库系统。然而,在实际应用中还需要注意解决数据一致性、故障恢复与容错性以及分布式事务的复杂性等挑战。随着技术的不断发展和创新,相信分布式数据库系统将在未来发挥更加重要的作用。

热门文章

最新文章