rysnc实现linux与windows数据同步
一、前言
1.1目的
1.1.1实现linux之间同步;
1.1.2实现linux与windows之间同步;
1.1.3了解windows定时任务。
1.2部署架构
rpm安装包下载地址:http://rpmfind.net/linux/rpm2html/search.php?query=rsync
Rsync在windows使用的是cwrsync
二、服务部署
2.1部署备份服务端
在192.168.100.101上操作
检查服务安装情况
soft]# rpm -qa|grep rsync
rsync-3.1.2-10.el7.x86_64
没有安装的使用yum安装,没有的话直接用rpm包进行部署
yum -y localinstall rsync-3.1.2-10.el7.x86_64.rpm
编辑配置文件
vim /etc/rsyncd.conf
#全局配置
uid = root
gid = root
use chroot = no
max connections = 4
strict modes = yes
port = 873
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
#局部配置,可配置多个,用于不同网段的客户端同步到不同的目录
[linux]
path = /bak/linux/
comment = linuxbak
auth users = linux_user
uid = root
gid = root
hosts allow = 192.168.100.0/24
secrets file = /etc/rsyncd.secrets
read only = no
list = n
[windows]
path = /bak/windows
comment = windowsbak
auth users = windows_user
uid = root
gid = root
hosts allow = 192.168.100.0/24
secrets file = /etc/rsyncd.secrets
read only = no
list = n
配置密码文件
vim /etc/rsyncd.secrets
linux_user:linux1234
windows_user:windows1234
设置600权限
chmod 600 /etc/rsyncd.secrets
创建存备份文件的目录
mkdir /bak/{linux,windows} -p
启动服务并加入开机自启
systemctl start rsyncd && systemctl enable rsyncd
在/var/log/rsyncd.log可以查看同步情况的日志
2.2部署linux客户端
在192.168.100.110上操作
2.2.1安装rsync服务
# rpm -qa|grep rsync
rsync-3.1.2-10.el7.x86_64
配置密码文件
vim /etc/rsyncd.passwd
linux1234
创建需要备份的目录
mkdir /test1
echo “111” >> /test1/1.txt
echo "nnnn" >> /test1/nohup.out
echo "nnnn" >> /test1/nohup
2.2.2推送并添加计划任务
便捷推送脚本
vim /root/scripts/rsync.sh
rsync -avztopg --password-file=/etc/rsyncd.passwd --port 873 --exclude "nohup.out" --bwlimit=1024 /test1 linux_user@192.168.100.101::linux/192.168.100.110
chmod +x /root/scripts/rsync.sh
测试
bash /root/scripts/rsync.sh
去服务端查看(nohup.out被屏蔽了)
# ls /bak/linux/192.168.100.110/test1/
1.txt nohup
加入计划任务没半小时执行一次
]# crontab -e
*/30 * * * * /root/scripts/rsync.sh
2.3部署windows服务端
2.3.1安装cwrsync
点击安装cwrsync服务,安装过程中需要设置服务端的用户名和密码,我们只用到推送功能,无须在意
安装在E盘下
在bin目录下新建密码文件(可能需要修改权限)
2.3.2添加推送脚本
在bin目录下新建w_rsync.bat脚本文件
注意:
不要用--password-file不然会一直提示password file must not be other-accessible需要手动输入密码才行 改用 "< "就行了,密码文件导入时需要用相对路径,绝对路径无法识别,且密码文件需要放在bin目录下
@echo off
e:
cd \ICW\bin
rsync -avztopg --exclude "nohup.out" --bwlimit=1024 /cygdrive/e/test2 windows_user@192.168.100.101::windows/192.168.100.1 <rsync.passwd
注意:改为rsync -avztopg --exclude "nohup.out" --bwlimit=1024 windows_user@192.168.100.101::windows/192.168.100.1 /cygdrive/e/test2 <rsync.passwd
就会将linux服务器的文件同步到windows上
2.3.3加入计划任务
Ctrl+R输入control,显示控制面板——》系统和安全——》管理工具——》任务计划程序
创建任务
设置触发器,点击新建,设置每个30分钟触发一次
点击操作——》新建,添加执行脚本
最后点击确定即可(可能有弹窗需要输入用户的密码)
2.3实时同步
2.3.1说明
可以根据业务数据实际情况选择实时、同步还是定时同步,也可以两者都用
使用inotify+rsyncd服务进行实时同步
inotify下载地址:https://sourceforge.net/projects/inotify-tools/
Linux实时同步(windows无inotify版本)
2.3.2部署inotify
tar -zxvf inotify-tools-3.13.tar.gz -C /usr/src/
cd /usr/src/inotify-tools-3.13/
]# ./configure --prefix=/usr/local/inotify
make && make install
编写同步脚本
vim /root/scripts/inotify_rsync.sh
#!/bin/bash
host=192.168.100.101
src=/test3
des=linux/192.168.100.110
user=linux_user
/usr/local/inotify/bin/inotifywait -mr --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src | while read files
do
/usr/bin/rsync -avztopg --password-file=/etc/rsyncd.passwd --port 873 --bwlimit=10240 --delete $src $user@$host::$des
echo "${files} was rsynced" >>/var/log/rsync.log 2>&1
done
给执行权限
chmod +x /root/scripts/inotify_rsync.sh
后台启动即可,观察源地址数据变化后备份服务器上是否有变动
cd /root/scripts
nohup ./inotify_rsync.sh &
三、关于rsync
3.1介绍
Remote Sync(远程同步)
是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,保持连接和权限,传输之前执行压缩。
在远程同步,负责发起rsync同步操作的客户机成为发起端。而负责响应来自客户机的rsync同步操作的服务器成为同步源。在同步过程中,同步源负责提供文档的原始位置,发起端响应对该位置具有读取权限。
3.2基本语法格式
1)本地使用:
rsync [OPTION...] SRC... [DEST]
2)通过远程 Shell 使用:
拉: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
推: rsync [OPTION...] SRC... [USER@]HOST:DEST
3)访问 rsync 服务器:
拉: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
推: rsync [OPTION...] SRC... [USER@]HOST::DEST
拉: rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
推: rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
其中:
SRC: 是要复制的源位置
DEST: 是复制目标位置
若本地登录用户与远程主机上的用户一致,可以省略 USER@
使用远程 shell 同步时,主机名与资源之间使用单个冒号“:”作为分隔符
使用 rsync 服务器同步时,主机名与资源之间使用两个冒号“::”作为分隔符
当访问 rsync 服务器时也可以使用 rsync:// URL
“拉”复制是指从远程主机复制文件到本地主机
“推”复制是指从本地主机复制文件到远程主机
当进行“拉”复制时,若指定一个 SRC 且省略 DEST,则只列出资源而不进行复制
3.3选项参数说明
-
选项 说明 -a, ––archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等价于 -rlptgoD (注意不包括 -H) -r, ––recursive 对子目录以递归模式处理 -l, ––links 保持符号链接文件 -H, ––hard-links 保持硬链接文件 -p, ––perms 保持文件权限 -t, ––times 保持文件时间信息 -g, ––group 保持文件属组信息 -o, ––owner 保持文件属主信息 (super-user only) -D 保持设备文件和特殊文件 (super-user only) -z, ––compress 在传输文件时进行压缩处理 ––exclude=PATTERN 指定排除一个不需要传输的文件匹配模式 ––exclude-from=FILE 从 FILE 中读取排除规则 ––include=PATTERN 指定需要传输的文件匹配模式 ––include-from=FILE 从 FILE 中读取包含规则 ––copy-unsafe-links 拷贝指向SRC路径目录树以外的链接文件 ––safe-links 忽略指向SRC路径目录树以外的链接文件(默认) ––existing 仅仅更新那些已经存在于接收端的文件,而不备份那些新创建的文件 ––ignore-existing 忽略那些已经存在于接收端的文件,仅备份那些新创建的文件 -b, ––backup 当有变化时,对目标目录中的旧版文件进行备份 ––backup-dir=DIR 与 -b 结合使用,将备份的文件存到 DIR 目录中 ––link-dest=DIR 当文件未改变时基于 DIR 创建硬链接文件 ––delete 删除那些接收端还有而发送端已经不存在的文件 ––delete-before 接收者在传输之前进行删除操作 (默认) ––delete-during 接收者在传输过程中进行删除操作 ––delete-after 接收者在传输之后进行删除操作 ––delete-excluded 在接收方同时删除被排除的文件 -e, ––rsh=COMMAND 指定替代 rsh 的 shell 程序 ––ignore-errors 即使出现 I/O 错误也进行删除 ––partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输 ––progress 在传输时显示传输过程 -P 等价于 ––partial ––progress ––delay-updates 将正在更新的文件先保存到一个临时目录(默认为 “.tmp”),待传输完毕再更新目标文件 -v, ––verbose 详细输出模式 -q, ––quiet 精简输出模式 -h, ––human-readable 输出文件大小使用易读的单位(如,K,M等) -n, ––dry-run 显示哪些文件将被传输 ––list-only 仅仅列出文件而不进行复制 ––rsyncpath=PROGRAM 指定远程服务器上的 rsync 命令所在路径 ––password-file=FILE 从 FILE 中读取口令,以避免在终端上输入口令,通常在 cron 中连接 rsync 服务器时使用 -4, ––ipv4 使用 IPv4 -6, ––ipv6 使用 IPv6 ––version 打印版本信息 ––help 显示帮助信息 -
若使用普通用户身份运行 rsync 命令,同步后的文件的属主将改变为这个普通用户身份。
-
若使用超级用户身份运行 rsync 命令,同步后的文件的属主将保持原来的用户身份。