centos双机热备 inotify+unison实现数据主从双向实时同步(下)

现在的情况是数据库能主从相互同步  但是上传的资源文件并不能同步

(参考自:https://www.jianshu.com/p/95d4fbc5e9a1)

准备环境

主服务器  192.168.3.112

从服务器  192.168.3.118

指定要同步的文件夹  /usr/GRWebResources

配置步骤

安装Objective Caml compiler

主从服务器都要安装

yum install make  gcc gcc-c++
cd /usr/local
wget http://caml.inria.fr/pub/distrib/ocaml-4.03/ocaml-4.03.0.tar.gz
tar  -zxvf ocaml-4.03.0.tar.gz
cd ocaml-4.03.0
./configure
make world opt
make install

安装Unison

主从服务器都要安装

yum install ctags-etags
cd /usr/local
wget  http://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.48.4.tar.gz
mkdir unison-2.48.4 && cd unison-2.48.4
tar -zxvf /usr/local/unison-2.48.4.tar.gz
cd src
make UISTYLE=text THREADS=true
cp unison /usr/local/bin/
//有版本信息出现则安装成功
unison -version

安装inotify

主从服务器都要安装

mkdir /usr/local/inotify  创建文件夹
cd /usr/local/inotify  进入新建的文件夹
inotify-tools-3.14-8.el7.x86_64.rpm   下载该安装包
上传安装包到inotify目录
rpm -ivh inotify-tools-3.14-8.el7.x86_64.rpm   安装inotify

安装rsync

yum install rsync

配置双机SSH信任

在主服务器192.168.3.112配置

ssh-keygen -t rsa -C "root@服务器ip地址"
//连续按3次enter
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys 
//给权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
//需要输入一次密码 
rsync -avz /root/.ssh/authorized_keys [email protected]:/root/.ssh/authorized_keys

在从服务器192.168.3.118配置

ssh-keygen
//连续按三次enter
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
//给权限 
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys 
//需要输入一次密码 
rsync -avz /root/.ssh/authorized_keys [email protected]:/root/.ssh/authorized_keys

查看双机SSH信任(登录不需要输入密码说明配置成功)

在主服务器上登录从服务器(登录完以后记得exit)

在从服务器上登录主服务器(登录完以后记得exit)

配置双机同步

在主服务器上配置

先进入  /usr/local/unison-2.48.4/src/  目录
mkdir -p /root/.unison/  创建文件夹
vim /root/.unison/default.prf  编辑配置文件

#Unison preferences file 
//root是配置的两个目录本地和远程,注意远程IP地址后面是两个//
root = /usr/GRWebResources
root = ssh://[email protected]//usr/GRWebResources
batch = true 
maxthreads = 300
owner = true 
group = true
//使用ssh压缩传输方式
perms = -1 
fastcheck = false
//true表示通过文件创建时间来比较两地文件,若为false比较文件的内容
rsync = false 
//保持同步过来保持读写权限
sshargs = -C 
xferbycopying = true
//默认值是true,表示当需要同步的两个目录一个为空时,unison将停止,这里设置为false,即便为空unison也不会停止运转
confirmbigdel = false 
log = true
logfile = /root/.unison/unison.log

在从服务器上配置

先进入  /usr/local/unison-2.48.4/src/  目录
mkdir -p /root/.unison/  创建文件夹
vim /root/.unison/default.prf  编辑配置文件

#Unison preferences file 
//root是配置的两个目录本地和远程,注意远程IP地址后面是两个//
root = /usr/GRWebResources
root = ssh://[email protected]//usr/GRWebResources
batch = true 
maxthreads = 300
owner = true 
group = true
//使用ssh压缩传输方式
perms = -1 
fastcheck = false
//true表示通过文件创建时间来比较两地文件,若为false比较文件的内容
rsync = false 
//保持同步过来保持读写权限
sshargs = -C 
xferbycopying = true
//默认值是true,表示当需要同步的两个目录一个为空时,unison将停止,这里设置为false,即便为空unison也不会停止运转
confirmbigdel = false 
log = true
logfile = /root/.unison/unison.log

创建脚本文件

两个服务器都要创建.sh脚本

//到usr目录下创建
cd /usr
vim unison.sh

内容如下:

#/bin/bash
src="/usr/GRWebResources/" 
/usr/bin/inotifywait -mrq -e create,delete,modify,move $src | while read line; do
/usr/local/bin/unison 
echo -n "$(date +%F-%T) $line" >> /var/log/inotify.log
done

//让脚本后台执行
#chmod +x  unison.sh
#nohup ./unison.sh >/dev/null 2>&1 &

现在我们上传文件到主服务器的/usr/GRWebResources/文件夹  从服务器能自动同步

配置服务器重启后同步仍然能生效

主服务器配置

vim /etc/rc.d/rc.local   编辑开机自启动脚本文件

# 主服务器开始同步从服务器文件
echo "hello" > /usr/GRWebResources/readme
output=`cat /root/.unison/unison.log`
# 执行unison脚本
nohup /usr/unison.sh >/dev/null 2>&1 &
# 再次登录从服务器
ssh -p 22 192.168.15.252
# 在从服务器上也执行一下unison脚本
nohup /usr/unison.sh >/dev/null 2>&1 &
# 退出从服务器
exit

从服务器配置

vim /etc/rc.d/rc.local   编辑开机自启动脚本文件

# login master server
ssh -p 22 192.168.3.112
# clear master server file
echo "" > /root/.unison/ar6b5d1d840377b68d060bd24fc3d85ccf
# exit from master server
exit
# delete useless file
rm -rf /root/.unison/ar6b5d1d840377b68d060bd24fc3d85ccf
# exec backup server command
# clear file why ? https://unix.stackexchange.com/questions/176646/unison-end-of-file-exception
echo "" > /root/.unison/ard3a10332d3dc3e59c9d30404c085a968
# first delete always fail , so I use below method deal with it!!!!!!!!!
echo "hello" > /usr/GRWebResources/readme

经过以上配置  就算服务器重启  文件依然能够同步

发布了7 篇原创文章 · 获赞 20 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Berzingou/article/details/84773578