linux之rsync服务

rsync服务

  • 数据同步,分本地模式,远程模式
  • 全量备份相当于cp ,scp
  • 增量备份,源文件同步到目标文件,目标有的不会再次同步

基本使用

# 源文件 带/ 表示拷贝opt目录下的全部文件到目标服务器 ;不带/ 表示拷贝opt目录 到目标服务器
rsync -avz /opt/ root@10.0.0.41:/tmp

远程访问模式

# 推送目标 可写域名 IP 主机名 -P 是显示传输速度
[root@web01 opt]# rsync -avzP *.txt root@backup:/opt

# 拉去目标 到本地
[root@web01 opt]# rsync -avz root@bakcup:/opt/*.txt .
ssh: Could not resolve hostname bakcup: Name or service not known
rsync: connection unexpectedly closed () [Receiver]
rsync error: unexplained error (code 255) at io.c(226) [Receiver=3.1.3]
[root@web01 opt]# rsync -avz root@backup:/opt/*.txt .

Authorized users only. All activities may be monitored and reported.
root@backup's password: 
receiving incremental file list
a.txt
b.txt

rsync参数

-a, --archive               archive mode; equals -rlptgoD
-v, --verbose               increase verbosity #(详细信息)
-z, --compress              compress file data during the transfer #(压缩文件传输)
-P    same as --partial --progress  #显示同步的过程及传输时的进度等信息

--bwlimit=RATE          limit socket I/O bandwidth #(限制传输速度 --bwlimit=1  就是传输速度1M/s)
--exclude=PATTERN       exclude files matching PATTERN #(推送时排除那些文件不上传)
--exclude-from=FILE     read exclude patterns from FILE #(从文件读取那些文件不上传)
--include-from=FILE     read include patterns from FILE #(推送从文件读取需要推送的文件)
--files-from=FILE       read list of source-file names from FILE #(推送只包含的文件)

--password-file=FILE    read daemon-access password from FILE #(守护进程模式,客户端传输时,可以指定密码文件,密码文件权限为600)

--delete                delete extraneous files from destination dirs #保持本地和推送的目录内容一致
--partial               keep partially transferred files # 断点续传

--delete 同步

# 以客户端目录为准 服务器端的文件/opt 要与 ./下的文件保持一致 ;./有的文件 /opt没有会发送/opt ;/opt有的 ./没有,会删除/opt下的
[root@web01 opt]# rsync -avz --delete ./ root@backup:/opt

--password-file密码文件

# 只要服务端是以守护进程模式才可以使用密码文件
[root@web01 opt]# rsync -avz --password-file=/opt/rsync.pwd ./ root@backup:/opt
The --password-file option may only be used when accessing an rsync daemon.
rsync error: syntax or usage error (code 1) at main.c(1393) [sender=3.1.3]

rsync守护进程模式

1. 在服务端安装rsync服务,客户端安装不需要启动
2. 配置
3. 创建必要的目录文件
4. 启动服务
5. 测试

# 安装 启动服务是rsyncd
[root@backup opt]# yum -y install rsync
[root@backup opt]# systemctl start rsyncd.service
# 监听端口 873
[root@backup opt]# ss -lntup |grep rsync
tcp     LISTEN   0        5                0.0.0.0:873
# 配置文件
[root@backup opt]# rpm -qc rsync
/etc/rsyncd.conf

# 配置文件内容
 uid = rsync #需要手动创建该虚拟用户
 gid = rsync
 port = 873
 fake super = yes 
 use chroot = no 
 max connections = 200
 timeout = 600
 ignore errors
 read only = false
 list = false
 auth users = rsync_backup # 客户端推送服务端 连接的用户
 secrets file = /etc/rsync.passwd # 当客户端以rsync_backup用户来连接 服务端验证读取的该文件 密码文件权限为600
 log file = /var/log/rsyncd.log
 #####################################
 [backup] # 从客户端推送文件到 服务端的/backup目录下  客户连接时 rsync_backup@192.168.1.1::backup (模块名)
 path = /backup
 
# 创建虚拟用户rsync 
 [root@backup opt]# useradd rsync -M -s /sbin/nologin
 
# 创建密码文件并修改权限为600属主用户有rw权限
[root@backup opt]# vi /etc/rsync.passwd
[root@backup opt]# chmod 600 /etc/rsync.passwd

# 创建服务端推送的目录/backup 当用户推送文件到服务端时,rsync_backup认证用户的服务所在的进程rsyncd,以rsync虚拟用户写入服务端,默认是root创建的/backup,属主属组都是root,权限为 755 ,o位置,rsync用户无写入权限,所以修改/bakcup目录的属主属组为rsync
[root@backup opt]# mkdir /backup
[root@backup opt]# chown rsync.rsync /backup/

# 修改完配置重启服务 检测服务端口监听是否正常
[root@backup opt]# systemctl restart rsyncd.service 
[root@backup opt]# ss -lntup |grep 873
tcp     LISTEN   0        5                0.0.0.0:873

# 客户端测试推送文件到服务端 (这时通过客户端测试配置文件和创建的文件都没问题,还是无法联通,可能就是防火墙的问题)
[root@web01 opt]# rsync -avz /etc/hosts --password-file=/opt/rsync.pwd rsync_backup@172.16.1.41::backup
rsync: failed to connect to 172.16.1.41 (172.16.1.41): No route to host (113) # 开启了防火墙
rsync error: error in socket IO (code 10) at clientserver.c(128) [sender=3.1.3]
[root@web01 opt]# rsync -avz /etc/hosts --password-file=/opt/rsync.pwd rsync_backup@172.16.1.41::backup^C
[root@web01 opt]# rsync -avz /etc/hosts --password-file=/opt/rsync.pwd rsync_backup@172.16.1.41::backup
rsync: failed to connect to 172.16.1.41 (172.16.1.41): Connection refused (111) # rsyncd服务未开启


# 客户端推送 --password-file 只要服务端开启rsyncd服务才能使用此参数 且rsync.pwd文件权限为600
[root@web01 opt]# rsync -avz /etc/hosts --password-file=/opt/rsync.pwd rsync_backup@172.16.1.41::backup
sending incremental file list
hosts

sent 165 bytes  received 43 bytes  416.00 bytes/sec
total size is 178  speedup is 0.86

# 客户端推送 使用变量RSYNC_PASSWORD=123456 仅在当前命令行有效,且服务端是守护进程,::指定模块
[root@web01 opt]# export RSYNC_PASSWORD=123456
[root@web01 opt]# rsync -avz /etc/passwd rsync_backup@backup::backup
sending incremental file list
passwd

sent 841 bytes  received 43 bytes  1,768.00 bytes/sec
total size is 1,845  speedup is 2.09

# 修改rsyncd服务端 配置文件如下
[root@backup backup]# tail -n2 /etc/rsyncd.conf 
 [data]
 path = /data

# 创建data目录 并修改属主属组为rsync
[root@backup backup]# mkdir /data && chown rsync.rsync /data

# 测试从客户端推送文件到 服务端新创建的data模块
[root@web01 opt]# export RSYNC_PASSWORD=123456
[root@web01 opt]# rsync -avz /etc/hosts rsync_backup@backup::data
sending incremental file list
hosts

sent 165 bytes  received 43 bytes  416.00 bytes/sec
total size is 178  speedup is 0.86
[root@web01 opt]#

#注意 服务记得加上开机自启
systemctl enable rsyncd.service

案例

1.客户端提前准备存放的备份的目录,目录规则如
下:/backup/web01_172.16.1.7_2018-09-02 date +%F
2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝
至/backup/web01_172.16.1.7_2018-09-02
3.客户端最后将备份的数据进行推送至备份服务器 守护进程
4.客户端每天凌晨1点定时执行该脚本
5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
export RSYNC_PASSWORD=123456
hostname=`hostname`
ip=`hostname -I |awk '{print $1}'`
time=`date +%F`
dir="$hostname/$ip/$time"
mkdir -p /backup/${dir}

tar -zcfP /backup/${dir}/etc.tar.gz /etc/* &>/dev/null
rsync -avz /backup/${dir}/etc.tar.gz rsync_backup@backup::data

crontab -e
00 01 * * * /bin/bash /opt/tar_rsync.sh
find /backup/${dir}/ -mtime +7 |xargs -i rm -f {}

服务端

shell编程在盘它 zabbix 微信接收校验结果。
1.服务端部署rsync,用于接收客户端推送过来的备份数据
2.服务端需要每天校验客户端推送过来的数据是否完整
3.服务端需要每天校验的结果通知给管理员
4.服务端仅保留6个月的备份数据,其余的全部删除
rsync的远程模式、守护进程模式,安装、配置、创建文件及对应的权限,测试使用
posted @ 2024-12-05 21:32  被时光移动的城市  阅读(11)  评论(0编辑  收藏  举报