rsync远程同步
rsync远程同步是一款主要为快速增量备份的工具;可以用于本地的复制,也可以用户跨主机(ssh/rsync主机同步)之间的复制;官网:https://rsync.samba.org/
搭建rsync
配置rsync源服务器
[root@node1 ~]# yum -y install rsync
[root@node1 ~]# vim /etc/rsyncd.conf #把所有内容删掉然后添加下面的内容
uid = nobody #以匿名用户方式登录
gid = nobody
use chroot = yes #禁锢源目录
address = 192.168.218.214 #指定rsync源服务器地址
port 873 #指定端口号
log file = /var/log/rsyncd.log #日志位置
pid file = /var/run/rsyncd.pid #pid位置
hosts allow = 192.168.218.214/24 #允许访问的客户机网段
[wwwroot]
path = /var/www/html #源目录的路径
comment = Document Root of www.ljm.com #标识rsync源的域名
read only = yes #开启只读
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z
auth users = backuper #授权用户,可以设置多个用户,多个用户以空格区分
secrets file = /etc/user.db #存放用户信息的数据文件
[root@node1 ~]# vim /etc/user.db #编辑该文件
backuper:123 #写入用户和用户的密码
[root@node1 ~]# chmod 600 /etc/user.db
[root@node1 ~]# mkdir -p /var/www/html
[root@node1 ~]# chmod +r /var/www/html
[root@node1 ~]# ls -ld /var/www/html/
drwxr-xr-x 2 root root 6 11月 17 2020 /var/www/html/
[root@node1 ~]# rsync --daemon #开启rsync服务
[root@node1 ~]# netstat -napt |grep 873
tcp 0 0 192.168.218.214:873 0.0.0.0:* LISTEN 86385/rsync
[root@node1 ~]# echo "persona" > /var/www/html/1.txt
[root@node1 ~]# cat /var/www/html/1.txt
persona
客户端操作
[root@node2 elasticsearch-head]# mkdir /abc
[root@node2 elasticsearch-head]# rsync -avz backuper@192.168.218.214::wwwroot /abc/ #同步源服务器的wwwroot全局模块指定的源目录到/abc目录下
Password:
receiving incremental file list
./
1.txt
sent 46 bytes received 113 bytes 35.33 bytes/sec
total size is 8 speedup is 0.05
[root@node2 elasticsearch-head]# cd ~
[root@node2 ~]# ls /abc
1.txt
[root@node2 ~]# cat /abc/1.txt
persona
设置免密登录
[root@node2 ~]# echo "123" > /etc/server.pass
[root@node2 ~]# chmod 600 /etc/server.pass
[root@node2 ~]# rsync -avz --password-file=/etc/server.pass backuper@192.168.218.214::wwwroot /abc/ #免密登录要在同步时指定密码文件
receiving incremental file list
sent 20 bytes received 58 bytes 156.00 bytes/sec
total size is 8 speedup is 0.10
搭建inotify
服务端配置
[root@node1 ~]# vim /etc/rsyncd.conf #编辑rsync配置文件
uid = root #改为root
gid = root
read only =no #关闭只读
#重启rsync服务
[root@node1 ~]# kill `cat /var/run/rsyncd.pid`
[root@node1 ~]# netstat -napt |grep 873
[root@node1 ~]# rsync --daemon
[root@node1 ~]# netstat -napt |grep 873
tcp 0 0 192.168.218.214:873 0.0.0.0:* LISTEN 87070/rsync
客户端配置
[root@node2 ~]# vim /etc/sysctl.conf
fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
[root@node2 ~]# sysctl -p
[root@node2 ~]# yum -y install gcc gcc-c++
#安装inotify
[root@node2 ~]# tar zxvf inotify-tools-3.14.tar.gz -C /opt
[root@node2 ~]# cd /opt/inotify-tools-3.14/
[root@node2 inotify-tools-3.14]# ./configure
[root@node2 inotify-tools-3.14]# make && make install
[root@node2 abc]# cd ~
#创建一个实时监控并同步的脚本
[root@node2 ~]# vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /abc/" #监控/abc目录的各种改动操作
RSYNC_CMD="rsync -apzH --delete --password-file=/etc/server.pass /abc/ backuper@192.168.218.214::wwwroot/" #进行同步,将/abc目录下的文件同步到源服务器上
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ] ; then #进行判断,如果/abc目录下有修改则进行同步
$RSYNC_CMD
fi
done
[root@node2 ~]# chmod +x /opt/inotify.sh
[root@node2 ~]# chmod +x /etc/rc.d/rc.local
[root@node2 ~]# echo "/opt/inotify.sh" >> /etc/rc.d/rc.local #设置开机自启
[root@node2 ~]# sh -x /opt/inotify.sh #执行脚本
然后再开一个终端,进入/abc/目录下创建文件
[root@node2 inotify-tools-3.14]# cd /abc
[root@node2 abc]# ls
1.txt 2.txt 666
[root@node2 abc]# touch 123456
服务端查看/var/www/html目录
|