定义:是开源,高速的,数据复制(拷贝)工具
作用:工作中需要定时/实时数据备份。本地服务器目录,不同机器,不同机房之间的数据备份,都可以用rsync完成。
rsync就是一个命令
命令操作如下3条:
a:把数据从一个地方复制到另一个地方(仅在一台机器增量),相当于cp;
[root@localhost ~]# rsync /etc/hosts /opt
[root@localhost ~]# ls /opt
hosts
b:通过加参数实现删除的功能,相当于rm;
删除文件内容
root@localhost ~]# touch /null.txt #创建一个空文件
[root@localhost ~]# ls /opt
hosts
[root@localhost ~]# cat /opt/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@localhost ~]# rsync -r --delete /null.txt /opt/hosts #让前面的null.txt和后面的hosts一样,都是空内容
[root@localhost ~]# cat /opt/hosts
[root@localhost ~]#
删除所有文件
[root@localhost ~]# mkdir /null #创建一个空目录
[root@localhost ~]# rsync -r --delete /null/ /opt/ #让前面的null目录和后面的opt目录保持一致,都是空目录
[root@localhost ~]# ls /opt
[root@localhost ~]#
c:查看属性信息,相当于ls (不重要)
[root@localhost ~]# rsync /etc/hosts
-rw-r--r-- 158 2013/06/07 22:31:32 hosts
借助类似ssh隧道传输数据,适合不同机器之间的复制。类似于scp,scp是远程全量拷贝,rsync是远程增量拷贝。
拉:从远端拉取到本地:
rsync 参数 认证用户@主机地址:源路径 本地路径
推:从本地推到远端:
rsync 参数 本地路径 认证用户@主机地址:目标路径
推的实例:把自己/opt下的东西取到另一台主机的/opt目录下
[root@bogon ~]# rsync -avz /etc/hosts root@192.168.119.129:/opt/
[root@localhost ~]# cd /opt #在另一台主机上查看已经接受到了
[root@localhost opt]# ls
hosts
拉的实例:把另一台/opt下的东西取到自己的/opt目录下
[root@bogon ~]# cd /opt
[root@bogon opt]# ls
[root@bogon opt]# pwd
/opt
[root@bogon opt]# rsync -avz root@192.168.119.129:/opt/* ./ #192.168.119.129为取东西主机的ip
[root@bogon ~]# cd /opt
[root@bogon opt]# ls
hosts
首先要搭建rsync服务端(要有守护进程),然后才能在客户端实现推拉数据,这是企业运维的重要模式,重点重点重点!!!!! 服务器端守护进程,客户端执行命令
拉:从远端拉取到本地:
语法1:(常用)
rsync 参数 虚拟用户@主机地址::模块名 本地路径
语法2:
rsync 参数 rsync://虚拟用户@主机地址/模块名 本地路径
推:从本地推到远端:
语法1:(常用)
rsync 参数 本地路径 虚拟用户@主机地址::模块名
语法2:
rsync 参数 本地路径 rsync://虚拟用户@主机地址/模块名
准备工作:
记得先把防火墙以及selinux关掉不然有想不到的错误(在/etc/selinux/config改为SELINUX=disabled)
守护进程客户端,服务器端的配置:
服务器端:
1:首先将/etc/rsyncd.conf备份为/etc/rsyncd.conf.ori,再将源文件配置成如下模样:
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# configuration example:
uid = rsync #管理备份目录的用户
gid = rsync #管理备份目录的用户组
use chroot = no #安全功能,数据是否锁定到备份目录
fake super = yes #不需要daemon以root运行
max connections = 200 #并发连接,同时多少客户端访问
timeout = 600 #超时时间
pid file = /var/run/rsyncd.pid #进程号所在文件
lock file = /var/run/rsync.lock #锁文件
log file = /var/log/rsyncd.log #日志文件,查看报错等
ignore errors #忽略错误
read only = false #可写
list = false #不允许列表
hosts allow = 192.168.119.0/24 #哪些主机可以访问
auth users = rsync_backup #远程虚拟连接用户
secrets file = /etc/rsync.password #存放密码的文件
[backup] #模块名,远程访问使用模块名访问
comment = welcome to oldboyedu backup! #说明注释
path = /backup/ #服务器端用户备份的目录,用户和组,rsync:rsync
2:创建用户,创建备份目录以及修改备份目录的属主与属组
[root@backup ~]# useradd rsync
[root@backup ~]# id rsync
uid=1001(rsync) gid=1001(rsync) 组=1001(rsync)
[root@backup ~]#mkdir -p /backup
[root@backup ~]#chown -R rsync:rsync /backup/
[root@backup ~]# ls -ld /backup/
drwxr-xr-x 2 rsync rsync 19 3月 9 21:12 /backup/
3、给密码文件设置用户,密码,授予600的权限
[root@backup ~]# echo "rsync_backup:123456" > /etc/rsync.password
[root@backup ~]#chmod 600 /etc/rsync.password
[root@backup ~]# cat /etc/rsync.password
rsync_backup:123456
客户端:
1、设置环境变量
[root@nfs01 ~]#echo ' export RSYNC_PASSWORD=123456' >>/etc/bashrc
[root@nfs01 ~]# tail -1 /etc/bashrc
export RSYNC_PASSWORD=123456
[root@nfs01 ~]# . /etc/bashrc
[root@nfs01 ~]# echo $RSYNC_PASSWORD
123456
2、将密码写入到密码文件并授权
[root@nfs01 ~]# echo "123456" > /etc/rsync.password
[root@nfs01 ~]# chmod 600 /etc/rsync.password
结果:
测试从客户端实现增量复制(推)
客户端操作:
[root@nfs01 ~]# rsync -avz /etc rsync_backup@192.168.119.129::backup #先拷贝/etc目录过去
[root@nfs01 ~]# touch /etc/oldboy.txt #这是创建一个新文件,复制时只复制增加的这个文件
[root@nfs01 ~]# rsync -avz /etc rsync_backup@192.168.119.129::backup
sending incremental file list
etc/
etc/oldboy.txt
sent 46,257 bytes received 662 bytes 93,838.00 bytes/sec
total size is 27,503,040 speedup is 586.18
- - exclude 排除参数
[root@nfs01 data]# touch {a..d}
[root@nfs01 data]# rsync -avz /data/ --exclude={a..b} rsync_backup@192.168.119.129::backup
sending incremental file list
./
c
d
- - exclude-from 从文件中排除
[root@nfs01 data]# touch {10..20}
[root@nfs01 data]# ls
10 11 12 13 14 15 16 17 18 19 20
[root@nfs01 data]# seq 10 15 >paichu.txt
[root@nfs01 data]# cat paichu.txt
10
11
12
13
14
15
[root@nfs01 data]# rsync -avz /data/ --exclude-from=./paichu.txt rsync_backup@192.168.119.129::backup
sending incremental file list
./
16
17
18
19
20
paichu.txt
rsync作为镜像,相当于raid1,让两台服务器目录保持一致
[root@nfs01 data]# rm -f *
[root@nfs01 data]# ls
[root@nfs01 data]# rsync -avz --delete /data/ rsync_backup@192.168.119.129::backup
sending incremental file list
deleting paichu.txt
deleting hosts
deleting d
deleting c
deleting 20
deleting 19
deleting 18
deleting 17
deleting 16
./
在服务器端查看
[root@backup ~]# ls /backup/
[root@backup ~]#
首先 vim /etc/rsyncd.conf文件,在尾行添加下列模块
[data]
path = /data
然后创建这个模块的目录,以及授予属主和属组,查看一下最后重启服务
[root@backup ~]# mkdir -p /data
[root@backup ~]# chown -R rsync:rsync /data
[root@backup ~]# ls -ld /data
drwxr-xr-x 2 rsync rsync 6 12月 5 16:34 /data
[root@backup ~]# systemctl restart rsyncd
在客户端测试一下( /data指整个data目录,/data/指data目录下内容)
[root@nfs01 ~]# cd /data/
[root@nfs01 data]# ls
[root@nfs01 data]# touch {a..c}
[root@nfs01 data]# ls
a b c
[root@nfs01 data]# rsync -avz /data/ rsync_backup@192.168.119.129::data
sending incremental file list
./
a
b
c
在服务端查看
[root@backup ~]# ls /data/
a b c