moosefs 解决 mfsmaster单点故障keepalived 辅助

一 服务器IP及应用角色
二 原理及思路
三 moosefs  安装 配置 管理
四  metadata.mfs.bak的定时备份
五  keepalived 安装 配置 管理
六 故障切换测试
七 参考资料联系方式
八 本教程相关资料下载


一 服务器IP及应用角色
192.168.20.237   keepalived MASTER  mfsmaster  mfschuckserver  mfsclient
192.168.20.38     keepalived Slave   mfsmetalogger  mfschuckserver  mfsclient   mfsmaster(备份)
192.168.20.233   虚拟IP

二 原理及思路
1 mfsmaster的故障恢复在1.6.5版本后可以由mfsmetalogger产生的日志文件 changelog_ml.*.mfs和metadata.mfs.back由命令mfsmetarestore恢复
2 定时从mfsmaster 获取 metadata.mfs.back 文件用于master恢复
3 192.168.11.237 keepalived MASTER run检测到 mfsmaster 故障的时候 停止  keepalived  
4 192.168.20.38 keepalived 状态从backup转到 master 并触发 notify_master事件执行恢复并启动mfsmaster脚本
5 整个切换在2~5秒内完成 根据检测时间间隔。
6  nagios 监控mfs状态可见参考资料


三 moosefs  安装 配置 管理
mfsmaster mfsmetalogger  mfschuckserver mfsclient 四个角色的安装 如下 只是使用的配置文件不同

  1. useradd -s /sbin/nologin mfs

  2. mkdir -p /opt/software

  3. cd /opt/software

  4. wget http://sourceforge.net/projects/fuse/files/fuse-2.X/2.8.5/fuse-2.8.5.tar.gz

  5. wget http://sourceforge.net/projects/moosefs/files/moosefs/1.6.20/mfs-1.6.20-2.tar.gz


  6. tar zxvf fuse-2.8.5.tar.gz

  7. cd fuse-2.8.5

  8. ./configure --prefix=/usr

  9. make && make install


  10. cd /opt/software

  11. tar zxvf mfs-1.6.20-2.tar.gz

  12. cd mfs-1.6.20-2

  13. ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs

  14. make && make install

  15. cd ..

复制代码

MFS相关的配置文件有  mfsmaster.cfg mfsexports.cfg
#192.168.20.237和192.168.20.38 mfsmaster 配置文件如下


vi  /usr/local/mfs/etc/mfsmaster.cfg

  1. # WORKING_USER = mfs

复制代码

#192.168.20.237  192.168.20.38  mfschunkserver   使用相同的mfschunkserver.cfg mfshdd.cfg配置文件如下
vi /usr/local/mfs/etc/mfschunkserver.cfg

  1. # WORKING_USER = mfs

  2. # WORKING_GROUP = mfs

  3. # SYSLOG_IDENT = mfschunkserver

  4. # LOCK_MEMORY = 0

  5. # NICE_LEVEL = -19

  6. # DATA_PATH = /usr/local/mfs/var/mfs

  7. # MASTER_RECONNECTION_DELAY = 5

  8. # BIND_HOST = *

  9. MASTER_HOST = 192.168.20.233

  10. # MASTER_PORT = 9420

  11. # MASTER_TIMEOUT = 60

  12. # CSSERV_LISTEN_HOST = *

  13. # CSSERV_LISTEN_PORT = 9422

  14. # HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg

  15. # HDD_TEST_FREQ = 10

  16. # deprecated, to be removed in MooseFS 1.7

  17. # LOCK_FILE = /var/run/mfs/mfschunkserver.lock

  18. # BACK_LOGS = 50

  19. # CSSERV_TIMEOUT = 5

复制代码

我这边mfschunk存储数据的目录是 /data/9ai9.net
vim  /usr/local/mfs/etc/mfshdd.cfg  

  1. /data/9ai9.net

复制代码

mfs各角色的管理命令如下 更详细的说明参见参考资料
/usr/local/mfs/sbin/mfsmaster start|stop|restart|reload
/usr/local/mfs/sbin/mfsmetalogger start|stop|restart|reload
/usr/local/mfs/sbin/mfschunkserver start|stop|restart|reload

客户端将mfschunk共享挂载到/home/lixy命令
modprobe fuse
/usr/local/mfs/bin/mfsmount /home/lixy -H 192.168.20.233

四  metadata.mfs.bak的定时备份
将主MFSMASTER的metadata.mfs.bak定时备份到 备用的MFSmaster服务器上
这里scp方法每5分钟从主服务器取metadata.mfs.bak备份一次 用于启动
在crontab -e里添加以下内容

  1. */5 * * * *  scp  192.168.20.237:/usr/local/mfs/var/mfs/metadata.mfs.back  /usr/local/mfs/var/mfs  

复制代码

五  keepalived 安装 配置 管理

  1. wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz

  2. tar zxvf keepalived-1.2.2.tar.gz

  3. cd keepalived-1.2.2

  4. ./configure --prefix=/

  5. make

  6. make install

复制代码

#配置说明
1 KEEPALIVED MASTER 每2秒检测一次 mfsmaster状态
2 KEEPAVLIED BACKUP 不检测MFS状态 只等待KEEPALIVED事情触发恢复
192.168.20.237 keepavled MASTER主配置文件

  1. ! Configuration File for keepalived

  2. global_defs {

  3.    router_id 9ai9.net

  4. }

  5. vrrp_script check_run {

  6.    script "/root/keepalived_check_mfsmaster.sh"

  7.    interval 2

  8. }

  9. vrrp_sync_group VG1 {

  10.     group {

  11.           VI_1

  12.     }

  13. }

  14. vrrp_instance VI_1 {

  15.     state MASTER

  16.     interface eth0

  17.     virtual_router_id 88

  18.     priority 100

  19.     advert_int 1

  20.     nopreempt

  21.     authentication {

  22.         auth_type PASS

  23.         auth_pass 9ai9.net

  24.     }

  25.     track_script {

  26.         check_run

  27.     }

  28.     virtual_ipaddress {

  29.         192.168.20.233

  30.     }

  31. }

复制代码

vim /root/keepalived_check_mfsmaster.sh
注:这里
MFSMASTER_HOST的IP地址要是192.168.20.237 非VIP

  1. #!/bin/bash

  2. #write by qhappy QQ 87179505

  3. #20110310


  4. MFSMASTER_HOST=192.168.20.237

  5. MFSMASTER_PORT=9420

  6. if [ `uname -i` = x86_64 ];then

  7. CHECK_MASTER=/root/qhappy_check_tcp_64

  8. else

  9. CHECK_MASTER=/root/qhappy_check_tcp_32

  10. fi

  11. CHECK_TIME=2

  12. #mfsmaster  is working MFS_OK is 1 , mfsmaster down MFS_OK is 0

  13. MFS_OK=1

  14. function check_mfsmaster (){

  15.     $CHECK_MASTER -H $MFSMASTER_HOST -p $MFSMASTER_PORT >/dev/null 2>&1

  16.     if [ $? = 0 ] ;then

  17.     MFS_OK=1

  18.     else

  19.     MFS_OK=0

  20.     fi

  21.     return $MFS_OK

  22. }

  23. while [ $CHECK_TIME -ne 0 ]

  24. do

  25.     let "CHECK_TIME -= 1"

  26.     check_mfsmaster

  27. if [ $MFS_OK = 1 ] ; then

  28.     CHECK_TIME=0

  29.     exit 0

  30. fi

  31. if [ $MFS_OK -eq 0 ] &&  [ $CHECK_TIME -eq 0 ]

  32. then

  33.     /etc/init.d/keepalived stop

  34.     exit 1

  35. fi

  36. done

复制代码

chmod 755  /root/keepalived_check_mfsmaster.sh

192.168.20.38  keepalived BACKUP的 配置
vim  /etc/keepalived/keepalived.conf

  1. ! Configuration File for keepalived

  2. global_defs {

  3.    router_id 9ai9.net

  4. }


  5. vrrp_sync_group VG1 {

  6.     group {

  7.           VI_1

  8.     }

  9. notify_master "/root/keepalived_notify.sh master"

  10. notify_backup "/root/keepalived_notify.sh backup"

  11. }

  12. vrrp_instance VI_1 {

  13.     state BACKUP

  14.     interface eth0

  15.     virtual_router_id 88

  16.     priority 80

  17.     advert_int 1

  18.     authentication {

  19.         auth_type PASS

  20.         auth_pass 9ai9.net

  21.     }

  22.    

  23.     virtual_ipaddress {

  24.         192.168.20.233

  25.     }

  26. }

复制代码


vim /root/keepalived_notify.sh

  1. #!/bin/bash

  2. #write by qhappy QQ 87179505

  3. #20110310


  4. MFS_HOME=/usr/local/mfs

  5. MFSMARSTER=${MFS_HOME}/sbin/mfsmaster

  6. MFSMETARESTORE=${MFS_HOME}/sbin/mfsmetarestore

  7. MFS_DATA_PATH=${MFS_HOME}/var/mfs


  8. function backup2master(){

  9. $MFSMETARESTORE -m ${MFS_DATA_PATH}/metadata.mfs.bak -o ${MFS_DATA_PATH}/metadata.mfs $MFS_DATA_PATH/changelog_ml*.mfs

  10. #$MFSMETARESTORE -a

  11. $MFSMARSTER start

  12. }


  13. function master2backup(){

  14. $MFSMARSTER stop

  15. }


  16. function ERROR(){

  17. echo "USAGE: keepalived_notify.sh master|backup "

  18. }


  19. case $1 in

  20.         master)

  21.         backup2master

  22.         ;;

  23.         backup)

  24.         master2backup

  25.         ;;

  26.         *)

  27.         ERROR

  28.         ;;

  29. esac

复制代码


chomd 755  /root/keepalived_notify.sh

各服务角色 启动顺序

1 mfsmaster
2 keepalived
3 mfsmetalogger
4 mfschunckserver
5 客户端挂载

关闭顺序和上面的相反

五 故障切换测试

192.168.20.237 执行
/usr/local/mfs/sbin/mfsmaster stop
192.168.20.237日志截图



192.168.20.38 日志截图


续上图



六 参考资料
moosefs官网 http://www.moosefs.org/
ChinaUnix   http://bbs.chinaunix.net/thread-1644309-1-1.html
笔者 QQ 87179505

七 资料下载
下载的内容为keepalived 检测mfsmaster 状态的文件 脚本中定义的使用路径是 /root 也请放在这个路径下


你可能感兴趣的:(moosefs单点故障)