前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >KVM虚拟化开源高可用方案(六)ISCSI ON DRBD搭建及常见故障处理

KVM虚拟化开源高可用方案(六)ISCSI ON DRBD搭建及常见故障处理

作者头像
力哥聊运维与云计算
发布2019-06-28 12:59:43
9890
发布2019-06-28 12:59:43
举报
文章被收录于专栏:力哥聊运维与云计算

一、准备

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 <<EOF >/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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012/11/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档