Linux&&rsync远程同步
一款快速增量备份工具
命令选项:
-r:递归模式,包含目录及子目录中所有文件
-l:对于符号链接文件仍然复制为符号链接文件
-p:保留文件的权限标记
-t:保留文件的时间标记
-g:保留文件的属组标记(仅超级用户使用)
-o:保留文件的属主标记(仅超级用户使用)
-D:保留设备文件及其他特殊文件
备份操作类型:
rsync源服务器:
- 指备份操作的远程服务器,也称备份源
- 备份源分为rsync源和SSH源两种
基于SSH源的rsync实现(定时同步)
服务端部署步骤
服务端准备好 存放数据的目录 和 需要备份的数据 即可。
客户端部署步骤
确认网络环境,客户端能够访问到服务端。
#创建 存放数据的目录
mkdir -p /var/www/html
#从远处往本地同步:rsync 选项 ssh源 本地目录
rsync -avz --delete root@192.168.75.111:/var/www/html/ /var/www/html/
#将本地同步到远端:rsync 选项 本地目录 ssh源
rsync -avz --delete /var/www/html/ root@192.168.75.111:/var/www/html/
/var/www/html/ : 代表同步html目录下的数据到。。
/var/www/html : 代表同步html这个目录到。。
实现免密钥的rsync或ssh或scp
#本地客户端创建密钥对
ssh-keygen -t rsa
#上传密钥到远处服务端
ssh-copy-id -p 22 root@192.168.75.111
#测试密钥是否生效
ssh root@192.168.75.111
实现定时任务rsync同步
#实现定时备份
crontab -e
30 17 * * * /usr/bin/rsync -az --delete root@192.168.75.111:/var/www/html/ /var/www/html/
参考链接:
https://www.linuxidc.com/Linux/2016-05/131116.htm
基于inotify的rsync实现(实时同步)
Linux内核的inotify机制
作用:监控文件系统的变动情况并做出通知响应
个人感觉非常有用!
可以对系统中的文件变动做到实时的监控
可以实时监控到哪个目录下什么时间出现了什么文件?哪个文件又在什么时间被修改或移除了。
命令:
inotifywait : 用于持续监控,实时输出结果。
-e attrib : ;监控文件的属主、属组变化
详细inotify使用方法请参考:https://www.cnblogs.com/wajika/p/6396748.html
inotifywatch : 用于短期监控,任务完成后再输出结果。
服务端部署步骤
安装辅助工具inotify-tools
#解压缩。
tar zxf inotify-tools-3.14.tar.gz -C /usr/src/
cd /usr/src/inotify-tools-3.14
./configure && make && make install
#启动inotify进行持续监控测试
inotifywait -mrq -e create,move,delete,modify,attrib /var/www/html &
#尝试在/var/www/html目录下创建、删除、修改文件,看inotifywait能否监控到。
#调整inotify内核参数
vim /etc/sysctl.conf
fs.inotify.max_queue_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
sysctl -p
调整inotify内核参数:
max_queue_events : 最大监控事件队列大小。事件如create、delete、modify、attrib等。
max_user_instances : 最多监控实例数。
max_user_watches : 每个实例最多监控文件数
通过inotifywait触发rsync同步操作
使用while、read持续获取监控结果,根据结果做判断、决定执行何种操作。
vim /opt/inotify_rsync.sh
#!/bin/bash
#定义inotify命名行。实时监控
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"
#定义rsync命令行。本地同步到远端。
RSYNC_CMD="rsync -azH --delete /var/www/html/ rput@192.168.75.111:/var/www/html/"
#启动inotify命名行 | 读取inotify产生的监控记录
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
#如果rsync未在执行,则立即启动。
if [ $(pgrep ^rsync$ | wc -l) -le 0 ];then
$RSYNC_CMD
fi
done
#授予执行权限
chmod a+x /opt/inotify_rsync.sh
#执行脚本
/opt/inotify_rsync.sh &
read : 常用于交互式赋值操作
read DIRECTORY EVENT FILE : 定义变量 DIRECTORY、EVENT、FILE并用read分别为三个变量赋值。
while read DIRECTORY EVENT FILE : 只要变量 DIRECTORY、EVENT、FILE存在赋值现象,就为true。
pgrep ^rsync$ : 检测进程中是否存在未执行完毕的rsync进程。保证rsync不会重叠运行!
rsync实现源服务器与客户端的数据同步
服务端部署步骤
#配置rsyncd.conf
vim /etc/rsyncd.conf
#权限用户。登录验证成功后,将登录用户权限映射为nobody用户。
uid = nobody
gid = nobody
#虚根为自定义的共享路径
use chroot = yes
#监听地址
address = 192.168.75.111
#监听端口
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
#允许访问的客户机地址(单个IP地址或地址段)
hosts allow = 192.168.75.0/24
#自定义共享名称
[wwwroot]
#针对哪个路径进行共享
path = /var/www/html
#描述信息。可忽略。
comment = Document Root of dfq.test.com
#只允许从远端读到本地,未允许从本地写到远端。
#read only = yes
read only = no
#定义具备写操作权限的用户列表。允许客户端对服务端的共享目录执行写操作
write list = nobody
#以下文件类型在同步时忽略不进行压缩操作
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z
#用户认证信息。定义登录验证时使用的是哪个用户信息
auth users = backuper
#定义rsync账号文件rsyncd_users.db。内部存有登录验证时使用的用户账号、密码。
secrets file = /etc/rsyncd_users.db
#配置rsync账号文件。创建程序用户信息。
vim /etc/rsyncd_users.db
backuper:pwd123
othername:123456
#改变/etc/rsyncd_users.db文件权限为600.否则会因为非root用户对该文件有读权限而报错
chmod 600 /etc/rsyncd_users.db
#改变共享目录权限。令登录用户映射的nobody用户具备对其写权限,实现客户端对服务端的文件写入。
chmod o+w /var/www/html/
#配置完成后,启动rsync服务
rsync --daemon
客户端部署步骤
#下行检测
#启动rsync.使用登录用户backuper登录源服务器192.168.75.111访问共享项目wwwroot,读取数据到本地/var/www/html目录。
rsync -azv --delete backuper@192.168.75.111::wwwroot /var/www/html
#上行检测
rsync -azv --delete /var/www/html backuper@192.168.75.111::wwwroot
基于rsync源的免交互实现
#保存密码在本地文件
vim /etc/server.pass
pwd123
chmod 600 /etc/server.pass
#启动测试
rsync -azv --delete --password-file=/etc/server.pass /var/www/html/ backuper@192.168.75.111::wwwroot
#设置定时任务
crontab -e
30 20 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass /var/www/html/ backuper@192.168.75.111::wwwroot
service crond restart
chkconfig crond on
rsync常见错误一
问题现象:
rsync: failed to connect to 192.168.75.111:connection refused(111)
rsync error:error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.6]
问题分析:
确认一下rsync服务是否正在运行,rsync服务监听的端口是否存在且客户端能访问到。
rsync常见错误二
问题现象:
@ERROR:auth failed on module wwwroot
rsync error : error starting client-server protocol (code 5)at main.c(1503) [receiver=3.0.6]
解决方法:
#改变/etc/rsyncd_users.db文件权限为600.否则会因为非root用户对该文件有读权限而报错
chmod 600 /etc/rsyncd_users.db
来源:CSDN
作者:默行默致
链接:https://blog.csdn.net/dfq737211338/article/details/103896776