首页 数据库 mysql教程 一步步构建基于DRBD的数据共享

一步步构建基于DRBD的数据共享

Jun 07, 2016 pm 05:12 PM
drbd 数据库

DRBD(Distributed Replocated Blocak Device)分布式的复制块设备 在内核为2.6.33之后的版本中,DRBD就被编译进内核了,所以DRB

DRBD(Distributed Replocated Blocak Device)分布式的复制块设备
在内核为2.6.33之后的版本中,DRBD就被编译进内核了,所以DRBD是在内核中工作的

下面我们就看看DRBD的工作流程图:

image

    当启用drbd功能,并将drbd设备挂载到本地之后,用户空间需要向磁盘上存数据的时候,当数据通过缓存时,drbd就将这些数据分成了两路,一路存储到本地的磁盘上,另一路通过本地的TCP/IP协议栈和网络将数据传输到另个开启drbd服务主机上,这个drbd主机接收数据并将数据存储到本地的drbd设备上,从而实现了数据的共享和同步,然而整个数据的同步过程都是在内核空间中进行的,所以对用户空间没有任何 影响

    drbd共有两部分组成:内核模块和用户空间的管理工具

  用户空间的管理工具:对内核中数据传输和共享的具体实施过程进行行为定义
  内核模块:依用户空间的管理工具的定义的方式来进行数据的传输和共享

Drbd的模型两种:

   单主节点:任何资源只能在主节点上进行读写操作,主节点的文件类型可以是任何的,只要是为高可用集群中的资源流转提供一个解决方案。

   双主节点:在任何时刻任意用户可以通过任意节点来进行读写操作,但是要结合集群文件系统来实现,所以要通过GFS或者OCFS2来实现其应用,只有在drbd的8.0版本之后才支持

 

下面我们就通过具体的配置过程来了解drbd各个部分的工作原理

配置前提:
1)本配置共有两个测试节点,分别node1.a.org和node2.a.org,相的IP地址分别为192.168.0.202和192.168.0.204;
2)node1和node2两个节点上各提供了一个大小相同的分区作为drbd设备;我们这里为在两个节点上均为/dev/sda5,大小为1G;

1、准备工作

保证两个节点的主机名称和对应的IP地址解析服务可以正常工作,且每个节点的主机名称需要跟"uname -n“命令的结果保持一致;因此,需要保证两个节点上的/etc/hosts文件均为下面的内容:
192.168.0.202 node1.a.org node1
192.168.0.204 node2.a.org node2

为了使得重新启动系统后仍能保持如上的主机名称,,还分别需要在各节点执行类似如下的命令:

node1: 

hostname node1.a.org 

 hostname node2.a.org 

2、安装软件包

drbd共有两部分组成:内核模块和用户空间的管理工具。其中drbd内核模块代码已经整合进Linux内核2.6.33以后的版本中,因此,如果您的内核版本高于此版本的话,你只需要安装管理工具即可;否则,您需要同时安装内核模块和管理工具两个软件包,并且此两者的版本号一定要保持对应。

我们这里选用最新的8.3的版本

下载完成后直接安装即可:

yum -y --nogpgcheck localinstall drbd83-8.3.8-1.el5.CentOS.i386.rpm kmod-drbd83-8.3.8-1.el5.centos.i686.rpm

3、配置drbd

1)复制样例配置文件为即将使用的配置文件:

cp /usr/share/doc/drbd83-8.3.8/drbd.conf  /etc 

2)配置/etc/drbd.d/global_common.conf

 

global { 
        usage-count no; 
        # minor-count dialog-refresh disable-ip-verification 

}

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 100M; 
        } 
}

 

 

3、定义一个资源/etc/drbd.d/web.res,内容如下:

  • resource web {    
  •     on node1.a.org {    
  •     device    /dev/drbd0;           ##定义drbd设备号    
  •     disk      /dev/sda5;               ## 定义drbd设备所使用的磁盘    
  •     address   192.168.0.202:7789;  ##此drbd设备监听的网络地址和端口    
  •     meta-disk internal;    
  •   }    
  •     on node2.a.org {    
  •     device    /dev/drbd0;       
  •     disk      /dev/sda5;    
  •     address   192.168.0.204:7789;    
  •     meta-disk internal;    
  •   }    
  • }   
  • 将这两个配置文件拷贝到node2上,以保证配置文件相同 

     

  • cd /etc/drbd.d  
  • scp web.res global_common.conf node2:/etc/drbd.d 
  • scp /etc/drbd.conf node2:/etc/  


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

    1)初始化资源,在Node1和Node2上分别执行:

  • drbdadm create-md web 
  • 2)启动服务,在Node1和Node2上分别执行:

  • /etc/init.d/drbd start 
  • 3)查看启动状态:

  • cat /proc/drbd  
  • 也可以使用drbd-overview命令来查看:

  • drbd-overview 

  • 从上面的信息中可以看出此时两个节点均处于Secondary状态。于是,我们接下来需要将node1设置为Primary,在node1上执行如下命令:
    drbdsetup /dev/drbd0 primary –o

      注: 也可以在要设置为Primary的节点上使用如下命令来设置主节点:
         drbdadm -- --overwrite-data-of-peer primary web  这种方法更加标准
        (注:这两个设置primary节点的命令只在第一次使用,以后就可以直接使用drbdadm primary web)

    而后再次查看状态,可以发现数据同步过程已经开始:

  • drbd-overview  


  •     

    此时我们还可以使用如下命令动态的查看同步过程
    watch -n 1 'drbd-overview'
    当数据同步完成以后再次查看状态

  • drbd-overview 
  • 可以发现节点已经为实时状态,且节点已经有了主次:

    5、创建文件系统

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

  • mke2fs -j  /dev/drbd0  
  • mkdir /drbd   
  • mount /dev/drbd0 /drbd 
  • 6、切换Primary和Secondary节点

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

    我们先在drbd设备上存储个网页文件,而后在主从节点改变后查看node1的index.html文件是否复制到node2上

    node1:

        为了进行验证而设置的文件
    首先卸载drbd设备

  • umount /drbd 
  • 将其设定为从节点

  • drbdadm secondary web 
  • 查看状态:

    将node2设为primary

  • drbdadm primary web  

  • 查看状态: 
    drbd-overview

    状态显示node2已经成为从节点
    挂载drbd设备

  • mkdir /drbd   
  • mount /dev/drbd0 /mnt/drbd 
  • 查看文件是否存在

    linux

    本站声明
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热AI工具

    Undresser.AI Undress

    Undresser.AI Undress

    人工智能驱动的应用程序,用于创建逼真的裸体照片

    AI Clothes Remover

    AI Clothes Remover

    用于从照片中去除衣服的在线人工智能工具。

    Undress AI Tool

    Undress AI Tool

    免费脱衣服图片

    Clothoff.io

    Clothoff.io

    AI脱衣机

    AI Hentai Generator

    AI Hentai Generator

    免费生成ai无尽的。

    热门文章

    R.E.P.O.能量晶体解释及其做什么(黄色晶体)
    2 周前 By 尊渡假赌尊渡假赌尊渡假赌
    仓库:如何复兴队友
    4 周前 By 尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island冒险:如何获得巨型种子
    4 周前 By 尊渡假赌尊渡假赌尊渡假赌

    热工具

    记事本++7.3.1

    记事本++7.3.1

    好用且免费的代码编辑器

    SublimeText3汉化版

    SublimeText3汉化版

    中文版,非常好用

    禅工作室 13.0.1

    禅工作室 13.0.1

    功能强大的PHP集成开发环境

    Dreamweaver CS6

    Dreamweaver CS6

    视觉化网页开发工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神级代码编辑软件(SublimeText3)

    Go语言如何实现数据库的增删改查操作? Go语言如何实现数据库的增删改查操作? Mar 27, 2024 pm 09:39 PM

    Go语言是一种高效、简洁且易于学习的编程语言,因其在并发编程和网络编程方面的优势而备受开发者青睐。在实际开发中,数据库操作是不可或缺的一部分,本文将介绍如何使用Go语言实现数据库的增删改查操作。在Go语言中,我们通常使用第三方库来操作数据库,比如常用的sql包、gorm等。这里以sql包为例介绍如何实现数据库的增删改查操作。假设我们使用的是MySQL数据库。

    在PHP中使用MySQLi建立数据库连接的详尽教程 在PHP中使用MySQLi建立数据库连接的详尽教程 Jun 04, 2024 pm 01:42 PM

    如何在PHP中使用MySQLi建立数据库连接:包含MySQLi扩展(require_once)创建连接函数(functionconnect_to_db)调用连接函数($conn=connect_to_db())执行查询($result=$conn->query())关闭连接($conn->close())

    Hibernate 如何实现多态映射? Hibernate 如何实现多态映射? Apr 17, 2024 pm 12:09 PM

    Hibernate多态映射可映射继承类到数据库,提供以下映射类型:joined-subclass:为子类创建单独表,包含父类所有列。table-per-class:为子类创建单独表,仅包含子类特有列。union-subclass:类似joined-subclass,但父类表联合所有子类列。

    iOS 18 新增'已恢复”相册功能 可找回丢失或损坏的照片 iOS 18 新增'已恢复”相册功能 可找回丢失或损坏的照片 Jul 18, 2024 am 05:48 AM

    苹果公司最新发布的iOS18、iPadOS18以及macOSSequoia系统为Photos应用增添了一项重要功能,旨在帮助用户轻松恢复因各种原因丢失或损坏的照片和视频。这项新功能在Photos应用的"工具"部分引入了一个名为"已恢复"的相册,当用户设备中存在未纳入其照片库的图片或视频时,该相册将自动显示。"已恢复"相册的出现为因数据库损坏、相机应用未正确保存至照片库或第三方应用管理照片库时照片和视频丢失提供了解决方案。用户只需简单几步

    MySQL数据库管理系统的基本原理解析 MySQL数据库管理系统的基本原理解析 Mar 25, 2024 pm 12:42 PM

    MySQL数据库管理系统的基本原理解析MySQL是一种常用的关系型数据库管理系统,它通过结构化查询语言(SQL)来进行数据存储和管理。本文将介绍MySQL数据库管理系统的基本原理,包括数据库的创建、数据表的设计、数据的增删改查等操作,并提供具体的代码示例。一、数据库的创建在MySQL中,首先需要创建一个数据库实例来存储数据。通过以下代码可以创建一个名为"my

    深入解析HTML如何读取数据库 深入解析HTML如何读取数据库 Apr 09, 2024 pm 12:36 PM

    HTML无法直接读取数据库,但可以通过JavaScript和AJAX实现。其步骤包括建立数据库连接、发送查询、处理响应和更新页面。本文提供了利用JavaScript、AJAX和PHP来从MySQL数据库读取数据的实战示例,展示了如何在HTML页面中动态显示查询结果。该示例使用XMLHttpRequest建立数据库连接,发送查询并处理响应,从而将数据填充到页面元素中,实现了HTML读取数据库的功能。

    PHP处理数据库中文乱码的技巧与实践 PHP处理数据库中文乱码的技巧与实践 Mar 27, 2024 pm 05:21 PM

    PHP是一种广泛应用于网站开发的后端编程语言,它具有强大的数据库操作功能,常用于与MySQL等数据库进行交互。然而,由于中文字符编码的复杂性,在处理数据库中文乱码时常常会出现问题。本文将介绍PHP处理数据库中文乱码的技巧与实践,包括常见的乱码原因、解决方法和具体的代码示例。常见的乱码原因数据库字符集设置不正确:数据库在创建时需选择正确的字符集,如utf8或u

    Go WebSocket 如何与数据库集成? Go WebSocket 如何与数据库集成? Jun 05, 2024 pm 03:18 PM

    如何将GoWebSocket与数据库集成:设置数据库连接:使用database/sql包连接到数据库。将WebSocket消息存储到数据库:使用INSERT语句将消息插入数据库。从数据库检索WebSocket消息:使用SELECT语句检索数据库中的消息。

    See all articles