高可用的 MFS 文件分布式系统(Drdb+heartbeat+MFS )

理论拓扑

高可用的 MFS 文件分布式系统(Drdb+heartbeat+MFS )_第1张图片

环境准备: 

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 line
  10.3.0.81 mfsmaster  
10.3.0.82 mfsbackup 

#########copy hosts file to 10.3.0.82################ 

scp /etc/hosts [email protected]:/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 [email protected]  

############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" begin
  on 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  [email protected], 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/sh
  unset 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 [email protected]:/etc/ha.d/  
scp  /etc/ha.d/resource.d/Initdrbd [email protected]:/etc/ha.d/resource.d/  
scp  /etc/ha.d/haresources [email protected]:/etc/ha.d/  
scp  /etc/ha.d/authkeys [email protected]:/etc/ha.d/  

测试内容 

主机 mfsmaster  
vi /var/www/html    
  
    
    
 New Document     
    
    
   
     
    
     mfsmaster is running    
    
主机 mfsbackup    
  
    
   
  New Document     
   
     
    
    
    
     
mfsbackup is running    

主机 mfsbackup    
  
    
    
 New Document     
    
    
    
    
    
     
mfsbackup is running    
  

测试   
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 [email protected]:/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 文件分布式系统已经搭建好了

你可能感兴趣的:(学问)