MooseFS分布式文件系统+keepalived高可用+unison和intoify实时双机同步

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MooseFS分布式文件系统+keepalived高可用+unison和intoify实时双机同步相关的知识,希望对你有一定的参考价值。

3Unison双向同步工具配置

3.1Unison简介

UnisonWindowsLinux以及其他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

[[email protected]~]# tar -xzvf ocaml-3.12.0.tar.gz

[[email protected]~]# cd ocaml-3.12.0

[[email protected]]# ./configure

[[email protected]]# make world opt

[[email protected]]# make install

1、 安装unison

[[email protected] ~]# tar -xzvfunison-2.40.63.tar.gz

[[email protected] ~]# cdunison-2.40.63

[[email protected] unison-2.40.63]#make UISTYLE=text

[[email protected]]# 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目录。

[[email protected] unison-2.40.63]# cp unison /usr/local/bin   然后再执行make install

3.3、配置ssh双机信任

我们要配置非root用户下的普通用户的ssh双机信任。这里我们使用安装mfs文件系统的时的mfs用户

在两台服务器上创建unison用户,主机server1IP192.168.1.237,备机server2IP192.168.1.236

[[email protected]~]# useradd -m mfs

[[email protected]~]# passwd mfs

[[email protected]~]# useradd -m mfs

[[email protected]~]# passwd mfs

server1上创建key并配置server2的信任

[[email protected]~]# su - mfs

[[email protected]~]$ ssh-keygen -t rsa

在提示保存私钥(key)和公钥(public key)的位置时,使用默认值;

在提示是否需要私钥密码(passphrase)时,直接敲回车,即不使用私钥密码。

之后,将生成一对密钥,id_rsa(私钥文件)和id_rsa.pub(公钥文件),保存在/home/unison/.ssh/目录下。

将公钥添加到server2 authorized_keys 文件中

[[email protected]~]$ cd  /home/mfs/.ssh/

[[email protected]~]$ ssh 192.168.1.237 cat /home/mfs/.ssh/id_rsa.pub >> authorized_keys

[[email protected]~]$ ssh 192.168.1.236 cat /home/mfs/.ssh/id_rsa.pub >> authorized_keys

[[email protected]~]$ scp authorized_keys 192.168.1.236:/home/mfs/.ssh/

两台机器上都执行chmod600 /home/mfs/.ssh/authorized_keys,这个文件的权限一定要是600,至于为什么,你知道的!!!

然后分别在两台机器上执行:

[[email protected]~]$ ssh 192.168.1.237 date

[[email protected]~]$ ssh 192.168.1.236 date

在第一次执行时,会要求输入用户密码信息,再次执行时不需要输入密码就能显示系统日期,这说明ssh互相信任成功,在正式环境中,我们需要使用mfs这个用户,而不是unison用户。

注意:如果主备机更换了IP或者使用其他用户名用来同步,则需要重新配置ssh双机信任。否则同步无法使用。

3.4Unison的使用

在正式使用unison之前最好测试一下,测试过之后它会自动在普通用户的家目录生成一个.unison的隐藏目录,这个隐藏目录里有三类文件,一种是随机命名的文件,记录文件同步实时信息,内容较少。default.prf默认配置文件,我们后面需要修改。unison.log记录所有同步事件。

在两台服务器上创建test目录,用于测试

[[email protected]~]# su - mfs

[[email protected]~]$ mkdir test

[[email protected]~]# su - mfs

[[email protected]~]$ mkdir test

在两台服务器上分别执行一次unison,如果出现提示确认,则直接敲回车选择默认值

需要说明的是:两台机器上需要同步的文件夹最好权限都是一样的,不然会出现错误信息。

[[email protected]~]$unison/home/mfs/test/ ssh://[email protected]//home/mfs/test/

[[email protected]~]$unison/home/mfs/test/ ssh://[email protected]//home/mfs/test/

注意事项:如果出现

bashunisoncommand not found

Fatal error:Lost connection with the server

查看你的unison命令是否是系统的可执行命令,如果不是,加入到系统路径中。在上面的命令末尾加入参数-servercmd=/usr/local/bin/unison来告诉unison命令的位置。

如果正式使用的话,我们需要通过配置文件来使用unison

修改两台服务器的unison配置文件,输入以下内容

[[email protected]~]$ vim /home/mfs/.unison/default.prf

#Unison preferences file

#force=/home/unison/test  local->remote

root=/usr/local/mfs/var/mfs

root=ssh://[email protected]//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

                                          

[[email protected]~]$ vim /home/mfs/.unison/default.prf

#Unison preferences file

#force=/home/unison/test  local->remote

root=/usr/local/mfs/var/mfs

root=ssh://[email protected]//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 表示同步时仅通过文件的创建时间来比较,如果选项为falseUnison则将比较两地文件的内容。

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表示同步的某个目录为空时不会停止运转

PSWindows下的unison配置文件默认位于C:\Documentsand Settings\currentuser\.unison目录,默认的配置文件名是default.prf

Unison双向同步基本原理是:假如有A B两个文件夹,A文件夹把自己的改动同步到BB文件夹也把自己的改动同步到A,最后A B两文件夹的内容相同,是AB文件夹的合集。

Unison双向同步的一个缺点是,对于一个文件在两个同步文件夹中都被修改时,unison是不会去同步的,因为unison无法判断以那个为准,需要人工指定。

3.5Unison测试

首先分别在server1server2/usr/local/mfs/var/mfs目录下创建文件或目录,然后在server1上执行unison,接着如果在server1server2上都能看到各自创建的文件,就说明同步成功。

分别在server1server2上创建文件

[[email protected]~]$ cd /usr/local/mfs/var/mfs

[[email protected]]$ touch 1.txt touch 3.txt

[[email protected]~]$ cd /usr/local/mfs/var/mfs

[[email protected]]$ touch 2.txt touch 4.txt

server1上执行unison

[[email protected]~]$ unison

server1server2上查看文件是否同步

[[email protected]~]$ cd /usr/local/mfs/var/mfs

[[email protected]]$ ls

1.txt2.txt 3.txt 4.txt

[[email protected]~]$ cd /usr/local/mfs/var/mfs

[[email protected]]$ ls

1.txt2.txt 3.txt 4.txt

均看到了“1.txt 2.txt 3.txt4.txt”所有文件,说明文件同步已经成功!

3.6、安装inotify-tools

考虑到unison的双向同步性,我们不可能使用日常调度来执行unison同步,所以加入监控机制inotify

1、查看系统是否支持inotify

[[email protected]~]# 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,文件属性被修改,如 chmodchowntouch

IN_CLOSE_WRITE,可写文件被 close

IN_CLOSE_NOWRITE,不可写文件被 close

IN_OPEN,文件被 open

IN_MOVED_FROM,文件被移走, mv

IN_MOVED_TO,文件被移来,如 mvcp

IN_CREATE,创建新文件

IN_DELETE,文件被删除,如 rm

IN_DELETE_SELF,自删除,即一个可执行文件在执行时删除自己

2、安装inotify

[[email protected]~]#  tar -zxvf inotify-tools-3.14.tar.gz

[[email protected]~]# cd inotify-tools-3.14

[[email protected] ~ inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify

[[email protected] ~ 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实时监控脚本

[[email protected]~]# 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、 分别在server1server2unison用户下让脚本在后台运行

[[email protected] ~]$ nohup./unison.sh &

[[email protected] ~]$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.8mfs监控脚本

1、需在被监控机上需要安装好nagios-pluginsnrpe,我们直接编辑一个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)

       

以上是关于MooseFS分布式文件系统+keepalived高可用+unison和intoify实时双机同步的主要内容,如果未能解决你的问题,请参考以下文章

MFS(MooseFS分布式文件系统)

MFS(MooseFS分布式文件系统)

MooseFS分布式文件系统介绍

分布式系统MooseFS

存储调研:MooseFS分布式文件系统体系结构

八十八页MooseFS超实用手册--目前开源的几种分布式文件系统及MooseFS介绍