第1章 rsync
1.1 rsync是什么
rsync是一款开源的,快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具同步备份的优秀工具
1.2 rsync的特性如下:
支持拷贝特殊文件如链接文件,设备等
可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
可以做到保持原文件或目录等权限,时间,软硬链接,属主,属组等所有属性均不改变 –p
可实现增量同步,即只同步发生变化的数据,因此数据传输效率很高
可以使用rcp,rsh,ssh等方式来配置传输文件(rsync本身不对数据加密)
可以通过socket(守护进程方式)传输文件和数据(服务端和客户端)
支持匿名或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像
rsync也相当于ls命令
1.3 rsync的企业工作场景说明
两台服务器之间数据同步(定时任务+rsync)
实时同步(解决存储服务器的单点问题)
1.4 rsync的工作方式
1.4.1 rsync大致使用三种主要的传输数据方式,分别为:
1.4.1.1 单个主机本地之间数据传输(类似于cp命令的功能)
实例:
[root@backup tmp]# ls 复制前
user.txt yum.log
[root@backup tmp]# rsync /etc/hosts /tmp/hosts1 使用rsync命令复制
[root@backup tmp]# ls 复制后
hosts1 user.txt yum.log
注意:
在rsync中 /tmp 和/tmp/是有区别的
/tmp 表示tmp及tmp下面的内容
实例:
[root@backup ~]# rsync -a /etc/sysconfig/network-scripts /tmp/b
[root@backup ~]# cd /tmp/b/
[root@backup b]# ls
network-scripts 将目录及其目录下的内容一起复制
[root@backup b]# ls network-scripts/
ifcfg-eth0 ifdown-ippp ifdown-tunnel ifup-ipv6 ifup-sit
ifcfg-eth1 ifdown-ipv6 ifup ifup-isdn ifup-tunnel
ifcfg-lo ifdown-isdn ifup-aliases ifup-plip ifup-wireless
ifdown ifdown-post ifup-bnep ifup-plusb init.ipv6-global
ifdown-bnep ifdown-ppp ifup-eth ifup-post net.hotplug
ifdown-eth ifdown-routes ifup-ib ifup-ppp network-functions
ifdown-ib ifdown-sit ifup-ippp ifup-routes network-functions-ipv6
/tmp/ 表示tmp下面的内容
实例:
[root@backup ~]# rsync -a /etc/sysconfig/network-scripts/ /tmp/a
[root@backup ~]# ls /tmp/a/ 只是将文件复制过去了,没有复制network-scripts这个目录
ifcfg-eth0 ifdown-routes ifup-plusb
ifcfg-eth1 ifdown-sit ifup-post
ifcfg-lo ifdown-tunnel ifup-ppp
ifdown ifup ifup-routes
ifdown-bnep ifup-aliases ifup-sit
ifdown-eth ifup-bnep ifup-tunnel
ifdown-ib ifup-eth ifup-wireless
ifdown-ippp ifup-ib init.ipv6-global
ifdown-ipv6 ifup-ippp net.hotplug
ifdown-isdn ifup-ipv6 network-functions
ifdown-post ifup-isdn network-functions-ipv6
ifdown-ppp ifup-plip
1.4.1.2 借助scp,ssh等通道来传输数据(类似于scp命令的功能)rsync可以增量备份
实例1:复制文件
[root@backup b]# rsync –avz –e “ssh –p 22”/etc/hosts 172.16.1.31:/tmp/
将本地的hosts文件推到172.16.1.31:/tmp/目录下
–e “ssh –p 22” 表示指定隧道传输 -p 22可以省略
[root@backup b]# rsync –avz –e “ssh –p 22” 172.16.1.31:/etc/hosts /tmp
将远端的hosts文件拉到本地的/tmp目录下
–e “ssh –p 22” 表示指定隧道传输 -p 22可以省略
root@172.16.1.31's password: 输入完密码后就可以将文件复制过去
[root@nfs01 tmp]# ls hosts为对端服务器端内容
hosts yum.log
实例2:复制目录需要加-a参数
[root@backup tmp]# rsync -a /tmp/ 172.16.1.31:/tmp/ 将本地的tmp目录推到172.16.1.31:/tmp/目录下
root@172.16.1.31's password: 输入完密码就可以将数据复制过去
[root@nfs01 tmp]# ll 对端服务器端内容,已将数据复制过去
total 24
drwxr-xr-x. 2 root root 4096 Jul 23 2017 a
drwxr-xr-x. 3 root root 4096 Jul 24 2017 b
drwxr-xr-x. 2 root root 4096 Jul 24 2017 c
-rw-r--r--. 1 root root 264 Jul 23 06:36 hosts
-rw-r--r--. 1 root root 264 Jul 24 2017 hosts1
-rw-r--r--. 1 root root 87 Jul 22 14:28 user.txt
-rw-------. 1 root root 0 Jul 22 07:40 yum.log
实例3:增量备份
[root@backup tmp]# rsync -av /tmp/ 172.16.1.31:/tmp/ -a 复制目录 -v 显示过程
root@172.16.1.31's password:
sending incremental file list
./
a.log
b.log
c.log
d.log
sent 1735 bytes received 96 bytes 523.14 bytes/sec
total size is 311481 speedup is 170.12
将新增加的内容复制到对端服务器
[root@nfs01 tmp]# ls –lrt 对端服务器的内容
total 24
-rw-------. 1 root root 0 Jul 22 07:40 yum.log
-rw-r--r--. 1 root root 87 Jul 22 14:28 user.txt
-rw-r--r--. 1 root root 264 Jul 23 06:36 hosts
drwxr-xr-x. 2 root root 4096 Jul 23 2017 a
-rw-r--r--. 1 root root 264 Jul 24 2017 hosts1
drwxr-xr-x. 2 root root 4096 Jul 24 2017 c
drwxr-xr-x. 3 root root 4096 Jul 24 2017 b
-rw-r--r--. 1 root root 0 Jul 24 2017 d.log
-rw-r--r--. 1 root root 0 Jul 24 2017 c.log
-rw-r--r--. 1 root root 0 Jul 24 2017 b.log
-rw-r--r--. 1 root root 0 Jul 24 2017 a.log
实例4:将内容拉回到本地服务器
[root@backup tmp]# rsync -av 172.16.1.31:/root/ /tmp/
从对端服务器将root目录下的内容拉回到本地服务器tmp目录下
root@172.16.1.31's password:
receiving incremental file list
./
.bash_history
.bash_logout
.bash_profile
.bashrc
.cshrc
.tcshrc
.viminfo
anaconda-ks.cfg
install.log
install.log.syslog
sent 204 bytes received 33401 bytes 7467.78 bytes/sec
total size is 32730 speedup is 0.97
1.4.1.3 rsync 删除目录下的内容
[root@localhost tmp]# ls
hosts yum.log
[root@localhost tmp]# mkdir /null 创建一个空目录
[root@localhost tmp]# rsync -avz --delete /null/ /tmp/
--delete 表示我有什么你就得有什么,我没有什么你就没有什么
sending incremental file list
./
deleting .ICE-unix/
deleting yum.log
deleting hosts
sent 29 bytes received 15 bytes 88.00 bytes/sec
total size is 0 speedup is 0.00
[root@localhost tmp]# ll 这里将/tmp目录清空
total 0
1.4.1.4 以守护进程(socket)的方式传输数据(这个是rsync自身的重要的功能)
服务端------就是一个命令 一直在运行的进程 守护进程
客户端------一般就是一个命令
1.5 rsync服务端操作
1.5.1 第一个里程碑-检查软件是否安装
1.5.1.1 检查软件是否安装
[root@backup ~]# rpm -qa rsync
rsync-3.0.6-12.el6.x86_64
1.5.1.2 查看软件里面有什么内容
[root@backup ~]# rpm -ql rsync
/etc/xinetd.d/rsync
/usr/bin/rsync
1.5.1.3 查看软件属于那个包
[root@backup ~]# rpm -qf `which ssh`
openssh-clients-5.3p1-122.el6.x86_64
1.5.2 第二个里程碑-写配置文件
[root@backup ~]# cat /etc/rsyncd.conf
#!/bin/bash
uid = rsync 用来运行rsync服务
gid = rsync
use chroot = no 安全相关
max connections = 200 最大连接数 就是同时可让多少人连接
timeout = 300 超时时间
pid file = /var/run/rsyncd.pid 存放服务运行的时候,进程的id号码(PID)
lock file = /var/run/rsync.lock 进程的锁文件
log file = /var/log/rsyncd.log 日志文件
[backup] 模块名称
path = /backup/ 要备份文件的目录
ignore errors 忽略错误
read only = false 是否只读
list = false 是否列表
hosts allow = 172.16.1.0/24 那些IP允许访问
host deny = 0.0.0.0/0 那些ip不能访问
auth users = rsync_backup 不存在的用户,只用于认证
secrets file = /etc/rsync.password 不存在的用户对应的密码
1.5.3 第三个里程碑-添加用户及创建目录
[root@backup ~]# useradd -M -s /sbin/nologin rsync
[root@backup backup]# mkdir /backup/ 创建备份的目录
1.5.3.1 修改目录的所有者和所属组
[root@backup ~]# ls -ld /backup/
drwxr-xr-x. 2 root root 4096 Jul 24 04:21 /backup/
[root@backup ~]# chown rsync:rsync /backup/
[root@backup ~]# ls -ld /backup/
drwxr-xr-x. 2 rsync rsync 4096 Jul 24 04:21 /backup/
1.5.4 第四个里程碑-创建密码文件
[root@backup ~]# echo 'rsync_backup:123456' >/etc/rsync.password
[root@backup ~]# cat /etc/rsync.password
rsync_backup:123456
1.5.4.1 修改权限
[root@backup ~]# chmod 600 /etc/rsync.password
[root@backup ~]# ll /etc/rsync.password
-rw-------. 1 root root 20 Jul 24 04:27 /etc/rsync.password
1.5.5 第五个里程碑-启动rsync服务
[root@backup ~]# rsync –daemon
1.5.6 加入开机自启动
[root@backup ~]# vim /etc/rc.local
# rsync server progress
/usr/bin/rsync --daemon
1.5.7 第六个里程碑-检查 rsync的端口号为873
[root@backup ~]# ss -tlunp|grep rsync
tcp LISTEN 0 5 :::873 :::* users:(("rsync",2452,5))
tcp LISTEN 0 5 *:873 *:* users:(("rsync",2452,4))
1.5.8 第七个里程碑-重启rsync
killall rsync 杀掉rsync的进程
killall rsync 杀掉rsync的进程
rsync –daemon 重启rsync服务
至此服务端配置完成
1.5.9 在客户端进行测试(nfs01)
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
hosts
sent 172 bytes received 27 bytes 79.60 bytes/sec
total size is 264 speedup is 1.33
成功的将hosts文件推向服务器端的/backup目录中
1.5.10 在服务端查看
[root@backup backup]# ll
total 4
-rw-r--r--. 1 rsync rsync 264 Jul 22 17:44 hosts
1.6 客户端操作
1.6.1 第一个里程碑:添加密码文件
[root@nfs01 tmp]# echo '123456' >/etc/rsync.password 将密码重定向到/etc/rsync.password文件
[root@nfs01 tmp]# cat /etc/rsync.password 查看
123456
[root@nfs01 tmp]# chmod 600 /etc/rsync.password 给/etc/rsync.password文件600的权限
1.6.2 第二个里程碑-测试
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password 指定密码文件
sending incremental file list
hosts
sent 172 bytes received 27 bytes 398.00 bytes/sec
total size is 264 speedup is 1.33
1.7 rsync多模块配置(服务端配置)
1.7.1 第一个里程碑-修改配置文件
#!/bin/bash
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
path = /backup/
[nfsbackup]
path = /nfsbackup/
1.7.2 第二个里程碑-创建nfsbackup目录并设置权限
[root@backup ~]# mkdir /nfsbackupcd
[root@backup ~]# chown rsync:rsync /nfsbackup
1.7.3 第三个里程碑-客户端测试
[root@nfs01 tmp]# rsync -avz /etc/services rsync_backup@172.16.1.41::nfsbackup --password-file=/etc/rsync.password
sending incremental file list
services
sent 127417 bytes received 27 bytes 254888.00 bytes/sec
total size is 641020 speedup is 5.03
1.7.4 第四个里程碑-服务端检查
[root@backup nfsbackup]# ll
total 628
-rw-r--r--. 1 rsync rsync 641020 Mar 22 05:56 services
1.8 rsync多文件备份
[root@nfs01 tmp]# rsync -avz /etc/sysconfig/network /etc/services /root rsync_backup@172.16.1.41::nfsbackup --password-file=/etc/rsync.password
sending incremental file list
network
services
root/
root/.bash_history
root/.bash_logout
root/.bash_profile
root/.bashrc
root/.cshrc
root/.tcshrc
root/.viminfo
root/anaconda-ks.cfg
root/install.log
root/install.log.syslog
sent 136179 bytes received 240 bytes 272838.00 bytes/sec
total size is 676263 speedup is 4.96
1.9 rsync命令常用参数选项说明
-v 显示详细的传输过程
-z 传输时进行压缩以提高传输效率 –compress-level=num 可以按照级别来压缩
-a 相当于(rtopgDl)归档模式,表示以递归方式传输文件,并保持所有文件属性
-r 对子目录以递归模式,即目录下的所有目录都同样传输。
-t –time 保持文件时间信息
-o –owner 保持文件属主信息
-p –perms 保持文件权限
-g –group 保持文件属组信息
-D –devices 保持设备文件信息
-l --links 保持软连接
-P –progress 显示同步的过程及传输时的进度等信息
-e --rsh=COMMAND 使用的信道协议(remote shell),指定替代rsh的shell程序例如:ssh
–exclude=PATTERN 指定排除不需要传输的文件模式
--exclude-from=file(文件名所在的目录文件)
实例:排除文件
[root@backup tmp]# rsync -a –-exclude=/etc/hosts /etc/services 172.16.1.31:/tmp/
–-exclude=/etc/hosts 排除/etc/services中的/etc/hosts文件
--bwlimit=RATE limt socket I/O bandwidth 传输的时候限速
--delete 让源目录和目标目录一模一样(即:我有什么你就有什么,我没什么你就没有什么)
实例:无差异同步
[root@backup tmp]# rsync -a --delete /tmp/ 172.16.1.31:/tmp/
root@172.16.1.31's password:
--delete 本地有什么,远端就有什么 本地没有什么,远端就没有什么 本地有远端没有,就会删除远端的内容
第2章 增量备份和全量备份的概念
2.1 增量备份就是将新增加的内容进行备份
例如:原来有20G的东西后来又增加了10G全部就是30G,但是增量备份只备份后来增加的10G内容
2.2 全量备份就是有多少备份多少
例如:原来有20G的东西后来又增加了10G,全部是30G,但是全量备份又会将这30G的内容重新备份一遍。
第3章 企业案例–项目实战
3.1 备份全网服务器数据生产架构方案案例模型
某公司有一台web服务器,里面的数据很重要,但是如果硬盘坏了,数据就会丢失,现在领导要求你把数据在其它机器上做一个周期性的定时备份,要求如下:
每天晚上00点整在web服务器A(web01)上打包备份网站程序目录并通过rsync命令推送到服务器B(backup)上备份保留(备份思路可以是先在本地按日期大包,然后再利用rsync推到备份服务器上)
具体要求如下:
1)、web服务器A和备份服务器B的备份目录必须都为/backup
2)、web服务器A站点目录假定为(/var/www/html)
3)、web服务器A本地仅保留7天内的备份。
4)、备份服务器上[每周六的数据都保留],其他的备份仅保留180天备份
5)、备份服务器上检查备份结果是否正常,并将每天的备份结果发给管理员信箱。
3.1.1 第一个里程碑-检查rsync是否安装(服务端操作)
[root@backup backup]# rpm -qa rsync
rsync-3.0.6-12.el6.x86_64
3.1.2 第二个里程碑-配置rysnc服务端(服务端操作)
同上1.5 rsync服务端
3.1.3 第三个里程碑-打包备份web01上面的数据(客户端操作)
/var/www/html
/etc/hosts
/etc/rc.local
/var/spool/cron
3.1.3.1 打包命令:(客户端操作)
[root@web01 backup]# cd / && tar zcf /backup/html_$(date +%F -d "-1day").tar.gz var/www/html/
[root@web01 backup]# cd / && tar zchf /backup/conf_$(date +%F -d "-1day").tar.gz etc/hosts etc/rc.local var/spool/cron/
zchf h表示不备份软连接,备份源文件
3.1.3.2 备份完要检查 (客户端操作)
[root@web01 backup]# ll
total 16
-rw-r--r-- 1 root root 451 Jul 25 07:38 conf_2017-07-25.tar.gz
drwxr-xr-x 2 root root 4096 Jul 25 07:39 etc 解压后得到的文件
-rw-r--r-- 1 root root 116 Jul 25 07:37 html_2017-07-25.tar.gz
drwxr-xr-x 4 root root 4096 Jul 25 07:52 var 解压后得到的文件
3.1.4 第四个里程碑-给文件做个指纹(md5sum)
3.1.4.1 预备知识:(客户端操作)
[root@web01 backup]# echo hello >oldboy.txt
[root@web01 backup]# md5sum oldboy.txt
b1946ac92492d2347c6235b4d2611184 oldboy.txt
[root@web01 backup]# echo hello >>oldboy.txt
[root@web01 backup]# md5sum oldboy.txt
0e5d2dc0db8b4407625b8bf633b75055 oldboy.txt
当文件中的内容发生变化时指纹就会发生变化
3.1.4.2 使用md5sum对文件进行校验 (客户端操作)
[root@web01 backup]# find /backup/ -type f -name "*.tar.gz"|xargs md5sum
39a518698a1c914850830bf02c3a4391 /backup/conf_2017-07-24.tar.gz
40c164714e904c803482a9658056621d /backup/html_2017-07-24.tar.gz
[root@web01 backup]# find /backup/ -type f -name "*.tar.gz"|xargs md5sum >/backup/char.md5
用find来查找打包的文件并找到后交给md5sum处理 再将md5sum处理后的结果输出重定向到一个文件中
[root@web01 backup]# cat /backup/char.md5 查看char.md5中的内容
39a518698a1c914850830bf02c3a4391 /backup/conf_2017-07-24.tar.gz
40c164714e904c803482a9658056621d /backup/html_2017-07-24.tar.gz
[root@web01 backup]# md5sum -c char.md5
/backup/conf_2017-07-24.tar.gz: OK
/backup/html_2017-07-24.tar.gz: OK
md5sum –c 参数可以判断文件是否发生变化 当文件发生变化时校验的文件后面会接failed
3.1.5 第五个里程碑-把备份的文件和指纹都推送到backup服务器
3.1.5.1 将客户端的文件推送到backup服务端-命令行操作(客户端操作)
[root@web01 ]# rsync -avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
./
char.md5
130 100% 0.00kB/s 0:00:00 (xfer#1, to-check=2/4)
conf_2017-07-24.tar.gz
451 100% 440.43kB/s 0:00:00 (xfer#2, to-check=1/4)
html_2017-07-24.tar.gz
116 100% 113.28kB/s 0:00:00 (xfer#3, to-check=0/4)
sent 890 bytes received 68 bytes 273.71 bytes/sec
total size is 697 speedup is 0.73
3.1.5.2 在backup服务端检查(服务端操作)
[root@backup backup]# ll
total 20
-rw-r--r-- 1 rsync rsync 130 Jul 25 2017 char.md5
-rw-r--r-- 1 rsync rsync 451 Jul 25 2017 conf_2017-07-24.tar.gz
drwxr-xr-x 2 root root 4096 Jul 24 12:29 etc
-rw-r--r-- 1 rsync rsync 116 Jul 25 2017 html_2017-07-24.tar.gz
drwxr-xr-x 3 root root 4096 Jul 24 12:29 var
3.1.5.3 在服务端查看指纹信息是否发生变化
[root@backup backup]# md5sum -c char.md5
/backup/conf_2017-07-24.tar.gz: OK
/backup/html_2017-07-24.tar.gz: OK
都为OK,当文件发生变化时就会输出falsed
3.1.5.4 编写脚本完成-备份-校验-推送(客户端操作)
#!/bin/bash
###backup conf and html
cd / && tar zcf /backup/html_$(date +%F_%w -d "-1day").tar.gz var/www/html/
cd / && tar zchf /backup/conf_$(date +%F_%w -d "-1day").tar.gz etc/hosts etc/rc.local var/spool/cron/
###md5sum check
find /backup/ -type f -name "*.tar.gz"|xargs md5sum >/backup/char.md5
###rsync push
rsync -avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
**判断版**
#!/bin/bash
###backup conf and html
bak=/backup/
>/tmp/tar.log
cd / && tar zcf ${bak}html_$(date +%F_%w -d "-1day").tar.gz var/www/html/
if [ $? -ne 0 ];then
echo "html_File packaging failed" >>/tmp/tar.log
else
echo "html_File packaging successfully" >>/tmp/tar.log
fi
cd / && tar zchf ${bak}conf_$(date +%F_%w -d "-1day").tar.gz etc/hosts etc/rc.local var/spool/cron/
if [ $? -ne 0 ];then
echo "conf_File packaging failed" >>/tmp/tar.log
else
echo "conf_File packaging successfully" >>/tmp/tar.log
fi
###md5sum check
find $bak -type f -name "*.tar.gz"|xargs md5sum >/backup/char.md5 &&\
md5sum -c ${bak}char.md5 >/dev/null 2>&1
if [ $? -ne 0 ];then
echo "File changes" >/tmp/echo.log
else
echo "File integrity" >/tmp/echo.log
fi
###rsync push
rsync -az $bak rsync_backup@172.16.1.41::backup/172.16.1.8 --password-file=/etc/rsync.password
backup/172.16.1.8 表示backup下面的一个目录名,这个172.16.1.8可以自动创建,不需要先前创建好
###delete 7 days ago
find /backup/ -type f -name "*.tar.gz" -mtime +7|xargs rm
3.1.6 第六个里程碑-web01上面保留7天的文件 (客户端操作)
[root@web01 backup]# find /backup/ -type f -name "*.tar.gz" -mtime +7|xargs rm –f
3.1.7 第七个里程碑-发送校验结果给管理员-命令行实现(服务端操作)
[root@backup backup]# md5sum -c /backup/char.md5 >/backup/result.log
[root@backup backup]# cat /backup/result.log
/backup/conf_2017-07-29_6.tar.gz: OK
/backup/html_2017-07-29_6.tar.gz: OK
[root@backup backup]# mail -s "result" 1665111913@qq.com </backup/result.log
脚本实现:
#!/bin/bash
###md5 check
md5sum -c /backup/char.md5 >/backup/result.log
###Notification manager
mail -s "result" 1665111913@qq.com </backup/result.log
3.1.8 第八个里程碑-backup服务器上面保留180天并且周六的永久保存(服务端操作)
##目前压缩包只有日期,需要给压缩包加上星期即可
[root@backup backup]# ll
total 12
-rw-r--r-- 1 rsync rsync 130 Jul 25 2017 char.md5
-rw-r--r-- 1 rsync rsync 451 Jul 25 2017 conf_2017-07-24.tar.gz
-rw-r--r-- 1 rsync rsync 116 Jul 25 2017 html_2017-07-24.tar.gz
给打包的文件加上一个周几(星期几)(服务器端操作)
[root@backup backup]# ll
total 12
-rw-r--r-- 1 rsync rsync 134 Jul 25 2017 char.md5
-rw-r--r-- 1 rsync rsync 451 Jul 25 2017 conf_2017-07-24_1.tar.gz
-rw-r--r-- 1 rsync rsync 116 Jul 25 2017 html_2017-07-24_1.tar.gz
删除180天之前的,保留周六的 (服务器端操作)
find -type f -mtime +180 -name "*.tar.gz" ! -name "*_6.tar.gz"|xargs rm
3.2 项目实例:
将需要备份的文件用当前服务器的ip和时间命名目录名称来备份文件
#!/bin/bash
path=/backup
dir="`/sbin/ifconfig eth0|awk -F"[ :]+" 'NR==2{print $4}'`_$(date +%F)"
mkdir -p $path/$dir
cp /etc/rc.local $path/$dir/rc.local_$(date +%F) 用IP和时间来命名文件的名字
rsync -az $path/$dir rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
$path/$dir 创建一个目录:目录是以当前服务器的IP地址和当天的时间命名
第4章 sersync配置实例
4.1 为什么要用rsync+sersync架构?
4.1.1 1、sersync是基于inotify开发的,类似于inotify-tools的工具
4.1.2 2、sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或者某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的文件或者目录
4.2 rsync+inotify-tools与rsync+sersync架构的区别?
4.2.1 rsync+inotify-tools
4.2.1.1 inotify只能记录下被监听的目录发生了变化(增,删,改)并没有把具体是哪个文件或者哪个目录发生了变化记录下来;
4.2.1.2 rsync在同步的时候,并不知道具体是哪个文件或目录发生了变化,每次都是对整个目录进行同步,当数据量很大时,整个目录同步非常耗时(rsync要对整个目录遍历查找对比文件),因此效率很低
4.2.2 rsync+sersync
4.2.2.1 sersync可以记录被监听目录中发生变化的(增,删,改)具体某个文件或目录的名字;
4.2.2.2 rsync在同步时,只同步发生变化的文件或目录(每次发生变化的数据相对整个同步目录数据来说很小,rsync在遍历查找对比文件时,速度很快),因此效率很高。
总结:
当同步的目录数据量不大时,建议使用rsync+inotify
当同步的目录数据量很大时(几百G甚至1T以上)文件很多时,建议使用rsync+sersync
4.3 rsync部署同上1.5节(服务端操作)
4.4 下载sersync安装包(客户端操作)
wgethttps://raw.githubusercontent.com/orangle/sersync/master/release/sersync2.5.4_64bit_binary_stable_final.tar.gz
4.4.1 创建下载目录(将所有安装包都放在这里)
mkdir -p /applition/tools
cd /applition/tools
下载完解压安装即可(这里不再写步骤)
4.5 安装seraync
[root@nfs01 local]# cd /usr/local/
[root@nfs01 local]# mv GNU-Linux-x86 sersync 将软件目录重命名为sersync
[root@nfs01 local]# tree sersync/
sersync/
├── confxml.xml
└── sersync2
4.6 配置sersync
[root@nfs01 local]# cp sersync/confxml.xml sersync/confxml.xml.$(date +%F) 备份源配置文件
[root@nfs01 local]# ll sersync/confxml.xml
-rwxr-xr-x. 1 root root 2214Oct 26 2011 sersync/confxml.xml
[root@nfs01 local]# ll sersync/confxml.xml*
-rwxr-xr-x 1 root root 2465 Jul 24 00:37 sersync/confxml.xml
-rwxr-xr-x 1 root root 2214 Jul 24 00:13 sersync/confxml.xml_2017-07-23
4.7 更改优化sersync配置文件:
4.7.1 修改24-28行内容
4.7.1.1 修改前
<localpath watch="/opt/tongbu"> 本地要同步的目录
<remote ip="127.0.0.1" name="tongbu1"/> rsync服务端的ip及模块名称
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
4.7.1.2 修改后
<localpath watch="/nfsbackup/www">
<remote ip="172.16.1.41" name="nfsbackup"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
4.7.2 修改31–34行,认证部分【rsync密码认证】
4.7.2.1 修改前
29 <rsync>
30 <commonParams params="-artuz"/>
31 <auth start="false" users="root" passwordfile="/etc/rsync.pas"/>
32 <userDefinedPort start="false" port="874"/><!-- port=874 -->
33 <timeout start="false" time="100"/><!-- timeout=100 -->
34 <ssh start="false"/>
35 </rsync>
4.7.2.2 修改后
<rsync>
<commonParams params="-artuz"/> rsync的一些参数
<auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
# ***修改内容为 rsync的密码文件以及 同步所使用的账号:
rsync -avzP /nfsbackup/www rsync_backup@172.16.1.41::nfsbackup/ --password-file=/etc/rsync.password
4.7.3 修改36行(日志的保存目录)
4.7.3.1 修改前
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
4.7.3.2 修改后
<failLog path="/usr/local/sersync/log/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
# 当同步失败后,日志记录到/usr/local/sersync/logs/rsync_fail_log.sh文件中,并且每60分钟对失败的log进行重新同步
4.7.4 修改后的完整配置为:
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
<host hostip="localhost" port="8008"></host>
<debug start="false"/>
<fileSystem xfs="false"/>
<filter start="false">
<exclude expression="(.*)\.svn"></exclude>
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="false"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="false"/>
<modify start="false"/>
</inotify>
<sersync>
<localpath watch="/nfsbackup/www">
<remote ip="172.16.1.41" name="nfsbackup"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<localpath watch="/backup">
<remote ip="172.16.1.41" name="backup"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-artuz"/>
<auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
sersync不能在一个配置文件中写多个模块,需要将其它模块写到其它的配置文件中
……省略部分内容……
4.8 rsync配置文件格式详解
4.8.1 全局配置参数
[模块]
局域配置参数
说明:以上格式编写配置文件称为ini语法格式文件
4.9 sersync配置文件格式
<标签 参数>
定义不同的标签
</标签>
说明:以上格式编写配置文件称为标签语法格式文件(xml html)
4.9.1 配置文件详细说明
4.9.1.1 sesync软件的过滤功能:排除指定的文件不进行同步
<filter start="false">
<exclude expression="(.*)\.svn"></exclude>
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
# sesync软件的过滤功能结束
4.9.1.2 sesync软件监控指定事件信息:表示触发监控管理的事件
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="false"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="false"/>
<modify start="false"/>
</inotify>
# sesync软件监控指定事件信息结束
4.9.1.3 定义监控的目录,以及rsync服务器IP地址与模块信息
<localpath watch="/data">
<remote ip="172.16.1.41" name="nfsbackup"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
4.9.1.4 rsync推送相关的参数配置
<rsync>
<commonParams params="-az"/>
<auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
4.9.1.5 重传文件日志
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
echo "/data/oldboy.txt" >/tmp/rsync_fail_log.sh
相当于定时任务功能,间隔1min
cat /tmp/rsync_fail_log.sh
rsync -avz /data/oldboy.txt rsync_backup@172.16.1.41::nfsbackup
4.10 开启sersync守护进程同步数据
4.10.1 启动命令
[root@nfs01 ~]#/usr/local/sersync/sersync2 -rdo /usr/local/sersync/confxml.xml
配置sersync环境变量
[root@nfs01 ~]#echo"PATH=$PATH:/usr/local/sersync/">>/etc/profile
[root@nfs01 ~]#source /etc/profile
[root@nfs01 ~]#sersync2
4.10.2 启动命令后返回结果如下为正常:
[root@nfs01 local]# /usr/local/sersync/sersync2 -rd -o /usr/local/sersync/confxml.xml
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
option: -r rsync all the local files to the remote servers before the sersync work
option: -d run as a daemon
option: -o config xml name: /usr/local/sersync/confxml.xml
daemon thread num: 10
parse xml config file
host ip : localhost host port: 8008
daemon start,sersync run behind the console
use rsync password-file :
user is rsync_backup
passwordfile is /etc/rsync.password
config xml parse success
please set /etc/rsyncd.conf max connections=0 Manually
sersync working thread 12 = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads)
Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads)
please according your cpu ,use -n param to adjust the cpu rate
------------------------------------------
rsync the directory recursivly to the remote servers once
working please wait...
execute command: cd /nfsbackup/www && rsync -artuz -R --delete ./ rsync_backup@172.16.1.41::nfsbackup --password-file=/etc/rsync.password >/dev/null 2>&1
run the sersync:
watch path is: /nfsbackup/www
4.11 补充: 多实例情况
1、配置多个confxml.xml文件(比如:www、bbs、blog…等等)
2、根据不同的需求同步对应的实例文件
/usr/local/sersync/sersync2 -d -o /usr/local/sersync/www_confxml.xml
/usr/local/sersync/sersync2 -d -o /usr/local/sersync/bbs_confxml.xml
/usr/local/sersync/sersync2 -d -o /usr/local/sersync/blog_confxml.xml
# 多实例初始化同步命令:
/usr/local/sersync/sersync2 -r-d -o /usr/local/sersync/www_confxml.xml
/usr/local/sersync/sersync2 -r-d -o /usr/local/sersync/bbs_confxml.xml
/usr/local/sersync/sersync2 -r-d -o /usr/local/sersync/blog_confxml.xml
/bin/cp /etc/rc.local /etc/rc.local_$(data +%F)
cat>>/etc/rc.local<<EOF 加入开机自启动
#sync data to 25 26
/usr/local/sersync/sersync2 -d -o /usr/local/sersync/www_confxml.xml
/usr/local/sersync/sersync2 -d -o /usr/local/sersync/bbs_confxml.xml
/usr/local/sersync/sersync2 -d -o /usr/local/sersync/blog_confxml.xml
EOF
第4章 rsync的优缺点
4.1 rsync优点
1、增量备份同步,支持socket,集中备份
4.2 rysnc缺点
1、 大量小文件同步的时候,比对时间较长,有的时候,rsync进程停止
解决方法:
a、 将大量小文件打包,然后再同步
b、 drdb(文件系统同步复制block)
2、同步大文件,10G这样的大文件有时也会有问题,中断,未完整同步前是隐藏文件
第5章 常见问题
[root@nfs01 local]# /usr/local/sersync/sersync2 -rd
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
option: -r rsync all the local files to the remote servers before the sersync work
option: -d run as a daemon
daemon thread num: 10
parse xml config file
XML Parsing error inside file 'confxml.xml'.
Error: File not found
At line 0, column 0.
是由于没有指定配置文件的路径导致没有运行
解决办法:指定配置文件路径即可
[root@nfs01 local]# /usr/local/sersync/sersync2 –rd –o /usr/local/sersync/confxml.xml