- 测试环境: CentOS 6.5,CentOS 7
【声明】: 文章主要参考来源 -【rsync 实现文件备份同步】,然后根据自己的具体情况进行了实例说明,在此谢谢前辈们的经验指导…
rsync 是类 unix系统下的数据镜像备份工具 —— remote sync;
一款快速增量备份工具 Remote Sync;
远程同步 支持本地复制,或者与其他SSH、rsync主机同步。
第一次同步时, rsync 会复制全部内容,但在下一次只传输修改过的文件;
rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。
rsync 是用 “ rsync 算法” 提供了一个客户机和远程文件服务器的文件同步的快速方法
>1. 能更新整个目录和树和文件系统
>2. 有选择性的保持符号链链、硬链接、文件属于、权限、设备以及时间等
>3. 对于安装来说,无任何特殊权限要求
>4. 对于多个文件来说,内部流水线减少文件等待的延时
>5. 安全,能用 rsh、ssh 或直接端口做为传输端口,或者 socket 连接
>6. 支持匿名 rsync 同步文件,是理想的镜像工具
>7. 免费啊
- 配置此功能,首先明确的是,在角色上,需要服务端和客户端 (1:N)
- 服务端,主要负责文件的首次上传,更新操作等
- 客户端,会随着服务端的文件变化进行同步-(下载,更新,删除等)
在操作上,最简单的配置比例为【服务端:客户端 = 1:1】
例如,本次的实际操作中
我配置了一个服务端(IP:192.168.1.160
)
其中的一个客户端(IP:192.168.1.161
)
后期添加了另一个客户端(IP:192.168.1.150
)
yum install rsync
rsyncd.conf (主配置文件)、rsyncd.secrets (密码文件)、rsyncd.motd ( rysnc 服务器显示信息)
mkdir /etc/rsyncd
touch /etc/rsyncd/rsyncd.conf #创建 rsyncd.conf,这是 rsync 服务器的配置文件
ln -s /etc/rsyncd/rsyncd.conf /etc/rsyncd.conf #创建软链接
touch /etc/rsyncd/rsyncd.secrets #创建 rsyncd.secrets ,这是用户密码文件
chmod 600 /etc/rsyncd/rsyncd.secrets #将rsyncd.secrets这个密码文件的文件属性设为root拥有, 且权限要设为 600, 否则无法备份成功
touch /etc/rsyncd/rsyncd.motd
rsyncd.conf
是 rsync 服务器主要配置文件。以下为我的文件信息,可作参考或进行进一步的修改/server/ftpfile/file3
目录排除在外# Distributed under the terms of the GNU General Public License v2
# Minimal configuration file for rsync daemon
# See rsync(1) and rsyncd.conf(5) man pages for help
# This line is required by the /etc/init.d/rsyncd script
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
secrets file = /etc/rsyncd/rsyncd.secrets
motd file = /etc/rsyncd/rsyncd.motd
port = 873
#指定运行端口,默认是873,您可以自己指定;
address = 192.168.1.160
#指定服务端IP地址
# uid = nobody
# gid = nobody
uid = root
gid = root
use chroot = no
read only = yes
#limit access to private LANs
hosts allow=192.168.1.161 192.168.1.150 #以空格分割 客户端IP
hosts deny=*
max connections = 10
#This will give you a separate log file
log file = /var/log/rsync.log
#This will log every file transferred - up to 85,000+ per user, per sync
transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
[ftpfile]
path = /server/ftpfile
list=yes
ignore errors = true
auth users = root
#auth users 是必须在服务器上存在的真实的系统用户,如果你想用多个用户以 “,” 号隔开,比如auth users = moTzxx,root
comment = This is moTzxx-comment
#提交信息,便于识别
exclude = file3/
#此处表明,同步文件 除去所有的 file3 目录,如果以斜杠开头,则可指定“path = /server/ftpfile”下的任何目录或文件,例如“/file1/file5/re.log”,指的是文件“/server/ftpfile/file1/file5/re.log”
rsyncd.secrets
的内容格式为:user:passwordvim /etc/rsyncd/rsyncd.secrets
添加信息:root:root123
chown root.root /etc/rsyncd/rsyncd.secrets
chmod 600 /etc/rsyncd/rsyncd.secrets
rysnc
服务器信息的,也就是用户登录信息。比如让用户知道这个服务器是谁提供的等,其实影响并不大,只是为了便于说明vim /etc/rsyncd/rsyncd.motd
自定义添加如下:
++++++++++++++++++++++++++++++++++++++++++
Welcome to moTzxx`s world!
++++++++++++++++++++++++++++++++++++++++++
daemon
参数方式,详情见附录, 此时为服务端操作(IP:192.168.1.160)如下依然为【root】 权限下操作
/usr/bin/rsync --daemon
/usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf #--config用于指定rsyncd.conf的位置,如果在/etc下可以不写
lsof -i :873
【注:】修改rsync配置后服务器端需要重启
killall rsync
rsync --daemon
lsof -i :873
【注】如果第二步能获得 873 进程信息,这一步没必要进行操作,本人在开启测试前,就关闭了防火墙
iptables
,所以我们至少在服务器端要让你所定义的 rsync
服务器端口通过,客户端上也应该让通过。iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
iptables -L #查看一下防火墙是不是打开了 873端口
service iptables stop
将防火墙关掉。当然在生产环境这是很危险的,可千万不要这么做!yum install rsync
【注意】:服务器端的密码应该以 user:password 的形式存放明文密码,而客户端的密码只需要以 password 的明文形式保存
【执行命令】(举例密码为 root123):
echo root123> rsyncd.secrets
chmod 600 rsyncd.secrets
rsync --list-only 192.168.1.160::ftpfile
rsync --list-only --password-file=/server/rsyncd.secrets 192.168.1.160::ftpfile
rsync -avzP 192.168.1.160::ftpfile /server/ftpfile
rsync -avzP --password-file=/server/rsyncd.secrets 192.168.1.160::ftpfile /server/ftpfile
rsync -avzP --delete 192.168.1.160::ftpfile /server/ftpfile
rsync -avzP --delete --password-file=/server/rsyncd.secrets 192.168.1.160::ftpfile /server/ftpfile
表示客户端上的数据要与服务器端完全一致,如果
ftpfile
目录中有服务器上不存在的文件,则删除。
最终目的是让ftpfile
目录上的数据完全与服务器上保持一致;用的时候要小心点,最好不要把已经有重要数所据的目录,当做本地更新目录,否则会把你的数据全部删除
/etc/crontab
中添加命令/etc/crontab
中vi /etc/crontab
或者通过 crontab 进行设定 ,执行命令:
crontab -e
*/1 * * * * rsync -avzP --password-file=/server/rsyncd.secrets 192.168.1.160::ftpfile /server/ftpfile
vim /server/ftp-update-ftpfile.sh #自定义即可
#!/bin/bash
rsync -avzP --password-file=/server/rsyncd.secrets 192.168.1.160::ftpfile /server/ftpfile
crontab -e
*/1 * * * * /server/ftp-update-ftpfile.sh
killall crond #注:杀死crond 服务器的进程;
ps aux |grep crond # 注:查看一下是否被杀死;
/usr/sbin/crond #注:启动 crond 服务器;
> - 使用非脚本命令执行的可行性高,期间测试了好多次,当然也有可能是自己的配置存在问题
> - 使用脚本命令,相对而言要方便些,更改脚本文件信息后,不需要每次重启 crond ,当然希望能正确配置,那就再好不过了
> - 个人测试而言,脚本命令对于 CentOS6.5 可行,而对于 CentOS7 却不执行
- CentOS 6.4 中的 cron 计划任务配置方法
- CentOS 设置定时任务执行指定脚本的方法