一、准备
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 <
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群。