欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Rsync 实现远程同步复制-源码编译安装Rsync

程序员文章站 2024-03-21 08:07:10
...

一、什么是Rsync

Rsync是一款开源的快速的、可实现全量及增量本地或远程数据备份的多功能优秀工具。并且在复制时可以保留原有数据的属性信息,即可实现数据的备份迁移特性。Rsync软件适用于Unix/Linux/Windows等多种操作系统平台。
Rsync 被广泛用用于数据备份与镜像,并且作为一种改进后的复制命令用于日常系统复制文件或目录。
官方链接:https://rsync.samba.org/
官方帮助手册: man rsyn | man ./rsyncd.conf.5

二、 Rsync(Remote synchronization) 功能

  • 本地和远程两台主机之间的数据快速复制、远程全量或增量备份(类似scp命令)
  • 支持配置守护进程方式实现异机数据复制(备份)
  • 支持本地主机的不同分区或目录之间全量及增量复制数据(类似cp,比cp 由于可以实现增量拷贝)

1. rsync 命令功能

  • 1)实现本地数据同步复制(本地工作模式,相当于cp命令)。
  • 2)实现远程数据同步复制(远程Shell工作模式,相当于scp命令)。
  • 3)实现数据信息删除功能(本地工作模式,相当于rm命令)。
  • 4)实现数据信息查看功能(本地或远程工作模式,相当于ls命令)。

2. rsync 软件特性

1.支持拷贝普通文件与特殊文件,如链接文件、设备文件等。
2.支持排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
3.可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变。
4.可实现增量复制,即只复制发生变化的数据,因此数据传输效率很高。
5.可以使用rcp、rsh、SSH等方式来配合进行隧道加密传输文件(Rsync本身不对数据加密)。
6.可以通过socket(进程方式)传输文件和数据(服务端和客户端)。
7.支持匿名或认证(无须系统用户)进程模式传输,安全地进行数据备份及镜像。

三、源码安装 Rsync(Remote synchronization)

1. 基本安装环境

环境描述 说明
CentOS 8 操作系统
Rsync-3.2.2 Rsync 源码包

2. 源码编译安装流程

基本流程:

  1. 配置yum 源,安装依赖库 openssl-devel、zlib-devel等
  2. 下载rsyn源码文件并解压源码文件
  3. 源码编译安装
  4. 修改rsncd.conf 配置文件
  5. 配置rsync 用户并修改备份目录权限
  6. 配置SELinux 与防火墙
  7. 测远程数据备份(复制)
  8. 测试指定目录的增量数据复制

3. 源码编译安装

1. 配置yum 源,安装依赖库 openssl-devel、zlib-devel等

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo  # 获取阿里云repo 
yum clean all  # 清空本地缓存
yum makecache  # 创建repo 本地缓存

2. 下载rsyn源码文件并解压源码文件

官网Rsync 源码包 :https://download.samba.org/pub/rsync/src/rsync-3.2.2.tar.gz

3. 安装依赖库,源码编译安装

# 安装依赖
yum install -y maka gcc openssl-devel libzstd-devel lz4-devel
# 解压并编译安装
tar -xvf rsync-3.2.2.tar.gz && cd rsync-3.2.2/
./configure --prefix=/opt/rsync-3.2.3  --disable-ipv6  --disable-xxhash
make && make install

4. 修改rsncd.conf 配置文件

# 编辑配置文件
vim /etc/rsyncd.conf
 
 uid = rsync        # rsync 服务用户,rsync 管理备份目录 
 gid = rsync        # rsync 用户组
 use chroot = no    # 内网可以关闭chroot 机制
 fake super = yes   # 不以root 用户运行, CentOS 7 新加字段
 max connections = 200   # 最大连接数;0 无限制,负值为关闭该模块
 timeout = 600           # 默认0 ,不超时,建议300-600(5-10min)
 pid file = /var/run/rsyncd.pid  # pid 文件存放位置
 lock file = /var/run/rsyncd.lock # lock 文件存放位置
 log file = /var/log/rsyncd.log # log 文件存放位置
 ignore errors       # 忽略 I/O 错误
 read only = false  
 list = false
 hosts allow = 192.168.254.0/24
# hosts deny = *
 auth users = rsync_backup  
 secrets file =/etc/rsync.password


 [backup]
 path = /backup

常用参数如下所示:
Rsync 实现远程同步复制-源码编译安装Rsync

添加rsync 命令到环境变量

ln -s /opt/rsync-3.2.3/bin/rsync /usr/bin/rsync   # 将新版本的Rsync 做软连接
ln -s /opt/rsync-3.2.3/bin/rsync-ssl /usr/bin/rsync-ssl

测试rsync 命令

# rsync --version
# rsync  version 3.2.2  protocol version 31
Copyright (C) 1996-2020 by Andrew Tridgell, Wayne Davison, and others.
Web site: https://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, no IPv6, atimes, batchfiles, inplace,
    append, no ACLs, xattrs, optional protect-args, iconv, symtimes, prealloc
Optimizations:
    no SIMD, asm, openssl-crypto
Checksum list:
    md5 md4 none
Compress list:
    zstd lz4 zlibx zlib none

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

rsync-daemon 启停

[aaa@qq.com Rsync_dep]# systemctl  start rsyncd  # 启动rsyncd服务
[aaa@qq.com Rsync_dep]# systemctl status rsyncd.service  # 查看rsyncd服务状态
● rsyncd.service - fast remote file copy program daemon
   Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; disabled; vendor preset: disabl>
   Active: active (running) since Thu 2020-07-16 10:20:34 CST; 3h 54min ago
 Main PID: 37098 (rsync)
    Tasks: 1 (limit: 11362)
   Memory: 49.4M
   CGroup: /system.slice/rsyncd.service
           └─37098 /usr/bin/rsync --daemon --no-detach
 
[aaa@qq.com Rsync_dep]# systemctl  stop rsyncd # 停止rsyncd服务

5. 配置用于备份的rsync 用户并修改备份目录权限

##############################################################
chmod 600 rsync.password   # 修改密码文件权限,否则会报错
useradd -s /sbin/nologin rsync -M   # 创建rsync 用户,-M 不创建家目录
mkdir /backup && chown -R rsync.rsync /backup   # 创建备份目录并修改权限

# 创建变量
touch /etc/sysconfig/rsyncd && echo 'OPTIONS=""' > /etc/sysconfig/rsyncd

6. 配置SELinux 与防火墙

注:可以直接关闭SELinux 和防火墙

# 临时关闭SELinux
setenforce 0
# 关闭SELinux,永久生效
# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# cat /etc/selinux/config

# 关闭防火墙
# systemctl stop firewalld.service && systemctl disable firewalld.service 

在启用状态下,需要开启rsync 访问权限和防火墙:

setsebool -P rsync_full_access on   # 设置SELinux
firewall-cmd --permanent --add-service=rsyncd  # 添加防火墙并重新加载
firewall-cmd --reload

7. 测远程数据备份(复制)

客户端配置:
创建密码文件:

echo "passwd" >/etc/rsync.password && chmod 600  /etc/rsync.password

备份数据到备份服务器:

aaa@qq.com ~]# mkdir files && touch files/file{1..5}.txt
[aaa@qq.com ~]# rsync -avzP files/ aaa@qq.com::backup --password-file=/etc/rsync.password

注: files/files 是不一样的,files/ 只会备份该目录下 的文件到远程备份服务器,不会备份files 目录;file 会连同file 目录及其下所有文件备份至远程服务器。

8. 测试指定目录的增量数据复制

如现在新创建3个文件,然后进行同步,如下:

# 同步files 目录
[aaa@qq.com ~]# rsync -avzP files aaa@qq.com::backup --password-file=/etc/rsync.password
sending incremental file list
./
file1.txt
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=4/6)
file2.txt
              0 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=3/6)
file3.txt
              0 100%    0.00kB/s    0:00:00 (xfr#3, to-chk=2/6)
file4.txt
              0 100%    0.00kB/s    0:00:00 (xfr#4, to-chk=1/6)
file5.txt
              0 100%    0.00kB/s    0:00:00 (xfr#5, to-chk=0/6)

sent 323 bytes  received 122 bytes  890.00 bytes/sec
total size is 0  speedup is 0.00
[aaa@qq.com ~]# touch files/file{6..9}.txt  # 创建新文件
[aaa@qq.com ~]# rsync -avzP files/ aaa@qq.com::backup --password-file=/etc/rsync.password  # 再次进行同步,仅会同步新文件,如下
sending incremental file list
./
file6.txt
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=3/10)
file7.txt
              0 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=2/10)
file8.txt
              0 100%    0.00kB/s    0:00:00 (xfr#3, to-chk=1/10)
file9.txt
              0 100%    0.00kB/s    0:00:00 (xfr#4, to-chk=0/10)

sent 363 bytes  received 103 bytes  932.00 bytes/sec
total size is 0  speedup is 0.00

9. 测试指定文件的全量及增量备份:

[aaa@qq.com files]# echo "test Rsync files " >file8.txt  # 写入文件
[aaa@qq.com files]# rsync -avzP  /root/files  aaa@qq.com::backup --password-file=/etc/rsync.password
[aaa@qq.com files]# echo "test Rsync files IndexA  " >>file8.txt     # 更新文件                      [aaa@qq.com files]# rsync -avzP  /root/files  aaa@qq.com::backup --password-file=/etc/rsync.password
sending incremental file list
files/file8.txt
             44 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=1/10)

sent 312 bytes  received 50 bytes  724.00 bytes/sec
total size is 53  speedup is 0.15

如上所示,展示了 Rsync daemon 的全量及增量同步复制的功能。

参考:

  1. https://rsync.samba.org/
  2. https://www.server-world.info/en/note?os=CentOS_8&p=rsync
  3. rsync 3.1.1 源码编译安装配置