高可用集群corosync+pacemaker+drbd+httpd----手动配置篇

共享存储高可用方案 -----DRBD

Drbd  :Distributed Replicated Block Device

高可用集群中的文件共享方案之一

共享存储的常见实现方式

DAS:直接附加存储 Direct attached storage:通过专用线缆直接连接至主板存储控制器接口的设备成为直接附加存储.,如外置的raid阵列

并行口: IDE  SCSI

两种接口的区别:

ide接口的存取过程:

首先将从文件的读取说起;当用户空间进程要读写文件时首先向内核发起系统调用,然后进程有用户模式切换至内核模式,内核调用驱动程序使用特定的协议去驱动硬件并将数据按block块的方式读入内核空间的缓冲区,当数据准备完成再将数据复制到用户空间的内存中,然后通知内核空间进程数据准备完毕可以使用,此时有内核模式转换为用户模式,在这个过程中,需要cpu参与数据的寻址,控制信号传输,内存寻址等等会消耗cpu时间

而scsi本身就叫做小型计算机系统接口,本身就含有cpu等硬件设备,可以节省主机cpu时间,系统当读取文件时,系统直接将scsi协议的数据直接交由scsi卡去处理就行这样可以大大节省cpu时间占用,提高效率.这也是为甚么scsi接口的硬盘要比IDE接口硬盘贵的原因通常scsi接口的对cpu的占用率大约为IDE接口占用率的10%左右.在接口方面一块icsi可以接7(窄带)块或15(宽带)块硬盘..其中窄带总线接口有八个口其中一个接终结器.所谓“终结”就是在最后一个SCSI设备上设置一个跳线或安装一个终结器,通知SCSI控制器SCSI总线到此处就结束了

时至今日scsi一个接口以经可以接一块scsi卡而不仅仅是一块盘,这样就组成了scsi的存贮网络 总线上的每一个口称为一个target每个口上磁盘被记作一个lun (逻辑单元号)

 串行口SATA    SAS    USB

NAS:network attached storage:

在一个网络内以服务的形式提供存储.例如NFS,Samba等此时提供的存储是文件系统级别的

SAN:Storage Area Network

由于SCSI协议的传输依赖于特定的传输线缆,为了实现更远距离的传输可以将ICSI协议封装的数据,再以网络传输协议进行第二次封装借助于网线进行数据传输,以提高传输距离另一端则有网络接口卡接受下来,并理解scsi协议存入存储设备,因此后端的存储设备可以是任何形式,不局限于scsi硬盘.这样所提供的为块级别的存储,因为前端并不需要理解整个存储的传送过程.在其开来自己所连接的就是一块scsi硬盘,可以对硬盘进行格式化等操作,所以此种方式提供的是块级别的存储

DRBD:原理图

 高可用集群corosync+pacemaker+drbd+httpd----手动配置篇_第1张图片

当数据到达缓存或缓冲层时数据会分流一份写入本地磁盘,另一份将通过drbd设备发送至网络,传输到远端节点,远端节点的drbd设备接受到数据后将数据写入磁盘.在这个过程中

数据只发送至本地tcp/ip协议栈就认为数据写完成此时称作Protocol A 

数据发送至远端的tcp/ip协议栈就认为数据写完成此时称作Protocol B

数据直到存储到远端磁盘才认为数据写完成此时称作Protocol C

 

工作模型为

1,master/secondary:此模式下只有主节点可读写 从节点不能读写也不能挂载

2,master/master:双主模型,此模式下要借助高可用集群文件系统实现读写

 

DRBD安装

注意安装包必须与系统的发行版本号(uname -r)一致

下载地址为ftp://rpmfind.net/linux/atrpms

 

drbd-8.4.3-33.el6.x86_64.rpm                    用户工具

drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm   内核模块

 

[root@localhost~]#rpm  -ih  \

drbd-8.4.3-33.el6.x86_64.rpm  drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm \ 

drbd-8.4.3-33.el6.x86_64.rpm \

warning:: Header V4 DSA/SHA1 Signature, key ID 66534c2b: NOKEY

########################################### [100%]

########################################### [ 50%]

########################################### [100%]

高可用集群corosync+pacemaker+drbd+httpd----手动配置篇_第2张图片

高可用集群corosync+pacemaker+drbd+httpd----手动配置篇_第3张图片

实验拓扑图:

高可用集群corosync+pacemaker+drbd+httpd----手动配置篇_第4张图片

分别在Node1和node2 安装两个包,并且修改hosts文件够解析主机名,并且时间同步

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

172.16.101.200 node1.centod.com node1

172.16.34.1    node2.centod.com node2

 

在两台主机上创建两个大小相同的分区假设2G

 

echo -e "n \n p \n 3 \n \n +2G \n w \n" |fdisk /dev/sda

 

配置文件为分段式的

1,global   {  usage-count no;   }是否通知drbd已经安装用于官方计数    全局配置段

2,command {

           Protocol C;

           Handlers {   }

           Startup  {   }

           Disk    { on-io-error detach }  一旦本地drbd设备对应对应资源的磁盘发生错误时的处理动作 detach表示移除 同步过程也无法进行

           Net     { cram-hmac-alg “sha1”;   认证算法

                     Shared-secret “hzm132”;  密码

                    }

            Syncer  {  rate 1000M; } 传输速率 drbd刚启动时要逐位对齐 要进行全盘同步

  } 共享段

 

 

没列出的使用默认配置

3,定义资源格式如下

   Vim  /etc/drbd.d/web.res

Resource web {

  On node1.centod.com {

     Device   /dev/drbd0;

     Disk     /dev/sdb3;

     Address  172.16.101.200:7789;

     Meta-disk internal;

     }

 On node2.centod.com {

     Device /dev/drbd0;

     Disk  /dev/sdb3;

     Address 172.16.34.1;

     Meta-disk internal;

     }

分别在两台主机执行初始化:

Drbdadm create-md web

[need to type 'yes' to confirm] yes

 

Writing meta data...

initializing activity log

NOT initializing bitmap

lk_bdev_save(/var/lib/drbd/drbd-minor-0.lkbd) failed: No such file or directory

New drbd meta data block successfully created.

lk_bdev_save(/var/lib/drbd/drbd-minor-0.lkbd) failed: No such file or directory

 

此时初始化成功

然后在两台主机启动drbd服务

 

[root@localhost ~]# service drbd start

Starting DRBD resources: [

create res: web

prepare disk: web

adjust disk: web

adjust net: web

]

..........

***************************************************************

DRBD's startup script waits for the peer node(s) to appear.

- In case this node was already a degraded cluster before the

reboot the timeout is 0 seconds. [degr-wfc-timeout]

- If the peer was available before the reboot the timeout will

expire after 0 seconds. [wfc-timeout]

(These values are for resource 'web'; 0 sec -> wait forever)

To abort waiting enter 'yes' [  14]: 

.查看状态

cat /proc/drbd

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by gardner@, 2013-11-29 12:28:00

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:2103412   

刚启动时默认为Secondary/Secondary模式

强制提升其中一个为主节点

 

[root@localhost ~]# drbdadm primary --force web

[root@localhost ~]# cat /proc/drbd

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by gardner@, 2013-11-29 12:28:00

0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r---n-

ns:217216 nr:0 dw:0 dr:224928 al:0 bm:13 lo:2 pe:3 ua:8 ap:0 ep:1 wo:f oos:188837

[=>..................] sync'ed: 10.4% (1888372/2103412)K 开始同步

finish: 0:00:26 speed: 71,680 (71,680) K/sec

 

查看状态

[root@localhost ~]# cat /proc/drbd

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by gardner@, 2013-11-29 12:28:00

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

ns:2103412 nr:0 dw:0 dr:2104084 al:0 bm:129 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

此时以为主从模式

格式化主节点

[root@localhost ~]# mke2fs -t ext4 /dev/drbd0

mke2fs 1.41.12 (17-May-2010)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=0 blocks, Stripe width=0 blocks

131648 inodes, 525853 blocks

26292 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=541065216

17 block groups

32768 blocks per group, 32768 fragments per group

7744 inodes per group

Superblock backups stored on blocks: 

32768, 98304, 163840, 229376, 294912

 

Writing inode tables: done                            

Creating journal (16384 blocks): done

Writing superblocks and filesystem accounting information: done

 

This filesystem will be automatically checked every 39 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

 

挂载主节点并写入数据

[root@localhost ~]# mount /dev/drbd0 /mnt

[root@localhost ~]# cp /etc/issue /mnt

[root@localhost ~]# ls /mnt

issue  lost+found

 

查看是否数据已经同步

卸载主节点设为从节点

[root@localhost ~]# umount /dev/drbd0

[root@localhost ~]# drbdadm secondary web

[root@localhost ~]# cat /proc/drbd

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by gardner@, 2013-11-29 12:28:00

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

ns:2202732 nr:0 dw:99320 dr:2104805 al:27 bm:129 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

 

将node2提升为主节点上挂载设备查看是否有数据

[root@node2 ~]# drbdadm primary web

[root@node2 ~]# cat /proc/drbd

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by gardner@, 2013-11-29 12:28:00

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

ns:0 nr:2202732 dw:2202732 dr:672 al:0 bm:129 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

[root@node2 ~]# mount /dev/drbd0 /mnt

[root@node2 ~]# ls /mnt

issue  lost+found

至此实验成功

 

http+corosync+pacemaker+drbd实现基于drbd存储的高可用集群

实验环境为centos6.5 使用上面两台主机继续进行下面的配置

首先在两台主机安装高可用集群套件:

[root@localhost ~]# yum install corosync pacemaker

安装高可用命令行配置工具crmsh 依赖于pssh  redhat-rpm-config

yum install crmsh-1.2.6-4.el6.x86_64.rpm \

pssh-2.3.1-2.el6.x86_64.rpm \

redhat-rpm-config-9.0.3-42.el6.centos.noarch.rpm \

 

Corosync配置文件为:

compatibility: whitetank

totem {

        version: 2

        secauth: on

        threads: 0

        interface {

                ringnumber: 0

                bindnetaddr: 172.16.0.0

                mcastaddr: 226.194.231.1

                mcastport: 5405

                ttl: 1

        }

}

 

logging {

        fileline: off

        to_stderr: no

        to_logfile: yes

        to_syslog: no

        logfile: /var/log/cluster/corosync.log

        debug: off

        timestamp: on

        logger_subsys {

                subsys: AMF

                debug: off

        }

}

amf {

        mode: disabled

}

service {

        ver: 0

        name: pacemaker

        # user_mgmtd: yes

}

aisexec {

        user: root

        group: root

}

                 

 

生成秘钥

corosync-keygen

如果此时熵池中数据不够另起一终端敲键盘

 

配置高可用资源

[root@node1 corosync]# crm

crm(live)# status

Last updated: Thu Sep 18 16:12:48 2014

Last change: Thu Sep 18 16:07:11 2014 via crmd on node2.centod.com

Stack: classic openais (with plugin)

Current DC: node2.centod.com - partition with quorum

Version: 1.1.10-14.el6-368c726

2 Nodes configured, 2 expected votes

0 Resources configured

Online: [ node1.centod.com node2.centod.com ]

 

 

Vip资源代理

crm(live)# configure

crm(live)configure# primitive vip ocf:heartbeat:IPaddr params ip=172.16.101.220

crm(live)configure# verify 

Httpd资源代理

crm(live)configure# primitive httpd lsb:httpd op monitor interval=20s timeout=20s op start timeout=20s op stop timeout=20s

crm(live)configure# verify 

定义drbd主资源

crm(live)configure# primitive drbd ocf:linbit:drbd params drbd_resource=web op monitor role=Master interval=20s timeout=20s op monitor role=Slave interval=20s timeout=20s op start timeout=240s op stop timeout=100s

 

crm(live)configure# verify 

 

定义克隆资源同时会指定主从资源

crm(live)configure# master ms-webdrbd drbd meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=ture

 

crm(live)configure# verify 

 

定义存储资源

crm(live)configure# primitive httpd-storage ocf:heartbeat:Filesystem params device=/dev/drbd0 directory=/var/www/html fstype=etx4 op monitor interval=20s timeout=40s op start timeout=60s op stop timeout=60s

 

crm(live)configure# verify

定义位置约束关系

crm(live)configure# colocation storage-nrbd-master-httpd-vip inf: httpd-storage ms-webdrbd:Master httpd vip

crm(live)configure# verify 

定义顺序约束

crm(live)configure# order nrbd-storage-vip-httpd inf: ms-webdrbd:promote httpd-storage:start vip httpd

crm(live)configure# verify 

 

无误提交

Commit

查看结果

Crm configure show 

node node2.centod.com

node node3.centod.com

primitive drbd ocf:linbit:drbd \

        params drbd_resource="web" \

        op monitor role="Master" interval="20s" timeout="30s" \

        op monitor role="Slave" interval="40s" timeout="30" \

        op start timeout="240s" interval="0" \

        op stop timeout="100s" interval="0"

primitive httpd lsb:httpd \

        op monitor interval="20s" timeout="20s" \

        op start timeout="20s" interval="0" \

        op stop timeout="20s" interval="0" \

        meta target-role="Started"

primitive httpd-storage ocf:heartbeat:Filesystem \

        params device="/dev/drbd0" directory="/var/www/html" fstype="ext4" \

        op monitor interval="20s" timeout="40s" \

        op start timeout="60s" interval="0" \

        op stop timeout="60s" interval="0" \

        meta target-role="Started"

primitive vip ocf:heartbeat:IPaddr \

        params ip="172.16.101.220" \

        meta target-role="Started"

ms ms-webdrbd drbd \

        meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true" target-role="Started"

colocation storage-nrbd-master-httpd-vip inf: httpd-storage ms-webdrbd:Master httpd vip

order nrbd-storage-vip-httpd inf: ms-webdrbd:promote httpd-storage:start vip httpd

property $id="cib-bootstrap-options" \

        dc-version="1.1.10-14.el6-368c726" \

        cluster-infrastructure="classic openais (with plugin)" \

        expected-quorum-votes="2" \

        stonith-enabled="false" \

        no-quorum-policy="ignore"

查看高可用集群状态信息

Online: [ node1.centod.com ]

OFFLINE: [ node2.centod.com ]

 

 vip(ocf::heartbeat:IPaddr):Started node1.centod.com 

 httpd(lsb:httpd):Started  node1.centod.com 

 Master/Slave Set: ms-webdrbd [drbd]

     Masters: [ node1.centod.com ]

     Stopped: [ node2.centod.com  ]

httpd-storage(ocf::heartbeat:Filesystem):Started node1.centod.com