码迷,mamicode.com
首页 > 其他好文 > 详细

drbd

时间:2015-06-04 06:21:59      阅读:718      评论:0      收藏:0      [点我收藏+]

标签:linux ha drbd

1.1 drbd

 

存储的类型:

DASDirect Attached Storage,直接附加存储。

NASNetwork Attached Storage,网络。

SANStorage Area Network,存储区域网络。

 

1.1.1 DAS

ide, usb, sata, scsi, sas,主板的硬盘接口上有控制芯片,硬盘的集成电路板上也有控制芯片,磁盘上的数据交换就是通过两个芯片完成的。IDE既是一种接口规范,同时也是一种协议,硬件之间的通信都需要协议来完成。不同的接口类型,使用的是它们专有的线缆,和专有的协议。而且它们之间的协议设计有高低级之分,SCSI就很牛,一个主板上的接口,可以接入15*32块硬盘。SCSI协议分为物理层、传输层、和应用层三层,就像tcp/ip协议一样,协议用来保证报文能够准确的送到指定的硬盘中。SCSI的传输最高速度可达480MB/s。为了保证带宽可用,一般使用光纤线缆。但是使用了光纤线缆,此前的SCSI控制器将无法使用。于是,SCSI的驱动程序将SCSI报文封装之后,不再通过SCSI控制器,而是经由光适配器转换成光信号后,发送到光缆上。但是接收方必须能够处理光信号,硬盘是处理不了的,所以便有了光交换机。它能够接收光信号,在另外的接口上,转换成SCSI报文,进而传递到SCSI硬盘。光网的协议为FC,当然,SCSI只是为了方便说明,其他接口也一样。

 

1.1.2 SAN

而如果光交换机的接口够多,可以使用光纤接入其他的主机,就构成了SAN。但是光纤太贵了,很多人根本买不起,于是就有人将光纤换成了网线。这样一来,只要将SCSI协议转换成tcp/ip协议,并将光交换机换成linux主机,让报文通过网卡传递到linux主机就可以了,传递到linux主机上的报文为iscsi协议的报文。但是千兆以太网的传输速度才125MB/s,连个IDE的最大速度都达不到,性能也就可想而知了。

 

1.1.3 工作原理

两台主机,每台主机提供一个块设备,任何程序需要往硬盘中存数据,都需要发起系统调用。而drbd是在硬盘驱动和系统调用之间加入了一个中间层。另一台主机也一样。当应用程序需要存数据时,将存储请求发给内核,内核中有个叫块层的接收请求后,本来是应该通过调度器交由磁盘驱动,写入磁盘的。但由于需要经过drbd层,这个层次不对请求做任何修改,只是将其复制一份。然后兵分两路,一份继续扔给驱动,另一份则扔给网卡,经过网络达到另一台主机。另一台主机的网卡收到后,内核知道此报文是要和brbd进行通信的,于是交给了brbd层,brbd层再交给磁盘驱动。

两台主机不能同时写,只能为主从模式,当主挂了后,从就称为主,就能写了。等新主机上线后成为从,再由主进行数据同步。

disk scheduler,磁盘调度器,它会将缓冲中的所有请求排队后,再发给磁盘驱动。所谓的排队就是将读的请求分为一类,写分为一类。发送的时候不是按照先到先发送的方式进行的,而是将所有的比如读合并为一个请求发给驱动,再将写请求合并为一个发送给驱动。因此,如果调度器设计的足够好的话,可以极大的提升磁盘读写的性能。

raw device,没有文件系统的存储,就是写入的时候不经过文件系统,而直接到达调度器的。裸设备。

分布式复制块设备,跨主机的块设备镜像系统。基于网络实现数据镜像,工作在内核,通过软件实现。因此,需要在用户空间写规则并发往内核功能,让它得以工作。

尽可能使用在高可用集群中,尽可能使用stonith设备,以阻断离线节点对数据的访问。如果在互联网上进行数据传输,建议使用vpn

 

用户空间管理工具:drbdadm, drbdsetup, drbdmeta

工作特性:实时、透明、同步或异步

 

primary/primary,双主模型,需要借助于dlm(分布式锁管理器)完成分布式锁管理,将dlm定义clone类型资源,从而使得多个节点都能够使用此资源。依赖Cluster FS

 

1.1.4 同步方式

磁盘的读写操作阻塞的时间是不一样的,读操作必须将磁盘中的文件先加载进内存,然后才能显示;而写就不同了,只需写进内存即可,速度相当的块。但是再加入drbd之后就不一样了,写操作可能要等到报文传递到另一台主机并写入磁盘之后,可能更为保险。但是这样一来,速度比写入本地磁盘还慢,因此,数据同步模型分为三种协议:

AAsync,只需要将报文发送到本机的网卡发送队列。性能最好,不安全。

BSemi-Sync,需要将报文发送至对方主机后。

Csync,需要将文件写入对方磁盘中。性能最差,安全性最高。

 

1.1.5 资源的定义

每组drbd设备都由"drbd resource"进行定义,定义四个属性:

名字:只能由空白字符之外ASCII字符组成,并且唯一。

drbd设备:/dev/drbd#

主设备号:147

次设备号:从0开始编号

磁盘配置:各主机上用于组成此drbd设备的磁盘或分区,编号可以不同,但大小需要一样。

网络配置:数据同步时的网络通信属性,何时同步、同步带宽、如何同步等。

 

1.1.6 配置文件

/etc/drbd.conf:啥都没写

/etc/drbd.d/global_common.conf:提供全局配置,及多个drbd设备相同的配置。

/etc/drbd.d/*.res:资源定义

 

global:全局属性,定义drbd自己的工作特性。

common:通用属性,定义多组drbd设备通用特性。

*.res:资源特有的配置

 

1.1.7 实现drbd存储

工作模型:master/slave。但在必要时,可以使用dual master(双主模型),要求必须在HA集群使用集群文件系统。

 

配置前提:时间同步、基于主机名访问

2.6.33内核版本之后才支持drbd,不过还在有人提供了rpm包。不过drbd的性能和可靠性还有待考证。

 

kmod-drbd84-8.4.5-504.1.el6.x86_64.rpm:内核模块

drbd84-utils-8.9.1-1.el6.elrepo.x86_64.rpm

 

1、每台主机15G的分区,不用格式化

2、安装

[root@web1 drbd]# rpm -ivh kmod-drbd84-8.4.5-504.1.el6.x86_64.rpm drbd84-utils-8.9.1-1.el6.elrepo.x86_64.rpm

3、查看生成的文件

[root@web1 drbd]# rpm -qa | grep drbd
[root@web1 drbd]# rpm -ql drbd84-utils-8.9.1-1.el6.elrepo
[root@web1 drbd]# rpm -ql kmod-drbd84-8.4.5-504.1.el6
…
/lib/modules/2.6.32-504.el6.x86_64/extra/drbd84/drbd.ko # 最主要的就是此模块,此模块已被自动加载
…

4、查看配置文件

[root@web1 drbd]# cd /etc/drbd.d/
[root@web1 drbd.d]# vim global_common.conf
global {
    usage-count no; # 统计使用习惯
}
common {
    handlers { # 定义主从发生分裂时应该怎么办,这个不要动,需要整合进高可用
    }
    startup { # 定义超时之类的
    }
    options { # 定义一些同步的属性
    }
disk {
on-io-error detach; # I/O发生错误时,拆掉该节点
#fencing resource-only;
}
net {
cram-hmac-alg "sha1"; # 消息校验的算法
shared-secret "mydrbdlab"; # 使用的密钥,域共享密钥,随便往里写
}
syncer { # 定义同步器的,属于net的一个子功能
rate 500M; # 最多可以使用多高的速率
}
 
[root@web1 drbd.d]# vim mystore.res
resource mystore {
    device /dev/drbd0;
    disk /dev/sda2p1;
    meta-disk internal;
    on web1 {
        address 172.16.45.1:7789;
    }
    on web2 {
        address 172.16.45.2:7789;
    }
}

5、同步给另一台

[root@web1 ~]# scp -r /etc/drbd.* web2:/etc/

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

(1) 初始化资源,在Node1Node2上分别执行

[root@web1 ~]# drbdadm create-md mystore # 创建多磁盘设备

(2) 启动服务

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

7、查看输出的状态

(1) 第一种

[root@web1 ~]# cat /proc/drbd 
version: 8.4.5 (api:1/proto:86-101)
GIT-hash: 1d360bde0e095d495786eaeb2a1ac76888e4db96 build by root@node1.magedu.com, 2015-01-02 12:06:20
 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:f oos:5253020

(2) 第二种

[root@web1 ~]# drbd-overview 
 0:mystore/0  Connected Secondary/Secondary Inconsistent/Inconsistent

8、设置主节点,从上面的信息中可以看出此时两个节点均处于Secondary状态。于是,我们接下来需要将其中一个节点设置为Primary

(1) 在要设置为Primary的节点上执行如下命令:

[root@web1 ~]# drbdadm primary --force mystore

(2) 再次查看输出信息,可以发现数据同步过程已经开始

[root@web1 ~]# watch -n1 ‘cat /proc/drbd‘

(3) 等数据同步完成以后再次查看状态,可以发现节点已经牌实时状态,且节点已经有了主次

[root@web1 ~]# cat /proc/drbd
version: 8.4.5 (api:1/proto:86-101)
GIT-hash: 1d360bde0e095d495786eaeb2a1ac76888e4db96 build by root@node1.magedu.com, 2015-01-02 12:06:20
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:5253020 nr:0 dw:0 dr:5253684 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

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

[root@web1 ~]# mkfs -t ext4 /dev/drbd0
[root@web1 ~]# mount /dev/drbd0 /mnt/

10、切换PrimarySecondary节点

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

[root@web1 ~]# drbdadm secondary mystore
[root@web1 ~]# drbd-overview 
 0:mystore/0  Connected Secondary/Secondary UpToDate/UpToDate

(2) web2升为主

[root@web2 drbd.d]# drbdadm primary mystore
[root@web2 drbd.d]# drbd-overview 
 0:mystore/0  Connected Primary/Secondary UpToDate/UpToDate

但此时需要手动切换主从,很不方便,所以drbd一般和Pacemaker一起使用。

 

1.1.8 案例:corosync/pacemaker + drbd实现HA Mariadb

两个主,需要使用克隆资源中的主从资源。首先定义为基本资源,然后复制多份就为克隆资源,其中一份为主资源,另外一份为从资源。

 

pacemaker中定义克隆资源的专用属性:

clone-max:最多克隆出的资源份数

clone-node-max:在单个节点上最多运行几份克隆

notifytrue|false,当一份克隆资源启动或停止时,是否通知给其它的副本,默认为true

globally-uniquetrue|false,每一个副本是否运行为一个不同的功能,默认为true,无需修改。

notify:所有副本是否串行启动,true|false,默认为true,无需修改。

master-max:最多启动几份master资源,只有在定义主从资源时才会使用。

master-node-max:同一个节点最多运行几份master类型资源,只有在定义主从资源时才会使用。

 

1.1.8.1 首先实现corosync/pacemaker + drbd

1、停止两主机的drbd服务,最后同时都降级为从后,再停止服务。

2、确保drbd服务一定不能开机启动

[root@web1 ~]# chkconfig drbd off

3、将CoroSync清理为干净状态

4、定义主从资源

(1) 安装了drbd后,引入了新的ocflinbit子类型。因此,资源代理的类型应该为linbit之下的drbd

crm(live)ra# classes
lsb
ocf / heartbeat linbit pacemaker
service
stonith
crm(live)ra# list ocf linbit
drbd
crm(live)ra# info ocf:linbit:drbd # 查看资源代理使用格式
…
Operations‘ defaults (advisory minimum): # 监控选项
 
    start         timeout=240
    promote       timeout=90 # 升为主
    demote        timeout=90 # 降为从
    notify        timeout=90
    stop          timeout=100
    monitor_Slave timeout=20 interval=20 # 监控从
    monitor_Master timeout=20 interval=10 # 监控主

(2) 定义一个基本资源,但是不要启动,因为需要对它做主从。对主从资源的监控要在基本资源中定义。

crm(live)configure# primitive mystor  ocf:linbit:drbd params drbd_resource="mystore" op monitor role="Master" interval=10 timeout=20 op monitor role="Slave" interval=20 timeout=20 op start timeout=240 op stop timeout=100
crm(live)configure# verify

(3) 定义主从资源

crm(live)configure# ms ms_mystor mystor meta clone-max="2" clone-node-max="1" master-max="1" master-node-max="1" notify="true" # meta为定义元数据属性
[root@web1 ~]# crm status # 状态查看
…
Online: [ web1 web2 ]
 
 Master/Slave Set: ms_myst [myst]
     Masters: [ web2 ]
     Slaves: [ web1 ]

5、定义文件系统资源

(1) 创建目录,两个节点同时创建

[root@web1 ~]# mkdir /mydata

(2) 定义约束:必须要求先切换主从,而后才能挂载文件系统,而且文件系统必须跟主节点在一起。此时先定义资源

crm(live)configure# primitive mydata ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/mydata" fstype="ext4" op monitor interval=20 timeout=40 op start timeout=60 op stop timeout=60
crm(live)configure# verify

(3) 定义排列约束

crm(live)configure# colocation mydata_with_ms_myst_master inf: mydata ms_myst:Master
crm(live)configure# verify

(4) 定义顺序约束

crm(live)configure# order mydata_after_ms_mystor_master Mandatory: ms_myst:promote mydata:start # Mandatory强制,promote提升为主节点
crm(live)configure# verify
crm(live)configure# commit

(5) 进行查看

[root@web1 ~]# crm status
[root@web1 ~]# mount

 

1.1.8.2 再实现MariaDB

MariaDB应该在主节点上配置

 

1MariaDB准备

[root@web2 ~]# tar xf mariadb-5.5.43-linux-x86_64.tar.gz -C /usr/local/
[root@web2 ~]# cd /usr/local/
[root@web2 local]# ln -s mariadb-5.5.43-linux-x86_64/ mysql
[root@web2 local]# cd mysql
[root@web2 mysql]# groupadd -r -g 306 mysql
[root@web2 mysql]# useradd -r -g 306 -u 306 mysql
[root@web2 mysql]# mkdir /mydata/data
[root@web2 mysql]# chown -R mysql.mysql /mydata/data
[root@web2 mysql]# chown -R root.mysql ./*
[root@web2 mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/
data/       issue       lost+found/ passwd      
[root@web2 mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data/
[root@web2 mysql]# mkdir /etc/mysql
[root@web2 mysql]# cp support-files/my-large.cnf /etc/mysql/my.cnf
[root@web2 mysql]# vim /etc/mysql/my.cnf
thread_concurrency = 2
datadir = /mydata/data
innodb_file_per_table = on
skip_name_resolve = on
[root@web2 mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@web2 mysql]# chkconfig --add mysqld
[root@web2 mysql]# /etc/init.d/mysqld start
[root@web2 mysql]# /usr/local/mysql/bin/mysql
MariaDB [(none)]> GRANT ALL ON *.* TO ‘root‘@‘172.16.%.%‘ IDENTIFIED BY ‘123456‘;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> \q
[root@web2 mysql]# chkconfig mysqld off
[root@web2 mysql]# /etc/init.d/mysqld stop
[root@web2 mysql]# crm node standby # 让web1成为主节点,接下来就配置web1的MariaDB
[root@web2 mysql]# crm node online # web1配置基本相同,只是不用初始化

2、将MariaDB定义成资源

(1) 定义ip资源

crm(live)configure# primitive myip ocf:heartbeat:IPaddr params ip="172.16.45.11" op monitor interval=10 timeout=20
crm(live)configure# verify

(2) 定义MariaDB资源

crm(live)configure# primitive myserver lsb:mysqld op monitor interval=20 timeout=20
crm(live)configure# verify

(3) myip和主节点定义在一起

crm(live)configure# colocation myip_with_ms_myst_master inf: myip ms_myst:Master

(4) myservermydata定义在一起

crm(live)configure# colocation myserver_with_mydata inf: myserver mydata

(5) 定义先挂载,后启动myserver

crm(live)configure# order myserver_after_mydata Mandatory: mydata:start myserver:start
crm(live)configure# verify

(6) 定义myip先与myserver启动

crm(live)configure# order myserver_after_myip Mandatory: myip:start myserver:start
crm(live)configure# verify

3、通过远程主机安装mysql客户端后登录MariaDB

[root@web4 ~]# mysql -uroot -h172.16.45.11 –p

(1) 不要断开,切换主从后,看是不是还处于连接状态。

(2) mysql上创建表,切换主从后,看表是否存在。


drbd

标签:linux ha drbd

原文地址:http://10042224.blog.51cto.com/10032224/1658057

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!