rsync命令的工作模式:
第一种:shell模式,也称作本地模式
第二种:远程shell模式,此时可以利用ssh协议承载其数据传输过程
第三种:列表模式,其工作方式与ls相似,仅列出源的内容: -nv
第四种:服务器模式,此时,rsync可以工作为守护进程,能够接受客服端的数据传输请求:在使用时,可以使用rsync命令把文件发送给守护进程,也可以向服务器端请求获取文件
rsync有许多选项:
-n: 在不确定命令是否能按意愿执行时,务必要事先测试,
-v: --verbose,详细输出模式
-q: --quite,静默模式
-c: --checksum,开启校验功能,强制对文件传输进行校验
-r: --recursive,递归复制:
-a: --archives,归档,保留文件的原有属性
-p: --perms,保留文件的权限
-t: --time,保留文件的时间戳
-l: --links, 保留文件的符号链接
-g: --group, 保留文件的属组
-o: --owner, 保留文件的属主
-D: --devices 保留设备文件
-e SSH: 表示使用ssh协议作承载
-z: 对文件压缩后传输
--progress: 显示进度条
--stats:显示统计结果
递归复制示例:
rsync -r /etc abc#把/etc下的所有文件递归复制到abc目录里
rsync -r /mydata/data /backups/ : #会把目录data直接同步至/backups目录中
rsync -r /mydata/data/ /backups/ : 会把目录data/中的内容同步至/backups目录中
rsync -e ssh -r redis-4.0.2 root@192.168.1.51:/tmp#把本地的redis-4.0.2目录推送到远程主机192.168.1.51下的目录/tmp下
配置rsync以daemon的方式运行:
1、设定rsync服务器端:
1)安装并启动xinetd
# yum -y install xinetd
2) 为rsync服务提供配置文件
配置文件为/etc/rsyncd.conf
定义一个全局配置和多个rsync共享配置
#Global Settings
uid = nobody
gid = nobody
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
#Directory to be synced
[synced_name]
path = /path/to/some_dir
ignore erros = yes
read only = no
write only = no
hosts allow = white_list_ip/net
hosts deny = black_list_ip/net
说明:
1、二者都不出现时,默认允许访问:
2、只出现hosts allow: 定义白名单,但没有被匹配的主机由默认规则处理,即为允许:
3、只出现hosts deny: 定义黑面单,出现在名单中的都被拒绝
4、二者同时出现,先检查hosts allow,如果匹配就allow,否则,检查hosts
deny,如果匹配则拒绝:如二者均无匹配,则由默认规则处理,即为允许:
list = false
uid = root
gid = root
auth users = username
secrets file = /etc/rsync.passwd
3)配置密码文件/etc/rsyncd.passwd
文件格式(明文):
username:password
文件权限要设置为600;
4)配置服务能够启动
# chkconfig rsync on
# service xinetd start
监听于873/tcp
2、在服务器上做测试
如果需要做周期性操作,则需要将命令写入crontab中:
实际演示:
服务器端:192.168.1.49
客户端:192.168.1.51
CentOS自带rsync
服务器端:
1、建立数据目录
[root@localhost ~]# mkdir -pv /mydata/data
mkdir: 已创建目录 "/mydata"
mkdir: 已创建目录 "/mydata/data"
2、创建配置文件
[root@localhost ~]# vim /etc/rsyncd.conf
uid = nobody #设置运行rsync进程的用户
gid = nobody
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid #CentOS7中yum安装不需要指定pid file 否则报错
log file = /var/log/rsyncd.log #日志文件
[mydata]
path = /mydata/data #实际需要同步的路径
ignore errors = yes
read only = no #可以pull
write only = no #可以push
hosts allow = 192.168.1.0/24 #允许访问的主机或网段
hosts deny = *
list = false
uid = root
gid = root
auth users = myuser #客户端获取文件的身份此用户并不是本机确实存在的用户
secrets file = /etc/rsync.passwd #用来认证客户端的密钥文件
3、创建密码文件
[root@localhost ~]# vim /etc/rsync.passwd
myuser:mypass
4、修改密码文件权限
[root@localhost ~]# chmod 600 /etc/rsync.passwd
5、把rsync服务设置为开机启动并启动服务
[root@localhost ~]# systemctl enable rsyncd.service
ln -s '/usr/lib/systemd/system/rsyncd.service' '/etc/systemd/system/multi-user.target.wants/rsyncd.service'
[root@localhost ~]# systemctl start rsyncd.service
6、查看rsync监听的端口
[root@localhost ~]# ss -tnlp|grep 873
LISTEN 0 5 *:873 *:* users:(("rsync",28684,4))
LISTEN 0 5 :::873 :::* users:(("rsync",28684,5))
测试把客户端的jenkis文件push到服务器的mydata目录下
客户端:
[root@localhost src]# rsync jenkins-cli.jar myuser@192.168.1.49::mydata
Password:
服务器端:
可以正常的看到该文件
[root@localhost mydata]# cd data/
[root@localhost data]# ls
jenkins-cli.jar
测试把服务器端/mydata/data/目录下的jenkis文件再pull到本地的/root目录下
[root@localhost src]# rsync myuser@192.168.1.49::mydata/* /root
Password:
[root@localhost src]# cd /root/
[root@localhost ~]# ls
anaconda-ks.cfg install.log install.log.syslog jenkins-cli.jar