CentOS7 服务器文件双向同步方案

主要参考了http://maxsum.me/archives/65/这篇文章
感谢这篇文章的作者
另外还需要感谢同事亮哥 解答了我很多的问题 这个脚本也是在亮哥指点下完成的
众所周知,由于CentOS7改了很多东西,有许多东西更蛋疼了。。。
找了很多文件同步的方案,最终确定使用了Unison+inotify-tools。
Unison是一套双向同步软件,可以实现跨平台的双向同步,但是不带文件修改检测。
inotify 是 Linux 自带的一套监控文件变化的工具,配合 Unison 使用,可以实现实时同步。
不多啰嗦,我就直接给自动化部署脚本了。

!/bin/bash

rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
rpm -Uvh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

安装EPEL源

yum repolist
yum update -y

更新软件

yum groupinstall “Development Tools” “Development Libraries” -y

安装开发工具和库

yum install ocaml ctags-etags yum install glibc-static glib* inotify-tools -y

安装编译Unison需要的软件和inotify-tools文件变化监控

wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.48.3.tar.gz
tar xf unison-2.48.3.tar.gz
cd unison-2.48.3
make UISTYLE=text THREADS=true STATIC=true
cp unison /usr/local/bin/

编译会出错但是unison能运行就OK

mkdir ~/.unison
cat /dev/null; then

timestamp=\$(date "+%s");

else

if [ \$((\$(date "+%s") - \$timestamp)) -gt \$mininterval ]; then
  timestamp=\$(date "+%s");
  {
    #防止大量 unison 同时运行
    if ps -e | grep unison > /dev/null; then return; fi
    unison;
  }&
else if [ \$((\$(date "+%s") - \$timestamp)) -gt 0 ]; then
  timestamp=\$((\$(date "+%s") + \$mininterval));
  {
    sleep \$mininterval;
    #防止大量 unison 同时运行
    if ps -e | grep unison > /dev/null; then return; fi
    unison;
  }&
fi fi

fi
done
EOF

echo “/5 * touch /home/sync” >> /var/spool/cron/root #home目录改成你要同步的目录
systemctl enable crond.service
systemctl start crond.service
systemctl restart crond.service

为什么要用cron呢~因为。。。如果这个操作(对文件的新增修改) inotify就不会探测别文件、文件夹的修改和删除 Orz

把以上文件保存成sync.sh文件
然后加执行权限

上面那个执行完毕你还需要SSH 信任

这里需要双机之间互相无需密码登录对方的 SSH。下面这段推荐在 root 下执行,因为 unison 同步必须要有对目录的读写权限,如果你要同步的目录只有一个用户的文件(比如都是属于 www 的),也可以不用 root。两台机各自执行w

//生成 SSH key
ssh-keygen
//复制到另一服务器目录
ssh-copy-id -i .ssh/id_rsa.pub root@[另一服务器的 IP]

另外 我建议每次开机新建一个screen在后台跑这个sync.sh。。。
写到启动文件的话会出问题的。。。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *