配置 rsync 源服务器
简写 "rsync"
1. 关于 rsync
*一款增量备份工具 [ Remote Sync] 远程同步 ] 远程灾难备份工具\
*支持本地复制,或者其他SSH Rsync 主机同步
官方网站 : http://rsync.samba.org/
简 介
Rsyns (Remote Sync 远程同步) 是一个开源的快速备份工具 ,可以在不同主机之间镜像同步整个目录树 ,支持增量备份,保持链接和权限,且采用优化的同步算法, 传输前执行压缩, 因此非常适合用于异地备份, 镜像服务等应用
使用 " rpm -q rsync " 查看rsync服务是否下载
实验环境:
1.server 同步源 192.168.10.1
2.client发起端 192.168.10.2
实验思路
*建立rsyncd.conf配置文件、独立的账号文件
*启用rsync --daemon模式
*用户ly ,允许下行同步
*操作的目录为 /var/www/html/
配置文件rsyncd.conf
*需手动建立,语法类似于Samba配置
*认证配置auth users、secrets file,不加则为匿名
步骤一: 下载 HTTP 服务用于验证实验效果 (可下载其他服务 非必要)
1 | [root@localhost ~]# yum -y install httpd | // 下载http服务 |
2 | [root@localhost ~]# systemctl start httpd | // 开启httpd服务 |
步骤二: 建立 /etc/rsyncd.conf 配置文件
Rsync 服务的主配置文件 rsync.conf 位于 /etc 目录下, 下面以源目录: /var/www/html
备 份 账 号 :cheng 为例
1 | [root@localhost ~]# vim /etc/rsyncd.conf | // rsyncd 服务主配置文件 |
2 | uid = nobody | |
3 | gid = nobody | |
4 | use chroot = yes | // 禁锢在源目录 |
5 | address = 192.168.10.1 | // 监听地址 |
6 | port 873 | // 监听端口 |
7 | log file = /var/log/rsyncd.log | // 日志存放文件 |
8 | pid file = /var/run/rsyncd.pid | // 存放进程ID的文件位置 |
9 | hosts allow = 192.168.10.0/24 | // 允许访问的客户机的地址 |
10 | [wwwroot] | // 共享模块名 '可任意输入' |
11 | path = /var/www/html | // 源目录的真实路径 |
12 | comment = Document Root of www1.benet.com | // 注释用于区分 可任意修改 |
13 | read only = yes | // 是否为只读 |
14 | dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z | // 同步时不在压缩的文件类型 |
15 | auth users = cheng | // 授权账户 |
16 | secrets file = /etc/user_list | // 存放账户信息的数据文件 '可任意创建并存放' |
基于安全性考虑, 对于 rsync 的同步源最好仅允许以只读方式进行同步
另外同步可以采用匿名的方式 只要将其中的 " auth users " 和 " secrets file " 配置记录去掉就可以了
设置 auth users 配置项时 多个授权账户需要用空格或都好分隔
步骤三:为备份账号创建数据文件
// 语法采用 " 用户名:密码 " 的记录格式
// 独立的账号数据, 不依赖系统账号
根据上一步的设置,创建账号数据文件,添加一行用户记录,以冒号分隔
用户名称为 " cheng " 密码为 " 123123 "
由于账号信息采用明文存放,所以需要调整文件权限,避免账号信息泄露
1 | [root@localhost ~]# vim /etc/user_list | // 存放账号信息数据文件目录 |
2 | cheng:123123 | // 账户及密码 ' 无需建立同名系统用户' |
3 | [root@localhost ~]# chmod 600 /etc/user_list | // 修改权限 |
步骤四:启动 rsync 服务程序
上述操作完成后, 执行 " rsync --daemon " 命令就可以启动 rsync 服务, 以独立监听服务的方式运行. 如果要关闭 rsync 服务,则可以采取 kill 进程的方式, 如 kill $( cat /var/run/人syncd.pid )
*netstat -anput 可查看端口号 一般用于查看服务是否开启
*netstat -anput | grep 指定服务或端口 可查看指定的服务是否开启
* kill $(cat /var/run/rsyncd.pid) 关闭 rsync 服务
使用 Rsync 备份工具
1.rsync命令的用法
*基本格式:rsync [选项] 原始位置 目标位置
【具体参数参照下列】
2.常用选项:
-a:归档模式,递归并保留对象属性,等同于 -rlptgoD
-v:显示同步过程的详细(verbose)信息
-z:在传输文件时进行压缩(compress)
-H:保留硬连接文件
-A:保留ACL属性信息
--delete:删除目标位置有而原始位置没有的文件
--checksum:根据对象的校验和来决定是否跳过文件
【-rlptgoD】
-r:递归模式,包含目录及子目录中所有文件
-l:对于符号链接文件仍然复制为符号链接文件
-p:保留文件的权限标记
-t:保留文件的时间标记
-g:保留文件的属组标记(仅超级用户使用)
-o:保留文件的属主标记(仅超级用户使用)
-D:保留设备文件及其他特殊文件
虽然 rsync 服务命令有很多选项, 但最常用的选项组合是 " avz " 表示压缩和显示部分信息,并以归档模式传输
2) 配置源的表示方法
当执行远程同步任务时, rsync 命令需要指定同步源服务器中的资源位置. rsync 同步源的资源表示方式为: "用户名@主机地址::共享模块名" or "rsync://用户名@主机地址/共享模块名" 前者为两个冒号分割形式,后者为URL地址形式 例如, 执行以下操作可以访问 rsync 同步源 将指定的资源下载到本地 /root 目录下进行备份
1 | rsync -avz backuper@192.168.4.200::wwwroot /root | 【用户名@主机地址::共享模块名】 |
rsync -avz rsync://backuper@192.168.4.200/wwwroot /root | 【rsync://用户名@主机地址/共享模块名】 |
示例
执行以下操作可以访问源服务器中的 ftpp 共享模块 并下载到本地的 /root 目录下
3) rsync 源的免交互处理 不需要输入密码
实际生产环境中的备份工作通常是按计划重复执行的,例如 每天晚上 22:30 对服务器的网站目录做一次同步 定期任务可以交给 crond 服务完成
为了在同步过程中不用输入密码 需要创建一个密码文件 保存 cheng 用户的密码 例如: /etc/server.pass (此目录路径可任意创建)
当执行 rsync 同步时 使用选项 " --password-file=/etc/server.pass " 指定用户的密码文件.
1 | [root@localhost ~]# vim /etc/server.pass | // 创建密码文件 |
---|---|---|
2 | 123123 | // 输入用户密码 |
3 | [root@localhost ~]# chmod 600 /etc/server.pass | // 为防止密码泄露 修改密码权限 |
4 | [root@localhost ~]# crontab -e | // 创建周期性任务 |
5 | 30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass rsync://cheng@192.168.10.1/ftpp /root | // 每天 22:30 执行任务 |
6 | [root@localhost ~]# systemctl restart crond | // 重启 crond 服务 |
7 | [root@localhost ~]# systemctl enable crond | // 设置开机自启动 |
8 | [root@localhost ~]# crontab -l | // 查看周期任务 |
rsync + inotify 实时同步
使用 inotify 的原因: 将 inotify 机制与 rsync 工具相结合,便可以实现触发式备份 (实时同步) -----只要原始位置的文档发生变化,则立即启动增量备份操作,否则处于静态等待状态.这样就避免了按固定周期备份所存在的延迟性. 周期过密等问题.
实时同步与定期同步的优缺点
实时同步的优点 | 定期同步的不足 |
一旦同步源出现变化,立即启动备份 只要同步源无变化,则不执行备份 | 执行备份的时间固定,延迟明显、实时性差 当同步源长期不变化时,密集的定期任务是不必要的 |
关于inotify【Linux内核的inotify机制】
从版本2.6.13开始提供
可以监控文件系统的变动情况,并作出通知响应
辅助软件:inotify-tools
步骤一: 调整 inotify 内核参数
在 Linux 内核中, 默认的 inotify 机制提供了三个调控参数
/max_queued_events //监控时间队列
/max_user_instances // 最多监控实例数
/max_user_watches // 每个实例最多监控文件数
当要监控的目录 文件数量较多或变化比较频繁是,建议加大这3个参数的值
可以直接修改 /etc/sysctl.conf 配置文件, 将管理队列设为 32768 实例数设为 1024 监控数设为 1048576 通常情况下,建议监控数所设的值大于监控目标的总文件数 (末尾添加)
1 | [root@localhost ~]# vi /etc/sysctl.conf | |
2 | .........末尾添加 | // 省略部分信息 |
3 | fs.inotify.max_queued_events = 32768 | |
4 | fs.inotify.max_user_instances = 1024 | |
5 | fs.inotify.max_user_watches = 1048576 | |
6 | [root@localhost ~]# sysctl -p | // 立即执行此文件配置 |
步骤二: 安装 inotify - tools
使用 inotify 机制还需要安装 inotify - tools 辅助工具 以便提供 inotifywait inotifywatch 辅助工具程序,用来监控.汇总改动情况
inotifywait:用于持续监控,实时输出结果
inotifywatch:用于短期监控,任务完成后再出结果
1 | [root@localhost ~]# tar zxf inotify-tools-3.14.tar.gz | // 解压此软件包 |
2 | [root@localhost ~]# cd inotify-tools-3.14 | // 进入 inotify 目录 |
3 | [root@localhost ~]# ./configure | // 配置 |
4 | [root@localhost ~]# make | // 编译 |
5 | [root@localhost ~]# make install | // 安装 |
//配置时如果检测到gcc错误,先安装:yum -y install gcc-c++ yum -y install open*
使用 inotifywait
inotify 语法选项:
-m, 持续进行监控 modify ---- 修改文件内容
-r, 递归监控所有子对象 create ---- 创建目录、文件
-q, 简化输出信息 move --- 移动、重命名
-e, 指定要监控哪些事件类型 delete --- 删除
【在发起端运行命令,实时监控本地服务器目录,inotifywait命令就可以满足触发备份需要】
1 | [root@localhost ~]# inotifywait -mrq -e modify,create,move,delete /var/www/html | 实时监控本地 /var/www/html 目录变化 |
验证:再打开一个客户端--------进入/var/www/html目录---进行增删改操作----查看前一个客户端是否有触发
*此命令输入后卡住属于正常现象
通过inotifywait触发rsync同步操作