服务器数据的实时备份与定时备份(rsync+inotify)

需求:对服务器数据进行实时备份,不能丢失任何已生成数据
思路:需要新增一台备份服务器,利用inotify监测主服务器需要备份的目录下的数据,有任何改动立即调用rsync进行数据同步。并且在备份服务器上对同步数据每天进行定时备份(如果两台都是阿里云服务器,建议开通内网通讯,这样不会影响外网流量而且传输速度很快)


server name IP
主服务器 171.12.13.36
备份服务器 171.12.13.37


安装调试inotify(主服务器)

安装inotify步骤参考:https://blog.51cto.com/sndapk/1252218


调试rsync

ubuntu 16.04默认已安装rsync,rsync服务默认不是启动的,我们要修改rsync文件。

sudo vim /etc/default/rsync

1.修改配置项:

RSYNC_ENABLE=true   #false改true

2.备份端创建账号密码文件,主服务器端只需创建密码文件
备份端创建:

vim /etc/rsyncd.secret 
JackMa:wobuxihuanqian

主服务器创建:

vim /etc/rsyncd.pwd 
wobuxihuanqian

3.创建配置文件(备份端)
将rsyncd.conf 复制到/etc目录下,并进行配置

sudo cp /usr/share/doc/rsync/examples/rsyncd.conf /etc
sudo vi /etc/rsyncd.conf
#日志存放地址
log file=/home/hyperledger_data/rsync_logs/rsync_log

pid file=/var/run/rsyncd.pid
syslog facility=daemon
#以下配置的代表名称
[demo]
comment = demo
path = /home/hyperledger_data/volumes/
use chroot = no
lock file = /var/lock/rsyncd
read only = no
list = yes
uid = 0
gid = 0
#用户名
auth users = JackMa
#密码文件地址
secrets file = /etc/rsyncd.secret
strict modes = yes
#允许同步的客户端地址
hosts allow = 171.12.13.36
ignore errors = yes
ignore nonreadable = yes
transfer logging = yes
log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.
timeout = 600
#refuse options = checksum dry-run
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.

4.两边均启动rsync服务,并设置成开机启动

service rsync start
update-rc.d rsync defaults 90

5.在主服务器端先执行一次全量同步,看下rsync能不能用

#-a 归档模式,表示递归传输并保持文件属性
#-v 显示rsync过程中详细信息
#-z 传输时进行压缩提高效率
#-R 在备份端创建绝对路径上的所有目录
rsync -avzR --password-file=/etc/rsync.pwd /var/lib/docker/volumes/ JackMa@171.12.13.37::demo


编写实时同步脚本(主服务器)

本脚本参考自:http://www.ttlsa.com/web/let-infotify-rsync-fast/

vim /home/backups_script/rsync_scripts
#!/bin/bash
src=/var/lib/docker/volumes/         # 需要同步的源路径
des=demo                             # 目标服务器上 rsync --daemon 发布的名称,rsync --daemon这里就不做介绍了,网上搜一下,比较简单。
rsync_passwd_file=/etc/rsync.pwd     # rsync验证的密码文件
ip1=171.12.13.37                     # 目标服务器1       
user=JackMa                      # rsync --daemon定义的验证用户名
cd ${src}                            # 此方法中,由于rsync同步的特性,这里必须要先cd到源目录,inotify再监听 ./ 才能rsync同步后目录结构一致,有兴趣的同学可以进行各种尝试观看其效果
/usr/local/bin/inotifywait -mrq --format  '%Xe %w%f' -e modify,create,delete,attrib,close_write,move $src | while read file         # 把监控到有发生更改的"文件路径列表"循环
do
        INO_EVENT=$(echo $file | awk '{print $1}')      # 把inotify输出切割 把事件类型部分赋值给INO_EVENT
        INO_FILE=$(echo $file | awk '{print $2}')       # 把inotify输出切割 把文件路径部分赋值给INO_FILE
        echo "-------------------------------$(date)------------------------------------"
        echo $file
        #增加、修改、写入完成、移动进事件
        #增、改放在同一个判断,因为他们都肯定是针对文件的操作,即使是新建目录,要同步的也只是一个空目录,不会影响速度。
        if [ "$INO_EVENT" = "CREATE" ] || [ "$INO_EVENT" = "MODIFY" ] || [ "$INO_EVENT" = "CLOSE_WRITE" ] || [ "$INO_EVENT" = "MOVED_TO" ];then
                echo 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO'
                rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des}         # INO_FILE变量代表路径哦  -c校验文件内容
                 #仔细看 上面的rsync同步命令 源是用了$(dirname ${INO_FILE})变量 即每次只针对性的同步发生改变的文件的目录(只同步目标文件的方法在生产环境的某些极端环境下会漏文件 现在可以在不漏文件下也有不错的速度 做到平衡) 然后用-R参数把源的目录结构递归到目标后面保证目录结构一致性
        fi
        #删除、移动出事件
        if [ "$INO_EVENT" = "DELETE" ] || [ "$INO_EVENT" = "MOVED_FROM" ];then
                echo 'DELETE or MOVED_FROM'
                rsync -avzR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des}
                #看rsync命令 如果直接同步已删除的路径${INO_FILE}会报no such or directory错误 所以这里同步的源是被删文件或目录的上一级路径,并加上--delete来删除目标上有而源中没有的文件,这里不能做到指定文件删除,如果删除的路径越靠近根,则同步的目录月多,同步删除的操作就越花时间。这里有更好方法的同学,欢迎交流。
        fi
        #修改属性事件 指 touch chgrp chmod chown等操作
        if [ "$INO_EVENT" = "ATTRIB" ];then
                echo 'ATTRIB'
                if [ ! -d "$INO_FILE" ]                 # 如果修改属性的是目录 则不同步,因为同步目录会发生递归扫描,等此目录下的文件发生同步时,rsync会顺带更新此目录。
                then
                        rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des}
                fi
        fi
done
~           

将实时脚本设置成开机自启动

vim /etc/rc.local
#这句话加在exit0之前
nohup bash /home/backups_script/rsync_scripts >> /home/backups_script/rsync.log 2>&1 &






编写定时备份脚本(备份端)

vim /home/hyperledger_data_bakup/backup.sh
#!/bin/bash
bak_dir=/home/hyperledger_data_bakup
tmp_dir=/home/hyperledger_data_bakup/tmp
target_dir=/home/hyperledger_data

#创建一个临时文件(要保存备份的路径)
mkdir $tmp_dir
#数据存在backups目录下,备份到beifen目录下,所以先将数据拷过来
cp -r $target_dir  $tmp_dir
#将数据所在文件夹beifen打包
tar -zcPvf $bak_dir/backup$(date +%Y%m%d).tar.gz $tmp_dir
#删除临时文件内容
rm -rf $tmp_dir
#删除改文件夹下超过10天的文件
find $bak_dir -mtime +10 -name "*.tar.gz" -exec rm -rf {} \;
~                                                                     

利用crontab进行定期执行备份脚本

crontab -e
#每天的凌晨两点对同步数据进行全量备份
0 2 * * * bash /home/hyperledger_data_bakup/backup.sh
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348