rsync概述
什么是rsync
rsync一款快速增量备份工具Remote Sync,远程同步支持本地复制,或者与其他SSH、
rsync主机同步官网:http://rsync.samba.org
rsync应用场景
1、内容的一致性 1000节点 如tomcat (HTML,css,js)
2、网站内容更新 scp要1000次 这是太复杂了 用shell脚本自动执行首先你的地址要有 但是你的地址要是不连续的呢 这就是比较笨重了
3、解决问题:你仅仅需要更新一个节点其他的所有节点内容与你同步 这就是有了rsync 作用:拉去的同步 监控可以实现它的自动同步
配置rsync源服务器
rsync同步源又称备份源指的是备份超作远程服务器
如下图:客户机要拉取同步源的内容这个就需要rsync了 中间需要网络 一般情况下网络易出问题;
基本思路:
建立rsyncd.conf配置文件、独立的账号文件-------(为了安全起见必须有独立账号)
启用rsync的–daemon模式-----------------------------(–daemon模式又叫守护进程(没人访问端口还是一直开着))
应用实例
用户backer,允许下行同步
操作的目录为:/var/www/html/
配置文件rsyncd.conf:
需手动建立,语法类似于Samba配置
认证配置auth users、secrets file,不加则为匿名
rsync账号文件
采用“用户名:密码”的记录格式,每行一个用户记录 —(如果要是多个用户记录就是多行)
独立的账号数据,不依赖于系统账号
启用rsync服务
通过–daemon独自提供服务
执行kill $(cat /var/run/rsyncd.pid) 关闭rsync服务
使用rsync备份工具
基本格式
rsync [选项] 原始位置 目标位置
常用选项(前三个最常用)
- -a:归档模式,递归并保留对象属性,等同于 -rlptgoD
- -v:显示同步过程的详细(verbose)信息
- -z:在传输文件时进行压缩(compress)
- -H:保留硬链接文件
- -A:保留ACL属性信息
- –delete:删除目标位置有而原始位置没有的文件(这个用的时候要小心点比较)
- –checksum:根据对象的校验来决定是否跳过文件
配置源两种表示方法(源很重要的)
格式1:用户名@主机地址::共享模块名 (注意是双冒号)
格式2:rsync://用户名@主机地址/共享模块名
例如:
格式一:rsync -avz backuper@20.0.0.8::wwwroot /opt
格式二:rsync -avz rsync://backuper@20.0.0.8/wwwroot /opt
rsync同步操作示例
下行rsync源:wwwroot共享->/myweb
解析:就是说你从源站点(服务端A)去同步到目标站点(客户机)中去 如果你加–delete那么就会将你A端没有的B端有的东西给删除掉 总之帮别人清理东西
面交互
就是不需要手动敲密码直接连接到想到的设备或软件。### rsync源的免交互处理
用法: --passwd-file=密码文件
注意的是要对文件进行授权600(只有文件的主人能看其他人都看不了)
然后可以做个计划任务多长时间同步一次 记得重启cront 和让它开机自启
rsync实验
实验环境
源点服务器(A):20.0.0.8
目标点服务器(B):20.0.0.69
Xshell6
关闭防火墙组件(两台服务器都要做)
systemctl stop firewalld
iptables -F
setemforce 0
补充知识可用进行:搭建ftp实验
1、两台服务器都安装ftp
yum -y install vsftpd
yum -y install ftp*
systemctl start vsftpd
netstat -natp |grep vsftp
[root@localhost ~]# netstat -natp |grep vsftpd ##ftp有两个端口的20是数据传输 21是连接
tcp6 0 0 :::21 :::* LISTEN 7097/vsftpd
2、在A服务器上去远程B服务器
yum -y install ftp*
[root@localhost ~]# yum -y install ftp* ##下面是ftp的依赖包
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.ustc.edu.cn
* extras: mirrors.ustc.edu.cn
* updates: mirrors.ustc.edu.cn
Resolving Dependencies
[root@localhost ~]# ftp 20.0.0.69 ##远程B服务器
Connected to 20.0.0.69 (20.0.0.69).
220 (vsFTPd 3.0.2)
Name (20.0.0.69:root): ftp ##输入一个用户
331 Please specify the password.
Password: ##输入密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls ##查看都有什么
ftp> ls ##你会发现你只能在B的/var/ftp/这个站点上不能去/或者/etc
227 Entering Passive Mode (20,0,0,69,203,241).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Oct 23 07:00 abc
drwxr-xr-x 2 0 0 6 Aug 03 2017 pub
ftp> cd / ##看上去在跟其实还是在站点ftp上
250 Directory successfully changed.
quit ##退出
但是当你用另为一个用户登录如lai 在B的/home/中有的账户
ftp> cd /etc
250 Directory successfully changed.
ftp> ls ##发现可以任意切换说明安全
227 Entering Passive Mode (20,0,0,69,131,188).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 5090 Nov 04 2016 DI
接下来就是做的rsync的实验
在A服务上部署
1、编辑rsync配置文件
[root@localhost ~]# rpm -q rsync ##查软件包有没有装
rsync-3.0.9-18.el7.x86_64 ##已装好(两台都要装、若没有装直接yum -y install rsync装就行)
vim /etc/rsyncd.conf
添加或修改成如下内容:
uid = nobody ##管理的程序型用户
gid = nobody ##开启组
use chroot = yes ##开启禁锢家目录功能
address = 20.0.0.8
port 873 ##端口号与表的不能冲突
hosts allow = 20.0.0.0/24
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
添加同步模块:
[wwwroot] ## 模块名
path = /var/www/html ## 同步源目录
comment = www.zhongguo.com ## 描述
read only = yes ## 源站只读
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 ## 不进行压缩的文件格式
auth users = backuper ## 用户定义
secrets file = /etc/rsyncd_users.db ## 用户密码文件存放路径
2、下载http
yum -y install httpd
cd /var/www/html/
echo "this is rsync" > abc.txt
3、创建密码文件
vim /etc/rsyncd_users.db
backuper:lai123
chmod 600 rsyncd_users.db #为了不让他人访问修改权限(只有属主可以查看)
4、开启
rsync --daemon
netstat -natp |grep 873
tcp 0 0 20.0.0.8:873 0.0.0.0:* LISTEN 51059/rsyn
5、用B服务器去拉起对方文件
[root@localhost ~]# rsync -avz backuper@20.0.0.8::wwwroot /opt/
Password:
receiving incremental file list
./
abc.txt
或者用第二种方法拉去
[root@localhost opt]# rsync -avz rsync://backuper@20.0.0.8/wwwroot /opt/ ##从backuper这个用户拉去文件到自己的/opt目录下
Password:
cd /opt
ls
abc.txt
5、在B服务器上也设置面交互的计划性任务
vim /etc/server.pass
lai123
rm -rf abc.txt
rsync -avz --delete --password-file=/etc/server.pass backuper@20.0.0.8::wwwroot /opt/ ##你会发现它把/opt下的sh目录删除了 仅同步了abc.txt
监控
rsync实时同步
定期同步的不足
执行备份的时间固定,延迟明显、实时性差
当同步源长期不变化时,密集的定期任务是不必要的
实时同步的优点
一旦同步源出现变化,立即启动备份
只要同步源无变化,则不执行备份
为了解决这个问题可以使用Linux内核提供额inotifu机制
从版本2.6.13开始提供
可以监控文件系统的变动情况,并做出通知响应
用到的辅助软件:inotifu-tools
调整inotifu内核参数
max_queue_events:监控事件队列大小
max_user_instances:最多监控实例数
max_user_watches:每个实例最多监控文件数
inotify-tools工具参数
inotifywait:用于持续监控,实时输出结果
inotifywatch:用于短期监控,任务完成后再出结果
命令选项:
-m:持续进行监控
-r: 递归监控所有子对象
-q:简化输出信息
-e:指定要监控哪些事件类型
接上面的实验做
1、在B机上安装http服务安装编译环境
yum -y install httpd
yum -y install gcc gcc-c++
2、调整内核参数
vim /etc/sysctl.conf ## 编辑配置文件
fs.inotify.max_queued_events = 16384 ## 监控事件队列大小
fs.inotify.max_user_instances = 1024 ## 最多监控实例数
fs.inotify.max_user_watches = 1048576 ## 每个实例最多监控文件数
使用命令:sysctl -p 使配置立即生效
3、解压缩软件(先上传到/opt目录下)并进行配置与安装
tar zxvf inotify-tools-3.14.tar.gz -C /opt
cd /opt/inotify-tools-3.14 ## 进入软件目录
./configure ## 进行配置
make && make install ## 编译及安装
4、测试inotify软件是否可以正常监控
inotifywait -mrq -e modify,create,move,delete /var/www/html ## 执行命令后会进入监听模式,无法操作,所以需要另开一个终端页面操作
PS:
-m:持续进行监控
-r递归监控所有子对象
-q:简化输出信息
-e:指定要监控哪些事件类型
随机创建文件并写入内容测试inotify是否可以监控操作动作:
cd /var/www/html
touch b
echo "123" > c
另一个终端输出信息,说明软件工作正常:
[root@localhost inotify-tools-3.14]# inotifywait -mrq -e modify,create,move,delete /var/www/html
/var/www/html/ CREATE b
/var/www/html/ MODIFY b
5、编写一个shell脚本,通过inotifuwait触发rsync同步操作
vim /opt/inotify.sh ## 创建脚本
在脚本中写入:
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/ backuper@192.168.50.135::wwwroot/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ];then
$RSYNC_CMD
fi
done
PS:注意!192.168.50.135 IP是A机的
chmod +x /opt/inotify.sh ## 为脚本添加执行权限
6、因为涉及到读写操作,所以需要把A、B机的/var/www/html/目录的权限放开
chmod 777 /var/www/html/ ## 分别在A、B机上进行操作
[root@localhost www]# ll
总用量 0
drwxrwxrwx 2 root root 25 10月 23 18:29 html
7、在A服务器开启写的权限和重启A服务器的rsync
vim /etc/rsyncd.conf
省略部分内容
comment = www.zhongguo.com ## 描述
read only = no ## 源站只读
下面是重启rsync
pkill -9 rsync
[root@localhost www]# rsync --daemon ###开启的时候发现不能开启因为有有这个文件还在
failed to create pid file /var/run/rsyncd.pid: File exists
cd /var/run/
cat rsyncd.pid
51059 ##发现这和进程还在 所以要把它删除
rm -rf rsyncd.pid
rsync --daemon ##这就能开启了
8、到B服务器开启监控并测试运行的情况
[root@localhost opt]# ./inotify.sh ##开启监控
[root@localhost html]# touch chs ##再开一个终端创建修改文件
[root@localhost html]# touch lai
[root@localhost html]# echo "zhenghao" lai1
zhenghao lai1
[root@localhost html]# echo "zhenghao" > lai1
可去看源来的B终端看情况
[root@localhost opt]# ./inotify.sh
rsync: failed to set times on "/." (in wwwroot): Operation not permitted (1)
rsync error: some files/attrs were not transferred (see previous errors) (code ...省略
这个时候到A上去看看有什么是不是在/var/www/html/上面已经和A刚创建的同步了
[root@localhost html]# cat lai1 ##发现同步了
zhenghao
实验总结
在做监控实验的时候应该注意点就是A配置文件的
vim /etc/rsyncd.conf
comment = www.zhongguo.com ## 描述 一定必须是com结尾的
read only = no ##一定要是能写的模式
还有就是修改这配合文件后要重启 记得注意开启的时候可能要删除原来的