3.1、Unison简介
Unison是Windows、Linux以及其他Unix平台下都可以使用的文件同步工具,它能使两个文件夹(本地或网络上的)保持内容的一致。Unison拥有与其它一些同步工具或文件系统的相同的特性,但也有自身的特点:
1.跨平台使用;
2.对内核和用户权限没有特别要求;
3.Unison是双向的,它能自动处理两分拷贝中更新没有冲突的部分,有冲突的部分将会显示出来让用户选择更新策略;
4.只要是能连通的两台主机,就可以运行unison,可以直接使用socket连接或安全的ssh连接方式,对带宽的要求不高,使用类似rsync的压缩传输协议。
3.2、安装Unison
我们需要在主机192.168.1.237和备机192.168.1.236上分别安装unison
1、安装ocaml
在Linux下通过源码安装unison的时候,需要首先安装一个名为objective caml compiler的工具,ocaml的版本应至少为3.0.7或者更高。
Ocaml下载地址 http://caml.inria.fr/pub/distrib/
Unison下载地址http://www.seas.upenn.edu/~bcpierce/unison//download/releases/
这里选择ocaml版本为ocaml-3.12.0
[root@server1~]# tar -xzvf ocaml-3.12.0.tar.gz
[root@server1~]# cd ocaml-3.12.0
[root@server1ocaml-3.12.0]# ./configure
[root@server1ocaml-3.12.0]# make world opt
[root@server1ocaml-3.12.0]# make install
1、 安装unison
[root@server1 ~]# tar -xzvfunison-2.40.63.tar.gz
[root@server1 ~]# cdunison-2.40.63
[root@server1 unison-2.40.63]#make UISTYLE=text
[root@server1unison-2.40.63]# make install
注意:在执行make install的过程中,可能会出现以下错误提示:
mv: cannot stat '/root/bin//unison': No such file or directory
make: [doinstall] Error 1 (ignored)
cp unison /root/bin/
cp: cannot create regular file '/root/bin/': Is a directory
make: *** [doinstall] Error 1
出现错误的原因在与Unison默认是将文件Copy到/root/bin目录,但Linux默认是没有该目录的,因此我们需要将生成的可执行文件unison复制到系统的PATH目录。
[root@server1 unison-2.40.63]# cp unison /usr/local/bin 然后再执行make install
3.3、配置ssh双机信任
我们要配置非root用户下的普通用户的ssh双机信任。这里我们使用安装mfs文件系统的时的mfs用户
在两台服务器上创建unison用户,主机server1的IP为192.168.1.237,备机server2的IP为192.168.1.236
[root@server1~]# useradd -m mfs
[root@server1~]# passwd mfs
[root@server2~]# useradd -m mfs
[root@server2~]# passwd mfs
在server1上创建key并配置server2的信任
[root@server1~]# su - mfs
[unison@server1~]$ ssh-keygen -t rsa
在提示保存私钥(key)和公钥(public key)的位置时,使用默认值;
在提示是否需要私钥密码(passphrase)时,直接敲回车,即不使用私钥密码。
之后,将生成一对密钥,id_rsa(私钥文件)和id_rsa.pub(公钥文件),保存在/home/unison/.ssh/目录下。
将公钥添加到server2的 authorized_keys 文件中
[unison@server1~]$ cd /home/mfs/.ssh/
[unison@server1~]$ ssh 192.168.1.237 cat /home/mfs/.ssh/id_rsa.pub >> authorized_keys
[unison@server1~]$ ssh 192.168.1.236 cat /home/mfs/.ssh/id_rsa.pub >> authorized_keys
[unison@server1~]$ scp authorized_keys 192.168.1.236:/home/mfs/.ssh/
两台机器上都执行chmod600 /home/mfs/.ssh/authorized_keys,这个文件的权限一定要是600,至于为什么,你知道的!!!
然后分别在两台机器上执行:
[unison@server1~]$ ssh 192.168.1.237 date
[unison@server1~]$ ssh 192.168.1.236 date
在第一次执行时,会要求输入用户密码信息,再次执行时不需要输入密码就能显示系统日期,这说明ssh互相信任成功,在正式环境中,我们需要使用mfs这个用户,而不是unison用户。
注意:如果主备机更换了IP或者使用其他用户名用来同步,则需要重新配置ssh双机信任。否则同步无法使用。
3.4、Unison的使用
在正式使用unison之前最好测试一下,测试过之后它会自动在普通用户的家目录生成一个.unison的隐藏目录,这个隐藏目录里有三类文件,一种是随机命名的文件,记录文件同步实时信息,内容较少。default.prf默认配置文件,我们后面需要修改。unison.log记录所有同步事件。
在两台服务器上创建test目录,用于测试
[root@server1~]# su - mfs
[unison@server1~]$ mkdir test
[root@server2~]# su - mfs
[unison@server2~]$ mkdir test
在两台服务器上分别执行一次unison,如果出现提示确认,则直接敲回车选择默认值
需要说明的是:两台机器上需要同步的文件夹最好权限都是一样的,不然会出现错误信息。
[unison@server1~]$unison/home/mfs/test/ ssh://unison@192.168.1.236//home/mfs/test/
[unison@server2~]$unison/home/mfs/test/ ssh://unison@192.168.1.237//home/mfs/test/
注意事项:如果出现
bash:unisoncommand not found
Fatal error:Lost connection with the server
查看你的unison命令是否是系统的可执行命令,如果不是,加入到系统路径中。在上面的命令末尾加入参数-servercmd=/usr/local/bin/unison来告诉unison命令的位置。
如果正式使用的话,我们需要通过配置文件来使用unison。
修改两台服务器的unison配置文件,输入以下内容
[unison@server1~]$ vim /home/mfs/.unison/default.prf
#Unison preferences file
#force=/home/unison/test local->remote
root=/usr/local/mfs/var/mfs
root=ssh://mfs@192.168.1.236//usr/local/mfs/var/mfs
#path=aaa
#path=bbb
batch=true
#maxthreads=300
owner=true
group=true
perms=-1
fastcheck=false
rsync=false
sshargs=-C
xferbycopying=true
confirmbigdel=false
log=true
logfile=/home/mfs/.unison/unison.log
[unison@server2~]$ vim /home/mfs/.unison/default.prf
#Unison preferences file
#force=/home/unison/test local->remote
root=/usr/local/mfs/var/mfs
root=ssh://mfs@192.168.1.237//usr/local/mfs/var/mfs
#path=aaa
#path=bbb
batch=true
#maxthreads=300
owner=true
group=true
perms=-1
fastcheck=false
rsync=false
sshargs=-C
xferbycopying=true
confirmbigdel=false
log=true
logfile=/home/mfs/.unison/unison.log
相关注解如下:
两个root表示需要同步的文件夹。
force表示会以本地所指定文件夹为标准,将该目录同步到远端。这里需要注意,如果指定了force参数,那么Unison就变成了单项同步了,也就是说会以force指定的文件夹为准进行同步,类似与rsync。
ignore = Path表示忽略指定目录,即同步时不同步它。
batch = true,表示全自动模式,接受缺省动作,并执行。
-fastcheck true 表示同步时仅通过文件的创建时间来比较,如果选项为false,Unison则将比较两地文件的内容。
log = true 表示在终端输出运行信息。
logfile 指定输出的log文件。
另外,Unison有很多参数,这里仅介绍常用的几个,详细的请参看Unison手册。
-auto //接受缺省的动作,然后等待用户确认是否执行。
-batch //batch mode, 全自动模式,接受缺省动作,并执行。
-ignore xxx //增加 xxx 到忽略列表中
-ignorecase [true|false|default] //是否忽略文件名大小写
-follow xxx //是否支持对符号连接指向内容的同步
owner = true //保持同步过来的文件属主
group = true //保持同步过来的文件组信息
perms = -1 //保持同步过来的文件读写权限
repeat = 1 //间隔1秒后,开始新的一次同步检查
retry = 3 //失败重试
sshargs = -C //使用ssh的压缩传输方式
xferbycopying = true"
-immutable xxx //不变目录,扫描时可以忽略
-silent //安静模式
-times //同步修改时间
-path xxx 参数 //只同步 -path 参数指定的子目录以及文件,而非整个目录,-path 可以多次出现。
confirmbigdel = false #true表示当需要同步的两个目录一个为空时,unison将停止 false表示同步的某个目录为空时不会停止运转
PS:Windows下的unison配置文件默认位于C:\Documentsand Settings\currentuser\.unison目录,默认的配置文件名是default.prf。
Unison双向同步基本原理是:假如有A B两个文件夹,A文件夹把自己的改动同步到B,B文件夹也把自己的改动同步到A,最后A B两文件夹的内容相同,是AB文件夹的合集。
Unison双向同步的一个缺点是,对于一个文件在两个同步文件夹中都被修改时,unison是不会去同步的,因为unison无法判断以那个为准,需要人工指定。
3.5、Unison测试
首先分别在server1与server2的/usr/local/mfs/var/mfs目录下创建文件或目录,然后在server1上执行unison,接着如果在server1与server2上都能看到各自创建的文件,就说明同步成功。
分别在server1与server2上创建文件
[unison@server1~]$ cd /usr/local/mfs/var/mfs
[unison@server1test]$ touch 1.txt touch 3.txt
[unison@server2~]$ cd /usr/local/mfs/var/mfs
[unison@server2test]$ touch 2.txt touch 4.txt
在server1上执行unison
[unison@server1~]$ unison
在server1与server2上查看文件是否同步
[unison@server1~]$ cd /usr/local/mfs/var/mfs
[unison@server1test]$ ls
1.txt2.txt 3.txt 4.txt
[unison@server2~]$ cd /usr/local/mfs/var/mfs
[unison@server2test]$ ls
1.txt2.txt 3.txt 4.txt
均看到了“1.txt 2.txt 3.txt4.txt”所有文件,说明文件同步已经成功!
3.6、安装inotify-tools
考虑到unison的双向同步性,我们不可能使用日常调度来执行unison同步,所以加入监控机制inotify。
1、查看系统是否支持inotify
[unison@server1~]# ls -l /proc/sys/fs/inotify
total0
-rw-r--r--1 root root 0 Nov 11 11:25 max_queued_events
-rw-r--r--1 root root 0 Nov 11 11:25 max_user_instances
-rw-r--r--1 root root 0 Nov 11 11:25 max_user_watches
则说明支持inotify.
inotify可以监视的文件系统事件包括:
IN_ACCESS,即文件被访问
IN_MODIFY,文件被 write
IN_ATTRIB,文件属性被修改,如 chmod、chown、touch 等
IN_CLOSE_WRITE,可写文件被 close
IN_CLOSE_NOWRITE,不可写文件被 close
IN_OPEN,文件被 open
IN_MOVED_FROM,文件被移走,如 mv
IN_MOVED_TO,文件被移来,如 mv、cp
IN_CREATE,创建新文件
IN_DELETE,文件被删除,如 rm
IN_DELETE_SELF,自删除,即一个可执行文件在执行时删除自己
2、安装inotify
[unison@server1~]# tar -zxvf inotify-tools-3.14.tar.gz
[unison@server1~]# cd inotify-tools-3.14
[root@server1 ~ inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify
[root@server1 ~ inotify-tools-3.14]# make && make install
可能出现的问题:
Please increase the amount of inotify watches allowed per user via`/proc/sys/fs/inotify/max_user_watches'.
cat一下这个文件,默认值是8192,
echo 8192000 >> /proc/sys/fs/inotify/max_user_watches
我们增大一下线程即可~,这样加入后重启后没了,需要加入开机启动中。
2、 编写inotify实时监控脚本
[unison@server1~]# vim unison.sh
#!/bin/bash
DESTHOST=192.168.1.56
DESTHOSTDIR=/home/unison/test
SRCDIR=/home/unison/test
/usr/local/inotify/bin/inotifywait-mrq --timefmt '%d/%m/%y %H:%M' --format'%T %w %f' -e create,delete,modify,move$SRCDIR | while read files
do
unison-servercmd=/usr/local/bin/unison
done
chmod755 unison.sh, 按同样方法在server2安装inotify和编写同步脚本
3、 分别在server1和server2的unison用户下让脚本在后台运行
[unison@server1 ~]$ nohup./unison.sh &
[unison@server2 ~]$nohup ./unison.sh &
在正式环境中,只在主机上执行了nohup./unison.sh &,备机不用执行,这样也是可以的,如果主机发生故障,切换到备机上,备机开始工作,数据读写记录到metadata里,当主机恢复后,备机工作那段时间内所记录的数据可能不会马上同步过来,不过不用担心,这部分数据不会丢失,只要有新数据在mfs客户端写入或者主机有变化之后,备机上那部分数据就会自动同步过来。这样在主机上执行unison同步的方式,可能会导致在故障情况下数据的不及时性,为了同步更加及时,建议主备机上都执行unison同步。
Unison因为是双向同步,必然有它的弊端,如果发生意外故障,破坏了同步目录里面的文件,那么会影响正常业务的使用的,所以做好同步目录的数据备份是很重要的。
3.7、模拟mfs故障测试
1、当主机故障时,自动切换到备机,备机正常启动了mfsmaster而且没有数据丢失。但是在恢复主机mfsmaster时,提示由于缺少metadata.mfs造成无法启动,这时我们可以在主机执行恢复性操作,让它自动产生metadata.mfs,具体方法为使用/usr/local/mfs/sbin/mfsmaster -a 就可以启动mfsmaster,而且数据不会丢失。这是和先前的mfs1.6.27版本的恢复方式不一样的地方。
2、在同步相同文件时,如果该文件被锁定(比如mfsmaster启动时的.lock文件)或者是同时修改,unison不会对该文件进行同步,会自动跳过。
3.8、mfs监控脚本
1、需在被监控机上需要安装好nagios-plugins和nrpe,我们直接编辑一个check_mfs的脚本,编写完把这个脚本复制到/usr/local/nagios/libexec/下,并赋权755,内容如下:
#!/bin/bash
#a nagios plugin for checkmoosefs healthy
CHECK_OK=0
CHECK_WARNING=1
CHECK_CRITICAL=2
CHECK_UNKNOWN=3
CHECK_MASTER () {
check_process=`psaux|grep '/usr/local/mfs/sbin/mfsmaster'|grep -v grep`
check_port=`netstat-lunpt|grep ':9419'`
if [ -n"$check_process" -a -n "$check_port" ]
then
echo "mfsmasteris OK"
exit 0
else
echo "mfsmasteris not running"
exit 2
fi
}
CHECK_CHUNK () {
check_process=`psaux|grep '/usr/local/mfs/sbin/mfschunkserver'|grep -v grep`
check_port=`netstat-lunpt|grep ':9422'`
if [ -n"$check_process" -a -n "$check_port" ]
then
echo"mfschunkserver is OK"
exit 0
else
echo"mfschunkserver is not running"
exit 2
fi
}
CHECK_CLIENT () {
check_process=`psaux|grep '/usr/local/mfs/bin/mfsmount'|grep -v grep`
if [ -n"$check_process" ]
then
echo "mfsclientis OK"
exit 0
else
echo "mfsclientis not running"
exit 2
fi
}
CHECK_METALOGGER () {
check_process=`psaux|grep '/usr/local/mfs/sbin/mfsmetalogger'|grep -v grep`
if [ -n"$check_process" ]
then
echo"mfschunkserver is OK"
exit 0
else
echo"mfschunkserver is not running"
exit 2
fi
}
case "$1" in
-M)
CHECK_MASTER
;;
-c)
CHECK_CLIENT
;;
-C)
CHECK_CHUNK
;;
-L)
CHECK_METALOGGER
;;
*)
echo "Unknownargement: $1"
;;
esac
2、nrpe安装目录中添加命令
在master服务器nrpe配置文件中添加监控
command[check_mfs]=/usr/local/nagios/libexec/check_mfs –M
在chunkserver中nrpe配置文件中添加监控
command[check_mfs]=/usr/local/nagios/libexec/check_mfs –c
在mfsclient中的nrpe配置文件中添加监控
command[check_mfs]=/usr/local/nagios/libexec/check_mfs –C
3、最后在nagios上添加服务和主机即可。
另外,由于192.168.1.134这台服务器,即是chunkserver又是mfsclient,而且chunkserver所分配的空间是最小的为440GiB,所以还需要单独对chunkserver所占用空间进行单独监控。在134上的nrpe配置文件中加入:
command[check_chunkserverdata_34]=/usr/local/nagios/libexec/check_disk-w 30% -c 20% -p /databak/
3.9、mfs备份脚本
一、本机备份脚本
这个相对来说很简单,不过要说明两点:
1、 在本机,备份打包的文件不要放在同步目录里。
2、 备份时间最好不要是每天的整点,因为整点的时候,正好是changelog归纳到metadata最为繁忙的时候,通过cacti流量可以看出。
#!/bin/bash
rq=`date +"%Y%m%d"`
rq1=` date "-d 7 day ago" "+%Y%m%d"`
cp -r /usr/local/mfs/var/mfs/*/mfsdata_backup/mfsdata
cd /mfsdata_backup/mfsdata
tar -zcf mfsdata.$rq.tar.gz *
mv/mfsdata_backup/mfsdata/mfsdata.$rq.tar.gz /mfsdata_backup
chown -R ftpuser.ftpuser/mfsdata_backup/mfsdata.$rq.tar.gz
rm -rf /mfsdata_backup/mfsdata/*
FILESIZE_MFSBUCKUP=`du -sh/mfsdata_backup/mfsdata.$rq.tar.gz | awk '{print $1}' `
echo "`date +"%Y%m%d"` "MfsMetaData sizeis" $FILESIZE_MFSBUCKUP " >> /check_mfsdatalog/mfsmeta-size.log
rm -rf /mfsdata_backup/mfsdata.$rq1.tar.gz
二、远程拷贝脚本
因为mfs备机空间不足,需要远程拷贝到其他机器上。
#!/bin/bash
rq=`date +%Y%m%d`
rq1=` date "-d 3 day ago""+%Y%m%d" `
rm_ipAddr=192.168.1.236
host_id="remote236"
runName=$host_id.sh
echo "#!/usr/bin/expect" >/root/mfs-shell/$runName
echo "set password "ftpuser#236#ftpuser"">> /root/mfs-shell/$runName
echo "spawn scpftpuser@$rm_ipAddr:/mfsdata_backup/mfsdata.$rq.tar.gz/root/mfs-shell/mfsdata" >> /root/mfs-shell/$runName
echo "sleep 30" >>/root/mfs-shell/$runName
echo "expect\"ftpuser@$rm_ipAddr's password:\r\"" >>/root/mfs-shell/$runName
echo "send\"\$password\r\"" >> /root/mfs-shell/$runName
echo "set timeout 5000" >>/root/mfs-shell/$runName
echo "send \"exit\r\"">> /root/mfs-shell/$runName
echo "expect eof" >>/root/mfs-shell/$runName
chmod 777 /root/mfs-shell/$runName
/root/mfs-shell/$runName
echo "`date`"\t\t"236baksuccess" >> /root/mfs-shell/bak_log
rm -rf/root/mfs-shell/mfsdata/mfsdata.$rq1.tar.gz
4、Mfs文件系统问题故障点汇总4.1、mfsmaster异常问题
4.1.1、Mfsmaster意外断电恢复启动
1、mfs1.6.x如果mfsmaster无法启动,需要执行.. /sbin/mfsmetarestore –a或者手动执行mfsmetarestore -m metadata.mfs.back -ometadata.mfs changelog_ml.*.mfs 的方式来恢复。而在moosefs2.0.x如果mfsmaster无法启动,只需执行.. /sbin/mfsmaster –a来恢复,这点要分清。
4.1.2、启动和停止web界面
1、防火墙问题
mfsmaster时一定要关闭防火墙,否则会出现web界面功能性错误。如果必须开启防火墙,需要开放9419,9420,9421,9422,9425端口。
注意事项:如果在启动mfscgiserv后,无法查看web监控页面,是由于mfs版本和系统的python版本不对应造成的。因为oel5.8的python版本为2.4较低,Mfs1.6.20不需要升级python,而mfs1.6.27是需要升级python到2.7的的,升级时,不要卸载旧的python2.4,下面给出升级python的方法和升级后产生的问题解决方法:
Python升级步骤:python下载地址:https://www.python.org/ftp/python/
安装Pyhton2.7
wgethttp://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2
tar -xjvf Python-2.7.5.tar.bz2
cd Python-2.7.5
./configure --prefix=/usr/local/python2.7
make
make install
配置python,把Python2.7作为默认的开发生产工具
mv /usr/bin/python /usr/bin/python_old #(这是一种好习惯,不要随便删除文件)
ln -s /usr/local/python2.7/bin/python2.7 /usr/bin/python 软链接
用这种方法升级后会导致yum不可用,将会引起开机错误提示:ImportError:NoModule named dbus。yum使用python2.4工具,上面的步骤启用了python2.7,python的升级将会导致yum的不可用。
修改yum的配置 vim /usr/bin/yum,将#!/usr/bin/python 更改为 #!/usr/bin/python_old
修改yum守护进程,vim/usr/sbin/yum-updatesd 将#!/usr/bin/python -tt 改成#!/usr/bin/python_old -tt
改完这两个文件后,重启进程serviceyum-updatesd restart,yum即可使用了。
在make install后,出现Pythonbuild finished, but the necessary bits to build these modules were not found:
_tkinter bsddb185 dl
p_w_picpathop sunaudiodev
To find the necessary bits, look in setup.py indetect_modules() for the module's name.
这个两个模块用不着,不用管它。
另外、启动mfschunkserver、mfsmetalogger和mfsclient时,也要关闭防火墙或者在防火墙上开启对应服务的端口,否则在web界面属于对应功能的面板会出错。
2、can'tresolve master hostname and/or portname (mfsmaster:9421)
说明无法识别mfsmaster的主机名或IP,应该编辑/etc/hosts文件,添加以下语句:
主控的IP(如:192.168.1.239)mfsmaster
另外在查看web界面时,新版的moosefs2.0.72需要输入DNSname,直接输入mfsmaster的名称,如不知,可以在mfsmaster输入hostname查看。
3、查看master上的/va/log/message日志出现:
Jan 8 10:10:00 nginx mfsmaster[4845]: chunkservers status:
Jan 8 10:10:00 nginx mfsmaster[4845]: total: usedspace: 0 (0 GB),totalspace: 0 (0 GB), usage: 0.00%
这说明master没有发现到chunker服务器,请检查配置文件。
4.2、Mfs客户端挂接类错误
4.2.1、资源暂时不可用
注意:
1,出现这种情况是由于系统内核的版本问题,一般来说升级内核风险较大,不建议。mfsmount在OEL5.8上是不支持UEK的内核的,目前测试过程中,只发现OEL5.8UEK版本不能挂接,其他版本的可以。一般系统默认有好几个内核,所有在启动是选择不是UEK的内核即可使用mfsmount,如果想自动启动,在/boot/grub/grub.conf中修改默认启动内核的default值即可。
2, 如果在挂接的时候出现:
/usr/local/mfs/bin/mfsmount/mnt/mfs -H 192.168.9.4
mfsmaster accepted connection with parameters: read-write,restricted_ip ; rootmapped to root:root
/bin/mount:无法识别的选项“–no-canonicalize”
Usage: mount -V : print version
mount -h : print this help
mount : list mounted filesystems
mount -l : idem, including volume labels
So far the informational part. Next the mounting.
The command is `mount [-t fstype] something somewhere’.
Details found in /etc/fstab may be omitted.
mount -a [-t|-O] … : mount all stuff from /etc/fstab
mount device : mount device at the known place
mount directory : mount known device here
mount -t type dev dir : ordinary mount command
Note that one does not really mount a device, one mounts
a filesystem (of the given type) found on the device.
One can also mount an already visible directory tree elsewhere:
mount –bind olddir newdir
or move a subtree:
mount –move olddir newdir
One can change the type of mount containing the directory dir:
mount –make-shared dir
mount –make-slave dir
mount –make-private dir
mount –make-unbindable dir
One can change the type of all the mounts in a mount subtree
containing the directory dir:
mount –make-rshared dir
mount –make-rslave dir
mount –make-rprivate dir
mount –make-runbindable dir
A device can be given by name, say /dev/hda1 or /dev/cdrom,
or by label, using -L label or by uuid, using -U uuid .
Other options: [-nfFrsvw] [-o options] [-p passwdfd].
For many more details, say man 8 mount .
error in fuse_mount
是mount的版本过低所导致的问题,在mfsmount的时候需要–no-canonicalize 参数支持。
解决方法:下载新版本, util-linux-ng-2.17进行安装。
[root@localhost ~]# tar -zxvf util-linux-ng-2.17.tar.gz
[root@localhost ~]# cdutil-linux-ng-2.17
[root@localhost util-linux-ng-2.17]#./configure --prefix=/usr/local/util-linux-ng-2.17
[root@localhost util-linux-ng-2.17]#make && make install
[root@localhost util-linux-ng-2.17]# mv/bin/mount /bin/mount.old
[root@localhost util-linux-ng-2.17]# mv/bin/umount /bin/umount.old
[root@localhost util-linux-ng-2.17]# ln-s /usr/local/util-linux-ng-2.17/bin/mount /bin/mount
[root@localhost util-linux-ng-2.17]# ln-s /usr/local/util-linux-ng-2.17/bin/umount /bin/umount
[root@localhost util-linux-ng-2.17]#/usr/local/mfs/bin/mfsmount /var/www/html/ -H 192.168.1.56
mfsmaster accepted connection withparameters: read-write,restricted_ip ; root mapped to root:root
此时再次mfsmount就不会出现上述问题。
4.2.2、无法识别fuse
1、安装了fuse却无法识别
修改环境变量文件/etc/profile ,执行以下命令:
#exportPKG_CONFIG_PATH=/usr/lib/pkgconfig:$PKG_CONFIG_PATH
加载fuse模块到内核:
#modprobefuse(最好加入开机启动)
2、error while loading sharedlibraries: libfuse.so.2: cannot open shared object file: No such file ordirectory
解决方法:输入以下命令更新/etc/ld.so.conf即可,记得在root权限下执行:
#ldconfig
3、fuse: mountpoint is not empty
问题分析:挂载点不为空,看看fuse或mfs客户端是否已经挂载上了,或者查看挂接目录/mnt/mfs下是否已有文件。如果想强行挂接,需要在挂接命令后面加入-o nonempty选项,这样挂接后,原来目录下面的文件全部被mfs文件系统所覆盖,暂时不可查看,卸载掉mfs客户端后,原来目录下的文件会显示出来,不用担心文件丢失。
4.2.3、其他类错误
1、产生df:`/usr/xxtsrc/mfs: Transport endpoint is not connected的错误
处理的方式是umount/usr/xxtsrc/mfs,然后再重新挂载就可以了,这种 情况用于用户MFS客户端出现误杀的情况。
2、can’t open file limited 1000
检查系统的文件描述限制,并重新设置。
3、多个mfs客户端挂接后,如果使用普通用户挂接后,对mfs文件系统的用户UID和GID要求:
在正式环境中,四台服务器在创建web用户时,系统UID、GID可能会不同,由于四个mfs客户端挂接同一个mfsmaster,共享盘里面文件的所属用户都是web,所属组是web,这个web用户的UID和GID是mfs客户端第一次挂接后根据该客户端所属的UID、GID附加的,如果挂接多个客户端,那么该UID和GID会在其他客户端显示出来,这样可能会造成其他客户端无法使用的情况,这一点是和windows不一样的。所以要挂接多个客户端,必须要求四台服务器UID,GID相同,在此,更改了38服务器web用户的UID为54326,GID为54326 ,与34的web用户UID和GID相同。下面给出稳妥的修改方法:
groupmod –g 54326 web(修改web用户的GID)
usermod –u 54326 web(修改web用户的UID)
然后 usermod -g web web
或者添加附加组 usermod –G web web
特殊情况:如果该UID被其他用户所占用,请删除该用户。
如果该GID被其他用户所占用,请删除该组或者添加附加组,然后切换到普通用户下,使用newgrp +用户名的方式来切换GID,记得在修改完UID,GID之后,原来该用户下的文件的UID和GID不会自动变过来,需要重新赋予新的用户和组,
切记修改UID和GID不能直接vi系统配置文件,如果擅自修改,出现无法解决的问题后果自负。
4、在查看web界面的时候,发现有2个文件的goal是0,在查看mfsmaster日志文件的时候,发现重复的提示:
mfsmaster[29045]: chunk00000000001028AF_00000001: there are no copies
mfsmaster[29045]: chunk 0000000000102897_00000001:there are no copies
在chunkserver上,查找不到两个文件,这两个文件应该是先前测试数据遗留下来的无用文件。