一、目标
centos7下Rsync文件同步的配置
二、平台
centos7.6,rsync.x86_64 0:3.1.2-6.el7_6.1
三、解析
Rsync是一个数据镜像备份软件。
Rsync主配置文件:/etc/rsyncd.conf
四、服务端的安装设置
1.安装rsync服务端软件
[root@xserver ~]# yum install rsync -y
2.配置rsync配置文件
[root@xserver rsyncFolder]# vim /etc/rsyncd.conf 在配置文件中追加以下内容:
#设置服务器信息提示文件名称,在这个文件rsyncd.moted中写上提示信息
motd file = /etc/rsyncd.moted
#开启Rsync数据传输日志功能
transfer logging = yes
#日志文件名
log file = /var/run/rsyncd.log
#Rsync进程号保存文件名
pid file = /var/run/rsyncd.pid
#设置锁文件名称
lock file = /var/run/rsyncd.lock
#Rsync服务端口
port 873
#Rsync侦听地址(肯定是本机的ip地址咯)
address = 10.100.100.210
#设置进行数据传输时所用到的用户名和组
uid = nobody
gid = nobody
use chroot = no
#这里设置客户端是否有可写权限?yes代表可写。
read only = yes
#设置Rsync的最大并发连接数
max connections = 10
# 同步文件夹名
[rsyncFolder]
#同步文件夹描述
comment = kahn's rsync folder
#同步文件夹路径
path = /rsyncFolder
ignore errors
#exclude = dir
#开启下列用户能访问本Rsync服务,这非常重要。
auth users = kahn,xRsync1,serena
#访问Rsync的用户名和密码文件存放在什么地方
secrets file = /etc/rsyncd.secrets
#允许哪些主机或网段访问
hosts allow = 10.100.100.0/255.255.255.0
#拒绝哪些主机访问
hosts deny = *
#客户端请求显示模块列表是,本模块名称是否显示,默认为True,
list = false
3.创建访问Rsync的用户名和密码文件
[root@xserver rsyncFolder]# echo "serena:x3721" > /etc/rsyncd.secrets
[root@xserver rsyncFolder]# echo "xRsync1:x3690" >> /etc/rsyncd.secrets
[root@xserver rsyncFolder]# echo "kahn:x123456" >> /etc/rsyncd.secrets
[root@xserver rsyncFolder]# chmod 600 /etc/rsyncd.secrets
[root@xserver rsyncFolder]#
[root@xserver rsyncFolder]# ll /etc/rsy*
-rw-r--r--. 1 root root 1785 Sep 2 07:45 /etc/rsyncd.conf
-rw-r--r--. 1 root root 458 Sep 2 07:18 /etc/rsyncd.conf.bak
-rw-------. 1 root root 40 Sep 2 07:48 /etc/rsyncd.secrets
-rw-r--r--. 1 root root 3232 Oct 30 2018 /etc/rsyslog.conf
/etc/rsyslog.d:
total 4
-rw-r--r--. 1 root root 49 Oct 30 2018 listen.conf
[root@xserver rsyncFolder]#
[root@xserver rsyncFolder]# cat /etc/rsyncd.secrets
serena:x3721
xRsync1:x3690
kahn:x123456
4.给Rsync服务器设置个欢迎信息。
[root@xserver rsyncFolder]# echo "Hello world ! this is kahn's Rsync Server" > /etc/rsyncd.motd
5.启动Rsync服务,并设置Rsync服务开机自启。
启动Rsync服务:[root@xserver rsyncFolder]# rsync --daemon
设置Rsync开机自启:[root@xserver]# echo "/usr/bin/rsync --daemon" >> /etc/rc.local
6.防火墙放开Rsync服务并重启,
[root@xserver rsyncFolder]# firewall-cmd --permanent --add-port=873/tcp
success
[root@xserver rsyncFolder]# firewall-cmd --reload
success
[root@xserver rsyncFolder]#
五、Rsync客户端的设置
1.安装rsync软件[root@xclient ~]# yum install rsync -y
有的已默认安装了,可以用命令看下版本信息[root@xserver rsyncFolder]# rsync --version
2.创建一个文件夹用于同步来自服务器的文件。[root@xclient ~]# mkdir /xRsyncBAK
3.连接到Rsync服务器
[root@xclient ~]# rsync -vzrtopg --progress xRsync1@10.100.100.210::rsyncFolder /xRsyncBAK/
Password:
receiving incremental file list
./
hello.txt
36 100% 35.16kB/s 0:00:00 (xfr#1, to-chk=0/2)
sent 46 bytes received 146 bytes 42.67 bytes/sec
total size is 36 speedup is 0.19
[root@xclient ~]#
遇到一个小坑,执行诸如上面的代码同步东西的时候报错了,如下
[root@xclient ~]# rsync -avz xRsync1@10.100.100.210::rsyncFolder /xRsyncBAK/
rsync: failed to connect to 10.100.100.210 (10.100.100.210): Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(125) [Receiver=3.1.2]
[root@xclient ~]#
这样是说明服务端的rsync服务没启动造成的。在服务器端执行rsync --daemon即可解决。
4.此时,仅仅只能同步一次,即敲一次命令[root@xclient ~]# rsync -vzrtopg --progress kahn@10.100.100.210::rsyncFolder /xRsyncBAK/ 同步一次,不敲命令不同步。或者这就叫手工同步。不信?下面再同步一次给你看
[root@xclient xRsyncBAK]# rsync -vzrtopg --progress kahn@10.100.100.210::rsyncFolder /xRsyncBAK/
Password:
receiving incremental file list
./
server1.txt
0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/3)
sent 46 bytes received 136 bytes 40.44 bytes/sec
total size is 36 speedup is 0.20
[root@xclient xRsyncBAK]# ls
clientCreate hello.txt server1.txt
[root@xclient xRsyncBAK]#
六、在服务器端上执行,让Rsync通过ssh从服务器端传递文件到客户端
1.先将服务器和客户端的主机名修改一下,便于我们写rsync命令
[root@xserver ~]# hostnamectl set-hostname xserver 在服务器上执行该命令,即将服务器的主机名命名为xserver
[root@xclient ~]# hostnamectl set-hostname xclient 在客户端上执行该命令,即将客户端主机名命名为xclient
2.修改服务器端和客户端的hosts文件修改一下,便于写rsync命令
root@xclient ~]# vim /etc/hosts 客户端和服务器端的hosts文件都追加以下两行。
10.100.100.210 xserver
10.100.100.230 xclient
3.在服务器端使用rsync传输文件到客户端
解析:-t复制时间,*就是普通的*,*就是将服务器端当前文件夹下的所有文件,xclient客户端的主机名,/xRsyncBAK客户端的物理文件夹路径、目标文件夹路径。 然后输入yes回车,再输入客户端的root密码回车。
[root@xserver ~]# rsync -t * xclient:/xRsyncBAK
The authenticity of host 'xclient (10.100.100.230)' can't be established.
ECDSA key fingerprint is SHA256:MScEQUpZIw7acLtgX6hFSlaCp+XbJTbOVmffaJB8KUA.
ECDSA key fingerprint is MD5:45:6f:f2:d3:39:c7:87:9e:2d:11:aa:9d:54:17:3d:09.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'xclient,10.100.100.230' (ECDSA) to the list of known hosts.
root@xclient's password:
[root@xserver ~]#
执行完毕后,在客户端的相应文件夹下,你会发现文件已经同步过去了。这就是通过ssh同步文件的。
再注意一下,上面是不递归拷贝,要想递归拷贝加参数-r。使用看man手册你会发现一大大坨参数。
七、使用rsync对本机不通文件夹的文件进行同步
1.将root家目录下的所有文件递归同步到/home/kahn/xfolder下去。[root@xserver ~]# rsync -avzr * /home/kahn/xfolder/
[root@xserver ~]# tree ~
/root
├── anaconda-ks.cfg
├── original-ks.cfg
└── testServerFolder
└── server1.txt
1 directory, 3 files
[root@xserver ~]#
[root@xserver ~]# tree /home/kahn/xfolder/
/home/kahn/xfolder/
0 directories, 0 files
[root@xserver ~]#
[root@xserver ~]# rsync -avzr * /home/kahn/xfolder/
sending incremental file list
anaconda-ks.cfg
original-ks.cfg
testServerFolder/
testServerFolder/server1.txt
sent 2,396 bytes received 81 bytes 4,954.00 bytes/sec
total size is 5,008 speedup is 2.02
[root@xserver ~]#
[root@xserver ~]# tree /home/kahn/xfolder/
/home/kahn/xfolder/
├── anaconda-ks.cfg
├── original-ks.cfg
└── testServerFolder
└── server1.txt
1 directory, 3 files
[root@xserver ~]#
八、在客户端上执行,让Rsync通过ssh从服务器端传递文件到客户端
1.下面的命令意思是,在客户端上执行rsync,归档同步,从服务器端的/home/kahn/xfolder文件夹及文件夹本身的所有内容,注意是包含xolder文件夹本身,同步至本机(客户机)的/tmp/kahnclient/文件夹下。
[root@xclient ~]# rsync -avzr xserver:/home/kahn/xfolder /tmp/kahnclient/
The authenticity of host 'xserver (10.100.100.210)' can't be established.
ECDSA key fingerprint is SHA256:Dhrir3IdiKyNSakp2tJ2of8RdvPpIgqn9u4NliLxuLg.
ECDSA key fingerprint is MD5:8b:27:cb:fb:5e:e7:12:96:49:37:fb:e0:5c:ba:8d:bc.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'xserver,10.100.100.210' (ECDSA) to the list of known hosts.
root@xserver's password:
receiving incremental file list
xfolder/
xfolder/anaconda-ks.cfg
xfolder/original-ks.cfg
xfolder/testServerFolder/
xfolder/testServerFolder/server1.txt
sent 93 bytes received 2,449 bytes 299.06 bytes/sec
total size is 5,008 speedup is 1.97
[root@xclient ~]#
[root@xclient ~]# ls /tmp/kahnclient/
xfolder
[root@xclient ~]# ls /tmp/kahnclient/xfolder/
anaconda-ks.cfg original-ks.cfg testServerFolder
[root@xclient ~]# ls /tmp/kahnclient/xfolder/testServerFolder/
server1.txt
[root@xclient ~]#
哎,本意想是拷贝服务器端的/home/kahn/xfolder下的所有文件(不包含xfolder本身),这样的话就得这样写/home/kahn/xfolder/*
八、在客户端上,查看服务器端的同步列表
1.首先得将服务器端的rsync配置文件/etc/rsyncd.conf中的list = false改为true
2.在客户端执行命令
命令解析,xRsync1就是配置的rsync虚拟用户,10.100.100.210就是rsync服务器端。回车即可。
可以看到服务器端仅仅“共享”了一个文件夹叫rsyncFolder,后面的是描述。注意哦,无需输入密码,任何一个虚拟用户都行。
[root@xclient ~]# rsync --list-only xRsync1@10.100.100.210::
rsyncFolder kahn's rsync folder
[root@xclient ~]#