一、rsync远程同步
1.什么是rsync远程同步
rsync是CS架构的数据镜像备份工具,可以实现全量备份和快速增量备份支持本地复制或ssh、rsync主机同步。rsync默认端口为 873
rsync特性:可以在不通主机之间镜像同步整个目录树,支持增量备份、保持链接和权限、时间、属性且传输前自动执行压缩、rsync不需要特殊权限即可安装,centos系统默认安装,支持匿名传输,注意发起端要有对应目录位置的读权限。
2. rsync备份类型
完全备份:每次备份将备份源所有文件或目录备份到目的。
差量备份:备份上次完全备份以后有变化的数据。
增量备份:备份上次完全备份以后有变化的数据。
3. rsync同步方式
①本地复制:首先是将源文件和目的位置文件对比找出差异,然后将源文件与目的位置的差异部分进行一致性同步。
②上行同步:客户端与服务端同步内容,可以理解为客户端从服务器上下载内容
③下行同步:服务端与客户端同步内容,可以理解为客户端将内容上传到服务器
4. rsync命令使用
基本格式:rsync [选项] 原始位置 目的位置
注意:原始位置文件夹若加/则是同步文件夹下所有内容,不包括文件夹本身,若需要整个目录同步则不加/
选项:
a: 归档模式,保留所有属性权限等
v: 显示同步过程
z: 传输时进行压缩
e: 指定使用什么方式同步ssh等
delete: 删除目的位置有但是原始位置没有的文件同步客户端和服务端数据
password-file: password-file=密码文件位置,可以在同步时使用免交互登录
二、rsync下行同步实验部署
1. 实验环境
192.168.50.200:客户端
192.168.50.150:服务端
关闭防火墙,安全防护模块
2. 实验流程
2.1 修改配置文件
1 rpm -q rsync #检测rsync是否安装,一般系统已默认安装rsync
2 rpm -qc rsync #查看配置文件在什么地方
3 cp /etc/rsyncd.conf /etc/rsyncd.conf_bak
4 #备份配置文件,便于回滚还原
5 vim /etc/rsyncd.conf #建立/etc/rsyncd.conf配置文件
6 Uid = root #用户id,注意不用root使用rsync同步时可能会报错
7 Gid = root #组id,注意不用root使用rsync同步时可能会报错
8 Use chroot = yes #禁锢在源目录
9 Address = 192.168.50.150 #监听地址
10 Port 873 #监听端口 tcp/udp 端口可通过cat /etc/services | grep rsync 查看
11 Log file = /var/log/rsyncd.log #日志文件位置
12 Pid file = /var/run/rsyncd.pig #存放进程id的文件位置
13 Hosts allow = 192.168.50.0/24 #允许访问的客户机地址
14 Dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z #同步时不在压缩的文件类型
15
16 [myhtml] #共享模块名称
17 Path = /var/www/html #源目录的实际路径
18 Comment = this is rsync of www.kgc.com #解释说明
19 Read only = yes #是否为只读
20 Auth users = daiwei #授权账户,多个账号以空格分隔
21 Secrets file = /etc/rsyncd_users.db #存放账户信息的数据文件
22 #如采用匿名的方式,只要将其中的“auth users”和“secrets file”
23 配置项去掉即可
24
25 mkdir -p /var/www/html #创建目录
26 ls -ld /var/www/html/ #查看权限
27 #如果没有读权限需要加上读权限
28 Chmod +r /var/www/html/
29
30 vim /etc/rsyncd_users.db
31 Daiwei:123456 #无需建立同名系统用户
32 Chmod 600 /etc/rsyncd_users.db
33 #设置权限,保证所以用户对源目录/var/www/html都有读取权限
34 rsync --daemon #启动rsync服务,以独立监听服务的方式运行
35 netstat -antp |grep rsync
36 #关闭rsync服务使用kill命令, kill 进程号,cat /var/run/rsyncd.pid查看进程号;或rm -rf /var/wrun/rsyncd.pid
2.2 进入客户端(发起端200),同步数据
1 mkdir /opt/ky26 #创建文件ky26
2 rsync -avz daiwei@192.168.50.150::myhtml /opt/ky26
3 #将模块下载到本地的ky26 ,密码:123456
2.3 进入服务端
将/etc/passwd /etc/shadow拷贝到/var/www/html目录下
2.4 进入客户端查看数据是否变更,如下图,数据已变更
2.5 在服务端/var/www/html目录下修该用户信息文件,在尾行插入一条zhangsan的信息,客户端也会同步
2.6 设置免交互密码,只给当前用户使用,其他用户无法使用
2.7 服务端删除数据,客户端若要同步需要加--delete命令
2.8 实时备份
设置每天十点半备份
2.9 补充配置源的表达方式
rysnc -avz -e ‘ssh -p ssh的端口号’ 原始位置 目标位置
服务端添加信息
客户端同步信息
三 、 rsync实时同步部署
1. 实验环境
master:192.168.50.200
slave: 192.168.50.100
2. 服务端配置
1 #基于下行同步完成的情况下
2 vim /etc/rsyncd.conf
3 read only =no
4 #关闭下行同步的只读,保存退出
5 kill `cat /var/run/rsyncd.pid`
6 #杀死rsync进程即关闭服务
7 rsync --daemon
8 #开启rsync服务
9 chmod 777 /var/www/html
10 #给lhjhtml模块的目录加权限
3. 客户端配置
1 #查看inotify内核参数
2 cat /proc/sys/fs/inotify/max_queued_events
3 #监控时间队列数
4 cat /proc/sys/fs/inotify/max_user_instances
5 #最多监控实例数
6 cat /proc/sys/fs/inotify/max_user_watches
7 #每个实例最多监控文件数
8 vim /etc/sysctl.conf #优化inotify内核参数
9 fs.inotify.max_queued_events = 32768
10 fs.inotify.max_user_instances = 1024
11 fs.inotify.max_user_watches = 1048576
12 sysctl -p #加载内核生效
4. 安装inotify
#客户端安装inotify
yum install gcc gcc-c++ -y #安装编译工具
cd /opt
#将安装包放入/opt下
tar zxvf inotify-tools-3.14.tar.gz
#解压安装包
cd inotify-tools-3.14
./configure && make && make install
#编译安装inotify
#编写脚本监控客户端/var/www/html目录,当这个目录发生改变时使用rsync同步上传到服务端
vim inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /var/www/html"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html dai@192.168.50.200::lhjhtml"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ] ; then
$RSYNC_CMD
fi
done
#脚本内容解析:定义2个变量,变量INOTIFY_CMD监控客户端的/var/www/html文件夹。变量RSYNC_CMD执行rsync同步将/var/www/html/文件夹内容同步上传到服务端。将变量INOTIFY_CMD监控标准输入结果传给while函数,while函数读取若有后面这些关键字则执行if语句,当执行过滤rsync命令行数小于等于0则执行变量$RSYNC_CMD
1 cd /opt/
2 chmod +x inotify.sh
3 ./inotify.sh
4 执行脚本后会在前台执行占用窗口,重新开个窗口执行以下命令验证
5 cd /opt/ky26
6 echo "123">1.txt
7 然后到服务端查看是否上传完成
四、rsync删除大量文件
1 mkdir -p /date/blank
2 #建立一个空的文件夹
3 mkdir -p /date/test
4 cd /date/test
5 touch {1..10000}
6 #模拟/date/test文件中有1万个文件数据
7 rsync --delete-before -avH --progress --stats /home/blank /date/test
8 #使用rsync删除/date/test目录中的文件,用空文件夹同步了test文件夹
9 选项说明:
10 --delete-before 接收者在传输进行删除操作
11 -a 归档模式,表示以递归方式传输文件,并保持所有文件属性-H 保持硬连接的文件
12 -v 详细输出模式
13 -H 保持硬连接的文件
14 --progress 在传输时显示传输过程
15 --stats 给出某些文件的传输状态
16 cd /date/test
17 ls
18 #进入查看数据为空