hengdin

导航

 

原始链接:
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同步方式

  1. 本地复制:首先是将源文件和目的位置文件对比找出差异,然后将源文件与目的位置的差异部分进行一致性同步。

  2. 上行同步:客户端与服务端同步内容,可以理解为客户端从服务器上下载内容

  3. 下行同步:服务端与客户端同步内容,可以理解为客户端将内容上传到服务器

5. rsync命令使用

基本格式:rsync [选项] 原始位置 目的位置

注意:原始位置文件夹若加/则是同步文件夹下所有内容,不包括文件夹本身,若需要整个目录同步则不加/

选项:

a: 归档模式,保留所有属性权限等

v: 显示同步过程

z: 传输时进行压缩

e: 指定使用什么方式同步ssh等

delete: 删除目的位置有但是原始位置没有的文件同步客户端和服务端数据

password-file: password-file=密码文件位置,可以在同步时使用免交互登录

2. rsync下行同步实验部署

说明: 外网环境有台数据存储服务器,会一直抓取数据,并以文件的格式存储在本地。 内网环境需要一直从外网环境拉取数据文件到本地。使用 rsync 同步非常方便。

在这里,外网环境的服务器,是数据源的提供方,因此作为服务端。内网环境的服务器是同步方,作为客户端。

1. rsync 的安装

服务端和客户端都需要安装

  1. 安装:
yum -y install rsync
  1. 查看安装包
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

posted on 2024-05-09 17:36  hengdin  阅读(117)  评论(0)    收藏  举报