企业中Linux系统如何通过rsync服务做数据同步
1. rsync服务介绍
rsync是一个远程数据同步工具,可通过网络快速同步多台主机间的文件,也可以使用 rsync 同步本地硬盘中的不同目录。rsync 在同步文件时会检查文件之间是否有差异,它只同步存在差异或者不存在的文件,即增量备份。
2. 环境介绍
此博文利用两台 Linux(centos) 主机,一台作为客户端,即应用类型服务器,一台作为服务端,即备份服务器,使用rsync服务将客户端的重要数据定时同步至备份服务器,模拟企业生产环境进行介绍。
3. 部署安装
服务端部署(备份服务器)
步骤一:检查是否安装
[root@backup ~]# rpm -qa | grep rsync #<==== 检查确认已经安装,若未安装利用 yum install rsync -y 命令进行安装 rsync-3.1.2-6.el7_6.1.x86_64
步骤二:编写配置文件
cp /etc/rsyncd.conf{,.bak} #<==== 备份原始配置文件
echo ''> /etc/rsyncd.conf #<==== 清空文件内容
vim /etc/rsyncd.conf
uid = rsync #----指定管理备份目录的用户 gid = rsync #----指定管理备份目录的用户组 port = 873 #----定义rsync备份服务的网络端口号 fake super = yes #---- 将rsync虚拟用户伪装成为一个超级管理员用户 use chroot = no #----和安全相关的配置 max connections = 200 #----最大连接数 timeout = 300 #----超时时间(单位秒) pid file = /var/run/rsyncd.pid #----记录进程号信息 1、让程序快速结束进程 2、判断一个服务是否在运行 lock file = /var/run/rsync.lock #----锁文件 log file = /var/log/rsyncd.log #----记录rsync服务的日志文件,用于排错分析问题 ignore errors #----忽略传输中的简单错误 read only = false #----指定备份目录可读可写 list = false #----使客户端可以查看服务端的模块信息 hosts allow = 172.16.1.0/24 #----允许传输备份数据的主机(白名单) hosts deny = 0.0.0.0/32 #----禁止传输数据备份的主机(黑名单) auth users = rsync #----指定认证用户 secrets file = /etc/rsync.password #----指定认证用户密码文件 用户名称:密码信息 [backup] #----模块信息 comment = "backup dir by yunxuan" path = /backup #----模块中的配置参数 指定备份目录
步骤三:搭建服务环境
创建rsync虚拟用户、创建备份服务认证密码文件、创建备份目录
[root@backup ~]# useradd -M -s /sbin/nologin rsync #<==== 创建虚拟用户rsync [root@backup ~]# mkdir /backup #<==== 创建备份目录 [root@backup ~]# chown -R rsync.rsync /backup/ #<==== 修改备份目录访问权限 [root@backup ~]# ll -d /backup/ #<==== 查看备份目录属性信息 drwxr-xr-x. 2 rsync rsync 6 Nov 3 17:23 /backup/
[root@backup ~]# echo "rsync:123456" > /etc/rsync.password #<==== 创建备份服务认证密码文件 [root@backup ~]# chmod 600 /etc/rsync.password #<==== 修改备份服务认证密码文件权限
[root@backup ~]# ll /etc/rsync.password #<==== 查看备份服务认证密码文件属性信息
-rw-------. 1 root root 13 Nov 3 17:24 /etc/rsync.password
步骤四:启动rsync应用
[root@backup ~]# systemctl start rsyncd [root@backup ~]# systemctl enable rsyncd Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service. [root@backup ~]# systemctl status rsyncd ● rsyncd.service - fast remote file copy program daemon Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2020-11-03 17:36:40 CST; 18s ago Main PID: 3651 (rsync) CGroup: /system.slice/rsyncd.service └─3651 /usr/bin/rsync --daemon --no-detach Nov 03 17:36:40 backup systemd[1]: Started fast remote file copy program daemon.
步骤五:待客户端配置完成,进行测试数据同步功能
[root@backup ~]# ll /backup/ #<==== 检查客户端是否将hosts文件备份至服务端/backup目录 total 4 -rw-r--r--. 1 rsync rsync 158 Jun 7 2013 hosts [root@backup ~]#
客户端部署(应用服务器)
步骤一:检查rsync软件是否安装
[root@backup ~]# rpm -qa | grep rsync #<==== 检查确认已经安装,若未安装利用 yum install rsync -y 命令进行安装 rsync-3.1.2-6.el7_6.1.x86_64
步骤二:客户端创建密码文件(用于免交互同步数据)
[root@nfs01 ~]# echo "123456">/etc/rsync.password [root@nfs01 ~]# chmod 600 /etc/rsync.password [root@nfs01 ~]# ll /etc/rsync.password -rw-------. 1 root root 7 Nov 3 17:41 /etc/rsync.password [root@nfs01 ~]# cat /etc/rsync.password 123456
步骤三:测试数据同步功能
[root@nfs01 ~]# rsync -avz /etc/hosts rsync@172.16.1.211::backup --password-file=/etc/rsync.password #<==== 将客户端hosts文件备份至服务端 sending incremental file list hosts sent 140 bytes received 43 bytes 366.00 bytes/sec total size is 158 speedup is 0.86
4. rsync 同步命令语法和常用参数介绍
rsync守护进程语法:
Access via rsync daemon
# 客户端做拉操作,恢复数据 Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
# 客户端做推操作,备份数据
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
常用参数:
-v | 显示详细的传输信息 |
-a | 命令的归档参数,相当于(rtopgDl) |
-r | 递归参数 |
-t | 保持稳健属性信息中时间信息(mtime)不变,修改时间 |
-o | 保持文件的属主信息不变 |
-g | 保持文件的属组信息不变 |
-p | 保持文件的权限信息不变 |
-D | 保持设备文件信息不变 |
-l | 保持链接文件属性不变 |
-L | 保持链接文件数据信息不变 |
-P | 显示数据传输的进度信息 |
--exclude=PATTERN | 排除指定数据不被传输 |
--exclude-from=file | 排除指定数据不被传输(批量排除) |
--bwlimit=RATE | 显示传输的速率 |
--delete | 无差异同步数据 |
5. rsync守护进程在企业中的应用
无差异化同步数据
将客户端/data目录下的所有数据无差异的同步至服务端/backup目录下
--delete 此参数在企业中慎用
# 当前客户端数据 [root@nfs01 ~]# ll /data total 0 -rw-r--r--. 1 root root 0 Nov 3 18:52 01.txt -rw-r--r--. 1 root root 0 Nov 3 18:52 02.txt -rw-r--r--. 1 root root 0 Nov 3 18:52 03.txt -rw-r--r--. 1 root root 0 Nov 3 18:52 a.jpg -rw-r--r--. 1 root root 0 Nov 3 18:52 b.jpg drwxr-xr-x. 2 root root 6 Nov 3 18:52 test # 当前服务端数据 [root@backup ~]# ll /backup/ total 4 -rw-r--r--. 1 rsync rsync 158 Jun 7 2013 hosts # 客户端执行同步命令 [root@nfs01 ~]# rsync -avz --delete /data/ rsync@172.16.1.211::backup --password-file=/etc/rsync.password sending incremental file list deleting hosts ./ 01.txt 02.txt 03.txt a.jpg b.jpg test/ sent 372 bytes received 139 bytes 1,022.00 bytes/sec total size is 0 speedup is 0.00 # 查看服务端同步情况 [root@backup ~]# ll /backup/ total 0 -rw-r--r--. 1 rsync rsync 0 Nov 3 18:52 01.txt -rw-r--r--. 1 rsync rsync 0 Nov 3 18:52 02.txt -rw-r--r--. 1 rsync rsync 0 Nov 3 18:52 03.txt -rw-r--r--. 1 rsync rsync 0 Nov 3 18:52 a.jpg -rw-r--r--. 1 rsync rsync 0 Nov 3 18:52 b.jpg drwxr-xr-x. 2 rsync rsync 6 Nov 3 18:52 test
备份链接文件,要使链接文件数据信息不失效,加 -L 参数生效
[root@nfs01 data]# ll total 4 lrwxrwxrwx. 1 root root 7 Nov 3 18:59 001_link.txt -> 001.txt -rw-r--r--. 1 root root 7 Nov 3 18:59 001.txt [root@nfs01 data]# rsync -avz -L /data/001_link.txt rsync@172.16.1.211::backup --password-file=/etc/rsync.password sending incremental file list 001_link.txt sent 105 bytes received 43 bytes 296.00 bytes/sec total size is 7 speedup is 0.05 [root@backup backup]# ll 001_link.txt -rw-r--r--. 1 rsync rsync 7 Nov 3 18:59 001_link.txt [root@backup backup]# cat 001_link.txt 123456
守护进程多模块功能配置
vim /etc/rsyncd.conf #<==== 编辑rsync配置文件,加入以下内容,需要继续添加其他模块可自定义添加,保存退出后重启服务,创建备份目录,修改备份目录属主和属组信息 [backup] comment="backup dir by yunxuan" path=/backup [dba] comment="backup dir by yunxuan" path=/dba [root@backup backup]# ll -d /data drwxr-xr-x. 2 rsync rsync 6 Nov 3 19:40 /data [root@backup backup]# ll -d /backup/ drwxr-xr-x. 3 rsync rsync 106 Nov 3 19:04 /backup/
# 客户端只需选择不同的模块即可
[root@nfs01 data]# rsync -avz /data/001_link.txt rsync@172.16.1.211::backup --password-file=/etc/rsync.password [root@nfs01 data]# rsync -avz /data/001_link.txt rsync@172.16.1.211::dba --password-file=/etc/rsync.password
守护进程排除功能
单个文件形式排除
[root@nfs01 data]# tree #<==== 客户端/data目录下数据,计划过滤掉部分文件,其余的文件同步至服务端/backup目录
. ├── 001_link.txt -> 001.txt ├── 001.txt ├── a │ ├── 1.txt │ ├── 2.txt │ └── 3.txt ├── b │ ├── 1.txt │ ├── 2.txt │ └── 3.txt └── c ├── 1.txt ├── 2.txt └── 3.txt 3 directories, 11 files
#==== 过滤掉/data/b/1.txt文件和/data/c目录,其余全部同步 [root@nfs01 data]# rsync -avz /data --exclude=/data/b/1.txt --exclude=/data/c rsync@172.16.1.211::backup --password-file=/etc/rsync.password sending incremental file list data/ data/001.txt data/001_link.txt -> 001.txt data/a/ data/a/1.txt data/a/2.txt data/a/3.txt data/b/ data/b/2.txt data/b/3.txt sent 503 bytes received 161 bytes 1,328.00 bytes/sec total size is 14 speedup is 0.02
#==== 服务端结果
[root@backup backup]# tree . └── data ├── 001_link.txt ├── 001.txt ├── a │ ├── 1.txt │ ├── 2.txt │ └── 3.txt └── b ├── 2.txt └── 3.txt
以上方式以单个文件形式排除,若有许多文件,如何实现批量排除。那就是将这些文件名称写入某一个文件,然后实现,案例如下:
[root@nfs01 data]# vim exclude.txt #<==== 在客户端编辑过滤文件 /data/a/1.txt /data/b/2.txt /data/c/3.txt /data/exclude.txt
#==== 客户端同步数据 [root@nfs01 data]# rsync -avz /data --exclude-from=/data/exclude.txt rsync@172.16.1.211::backup --password-file=/etc/rsync.password sending incremental file list data/ data/001.txt data/001_link.txt -> 001.txt data/a/ data/a/2.txt data/a/3.txt data/b/ data/b/1.txt data/b/3.txt data/c/ data/c/1.txt data/c/2.txt sent 578 bytes received 184 bytes 1,524.00 bytes/sec total size is 14 speedup is 0.02
#==== 服务端查看同步情况
[root@backup backup]# tree . └── data ├── 001_link.txt ├── 001.txt ├── a │ ├── 2.txt │ └── 3.txt ├── b │ ├── 1.txt │ └── 3.txt └── c ├── 1.txt └── 2.txt 4 directories, 8 files
守护进程访问控制功能(黑白名单在rsync配置文件中可设置)
hosts allow=172.16.1.0/24 #<==== 白名单 hosts deny=0.0.0.0/32 #<==== 黑名单
只有白名单:白名单允许,其余全部阻止
只有黑名单:黑名单阻止,其余全部允许
既有白名单又有黑名单:白名单的允许,黑名单阻止,其余的全允许
白名单与黑名单网段一致:白名单优先于黑名单
守护进程列表功能配置
配置文件 rsyncd.conf 中,list = false改为list = true即可,为了安全起见,将该功能关闭,list = false
[root@nfs01 data]# rsync -avz rsync@172.16.1.211:: #<==== 列表功能打开时,在客户端能够看到服务端的模块信息,不安全,建议关闭该功能 backup "backup dir by yunxuan" dba "backup dir by yunxuan"