基于CentOS7.5的 Rsync 服务详解
第1章 Rsync概述
1.1 Rsync基本概述
rsync是一款开源的备份工具,可以在不同服务器(主机)之间进行同步备份,
可实现完全备份与增量备份,因此非常适合用于架构集中式备份或异地备份等应用。
rsync官方地址:http://rsync.samba.org/
rsync端口:873
rsync运行模式:C/S
拓展: C/S 客户端/服务端 B/S 浏览器/服务端
1.2 Rsync常见的
两种备份方式
完全备份
增量备份
假设客户端的上有file1
文件
file2 file3
服务端上有file1
文件,现要将客户端上的数据备份至服务端
完全备份,将客户端所有的数据内容file1 file2 file3全部备份至服务端(效率低下,占用空间) 增量备份,将客户端的file2 file3增量备份至服务端(提高备份效率,节省空间,适合异地备份)
1.3 Rsync应用场景
1.3.1 数据同步的推和拉
数据同步的两种方式
推:所有主机推送本地数据至Rsync备份服务器,会导致数据同步缓慢(适合少量数据备份)
拉:rsync备份服务端拉取所有主机上的数据,会导致备份服务器开销大
1.3.2 大量服务器备份场景
如果服务器多的话 所有服务器都用一台服务器备份 会导致同步的时候 备份服务器使用过多 所以使用多台备份服务器
1.3.3 异地备份实现思路
1.4 Rsync
命令对应选项
-a #归档模式传输, 等于-tropgDl -v #详细模式输出, 打印速率, 文件数量等 -z #传输时进行压缩以提高效率 -r #递归传输目录及子目录,即目录下得所有目录都同样传输。 -t #保持文件时间信息 -o #保持文件属主信息 -p #保持文件权限 -g #保持文件属组信息 -l #保留软连接 -P #显示同步的过程及传输时的进度等信息 -D #保持设备文件信息 -L #保留软连接指向的目标文件 -e #使用的信道协议,指定替代rsh的shell程序 --exclude=PATTERN #指定排除不需要传输的文件模式 --exclude-from=file #文件名所在的目录文件 --bwlimit=100 #限速传输 --partial #断点续传 --delete #让目标目录和源目录数据保持一致
1.5 Rsync传输模式
Rsync大致使用三种主要的数据传输方式
本地方式
远程方式
守护进程
1.5.1 本地方式
本地方式相当于cp(复制) 本地略有些鸡肋 功能和cp是一样的
单个主机本地之间的数据传输(此时类似于cp
命令)
[root@backup ~]# rsync /etc/passwd /tmp/ [root@backup ~]# ls /tmp/passwd /tmp/passwd
1.5.2 远程方式
通过ssh
通道传输数据,类似scp
命令
Access via remote shell: 远程传输
远程方式存在的缺陷:
1.需要使用系统用户(不安全)
2.使用普通用户(权限存在问题)
3.需要走ssh协议
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] 下载(拉) 下载pull [root@nfs ~]# pwd 查看当前路径 在nfs服务器下 /root [root@nfs ~]# echo "This Nfs" > file [root@backup ~]# rsync -avz root@172.16.1.31:/root/file /opt/ 在backup服务器下 以root用户身份将172.16.1.31 root目录下file文件 传输到opt目录下 [root@backup ~]# cat /opt/file 查看内容 This Nfs Push: rsync [OPTION...] SRC... [USER@]HOST:DEST 上传(推) 上传push(将backup的file2文件上传至NFS服务器的/mnt目录) [root@backup ~]# pwd 查看当前路径 在backup服务器下 /root [root@backup ~]# echo "This Rsync" > file2 [root@backup ~]# rsync -avz /root/file2 root@172.16.1.31:/mnt 将backup服务器里的root目录下的file2文件 发送到172.16.1.31服务器的mnt目录下 [root@nfs ~]# cat /mnt/file2 This Rsync 推送目录(推送/root/目录下面的所有文件和目录,不会推送/root/目录本身) [root@backup ~]# rsync -avz /root/ root@172.16.1.31:/tmp 推送目录,推送目录本身以及目录下面的所有文件 [root@backup ~]# rsync -avz /root root@172.16.1.31:/tmp
1.5.3 守护进程
守护进程传输方式:rsync
自身非常重要的功能(不使用系统用户,更加安全)
第2章 Rsync服务配置
角色 |
外网IP(NAT) |
内网IP(LAN) |
主机名 |
Rsync的服务端 |
eth0:10.0.0.41 |
eth1:172.16.1.41 |
backup |
rsync的客户端 |
eth0:10.0.0.31 |
eth1:172.16.1.31 |
nfs |
2.1 安装Rsync
[root@backup ~]# yum -y install rsync
2.2 配置rsync
查询配置文件存放的路径
[root@backup ~]# rpm -qc rsync /etc/rsyncd.conf 配置/etc/rsyncd.conf (直接复制下面内容,将原有内容清空) [root@backup ~]# cat /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.password log file = /var/log/rsyncd.log ##################################### [backup] comment = welcome to oldboyedu backup! path = /backup
2.3 创建用户
2.3.1 运行rsync服务的用户
创建rsync账户,不允许登录不创建家目录 [root@backup ~]# useradd -M -s /sbin/nologin rsync 创建备份目录(尽可能磁盘空间足够大),授权rsync用户为属主 [root@backup ~]# mkdir /backup [root@backup ~]# chown -R rsync.rsync /backup/
2.3.2 创建虚拟用户
创建虚拟用户密码文件(用于客户端连接时使用的用户)
创建虚拟用户和密码,并赋予600权限 [root@backup ~]# echo "rsync_backup:1" >/etc/rsync.password [root@backup ~]# chmod 600 /etc/rsync.password
2.4 启动rsync服务
启动rsync服务,并加入开机自启 [root@backup ~]# systemctl start rsyncd [root@backup ~]# systemctl enable rsyncd 启动后检查 [root@bogon ~]# netstat -lntp|grep rsync
2.5 Rsync服务测试
客户端:
Access via rsync daemon: 守护进程方式传输
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] 下载
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
1.将客户端的/etc/passwd 推送至 rsync服务端[backup] rsync [OPTION...] SRC... [USER@]HOST::DEST [root@nfs ~]# rsync -avz /etc/passwd rsync_backup@172.16.1.41::backup 2.将rsync服务端模块[/backup]下载至本地 Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] [root@nfs ~]# rsync -avz rsync_backup@172.16.1.41::backup /opt
2.6 同步时不输入密码
2.6.1 第一种方式sersync
适合终端执行指定用户密码文件
[root@nfs ~]# echo "1" >/etc/rsync.password 密码为1 将密码写入rsync.password文件 [root@nfs ~]# chmod 600 /etc/rsync.password rsync -avz rsync_backup@172.16.1.41::backup /opt --password-file=/etc/rsync.password
2.6.2 第二种方式写;脚本时使用
export RSYNC_PASSWORD=1 定义变量
[root@nfs ~]# export RSYNC_PASSWORD=1 [root@nfs ~]# rsync -avz rsync_backup@172.16.1.41::backup /opt
2.7 强制一致性 (慎用!)
客户端与服务端保持一致(--delete)
--delete强制一致
[root@nfs ~]# rsync -avz /root rsync_backup@172.16.1.41::backup --delete
2.8 限速
--bwlimit=1 限速为1M 工作中常用 不用限速 分分钟带宽占满
rsync -avzP --bwlimit=1 /opt/test.dosk rsync_backup@172.16.1.41::backup
第3章 Rsync备份案例
统一所有的目录站点是/backup
3.1 备份什么内容
系统重要的配置文件
建议备份的数据内容如下
1.配置文件 开机自启动配置文件 设备挂载配置文件 本地内网配置文件 如/etc/rc.local /etc/fstab /etc/hosts 2.重要目录 cron定时任务 firewalld防火墙 脚本目录 如/var/spool/cron/ /etc/firewalld /server/scripts 3.系统日志文件 如/var/log/ //系统安全日志、sudo日志、内核日志、rsyslog日志 4.应用程序日志 nginx、PHP、mysql、redis..... 工作中根据实际情况再想下还有什么需要备份的
3.2 怎么备份(格式)
备份在/backup目录下 /backup/日期为名的目录/
例如: /backup/nfs_172.16.1.31_2018_09_05 /backup/nfs_172.16.1.31_2018_09_06 /backup/nfs_172.16.1.31_2018_09_07 编写脚本 写入定时任务 [root@nfs ~]# echo $(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}')_$(date +%F) nfs_172.16.1.31_2018-09-05 [root@nfs ~]# mkdir /server/scripts -p
3.3 客户端备份思路
[root@nfs01 backup]# cat /server/scripts/backup_rsync.sh #!/usr/bin/bash #1.定义变量 Path=/backup Host=$(hostname) Addr=$(ifconfig eth1|awk 'NR==2{print $2}') Date=$(date +%F) Dest=${Path}/${Host}_${Addr}_${Date} #2.检查目录是否存在 [ -d $Dest ] || mkdir -p $Dest #3.拷贝需要备份的文件至$Dest # system backup cp -rp /etc/passwd /etc/fstab /etc/rc.d/rc.local /var/spool/cron $Dest/ # user backup cp -rp /server/ $Dest/ # config backup cp -rp /etc/rsyncd.conf $Dest/ #4.推送至备份服务端 Rsync_User=rsync_backup Rsync_Addr=172.16.1.41 Rsync_Module=backup export RSYNC_PASSWORD=123456 rsync -avz $Path/ ${Rsync_User}@${Rsync_Addr}::${Rsync_Module} #5.保留本地最近7天的文件 find $Path/ -type d -mtime +7 -exec rm -rf {} \;
第4章 Rsync常见问题
问题不限于CentOS 7
CentOS 7 以上 防火墙为 firewalld
CentOS 6 及以下 防火墙为 iptables
4.1 rsync服务端开启的iptables防火墙
4.1.1 客户端的错误现象
No route to host
4.1.2 错误演示过程
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup rsync: failed to connect to 172.16.1.41: No route to host (113) rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]
4.1.3 异常问题解决
关闭rsync服务端的防火墙服务(iptables)
[root@backup mnt]# /etc/init.d/iptables stop iptables: Setting chains to policy ACCEPT: filter [ OK ] iptables: Flushing firewall rules: [ OK ] iptables: Unloading modules: [ OK ] [root@backup mnt]# /etc/init.d/iptables status iptables: Firewall is not running.
4.2 rsync客户端执行rsync命令错误
4.2.1 客户端的错误现象
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::/backup ERROR: The remote path must start with a module name not a / rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
1.2.2 异常问题解决
rsync命令语法理解错误,::/backup是错误的语法,应该为::backup(rsync模块)
4.3 @ERROR: auth failed on module oldboy
4.3.1 客户端的错误现象
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup Password: @ERROR: auth failed on module backup rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
4.3.2 异常问题解决
1. 密码真的输入错误,用户名真的错误
2. secrets file = /etc/rsync.password指定的密码文件和实际密码文件名称不一致
3. /etc/rsync.password文件权限不是600
4. rsync_backup:oldboy123密码配置文件后面注意不要有空格
echo "rsync_backup:oldboy123" >>/etc/rsync.password
5. rsync客户端密码文件中只输入密码信息即可,不要输入虚拟认证用户名称
4.4 Unknown module 'backup'
1.4.1 客户端的错误现象
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup @ERROR: Unknown module 'backup' rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
4.4.2 异常问题解决
/etc/rsyncd.conf配置文件模块名称书写错误
4.5 Permission denied
4.5.1 客户端的错误现象
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup Password: sending incremental file list hosts rsync: mkstemp ".hosts.5z3AOA" (in backup) failed: Permission denied (13) sent 196 bytes received 27 bytes 63.71 bytes/sec total size is 349 speedup is 1.57 rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]
4.5.2 异常问题解决
1. 共享目录的属主和属组不正确,不是rsync
2. 共享目录的权限不正确,不是755
4.6 chdir failed
4.6.1 客户端的错误现象
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup Password: @ERROR: chdir failed rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
4.6.2 异常问题解决
1. 备份存储目录没有建立
2. 建立的备份存储目录和配置文件定义不一致
4.7 invalid uid rsync
4.7.1 客户端的错误现象
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup Password: @ERROR: invalid uid rsync rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
4.7.2 异常问题解决
rsync服务对应rsync虚拟用户不存在了,重新创建即可。
4.8 客户端已经配置了密码文件,但免秘钥登录方式,依旧需要输入密码
4.8.1 客户端的错误现象
password file must not be other-accessible [root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password password file must not be other-accessible continuing without password file Password: sending incremental file list sent 26 bytes received 8 bytes 5.23 bytes/sec total size is 349 speedup is 10.26
4.8.2 异常问题解决
rsync客户端的秘钥文件也必须是600权限
4.9 rsync客户端连接慢问题
4.9.1 客户端的错误日志
2017/03/08 20:14:43 [3422] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors 2017/03/08 20:14:43 [3422] name lookup failed for 172.16.1.31: Name or service not known 2017/03/08 20:14:43 [3422] connect from UNKNOWN (172.16.1.31) 2017/03/08 20:14:43 [3422] rsync to backup/ from rsync_backup@unknown (172.16.1.31) 2017/03/08 20:14:43 [3422] receiving file list 2017/03/08 20:14:43 [3422] sent 76 bytes received 83 bytes total size 349
4.9.2 客户端的正确日志
2017/03/08 20:16:45 [3443] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors 2017/03/08 20:16:45 [3443] connect from nfs01 (172.16.1.31) 2017/03/08 20:16:45 [3443] rsync to backup/ from rsync_backup@nfs02 (172.16.1.31) 2017/03/08 20:16:45 [3443] receiving file list 2017/03/08 20:16:45 [3443] sent 76 bytes received 83 bytes total size 349
异常问题解决
查看日志进行分析
4.10 rsync服务没有正确启动
4.10.1 客户端的错误现象
Connection refused (111) [root@CentOS ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup rsync: failed to connect to 172.16.1.41: Connection refused (111) rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]
4.10.2 异常问题解决
[root@CentOS ~]# rsync --daemon [root@CentOS ~]# ss -lntup |grep rsync tcp LISTEN 0 5 :::873 :::* users:(("rsync",1434,5)) tcp LISTEN 0 5 *:873 *:* users:(("rsync",1434,4)) [root@CentOS ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup Password: sending incremental file list hosts sent 196 bytes received 27 bytes 49.56 bytes/sec total size is 349 speedup is 1.57
基于CentOS7.5的 Rsync 服务详解的更多相关文章
- Rsync服务详解
Rsync简介 什么是rsync? Rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具.Rstync软件适用于unix/linux/windows等多种操作系 ...
- 【转】SSH服务详解
[转]SSH服务详解 第1章 SSH服务 1.1 SSH服务协议说明 SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Working Gro ...
- (转)SSH服务详解
SSH服务详解 原文:http://www.cnblogs.com/clsn/p/7711494.html 第1章 SSH服务1.1 SSH服务协议说明SSH 是 Secure Shell Proto ...
- HTTPD之二————HTTPD服务详解————httpd的配置文件常见设置
HTTPD之二----HTTPD服务详解----httpd的配置文件常见设置 HTTP服务器应用 http服务器程序 httpd apache nginx lighttpd 应用程序服务器 IIS,a ...
- Centos7 配置网络步奏详解
Centos7 配置网络步奏详解 编辑网卡配置文件 vi /etc/sysconfig/network-script/ifcfg-ens01 备注:这里的ens01不是所有系统都叫这个,有的可能叫其他 ...
- CentOS7/RHEL7安装Redis步骤详解
CentOS7/RHEL7安装Redis步骤详解 CentOS7/RHEL7安装Redis还是头一次测试安装了,因为centos7升级之后与centos6有比较大的区别了,下面我们就一起来看看Cent ...
- WCF中队列服务详解
WCF中队列服务详解 一.引言 在前面的WCF服务中,它都要求服务与客户端两端都必须启动并且运行,从而实现彼此间的交互.然而,还有相当多的情况希望一个面向服务的应用中拥有离线交互的能力.WCF通过服务 ...
- (转)Rsync命令详解
Rsync命令详解 原文:http://blog.51cto.com/irow10/1826249 说明: Rsync是linux/Unix文件同步和传送工具.用于替代rcp的一个工具,rsync可以 ...
- 基于CentOS7系统添加自定义脚本服务及参数说明【转】
概述 centos6如果要添加自定义脚本服务只需要把脚本放到/etc/init.d然后授权后用chkconfig添加后就可以管理了,那么centos7又是怎么添加自定义脚本服务呢? CentOS7添加 ...
随机推荐
- 安装K/3 Cloud过程中发现的两个新问题。
卸载掉K/3 Cloud然后重装时出现下面的错误提示: 可能原因: 1.安装目录下的Setup.exe会检查操作系统版本.有些操作系统可能是被串改过注册信息,所以取不到版本信息(有些是因为盗版的原因) ...
- bootstrap删除模态框弹出并询问是否删除【通用删除模态框】
普通的询问是否删除的对话框比较low,可以利用bootstrap的模态框代替普通的对话框来实现删除. 效果: 点删除的时候弹出模态框询问是否删除,点确认的时候将需要删除的ID传到后台进行删除. 过程 ...
- UVA 437_The Tower of Babylon
题意: 一堆石头,给定长宽高,每种石头均可以使用无数次,问这堆石头可以叠放的最高高度,要求下面的石头的长和宽分别严格大于上面石头的长和宽. 分析: 采用DAG最长路算法,由于长宽较大,不能直接用于表示 ...
- Java内存分配与参数传递
JAVA中方法的参数传递方式只有一种:值传递. JAVA内存分配: 1.栈:存放 基本类型的数据.对象的引用(类似于C语言中的指针) 2.堆:存放用new产生的数据 3.静态域:存放在对象中用stat ...
- 携程Apollo(阿波罗)配置中心在Spring Boot项目快速集成
前提:先搭建好本地的单机运行项目:http://www.cnblogs.com/EasonJim/p/7643630.html 说明:下面的示例是基于Spring Boot搭建的,对于Spring项目 ...
- sata express接口
华硕z97主板的sata express接口目前没什么用,但随着电脑接口的发展,可能会占据一席之地. 1.顾名思义,SATA-Express是SATA接口 + PCI-Express的混合体,其理论带 ...
- Elasticsearch学习系列之mapping映射
什么是映射 为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成全文本(Full-text)或精确(Exact-value)的字符串值,Elasticsearch需要知道每个字段里面 ...
- C#如何发布项目 发布软件
如下图所示,我随便搞了一个小软件,为了测试还在Debug目录下放了一个一副图片和一个LOGO 直接点击生成-发布 "软件名称",然后点击完成 结果报错说没找到SignToo ...
- C#如何编辑tab选项卡
1 左侧的TabControl 2 如果要添加或删除选项卡个数,则定位到整个TabControl,然后编辑TabPages
- 小贝_mysql 存储过程
存储过程 简要: 1.什么是存储过程 2.使用存储过程 一.存储过程 概念类似于函数,就是把一段代码封装起来.当要行这段代码的时候,能够通过调用该存储过程来实现.在封装的语句体里面.能够用if/els ...