首先准备两台服务器(centos7)
A:192.168.75.160
B:192.168.75.161
A机器当做客户端,B机器当做服务端
rsync 安装
客户端服务器端都要安装rsync ,但是客户端A不需要启动,服务器端B需要启动
接下来先安装rsync,可以用源码安装,从rsync官网:rsync.samba.org,下载源码包,或者用yum安装
1)源码安装:
可以进到 https://rsync.samba.org/ftp/rsync/下载
也可以用wget下载
# tar -xzvf rsync-3.1.3.tar.gz
# ./configure (默认的安装路径是/usr/local 可以通过 ./configure --help查看到)
# make && make install
安装完成,如果需要开机启动的话,需要把rsync启动命令放到 rc.local 文件中,服务端需要开机启动,客户端不需要
echo "/usr/local/bin/rsync --daemon --config=/etc/rsyncd.conf" >>/etc/rc.local
2)rpm安装(yum)
# yum install rsync
yum 安装会把rsync安装到 /usr/bin目录下,并且会生成 /etc/xinetd.d/rsync文件;
如果想要开机启动和源码安装方式相同,还有另外方法:
用yum安装时,会生成/etc/xinetd.d/rsync文件
centos7 下 rsync 默认会以xinetd方式运行rsync服务,所以只需启动xinetd服务即可
但是要修改下配置文件/etc/xinetd.d/rsync
1 # default: off 2 # description: The rsync server is a good addition to an ftp server, as it \ 3 # allows crc checksumming etc. 4 service rsync 5 { 6 disable = no 7 flags = IPv6 8 socket_type = stream 9 wait = no 10 user = root 11 server = /usr/bin/rsync 12 server_args = --daemon --config=/etc/rsyncd.conf 13 log_on_failure += USERID 14 }
配置完毕后 ,还需要安装xinetd包,否则xinetd服务无法启动,
# yum install xinetd 安装
# /etc/init.d/xinetd start 启动
# chkconfig xinetd on 设置开机启动
# netstat -tunlp | grep 873 检查是否启动成功
rsync配置
服务器端配置:
rsync服务器端需要两个配置文件 rsyncd.conf rsyncd.password
1)rsyncd.conf文件
rsyncd.conf 默认放在/etc 目录下此文件需要手动创建,是rsync服务的主配置文件;rsyncd.password 主要 用户存储rsync用户名和密码
uid = root gid = root use chroot = no max connections = 10 timeout=600 log file = /var/run/rsyncd.log pid file = /var/run/rsyncd.pid lock file = /var/run/rsyncd.lock [backup] path = /root/backup/ ignore errors read only = no list = no auth users = cap secrets file = /etc/rsyncd.password host allow = 192.168.75.160
rsync默认是在nobody用户下运行,为了之后由于不明权限问题影响,此处uid=root用户
[backup]为要同步的模块名称 可以随意命名,但之后用到模块需要名称保持一致 ,可以有多个模块,此处指举了一个例子
path 为该模块要同步的目录
auth users 为用户,这个用户是自己命名,跟系统用户没有关系,是在 rsyncd.password 文件中与之对应的
secrets file 为用户、密码文件
2) rsyncd.password
只需添加 用户名 : 密码即可 (可以有多组用户名和密码)
# vim /etc/rsyncd.password
cap:cap
创建完成之后更改这个文件的权限为600
# chmod 600 /etc/rsyncd.password
创建完毕之后,需要对模块中的目录授权
chown root:root -R /root/backup/
客户端配置
客户端配置只需要创建 /etc/rsyncd.password文件
客户端rsyncd.password文件里面只需要添加密码即可,不需要用户,但是有多个用户名和密码时,注意与服务器端rsyncd.password文件顺序对应上
# vim /etc/rsyncd.password
cap
同样授权 600
# chmod 600 /etc/rsyncd.password
启动rsync服务
如果使用源码安装rsync 使用 rsync-daemon 来启动rsync
# echo PATH=$PATH:/usr/local/bin/ >> /etc/profile # source /etc/profile # rsync -daemon # ps aux | grep rsync # netstat -tunlp | grep 873
如果 rsync 的配置文件不在 /etc/目录下,那么启动时需要在参数中手动加上配置文件路径,比如
rsync --daemon --config=/RSYNCPATH/
如果用yum安装
/etc/init.d/xinetd start
停止服务
源码安装停止方法
# pkill rsync
yum安装停止方法
/etc/init.d/xinetd stop
inotify的安装
再客户端进行安装,inotify主要功能是监视客户端被监控目录是否有变化,如果有变化,就向服务器端进行推送
先查看当前系统是否支持inotify
[root@VM_8_32_centos ~]# ll /proc/sys/fs/inotify total 0 -rw-r--r-- 1 root root 0 Dec 18 15:50 max_queued_events -rw-r--r-- 1 root root 0 Dec 18 15:50 max_user_instances -rw-r--r-- 1 root root 0 Dec 18 15:50 max_user_watches
显示这三个文件证明支持
这三个文件说明
max_user_watches:设置inotifywait或inotifywatch命令可以监视的文件数量(单进程) max_user_instances:设置每个用户可以运行的inotifywait或inotifywatch命令的进程数。 max_queued_events:设置inotify实例事件(event)队列可容纳的事件数量。
安装inotify方式可以用源码包安装 也可以用yum安装
源码安装:
# wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz # tar -xzvf inotify-tools-3.14.tar.gz # cd inotify-tools-3.14 # ./configure --prefix=/usr/local/inotify # make # make install
[root@VM_8_32_centos bin]# ls /usr/local/inotify/bin/
inotifywait inotifywatch
一共安装了2个工具(命令),即inotifywait和inotifywatch
inotifywait:在被监控的文件或目录上等待特定文件系统事件(open、close、delete等)发生,执行后处于阻塞状态,适合在shell脚本中使用。
inotifywatch:收集被监视的文件系统使用度统计数据,指定文件系统事件发生的次数统计
接下来编写脚本,rsynctest.sh
#!/bin/bash # src=/root/backup/ des=backup host=192.168.75.161 user=cap /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T%w%f%e' -e modify,delete,create,attrib $src | while read files do /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/rsyncd.password $src $user@$host::$des echo "${files} was fsynced " >>/tmp/rsync.log 2>&1 done
运行rsynctest.sh脚本,这个脚本是我在网上找的,有个问题就是里面 inotifywait 监控到变化的 files 变量 ,在下面rsync中实际并没有用到,这样每次虽然监控到是哪些文件有变化,但是rsync都是做的全量同步,又找了其他文档,有如下写法
#!/bin/bash # src=/root/backup/ user=cap host=192.168.75.161 des=backup /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f %e' -e modify,delete,create,attrib,close_write,move $src | while read file do INO_EVENT=$(echo $file | awk '{print $4}') INO_FILE=$(echo $file | awk '{print $3}') echo "------------------------------$(date)--------------------------" echo "$file" echo "$INO_EVENT" echo "$INO_FILE" if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]] then echo 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO' rsync -avzcR --password-file=/etc/rsyncd.password $(dirname ${INO_FILE}) $user@$host::${des} fi if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]] then echo 'DELETE or MOVED_FROM' rsync -avzcR --delete --password-file=/etc/rsyncd.password $(dirname ${INO_FILE}) $user@$host::${des} fi if [[ $INO_EVENT =~ 'ATTRIB' ]] then echo 'ATTRIB' if [ ! -d "$INO_FILE" ] then rsync -avzcR --password-file=/etc/rsyncd.password $(dirname ${INO_FILE}) $user@$host::${des} fi fi done
现在可以进行测试,在客户端 /root/backup/ 目录下进行文件操作(增删改查等),服务器端会随之更新变化
PS
rsync --delete /空目录 /要删除的目录
ctrl + R --> 输入历史命令的关键字 --> 按下右光标键
参考文献:https://yq.aliyun.com/articles/43197
https://www.ilanni.com/?spm=a2c4e.11153940.blogcont43197.26.1aad7857f1yu9o&p=8513
https://www.cnblogs.com/hackerer/p/5243639.html
https://www.cnblogs.com/ginvip/p/6430986.html