rsync,remote synchronize,顾名思义,它是一款实现远程同步功能的软件,它在同步文件的同时,能够保持原来文件的权限、时间、软硬连接等附加信息。html
rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,并且能够经过ssh方式来传输文件,这样其保密性也很是好,另外它仍是免费的软件。linux
rsync 包括以下的一些特性:算法
能更新整个目录和树和文件系统;
有选择性的保持符号链链、硬连接、文件属于、权限、设备以及时间等;
对于安装来讲,无任何特殊权限要求;
对于多个文件来讲,内部流水线减小文件等待的延时;
能用rsh、ssh 或直接端口作为传输入端口;
支持匿名rsync 同步文件,是理想的镜像工具。vim
更多用法参考:http://www.javashuo.com/article/p-kncfwfgv-m.html ,这里就很少赘述。安全
实现数据备份同步,须要两台机器,一台做为rsync服务器,一台做为rsync客户端。这里,rsync服务器的IP地址为172.16.1.41,rsync客户端的IP地址为172.16.1.31。服务器
CentOS系统默认没有rsync命令,因此须要安装,且两台机器都要安装。ssh
[root@rsync ~]# yum install -y rsync //服务器安装 rsync
[root@nfs ~]# yum install -y rsync //客户端安装 rsync
关闭selinux和防火墙,防止后面有问题tcp
[root@rsync ~]# systemctl stop firewalld [root@rsync ~]# systemctl disable firewalld [root@rsync ~]# vim /etc/sysconfig/selinux //作如下修改,而后重启 SELINUX=disabled
[root@nfs ~]# systemctl stop firewalld [root@nfs ~]# systemctl disable firewalld [root@nfs ~]# vim /etc/sysconfig/selinux //作如下修改,而后重启 SELINUX=disabled
[root@rsync ~]# vim /etc/rsyncd.conf //写入下面内容 uid = root gid = root use chroot = no max connections = 4 log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid [backup] //自定义模块名为backup path = /backup/ ignore errors read only = false list = true hosts allow = 172.16.1.0/24 auth users = rsync_backup secrets file = /etc/rsync.password
上面各类参数的含义:ide
port:指定在哪一个端口启动rsyncd服务,默认是873端口。 log file:指定日志文件。 pid file:指定pid文件,这个文件的做用涉及服务的启动、中止等进程管理操做。 address:指定启动rsyncd服务的IP。假如你的机器有多个IP,就能够指定由其中一个启动rsyncd服务,若是不指定该参数,默认是在所有IP上启动。 []:指定模块名,里面内容自定义。 path:指定数据存放的路径。 use chroot true|false:表示在传输文件前首先chroot到path参数所指定的目录下。这样作的缘由是实现额外的安全防御,但缺点是须要以roots权限,而且不能备份指向外部的符号链接所指向的目录文件。默认状况下chroot值为true,若是你的数据当中有软链接文件,建议你设置成false。 max connections:指定最大的链接数,默认是0,即没有限制。 read only ture|false:若是为true,则不能上传到该模块指定的路径下。 list:表示当用户查询该服务器上的可用模块时,该模块是否被列出,设定为true则列出,false则隐藏。 uid/gid:指定传输文件时以哪一个用户/组的身份传输。 auth users:指定传输时要使用的用户名。 secrets file:指定密码文件,该参数连同上面的参数若是不指定,则不使用密码验证。注意该密码文件的权限必定要是600。格式:用户名:密码 hosts allow:表示被容许链接该模块的主机,能够是IP或者网段,若是是多个,中间用空格隔开。
[root@rsync ~]# mkdir /backup [root@rsync ~]# ls -ld /backup/ drwxr-xr-x. 2 root root 30 8月 9 12:39 /backup/
[root@rsync ~]# echo "rsync_backup:grewan" > /etc/rsync.password [root@rsync ~]# chmod 600 /etc/rsync.password
[root@rsync ~]# rsync --daemon --config=/etc/rsyncd.conf [root@rsync ~]# ps aux |grep rsyncd root 10270 0.0 0.0 114740 552 ? Ss 12:09 0:00 rsync --daemon --config=/etc/rsyncd.conf [root@rsync ~]# netstat -an |grep 873 tcp 0 0 172.16.1.41:873 0.0.0.0:* LISTEN //已经在监听873端口 [root@rsync ~]# cat /var/log/rsync.log 2018/08/09 16:08:18 [897] rsyncd version 3.1.2 starting, listening on port 873 [root@rsync ~]# vim /etc/rc.d/rc.local //开机启动rsync,最后面添加下面一行 /usr/bin/rsync --daemon --config=/etc/rsyncd.conf
[root@nfs ~]# echo "grewan" > /etc/rsync.password //该密码就是服务端rsync_backup用户的密码 [root@nfs ~]# chmod 600 /etc/rsync.password
若是服务端不设置auth users,那么默认就是以root用户身份来备份,在传输时候能够加上指定用户,也能够不加工具
[root@nfs ~]# mkdir /backup [root@nfs ~]# touch /backup/123.txt /backup/1 /backup/222.sh [root@nfs ~]# rsync -avL /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password //推数据到服务器 sending incremental file list ./ 1 123.txt 222.sh sent 221 bytes received 76 bytes 594.00 bytes/sec total size is 0 speedup is 0.00
数据备份成功
在生产环境下,对于生产服务器的数据确定是须要备份,咱们能够在生产型服务器上配置好rsync 服务器,让这台备份服务器每隔一段时间同步备份一次服务器上的数据;而且让每一个备份都是完整备份。这种备份至关于天天为服务器的数据作一个镜像,当生产型服务器发生事故时,咱们能够轻松恢复数 据,能把数据损失降到最低。
假如如今要实现这个功能:“当数据丢失在2小时内恢复全部数据”,那就能够每隔2小时执行一次备份,能够经过脚原本实现,而且脚本能够按期删掉超过当前日期一段时间的备份,防止磁盘空间不足。
按期执行任务须要编辑crontab:
[root@nfs ~]# crontab -e * */2 * * * rsync -avL --delete / rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
表示每隔2小时执行一次备份,而且是备份根目录(固然备份根目录有些不太好,实际状况下是针对重要数据进行备份,这里只是举个例子)
若是数据丢失,那咱们也能够进行恢复,经过脚本判断数据丢失,结果为真则向rsync服务器拉数据回来。
更多资料参考: