drbd+cronsync高可用mysql一:drbd安装配置使用

DRBD是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。数据镜像:实时、透明、同步(所有服务器都成功后返回)、异步(本地服务器成功后返回)。DRBD的核心功能通过Linux的内核实现,最接近系统的IO栈,但它不能神奇地添加上层的功能比如检测到EXT3文件系统的崩溃。DRBD的位置处于文件系统以下,比文件系统更加靠近操作系统内核及IO栈。


注意:drbd硬盘格式化只需要primary上格式化挂载,secondary上挂载硬盘需要把primary设置成secondary,同时把secondary提升成primary。同一个资源中有两个primary就会发成脑裂现象;

环境

主机名和ntp及hostname环境:

node1 192.168.100.10 Primary              

node2 192.168.100.20 Secondary

在两台主机上分别添加一块10G硬盘sda3作为DRBD,并在本地系统创建/data目录,不做挂载和格式化操作。



二.DRBD的安装配置:


1.安装依赖包:(Primary,Secondary)
# yum install gcc gcc-c++ make glibc flex kernel-devel kernel-headers
 
2.安装DRBD:(Primary,Secondary都要做这步操作)
# wget http://oss.linbit.com/drbd/8.4/drbd-8.4.4.tar.gz
# tar -xvf drbd-8.4.4.tar.gz
# cd drbd-8.4.4
# ./configure --prefix=/usr/local/drbd-8.4.4 --with-km
# make KDIR=/usr/src/kernels/2.6.32-279.el6.x86_64/
# make install
# cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/rc.d/init.d
# chkconfig --add drbd
# chkconfig drbd on
加载DRBD模块:
# modprobe drbd
查看DRBD模块是否加载到内核:
# lsmod |grep drbd
2.配置文件(Primary,Secondary)
global { usage-count yes;}
common { syncer { rate 10M; }}
resource r0{
protocol C;
 startup { wfc-timeout 0; degr-wfc-timeout 120;}
disk { on-io-error detach;}
net{
timeout 60;
connect-int 10;
ping-int 10;
max-buffers 2048;
max-epoch-size 2048;
}
syncer { rate 30M;}
 
on node1{
device /dev/drbd0;
disk /dev/sda3;
address 192.168.100.10:7788;
meta-disk internal;
}
on node2{
device /dev/drbd0;
disk /dev/sda3;
address 192.168.100.20:7788;
meta-disk internal;
}
}




3,准备启动之前,需要分别在2个主机上的 空白分区上创建相应的元数据保存的数据块:
常见之前现将两块空白分区彻底清除数据
分别在两个主机上执行
#dd  if=/dev/zero  of=/dev/sdbX  bs=1M  count=128

识别硬盘(Primary,Secondary都做这一步)
kpartx -vf /dev/sda
partx -a /dev/sda



4.创建DRBD设备并激活ro资源:(Primary,Secondary都做这一步)
# mknod /dev/drbd0 b 147 0
# drbdadm create-md r0

等待片刻,显示success表示drbd块创建成功
----------------
Writing meta data...
initializing activity log
NOT initializing bitmap
New drbd meta data block successfully created.



再次输入该命令:
# drbdadm create-md r0
成功激活r0


5.启动DRBD服务:(Primary,Secondary)
# service drbd start
注:需要主从共同启动方能生效



 
6。查看状态:(Primary,Secondary)
# cat /proc/drbd
----------------
# cat /proc/drbd
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by [email protected],
 
2013-05-27 20:45:19
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:1060184
----------------
或
# service drbd status
----------------
drbd driver loaded OK; device status:
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by [email protected],
 
2013-05-27 20:45:19
m:res cs ro ds p mounted fstype
0:r0 Connected Secondary/Secondary Inconsistent/Inconsistent C
----------------
这里ro:Secondary/Secondary表示两台主机的状态都是备机状态,ds是磁盘状态,显示的状态内
 
容为“不一致”,这是因为DRBD无法判断哪一方为主机,应以哪一方的磁盘数据作为标准。




7.将node1主机配置为主节点:(Primary) 
# drbdsetup /dev/drbd0 primary --force
分别查看主从DRBD状态:

分别查看主从DRBD状态:
# service drbd status(Primary/secondary)
--------------------
drbd driver loaded OK; device status:
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by [email protected],
 
2013-05-27 20:45:19
m:res cs ro ds p mounted fstype
0:r0 Connected Primary/Secondary UpToDate/UpToDate C

8.挂载DRBD:(Primary)
 
从刚才的状态上看到mounted和fstype参数为空,所以我们这步开始挂载DRBD到系统目录
# mkfs.ext4 /dev/drbd0
# mount /dev/drbd0 /data
注:Secondary节点上不允许对DRBD设备进行任何操作,包括只读,所有的读写操作只能在
 
Primary节点上进行,只有当Primary节点挂掉时,Secondary节点才能提升为Primary节点,继续


9.模拟node1故障,DRBD2接管并提升为Primary
umount /data
[root@node1 drdb-8.4.4]#  drbdsetup /dev/drbd0 secondary

[root@node2 data]#  drbdsetup /dev/drbd0 primary
mount /dev/drbd0 /data

主配置文件内容注解:

# vim /etc/drbd.conf

是否参加DRBD使用者统计.默认是yes

       global { usage-count yes;}

       # 设置主备节点同步时的网络速率最大值,单位是字节.

       common { syncer { rate 10M; } }

       # 一个DRBD设备(:/dev/drbdX),叫做一个"资源".里面包含一个DRBD设备的主备节点的

       # 相关信息.

       #

       resource r0 {

            # 使用协议C.表示收到远程主机的写入确认后,则认为写入完成.

            protocol C;

            #startup { wfc-timeout 0; degr-wfc-timeout 120; }

            disk { on-io-error detach; }

            syncer { rate 10M; }

            net {

                 # 设置主备机之间通信使用的信息算法.

                 cram-hmac-alg sha1;

                 shared-secret "FooFunFactory";

            }

            # 每个主机的说明以"on"开头,后面是主机名.在后面的{}中为这个主机的配置.

            on server01{

                 # /dev/drbd1使用的磁盘分区是/dev/hdb1

                 device    /dev/drbd1;

                 disk      /dev/sdc5;

                 # 设置DRBD的监听端口,用于与另一台主机通信

                 address   192.168.0.136:7898;

                 #address   10.0.0.194:7898;           

                 meta-disk   internal;

                 #flexible-meta-disk internal;

            }

            on server02 {

                 device    /dev/drbd1;

                 disk      /dev/sdb5;

                 address   192.168.0.137:7898;

                 #address   10.0.0.195:7898;

                 meta-disk   internal;

                 #meta-disk  /dev/xvdb5[0];

                 #flexible-meta-disk internal;

            }

       }                             

 



drbd -命令大全

为了能够配置和管理drbd的资源,drbd提供了一些管理工具与内核模块进行通信

drbdadm:高级的DRBD程序管理套件工具。它从配置文件/etc/drbd.conf中获取所有配置参数。drbdadm为drbdsetup和drbdmeta两个命令充当程序的前端应用,执行drbdadm实际是执行的drbdsetup和drbdeta两个命令。

drbdsetup:可以让用户配置已经加载在内核中运行的DRBD模块,它是底层的DRBD程序管理套件工具。使用该命令时,所有的配置参数都需要直接在命令行中定义,虽然命令很灵活,但是大大的降低了命令的简单易用性,因此很多的用户很少使用drbdsetup。

drbdmeta:允许用户创建、转储、还原和修改drbd的元数据结构。这个命令也是用户极少用到。


1)创建DRBD设备并激活ro资源:(Primary,Secondary都做这一步)

# mknod /dev/drbd0 b 147 0

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

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

# drbdadm create-md web

3)启动服务,在Node1和Node2上分别执行:

/etc/init.d/drbd start


4)查看启动状态:

# drbd-overview 或者service drbd status 或者cat /proc/drbd

version: 8.3.8 (api:88/proto:86-94)

GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by [email protected], 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命令来查看:

# drbd-overview 

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

5)设置主节点:从上面的信息中可以看出此时两个节点均处于Secondary状态。于是,我们接下来需要将其中一个节点设置为Primary。在要设置为Primary的节点上执行如下命令:

# drbdsetup /dev/drbd0 primary �Co

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

     # drbdadm -- --overwrite-data-of-peer primary web

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

# drbd-overview 

  0:web  SyncSource Primary/Secondary UpToDate/Inconsistent C r---- 

    [============>.......] sync'ed: 66.2% (172140/505964)K delay_probe: 35

    

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

# drbd-overview 

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

创建文件系统

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

# mke2fs -j -L DRBD /dev/drbd0

# mkdir /mnt/drbd 

# mount /dev/drbd0 /mnt/drbd

7)测试切换Primary和Secondary节点

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

Node1:

# cp -r /etc/drbd.* /mnt/drbd  

# umount /mnt/drbd

# drbdadm secondary web

查看状态:

# drbd-overview 或者service drbd status 或者cat /proc/drbd


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

Node2:

# drbdadm primary r0(资源名)

# drbd-overview 

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

# mkdir /mnt/drbd

# mount /dev/drbd0 /mnt/drbd

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

# ls /mnt/drbd

drbd 8.4中第一次设置某节点成为主节点的命令

# drbdadm primary --force resource或者drbdadm /dev/drbd0  primary 




脑裂处理

在node2处理方法: 

[root@node2 /]# drbdadm disconnect r0 

[root@node2 /]# drbdadm secondary r0 

[root@node2 /]# drbdadm -- --discard-my-data r0 

做完以上三步,你发现你仍然无法启动node2上的drbd服务;上次一客户我个人估计就是这个问题,把DRBD重启后,无法启动DRBD。 

 

 

需要在node1上重连接资源: 

[root@node1 ~]# drbdadm connect r0 

 

再次启动node2上的drbd服务,成了。 

[root@node2 /]# service drbd start 

Starting DRBD resources: [ ]. 




配置DRBD出现错误总结

Q1.’ha’ ignored, since this host (node2.centos.bz) is not mentioned with an ‘on’ keyword.?

Error Meaage:

执行指令 drbdadm create-md ha 时出现如下错误信息

'ha' ignored, since this host (node2.centos.bz) is not mentioned with an 'on' keyword. 
Ans:

因为在 drbd 设定 drbd.conf 中 on 本来写的是 node1、node2 而以,将node1和node2分别改为node1.centos.bz,node2.centos.bz。

Q2.drbdadm create-md ha: exited with coolcode 20?

Error Meaage:

执行指令 drbdadm create-md ha 时出现如下错误信息

open(/dev/hdb1) failed: No such file or directory 
 Command 'drbdmeta 0 v08 /dev/hdb1 internal create-md' terminated with exit coolcode 20 
 drbdadm create-md ha: exited with coolcode 20

Ans:

因为忘了执行 fdisk /dev/hdb 指令建立分割区所造成,如下将 /dev/hdb 建立分割区后指令即可正常执行

#fdisk /dev/hdb //准备为 hdb 建立分割区
The number of cylinders for this disk is set to 20805.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): n //键入 n 表示要建立分割区
Command action
e extended
p primary partition (1-4)
p //键入 p 表示建立主要分割区
Partition number (1-4): 1 //键入 1 为此主要分割区代号
First cylinder (1-20805, default 1): //开始磁柱值,按下 enter 即可
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-20805, default 20805): //结束磁柱值,按下 enter 即可
Using default value 20805
Command (m for help): w //键入 w 表示确定执行刚才设定
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@node1 yum.repos.d]# partprobe //使刚才的 partition table 变更生效
Q3.drbdadm create-md ha: exited with coolcode 40?

Error Meaage:

执行指令 drbdadm create-md ha 时出现如下错误信息

Device size would be truncated, which 
 would corrupt data and result in 
 'access beyond end of device' errors. 
 You need to either 
    * use external meta data (recommended) 
    * shrink that filesystem first 
    * zero out the device (destroy the filesystem) 
 Operation refused. 
 Command 'drbdmeta 0 v08 /dev/hdb1 internal create-md' terminated with exit coolcode 40 
 drbdadm create-md ha: exited with coolcode 40

Ans:

使用 dd 指令将一些资料塞到 /dev/hdb 后再执行 drbdadm create-md ha 指令即可顺利执行

#dd if=/dev/zero of=/dev/hdb1 bs=1M count=100
Q4.DRBD 状态始终是 Secondary/Unknown?

Error Meaage:

Node1、Node2 主机启动 DRBD 后状态始终是 Secondary/Unknown

#service drbd status
drbd driver loaded OK; device status:
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by [email protected], 2010-06-04 08:04:16
m:res cs ro ds p mounted fstype
0:ha WFConnection Secondary/Unknown Inconsistent/DUnknown C
Ans:

1、Node1、Node2 没有打开相对应的 Port,请开启相对应的 Port 或先把 IPTables 服务关闭即可。
2、可能发生了脑裂行为,一般出现在ha切换时,解决方法:
在一节点执行:
drbdadm secondary resource
drbdadm connect �Cdiscard-my-data resource
另一节点执行:
drbdadm connect resource
Q5.1: Failure: (104) Can not open backing device

Error Meaage:
执行drbdadm up r0时出现:

1: Failure: (104) Can not open backing device. 
Command 'drbdsetup attach 1 /dev/sdb1 /dev/sdb1 internal' terminated with exit code 10

Ans:
可能因为你挂载了/dev/sdb1,执行umount /dev/sdb1即可。

你可能感兴趣的:(高可用,drbd,cronsync)