原始链接:
https://www.cnblogs.com/7qin/p/17909989.html
https://www.cnblogs.com/daiwei-123/p/17284965.html
1. rsync远程同步
1. 什么是rsync远程同步
rsync是CS架构的数据镜像备份工具,可以实现全量备份和快速增量备份支持本地复制或ssh、rsync主机同步。rsync默认端口为 873
rsync特性:可以在不通主机之间镜像同步整个目录树,支持增量备份、保持链接和权限、时间、属性且传输前自动执行压缩、rsync不需要特殊权限即可安装,centos系统默认安装,支持匿名传输,注意发起端要有对应目录位置的读权限。
2. 优缺点:
rsync优点:
1)增量备份,支持socket(daemon守护进程),集中备份(支持推拉,都是以客户端为参照物);
2)远程SEHLL通道模式还可以加密(SSH)传输,socket(daemon守护进程)需要加密传输,可以利用VPN服务或ipsec服务;
rsync缺点:
1)大量小文件同步的时候,比对时间较长,有的时候,rsync进程可能会停止。
2)同步大文件,10G这样的大文件有时也会出现问题,中断。未完整同步之前,是隐藏文件.可以通过续传等参数实现传输,一次性远程拷贝可以用scp;
3. rsync备份类型
完全备份:每次备份将备份源所有文件或目录备份到目的。
差量备份:备份上次完全备份以后有变化的数据。
增量备份:备份上次完全备份以后有变化的数据。
4. rsync同步方式
-
本地复制:首先是将源文件和目的位置文件对比找出差异,然后将源文件与目的位置的差异部分进行一致性同步。
-
上行同步:客户端与服务端同步内容,可以理解为客户端从服务器上下载内容
-
下行同步:服务端与客户端同步内容,可以理解为客户端将内容上传到服务器
5. rsync命令使用
基本格式:rsync [选项] 原始位置 目的位置
注意:原始位置文件夹若加/则是同步文件夹下所有内容,不包括文件夹本身,若需要整个目录同步则不加/
选项:
a: 归档模式,保留所有属性权限等
v: 显示同步过程
z: 传输时进行压缩
e: 指定使用什么方式同步ssh等
delete: 删除目的位置有但是原始位置没有的文件同步客户端和服务端数据
password-file: password-file=密码文件位置,可以在同步时使用免交互登录
2. rsync下行同步实验部署
说明: 外网环境有台数据存储服务器,会一直抓取数据,并以文件的格式存储在本地。 内网环境需要一直从外网环境拉取数据文件到本地。使用 rsync 同步非常方便。
在这里,外网环境的服务器,是数据源的提供方,因此作为服务端。内网环境的服务器是同步方,作为客户端。
1. rsync 的安装
服务端和客户端都需要安装
- 安装:
yum -y install rsync
- 查看安装包
rpm -qa rsync
2. 服务端的部署
2.0 添加rsync服务的用户,管理本地目录
sudo useradd rsync -s /sbin/nologin -M
2.1 创建共享的目录并授权rsync服务管理
sudo mkdir /opt/test
sudo chown rsync:rsync /opt/test
2.2 配置文件的创建
sudo vim /etc/rsyncd.conf
内容如下:
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[backup]
path = /root/用户55
ignore errors
read only = false
list = false
auth users = root
secrets file = /etc/rsync.userdb
对应说明:
uid = rsync #用户远端的命令使用rsync访问共享目录
gid = rsync #用户组
use chroot = no #安全相关
max connections = 200 #最大连接数
timeout = 300 #超时时间(单位/秒)
pid file = /var/run/rsyncd.pid #(进程号对应的进程号文件)
lock file = /var/run/rsync.lock #锁文件,防止文件不一致
log file = /var/log/rsyncd.log #日志文件
[backup] #模块名称,应该是可以定义多个模块,这样方便处理不同的需求
path = /backup #服务器端提供访问的目录
ignore errors #忽略错误
read only = false #可写
list = false #不让列表(相当于ls)
hosts allow = 172.16.1.0/24 #允许的网段
hosts deny = 0.0.0.0/32 #拒绝的网段
auth users = rsync_backup #连接的虚拟用户,非系统用户
secrets file = /etc/rsync.password #虚拟用户的账号密码文件
注意点:
- uid 这个是真正执行操作的用户
- secrets file
- 该文件的内容是 账号:密码
```
rsync:111111
```
- 这个是一个自定义的账号密码,客户端发送链接的时候会用这个账号密码来验证,验证成功后,会使用配置文件中的uid 的身份进行操作。
- 这个文件的后缀是可以自定义的,例如 rsync.password,rsync.userdb 等都可以
- 这个文件的权限需要为 600。
```
chmod 600 /etc/rsync.userdb
```
- backup
- 这个是配置文件中的模块,正常来说,可以定义多个模块,满足不同的需求
```
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
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 = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
path = /backup
[cloudbility]
path = /cloudbility
```
- path 即要拉取同步的文件夹路径
2.3. 配置 secrets file
2.3.1. secrets file 的文件内容
该文件内容为虚拟的账号和密码,用于客户端发送账号密码进行验证,和服务器本身存在的账号密码不是一个概念。
echo "rsync:111111" >/etc/rsync.userdb
2.3.2 权限修改
该文件权限较为特殊,权限需要设置为600
chmod 600 /etc/rsync.userdb
2.3.3. 说明
客户端在链接该服务端的时候,会使用这个 文件中的账号密码进行验证,验证通过,会使用配置文件中的 uid 这个对应的账号进行操作,因此,需要确认 uid 这个账号对要操作的目标文件夹(即配置文件夹中的path)有读取的权限。
2.4. 启动 rsync 服务 并检查
启动
sudo rsync --daemon
检查
sudo netstat -natp | grep rsync
效果如下:
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 136350/rsync
tcp6 0 0 :::873 :::* LISTEN 136350/rsync
2.6 停止服务
直接kill 线程即可
sudo kill -9 136350
2.7 加入开机自启动
echo "/usr/bin/rsync --damon" >>/etc/rc.local
3. 客户端:
客户端也需要安装 rsync
1. 生成连接服务器的密码文件
echo "password" >/etc/rsync.password
此处的内容,就是服务端 /etc/rsync.userdb 中的密码,只不过这个文件中只有密码 !!!!!!!!!
2. 为密码文件配置权限
chmod 600 /etc/rsync.password
3. 同步文件
1. 推送文件
sudo rsync -avz /backup/ rsync_backup@192.168.100.100::backup/(模块名) --password-file=/etc/rsync.password
2. 拉取文件
命令格式
sudo rsync -args --password-file=password-file user@source_server_ip::module_name path
实践
sudo rsync -avzP --password-file=/etc/rsync.password root@192.168.100.100::backup /opt/test
- --password-file=/etc/rsyncd.passwd_55_4 指定密码文件
server55_4
- root 此处的用户,对应于服务端的 /etc/rsyncd.userdb 中的 账号密码
- 39.105.152.104 对应服务器的ip地址
- ::back 对应服务端的配置文件中的模块名称
- /root/用户55 标识要同步的路径
4. 排除推送
- 拉取和推送都可以排除。
- 也可以服务端排除,配置文件里参数
- exclude=a b c d
1. 排除单个文件
--exclude=a (排除a)
rsync -avz --exclude=a /backup/ rsync_backup@192.168.100.100::backup/ --password-file=/etc/rsync.password
2. 排除多个文件:
排除a 和b
rsync -avz --exclude={a,b} /backup/ rsync_backup@192.168.100.100::backup/ --password-file=/etc/rsync.password
3. 排除连续的a-f
rsync -avz --exclude={a..f} /backup/ rsync_backup@192.168.100.100::backup/ --password-file=/etc/rsync.password
完全同步:无差异同步--delete
rsync -avz --delete /backup/ rsync_backup@192.168.100.100::backup/ --password-file=/etc/rsync.password
3. 异常集合
1. 小 BUG
[root@backup backup]# vim /etc/rsyncd.conf
#hosts deny = 0.0.0.0/32
把 hosts deny(拒绝的ip段)注释掉,因为当
hosts allow = 172.16.1.0/24
#hosts deny = 0.0.0.0/32
这两个在一起的时候,发现10段的ip 也能把数据推送到backup server。所以必须注释掉
hosts deny。
提示:更改配置文件之后要重启服务,因为每次Linux都是把配置文件放到内存。
先杀死进程,然后检查
[root@backup backup]# pkill rsync
[root@backup backup]# lsof -i :873
重启再检查看看
[root@backup backup]# rsync --daemon
[root@backup backup]# lsof -i :873
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 7718 root 4u IPv4 33811 0t0 TCP *:rsync (LISTEN)
rsync 7718 root 5u IPv6 33812 0t0 TCP *:rsync (LISTEN)
2. 客户端/etc/rsync.password 配置文件里的密码错误(注意空格)
@ERROR: auth failed on module backup
解决:
查看服务端的日志配置文件的报错信息。
[root@backup backup]# cat /var/log/rsyncd.log
2017/01/17 16:04:36 [7813] auth failed on module backup from unknown (172.16.1.31): password mismatch
提示我们密码错误:
查看服务器端的配置文件和密码,然后,再看客户端的。
[root@backup backup]# vim /etc/rsync.password
rsync_backup:cloudbility
3. 连接被拒绝
[root@nfs01 backup]# rsync -avz /backup/ test@192.168.100.100::cloudbility/
rsync: failed to connect to 192.168.100.100: Connection refused (111)
解决,
1)服务端防火墙是否关闭iptables
2)873端口是否开放。
重启rsync服务。
[root@backup cloudbility]# rsync --daemon
[root@backup cloudbility]# lsof -i :873
4. rsync守护进程(daemon)服务传输数据排错思路:
rsync服务端排错思路
1)查看rsync服务配置文件路径是否正确,正确的默认路径为:/etc/rsyncd.conf
2)查看配置文件里的host allow.host deny允许的网段是否允许客户端访问的IP网段。
3)查看配置文件中path参数里的路径是否存在,权限是否正确(正常应为位置文件中的UID参数对应的属主和组)
4)查看rsync服务是否启动,查看命令为:ps -ef|grep rsync. 端口是否存在 netstat -lnt|grep 873.
5)查看iptables防火墙和SELinux是否开启允许rsync服务通过,也可以考虑关闭。
6)查看服务端rsync配置的密码文件权限是否是600;密码文件格式是否正确。 正确格式为 用户名:密码 。文件路径和配置文件里的secrect files参数对应。
7)如果是推送数据,要查看下,配置rsyncd.conf文件中用户是否对模块下的目录有可读写权限
5. rsync客户端排除思路
1)查看客户端rsync配置的密码文件是否为600权限,密码文件格式是否正确。
注意,客户端密码要和服务端的密码一致。
2)用telnet连接rsync服务器IP地址873端口,查看服务是否启动
(可测试服务端防火墙是都阻挡)。 telnet 10.0.0.41 873
3)客户端执行命令时rsync -avzP rsync_backup@10.0.0.41::cloudbility/test/test --password-file=/etc/rsync.password
此命令的细节要记清楚,尤其是10.0.0.41::cloudbility/test/处的双冒号及随其后的cloudbility
的模块名称;
sudo rsync -avzP --password-file=/etc/rsyncd.passwd_55_4 root@39.105.152.104::backup /opt/用户55