一、准备

1.1 硬件要求

为了充分保证系统的稳定性和性能,要求两台DRBD服务器硬件配置尽量一致,尤其是硬盘数量和大小。机器的RAID卡需要带电池,缓存越大,性能越好。一般情况下,建议做RAID10,如果出于空间要求的考虑,需要做RAID5,建议最好能有1-2块硬盘的热备盘。

1.2 系统要求和分区划分

系统要求使用centos 6.x,安装完成后升级到最新版本,安装的时候,不要使用LV,建议/boot分区200M,/ 分区100G、swap分区和内存一样大小,剩余空间给DRBD使用,划分单独的硬盘空间。系统安装软件没有特殊要求,建议除了开发工具和基本的管理软件,其他软件一律不安装。

1.3 网络环境

网络要求全部千兆环境,DRBD服务器至少有6块网卡,3块网卡绑定供DRBD同步使用,2块网卡绑定,用于系统存储网络,剩余一块分配管理网络ip,用于系统管理。网卡绑定建议使用mode 0的方式,DRBD同步的网卡绑定脚本如下:

cat </etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0

BOOTPROTO=none

IPADDR=10.10.10.233

NETMASK=255.255.255.0

TYPE=Ethernet

BONDING_OPTS="mode=0 miimon=100"

EOF

cat << EOF >/etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1

BOOTPROTO=none

ONBOOT=yes

TYPE=Ethernet

MASTER=bond0

SLAVE=yes

EOF

cat << EOF >/etc/sysconfig/network-scripts/ifcfg-p2p1

DEVICE=p2p1

BOOTPROTO=none

ONBOOT=yes

TYPE=Ethernet

MASTER=bond0

SLAVE=yes

EOF

cat << EOF >/etc/sysconfig/network-scripts/ifcfg-p2p2

DEVICE=p2p2

BOOTPROTO=none

ONBOOT=yes

TYPE=Ethernet

MASTER=bond0

SLAVE=yes

EOF

二、部署

2.1 DRBD软件安装

1) 升级系统到最新

yum update -y

2) 编辑/etc/hosts,将两台机器的hostname加进去

3) 安装epel源

rpm -Uvh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-7.noarch.rpm

4) 下载安装drbd源码包:

安装相关组件

mkdir -p /root/rpmbuild/SOURCES

yum -y install gcc make automake autoconf flex rpm-build kernel-devel

yum -y install libxslt

yum -y install docbook-dtds docbook-style-xsl help2man

下载DRBD软件包

wget http://oss.linbit.com/drbd/8.4/drbd-8.4.2.tar.gz

# 解压源码包:

tar zxvf drbd-8.4.2.tar.gz

编译支持并安装:

cd drbd*

./configure --with-km --with-utils --with-heartbeat --with-pacemaker

./configure --enable-spec --with-km --with-utils --with-heartbeat --with-pacemaker

make rpm

make km-rpm

\cp -f ../drbd*.tar.gz `rpm -E %_sourcedir`

rpmbuild -bb drbd.spec

rpmbuild -bb drbd-kernel.spec

cd /root/rpmbuild/RPMS/x86_64/

yum -y install ./drbd-*

modprobe drbd

5) 编辑DRBD配置文件

vi /etc/drbd.conf (注意,两边需要一样)

include "/etc/drbd.d/global_common.conf";

include "/etc/drbd.d/*.res";

global {

usage-count yes;

}

common {

protocol C;

disk {

on-io-error detach;

fencing resource-only;

}

net {

cram-hmac-alg sha1;

shared-secret "a6a0680c40bca2439dbe48343ddddcf4";

}

syncer {

rate 300M;

}

handlers {

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

after-resync-target "/usr/lib/drbd/crm-unfence-peer.sh";

pri-on-incon-degr "echo b > /proc/sysrq-trigger";

}

}

resource iscsivg01 {

device /dev/drbd1;

disk /dev/sda6;

meta-disk internal;

net {

max-buffers 8192;

max-epoch-size 8192;

sndbuf-size 2048k;

unplug-watermark 127;

}

disk {

disk-barrier no;

disk-flushes no;

resync-rate 150M;

c-plan-ahead 200;

c-max-rate 200M;

c-min-rate 25M;

c-fill-target 15M;

}

on drbd1 {

address 10.10.10.151:7898;

}

on drbd2 {

address 10.10.10.151:7898;

}

}

注意:

c-max-rate 200M;

c-min-rate 25M;

需要保持平衡,否则会造成同步速率不能上去。

6) 创建drbd资源,两个节点都要操作

注意:共享磁盘不能有任何文件系统,如果有,需要清除

/etc/init.d/drbd stop

dd if=/dev/zero of=/dev/sda6l bs=4M count=5

/etc/init.d/drbd restart

drbdadm create-md iscsivg01

drbdadm adjust iscsivg01

/etc/init.d/drbd restart

chkconfig drbd on

以上命令需要2边都执行,然后再主节点启动资源

drbdadm primary iscsivg01

cat /proc/drbd

如果出现脑裂,在备用节点上执行

drbdadm invalidate iscsivg01

2.2 安装设置COROSYNC

安装

yum -y install pacemaker

配置认真文件

cat << EOF >/etc/ha.d/authkeys

auth 1

1 sha1 secret

EOF

chmod 600 /etc/ha.d/authkeys

编辑配置文件

cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf

vi /etc/corosync/corosync.conf

# 内容

aisexec {

user: root

group: root

}

service {

name: pacemaker

ver: 0

use_mgmtd: yes

}

totem {

version: 2

secauth: off

threads: 0

interface {

ringnumber: 0

# Specify network address for inter-connection

bindnetaddr: 10.10.10.0

mcastaddr: 226.94.1.1

mcastport: 5405

}

}

logging {

fileline: off

to_stderr: no

to_logfile: yes

to_syslog: yes

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

debug: off

timestamp: on

logger_subsys {

subsys: AMF

debug: off

}

}

amf {

mode: disabled

}

chown -R hacluster. /var/log/cluster

/etc/rc.d/init.d/corosync restart

chkconfig corosync on

2.3 LVM配置

vi /etc/lvm/lvm.conf

filter = [ "r|/dev/sdb.*|" ]

write_cache_state = 0

rm /etc/lvm/cache/* -r -f

脚本如下

sed -i s/write_cache_state\ =\ 1/write_cache_state\ =\ 0/g /etc/lvm/lvm.conf

rm /etc/lvm/cache/* -r -f

2.4 IscsiTarget设置

开始部署:

主节点drbd-M 上基于刚创建的 drbd1,创建 pv,创建 VG

pvcreate /dev/drbd1

vgcreate iscsivg01 /dev/drbd1

lvcreate -L 16G -n LUN1 iscsivg01

lvcreate -L 2G -n LUN2 iscsivg01

yum install scsi-target-utils.x86_64 -y

/etc/init.d/tgtd start

chkconfig tgtd on

tgtd服务器必须开启

2.5 crm配置

crm

configure

property stonith-enabled="false"

property no-quorum-policy="ignore"

property default-resource-stickiness="200"

commit

primitive p_drbd_iscsivg01 ocf:linbit:drbd \

params drbd_resource="iscsivg01" \

op monitor interval="29" role="Master" \

op monitor interval="31" role="Slave"

primitive p_ip_alicebob01 ocf:heartbeat:IPaddr2 \

params ip="10.10.10.240" cidr_netmask="24" \

op monitor interval="10s"

primitive p_lu_iscsivg01_lun1 ocf:heartbeat:iSCSILogicalUnit \

params target_iqn="iqn.2001-04.com.example:storage.example.iscsivg01" lun="1" path="/dev/iscsivg01/LUN1" scsi_id="1234567890123456" \

op monitor interval="10s"

primitive p_lu_iscsivg01_lun2 ocf:heartbeat:iSCSILogicalUnit \

params target_iqn="iqn.2001-04.com.example:storage.example.iscsivg01" lun="2" path="/dev/iscsivg01/LUN2" scsi_id="1234567890123457" \

op monitor interval="10s"

primitive p_lvm_iscsivg01 ocf:heartbeat:LVM \

params volgrpname="iscsivg01" \

op monitor interval="30s"

primitive p_target_iscsivg01 ocf:heartbeat:iSCSITarget \

params iqn="iqn.2001-04.com.example:storage.example.iscsivg01" tid="1" incoming_username="iscsi" incoming_password="1qa2ws3ed4rF" \

op monitor interval="10s"

group rg_iscsivg01 p_lvm_iscsivg01 p_target_iscsivg01 p_lu_iscsivg01_lun1 p_lu_iscsivg01_lun2 p_ip_alicebob01 \

meta target-role="Started"

ms ms_drbd_iscsivg01 p_drbd_iscsivg01 \

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

colocation c_iscsivg01_on_drbd inf: rg_iscsivg01 ms_drbd_iscsivg01:Master

order o_drbd_before_iscsivg01 inf: ms_drbd_iscsivg01:promote rg_iscsivg01:start

commit

如果要清除crm的配置文件

crm(live)configure # erase

crm(live)configure# commit

如果要清除pacemaker的所有设置:

/etc/rc.d/init.d/corosync stop # stop

rm -f /var/lib/heartbeat/crm/* # remove all

/etc/rc.d/init.d/corosync start # start

三、常见故障处理

3.1 脑裂处理

在备机上执行

drbdadm invalidate iscsivg01

drbdadm -- --discard-my-data connect all

在需要保留数据的主机上执行

drbdadm connect all

在drbd.conf添加一下参数,可以自动解决脑裂问题

net {

after-sb-0pri discard-older-primary;

after-sb-1pri call-pri-lost-after-sb;

after-sb-2pri call-pri-lost-after-sb;

}

3.2 硬盘故障

因为底层做了raid配置,有硬件故障,直接更换硬盘,会自动同步数据。

3.3 一个节点故障的情况

一台节点故障的情况包括以下情况:

a) 物理故障;

b) 同时有多块硬盘故障,造成数据丢失;

c) 系统损坏不可修复。

解决方法:

找一台完全一样的机器,至少要保证硬盘数量和大小一致,安装系统,配置和故障机同样的ip,安装drbd corosync软件,保证配置都一样,执行命令,

drbdadm -- --discard-my-data connect all

drbdadm invalidate iscsivg01

启动相关服务,就会自动开始同步,但是同步的时候会影响整个系统的性能。


欢迎加我微信(ID:xiaolikvm)一起交流。欢迎加入云技术社区KVM/QEMU技术交流QQ,请加QQ:502207183,注明姓名,城市,及要加入KVM群。