准备主机
192.168.1.247
(源)
/home/appdata
192.168.1.248
(目的)
/home/appdata
实现效果:
1.用rsync手动将192.168.1.247
的/home/appdata同步到192.168.1.248的/home/appdata目录。
2.用inotify组件实现文件的实时同步
3.实现两个服务器的双向实时同步
手动单向同步
目的主机操作(192.168.1.248)
安装
rsync
yum -y install rsync
修改
rsync
配置文件
vim /etc/rsyncd.conf
transfer logging = yes
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
uid = nobody
gid = nobody
use chroot = yes
ignore errors
read only = no
[data]
comment = web content
path = /home #配置data所指向的path
auth users = root #允许的操作用户
secrets file = /etc/rsyncd.secrets #配置客户端的用户密码
host allow = 192.168.1.247/255.255.255.255 #允许访问的主机
list = false
fake super = yes
修改用户密码文件
vim /etc/rsyncd.secrets
root:123456
修改密码文件权限
chmod 600 /etc/rsyncd.secret
创建备份文件夹修改权限和属组
mkdir /home/appdatachmod -R 777 /home/appdatachown -R nobody:nobody /home/appdata
启动后台
rsync
进程
rsync --daemon
源主机操作(192.168.1.247)
安装
rsync
yum -y install rsync
添加rsync用户密码文件 ,与备份服务器的相对应,这个文件只需要写入密码,修改权限为600
echo "abcd@1234" >> /etc/rsync.pass && chmod 600 /etc/rsync.pass
命令同步 ,如果添加--delete参数可以删除多余得文件
/usr/bin/rsync -avz --delete --password-file=/etc/rsync.pass /home/appdata root@192.168.1.248::data
rsync
参数详解
-a 参数,相当于 -rlptgoD ( -r 是递归 -l 是链接文件,意思是拷贝链接文件; -p 表示保持文件原有权限;-t 保持文件原有时间; -g 保持文件原有用户组; -o 保持文件原有属主; -D 相当于块设备文件);-z 传输时压缩;-P 传输进度;-v 传输时的进度等信息;--delete 删除操作--exclude 忽略文件或目录
inotify自动同步
在上面的基础上我们需要对源主机增加以下操作来完成自动同步
安装下载工具
yum -y install wget
yum -y install gcc gcc-c++
下载inotify安装包
wget --no-check-certificate https://jaist.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz
解压安装包并进入解压文件夹
tar -zxf inotify-tools-3.13.tar.gz
cd inotify-tools-3.13/
安装inotify
./configure
make
make install
检查是否安装成功
inotifywait
No files specified to watch!表示成功了
编写inotify脚本调用rsync
#!/bin/bash
src=/home/xiongan
inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib $src | while read file;
do
/usr/bin/rsync -avz --delete --password-file=/etc/rsync.pass /home/appdata root@192.168.1.248::data > /dev/null 2>&1
echo "${file} was rsynced" >>/var/log/rsync.log 2>&1
done
后台执行脚本
nohup bash inotify_back.sh &