理论拓扑
环境准备:
N 台 Linux 测试服务器
操作系统版本 CentOS 6.5 32bit
***系统分区要求:需要为格式化的空分区***
IP 地址: mfsmaster:10.3.0.81 心跳 ip 192.168.1.11
mfsbackup:10.3.0.82 心跳 ip 192.168.1.12
#######All machine do it ############################
更改 yum 源
mv /etc/yum.repos.d/CentOS‐Base.repo /etc/yum.repos.d/CentOS‐Base.repo.backup cd /etc/yum.repos.d/ wget http://mirrors.163.com/.help/CentOS5‐Base‐163.repo yum makecache yum install ‐y kernel‐headers kernel‐devel
####################mfmaster config###################
vi /etc/sysconfig/network hostname=mfsmaster
vi /etc/hosts
#add line10.3.0.81 mfsmaster
10.3.0.82 mfsbackup
#########copy hosts file to 10.3.0.82################
scp /etc/hosts root@10.3.0.82:/etc/
##############mfsbackup config#####################
vi /etc/sysconfig/network
hostname=mfsbackup
####################download resource and scp to mfsbackup#############
mfsmaster
mkdir /usr/src/download
####download drdb##############
wget http://oss.linbit.com/drbd/8.4/drbd‐8.4.0.tar.gz
####download heartbeat##############
wget http://hg.linux‐ha.org/heartbeat‐STABLE_3_0/archive/STABLE‐3.0.4.tar.bz2 scp ‐a /usr/src/download root@10.3.0.82
############install drbd######################
tar zxvf drbd‐8.4.0.tar.gz
cd drbd‐8.4.0
./configure ‐‐prefix=/usr/local/drbd
make && make install
##########yum 源安装 drbd
yum install ‐y kmod‐drbd83 drbd83
检查 drbd 模块
lsmod | grep ‐i drbd drbd 228528 0
假如为空,需要导入 drbd 模块
modprobe drbd
vi /etc/drbd.conf
global { usage‐count yes; }
common { syncer { rate 50M; } }
resource r0 { protocol C;
net {
cram‐hmac‐alg sha1; shared‐secret "secret string";
} # every machine must be use the "on" beginon mfsmaster { # /dev/drbd1 use the "/dev/sda1"
device /dev/drbd1; disk /dev/sdb1;
# set DRBD port,used connection to other machine address 10.3.0.81:7898;
meta‐disk internal; }
on mfsbackup {
device /dev/drbd1;
disk /dev/sdb1;
address 10.3.0.82:7898;
meta‐disk internal;
}
} 初始化资源组
格式:drbdadm create‐md resource_name
drbdadm create‐md r0
###########初次运行提示信息###############
‐‐== Thank you for participating in the global usage survey ==‐‐ The server's response is:
you are the 12052th user to install this version
Writing meta data...
initializing activity log NOT initialized bitmap New drbd meta data block successfully created.
success
service drbd start ________________________________________________________________________
############提示信息#################
Starting DRBD resources: [
r0 Found valid meta data in the expected location, 1011671040 bytes into /dev/sdb1. d(r0) s(r0) n(r0) ]..........
*************************************************************** 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 'r0'; 0 sec ‐> wait forever) To abort waiting enter 'yes' [ 20]: . ________________________________________________________________________
cat /proc/drbd
________________________________________________________________________ version: 8.3.8 (api:88/proto:86‐94)
GIT‐hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010‐06‐04 08:04:16 1: 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:987896
对输出的含义解释如下:
ro 表示角色信息,第一次启动 drbd 时,两个 drbd 节点默认都处于 Secondary 状态,
ds 是磁盘状态信息,“Inconsistent/Inconsisten”,即为“不一致/不一致”状态,表示两个节 点的磁盘数据处于不一致状态。
Ns 表示网络发送的数据包信息。
Dw 是磁盘写信息
Dr 是磁盘读信息
在 MFSMASTER
设置主节点
初次运行
drbdadm ‐‐ ‐‐overwrite‐data‐of‐peer primary all
/sbin/drbdadm primary r0
主备节点切换
主备节点切换有两种方式,分别是停止 drbd 服务切换和正常切换,依次介绍:
停止 drbd 服务切换
1. 关闭主节点服务切换
此时挂载的 drbd 分区就自动在主节点卸载了,然后在备用节点执行切换命令: drbdadm primary all 此时会报错:
State change failed: (‐7) Refusing to be Primary while peer is not outdated Command 'drbdsetup 2 primary' terminated with exit code 11
因此,必须在备用节点执行如下命令:
drbdsetup /dev/drbd1 primary –o
或者 drbdadm ‐‐ ‐‐overwrite‐data‐of‐peer primary all
此时就可以正常切换了。 当在备用节点执行切换到主节点命令后,原来的主用节点自动变为备用节点。无需在主用节 点再次执行切换到备用节点的命令。
2.
正常切换
在主节点卸载磁盘分区, umount /mnt/mfs 然后执行 drbdadm secondary all 如果不执行这个命令,直接在备用节点执行切换到主节点的命令,会报错: 2: State change failed: (‐1) Multiple primaries not allowed by config Command 'drbdsetup 2 primary' terminated with exit code 11
接着,在备用节点执行
drbdadm primary all
最后在备用节点挂载磁盘分区即可:
mount /dev/drbd1 /mnt/mfs DRBD
脑裂后的处理:
脑裂后,两个节点间数据不同步,主从关系失效,需要按下面的步骤修复:
a.在从节点如下操作: #drbdadm secondary all
#drbdadm ‐‐ ‐‐discard‐my‐data connect all
b.在主节点上,通过 cat /proc/drbd 查看状态,如果不是 WFConnection 状态,需要再手动连 接: #drbdadm connect all
######################## HA config###############################
安装基础包和 heartbeat 包 yum install ‐y libnet heartbeat‐devel heartbeat‐ldirectord heartbeat
配置 ha 环境
cp /usr/share/doc/heartbeat‐2.1.3/ha.cf /etc/ha.d/
cp /usr/share/doc/heartbeat‐2.1.3/authkeys /etc/ha.d/
cp /usr/share/doc/heartbeat‐2.1.3/haresources /etc/ha.d/
更改配置文件
/etc/ha.d/ha.cf
logfile /var/log/ha‐log.log
logfacility local0
keepalive 2
deadtime 30
warntime 10
udpport 694
ucast eth1 192.168.1.12
auto_failback on
node mfsmaster
node mfsbackup hopfudge 1
更改配置文件
/etc/ha.d/authkeys
auth 1
1 crc
更改 authkeys 权限为 600
chmod 600 /etc/ha.d/authkeys
更改配置文件
/etc/ha.d/haresource
mfsmaster Initdrbd 10.3.0.83 mfsmaster mfsmaster 10.3.0.83
mfsmaster 10.3.0.83 httpd
#测试 heartbeat 专用,测试完毕之后可以注释掉
#第一个字段是主机名,是 uname ‐a 得到的
# 第二个字段作用是执行当前的脚本命令此脚本可以定义在
#/etc/init.d/ 或 /etc/ha.d/resource.d,此处我定义了一个名叫 Initdrbd 的脚本命令,具体的见下面演示。
#第三个字段作用定义启动 mfsmaster 进程,必须在/etc/init.d/或/etc/ha.d/resource.d 能找到 的可执行的脚本文件。
#第四个字段作用是启动虚拟的 IP
编辑 Initdrbd
vi /etc/ha.d/resource.d/Initdrbd
#!/bin/shunset LC_ALL; export LC_ALL unset LANGUAGE; export LANGUAGE
prefix=/usr
exec_prefix=/usr
. /etc/ha.d/shellfuncs
case "$1" in
'start')
drbdadm primary r0
mount /dev/drbd1 /mnt/mfs
;;
'stop')
umount /mnt/mfs
drbdadm secondary r0
;; 'restart')
;;
*)
echo "Usage: $0 { start | stop | restart }"
;;
esac
exit 0
同步 master 与 backup 之间配置
scp /etc/ha.d/ha.cf root@10.3.0.82:/etc/ha.d/
scp /etc/ha.d/resource.d/Initdrbd root@10.3.0.82:/etc/ha.d/resource.d/
scp /etc/ha.d/haresources root@10.3.0.82:/etc/ha.d/
scp /etc/ha.d/authkeys root@10.3.0.82:/etc/ha.d/
测试内容
主机 mfsmaster
vi /var/www/html
<!DOCTYPE HTML PUBLIC "‐//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT=""> <META NAME="Description" CONTENT="">
</HEAD>
<BODY> mfsmaster is running
</BODY>
主机 mfsbackup
<!DOCTYPE HTML PUBLIC "‐//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD> <TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus"> <META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<BODY>
mfsbackup is running
</BODY>
主机 mfsbackup
<!DOCTYPE HTML PUBLIC "‐//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<BODY>
mfsbackup is running
</BODY>
测试
a). 两台机器分别启动,并且启动 heartbeat
b). 然后在两台机器意外的其他机器上输入 http:// 10.3.0.83
c). 正常会显示 mfsmaster is running,
d). 把 mfsmaster 宕机或者关闭 heartbeat, 则会出现 mfsbackup 接管工作的状态,刷新浏览 器出现 mfsbackup is running
e). 恢复 mfsmaster,过数秒后刷新浏览器出现 mfsmaster is running,
f). 测试成功 Note:如果输入 http:// 10.3.0.83 出现错误,请检查配置文件里面的服务是否写对了,查看日 志文件看服务是否起来了,如果确定全部运行正常,还是没有 WEB 页面显示结果,请检查 防火墙。
MFS 环境部署
由于搭建的环境属于高可用环境,需要两台服务器的用户 ID、组 ID 都要保持一致
创建组 :
groupadd ‐g 600 mfs
创建用户:
useradd mfs ‐u 600 ‐g mfs
cd /usr/src
wget http://pro.hit.gemius.pl/hitredir/id=0sWa0S8ft4sTAHF1bGAAEZPcP3ziyq7f9SdhoQf7oeT.c7/url=m oosefs.org/tl_files/mfscode/mfs‐1.6.20‐2.tar.gz
tar zxvf mfs‐1.6.20‐2.tar.gz cd mfs‐1.6.20
./configure ‐‐prefix=/mnt/mfs ‐with‐default‐user=mfs ‐with‐default‐group=mfs ‐‐disable‐mfschunkserver ‐‐disable‐mfsmount make && make install
配置 mfs 文件
cd /mnt/mfs/etc
cp mfsmaster.cfg.dist mfsmaster.cfg cp mfsmetalogger.cfg.dist mfsmetalogger.cfg cp mfsexports.cfg.dist mfsexports.cfg
cd /mnt/mfs/var/mfs/ cp metadata.mfs.empty metadata.mfs
scp /etc/init.d/mfsmaster root@10.3.0.82:/etc/init.d/ _______________________________________________________________________________
备份服务器配置 Backup server (metalogger) 10.3.0.84
groupadd mfs
useradd ‐g mfs mfs
tar zxvf mfs‐1.6.20‐2.tar.gz
./configure ‐‐prefix=/usr/local/mfs ‐sysconfdir=/etc ‐‐localstatedir=/var/lib ‐‐with‐default‐user=mfs ‐‐with‐default‐group=mfs ‐‐disable‐mfschunkserver ‐‐disable‐mfsmount
make && make install cp /etc/mfsmetalogger.cfg.dist /etc/mfsmetalogger.cfg
启动 mfsmetalogger
/usr/local/mfs/sbin/mfsmetalogger start vi /etc/rc.local
#add this lie to start mfsmetalogger
/usr/local/mfs/sbin/mfsmetalogger start
存储块服务器 Chunk servers 安装 10.3.0.85~10.3.0.86
groupadd mfs useradd ‐g mfs mfs
tar zxvf mfs‐1.6.20‐2.tar.gz
./configure ‐‐prefix=/usr/local/mfs ‐sysconfdir=/etc ‐‐localstatedir=/var/lib ‐‐with‐default‐user=mfs ‐‐with‐default‐group=mfs ‐‐disable‐mfsmaster cp /etc/mfschunkserver.cfg.dist /etc/mfschunkserver.cfg cp /etc/mfshdd.cfg.dist /etc/mfshdd.cfg
vi /etc/mfshdd.cfg
#add this line
/opt/mfschunks1
/opt/mfschunks2
建立 mfs 存储所用到的文件夹
mkdir /opt/mfschunks1
mkdir /opt/mfschunks2
更改文件夹权限
chown ‐R mfs:mfs /opt/mfschunks1
chown ‐R mfs:mfs /opt/mfschunks2
更改 host 文件 10.3.0.83 mfsmaster
为了方便程序的自动运行,编辑 rc.local 文件 /usr/local/mfs/sbin/mfschunkserver start _______________________________________________________________________
挂载客户端
相关设置
groupadd mfs
useradd ‐g mfs mfs
安装 fuse wget http://cdnetworks‐kr‐1.dl.sourceforge.net/project/fuse/fuse‐2.X/2.8.5/fuse‐2.8.5.tar.gz tar zxvf fuse‐2.8.5.tar.gz
cd fuse‐2.8.5
./configure ‐‐prefix=/usr make meke install cd /usr/src tar zxvf mfs‐1.6.20‐2.tar.gz
cd mfs‐1.6.20‐2
./configure ‐‐prefix=/usr/local/mfs ‐sysconfdir=/etc ‐‐localstatedir=/var/lib ‐‐with‐default‐user=mfs ‐‐with‐default‐group=mfs ‐‐disable‐mfsmaster ‐‐disable‐mfschunkserver 编辑 hosts 文件
10.3.0.83 mfsmaster
mkdir ‐p /mnt/mfs
mfsmount /mnt/mfs ‐H mfsmaster
##################提示内容################
mfsmaster accepted connection with parameters: read‐write,restricted_ip ; root mapped to root:root
集成与测试
heartbeat 与 drbd 的集成
DRBD 的主从的切换依赖与 heartbeat 的服务,所以集成的关键点在于定义 Initdrbd 的脚本文 件的定义和 heartbeat 的服务定义文件/etc/ha.d/resource.d。如 server1 Initdrbd 就是集成 DRBD 和 heartbeat。
heartbeat 与 MFS 的集成
与 DRBD 一样,mfsmaster 的脚本文件定义与 heartbeat 的服务定义文件/etc/ha.d/resource.d 中即可。
drbd 与 mfs 的集成 在主服务器中,必须把MFS的安装文件全部安装到drbd的挂载目录中去,安装到块设备上去, 所以在主从切换的时候,备份机器拿到安装环境和主的一样,那么通过同样的方式来启动 MFS 进程,达到切换切换启动 MFS 的目的。
测试 两台 server 上启动 DRBD,利用 cat /proc/drbd 查看启动情况和网络状态
主机器上显示 Primary/Secondary 备份机器上显示 Secondary/Primary,启动成功
启动 heartbeat,通过日志查看 heartbeat 包括关联的服务加载的情况,tail –f
/var/log/ha_log/xxx.log
在主机器上 Ps 的方式查看 heartbeat 和 MFS 进程,确保服务启动,如果没有启动,可手动 在启动一次。
此时备份机器的 mfs 没有启动。 停止主服务的 heartbeat,查看主服务的日志,发现所有的关联服务都会被关闭,包括 drbd,mfs,vip 等。
查看备份机器的日志,发现已经开始启动关联的服务,此时备份机器上 cat /proc/drbd 出现 Primary/Secondary 主机器上显示 Secondary/Primary,说明 DRBD 切换成功,然后查看 mfs 是否启动,如果启动成功,
恭喜您,高可用的 MFS 文件分布式系统已经搭建好了