一、Rsync 数据备份架构示意图
二、实验环境: 1、操作系统:Centos 7.4 两台,最小化安装 2、软件:Rsync (系统自带) 三、IP规划:四、实验环境准备(Web服务器自行安装) 1、Centos 7.4 最小化安装。 2、Web服务器安装,本实验是LNMP + WordPress,也可以选择其他架构。 五、Rsync服务器配置 5、1查找软件有没有安装: rpm -qa rsync
![]()
如果没有安装: yum install rsync -y 5.2、修改Rsync的配置文件,在rsync01(备份服务器) 上面操作。 cp /etc/rsyncd.conf /etc/rsyncd.conf.bak #备份原来的配置文件 vim /etc/rsyncd.conf uid = rsync gid = rsync use chroot = no max connections = 2000 timeout = 600 pid file = /var/run/rsync.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log fake supper = yes [backup] path = /backup ignore errors read only = false list = false hosts allow = 192.168.189.0/24 hosts deny = 0.0.0.0/32 auth users = rsync_backup secrets file = /etc/rsync.password 保存,退出。 #################################### Centos7.4 yum 安装的rsync 版本为 3.1.2 fake super = yes 在rsync 3.1.2 版本中,服务端的配置文件中,必须要加这个参数,要不然会报没有权限错误。failed: Operation not permitted (1) #无需让rsync以root身份运行,允许存储文件的完整属性 5.3、创建启动Rsync的用户,以及数据存储目录,并授权。 useradd rsync -s /sbin/nologin -M -M:不创建家目录。 mkdir /bakcup chown -R rsync /backup/ 5.4、创建密码文件并授权 echo "rsync_backup:oldboy" >/etc/rsync.password chmod 600 /etc/rsync.password 5.5、启动rsync rsync --daemon yum 安装的 rsync systemctl start rsyncd systemctl enable rsyncd 5.6、检查 netstat -luntp |grep rsync ps -ef |grep rsync |grep -v grep
5.7、设置开机启动: chmod +x /etc/rc.d/rc.local echo "rsync --daemon" >>/etc/rc.local cat /etc/rc.local
![]()
六、客户端配置: yum install rsync -y systemctl start rsyncd systemctl enable rsyncd rsync 客户端只需要做两件事: 6.1、创建一个密码文件 这个文件里面只需要一个密码:,权限是600 echo "oldboy" >/etc/rsync.password chmod 600 /etc/rsync.password 这个密码要和服务端,密码配置文件中的密码一样。 6.2、推送文件(向服务器推文件)测试。 rsync -avz /tmp/ rsync_backup@192.168.189.240::backup --password-file=/etc/rsync.password
rsync_backup@192.168.189.240::backup rsync_backup 这个是连接rsync服务端的用户,必须和服务端的配置文件中
这里相同。 ::backup 这个是服务器上面的模块名称:
path后面是具体的路径,模块名称可以随便写。 注意:/ 问题。 rsync -avz /tmp rsync_backup@192.168.189.240::backup --password-file=/etc/rsync.password 这里/tmp 后面没有/ ,在推送文件的时候,会在服务器的目录下面创建一个tmp 的文件夹。 rsync -avz /tmp/ rsync_backup@192.168.189.240::backup --password-file=/etc/rsync.password /tmp后面有/ ,就只把/tmp/下面的文件,推送到服务器的目录下面,不会在服务器的存储目录下面创建 tmp 的文件夹。 七、编写脚本 mkdir -p /server/scripts #统一存放脚本的目录 #!/bin/bash IP=`/usr/sbin/ifconfig |awk -F '[ :]+' 'NR==2{print $3}'` RPATH=/backup/$IP #判断目录是否存在 if [ ! -d $RPATH ];then mkdir $RPATH -p sleep 1 fi #打包文件,备份到本地目录。 /usr/bin/tar zcf $RPATH/conf_`date +%F`.tar.gz var/spool/cron/root etc/rc.d/rc.local sr/local/nginx/conf/nginx.conf /usr/bin/tar zcf $RPATH/www_`date +%F`.tar.gz usr/local/nginx/html/ #将打包好的文件,生成md5值,写入到一个flag文件中,以便在服务器端进行md5检测。 /usr/bin/find /backup -type f -name "*$(date +%F).tar.gz" |xargs md5sum >$RPATH/flag_$(date +%F) #推送到rsync服务器 rsync -az $RPATH rsync_backup@192.168.189.240::backup/ --password-file=/etc/rsync.password #删除7天前的备份文件 find $RPATH -type f -name "*.tar.gz" -mtime +7|xargs rm -f 八、配置定时任务 crontab -e
九、服务器验证传输数据没有问题 文件查看:
![]()
MD5值比对:
服务器端备份目录文件,查看MD5值 服务器端 备份目录中的 flag 文件查看,如果内容一样,证明我们在推的时候,没有问题。
在服务器上,用md5命令检验。(如果在服务器上检测flag文件的md5没有变化,说明文件在传输 过程中没有发生变化,也就是备份是成功的。)
![]()
十、发送邮件给管理员,配置。(在Rsync服务端操作) 首先确保你的服务器上面的 25 端口是打开的。postfix是启动的。
![]()
Centos 7.4 默认postfix 是启动的。不需要设置就可以发邮件。 find /backup/ -type f -name "flag_$(date +%F)" |xargs md5sum -c >/opt/bak_info.txt mail -s "$(date +%U%T) backup message" 331758730@qq.com </opt/bak_info.txt 写成脚本,配置计划任务,定时发送。 mkdir -p /server/scripts cd /server/scripts vim chbackup.sh #!/bin/bash find /backup/ -type f -name "flag_$(date +%F)" |xargs md5sum -c >/opt/bak_info_$(date +%F).txt mail -s "$(date +%U%T) backup message" 331758730@qq.com </opt/bak_info_$(date +%F).txt chmod +x chbackup.sh touch /tmp/mailinfo.log crontab -e
测试:(在Rsync 服务器上执行。) date -s '2018-11-29 04:59:30' (30秒后自动发邮件)
![]()
![]()
第一次发送邮件,很可能会被你的邮箱放到垃圾箱,需要手动,移除,并设置,这不是垃圾邮件。 删除Rsync服务器上90天前的备份文件 cd /server/scripts vim del90.sh
chmod +x del90.sh +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Centos 7.4 Rsync + Inotify 数据实时同步 配置 一、安装inotify(从2.6.13 内核起,就加入了inotify支持)(在Web客户端安装)
cd /opt wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz tar zxf inotify-tools-3.14.tar.gz cd inotify-tools-3.14 ./configure --prefix=/usr/local/inotify-tools-3.14 make && make install ln -s /usr/local/inotify-tools-3.14/ /usr/local/inotify-tools ln -s /usr/local/inotify-tools/bin/inotifywa /usr/local/sbin/inotifywait 为什么不在编译的时候加入短的目录名称,因为我们还需要保持它的版本号,便于以后升级。 将inotifywait 做一个软链接,到 /usr/local/sbin/ 使用起来就不需要输入那么长。
二、配置rsync服务器 创建存储数据实时同步的文件夹 mkdir -p /192.168.189.241/data/ 修改Rsync的配置文件 vim /etc/rsyncd.conf
三、客户端设置 假设我们是要把/data 文件夹进行实时同步到Rsync服务器 先把/data/ 里面的文件,同步一份到Rsync服务器 rsync -avz /data/ rsync_backup@192.168.189.240::data/ --password-file=/etc/rsync.password 测试: 监控data目录的,创建事件 inotifywait -mrq --timefmt '%d%m%y %H:%M' --format '%T %w%f' -e create /data
在/data/下面创建一个文件
![]()
-r:递归查询目录 -m:始终保持事件监听状态 -q:只打印很少的信息,仅仅打印监控事件的信息。 -timefmt:指定时间输出的格式 --format:打印使用指定的输出类似格式字符串
inotifywait -mrq --timefmt '%d-%m-%y %H:%M' --format '%T %w%f' -e delete /data 删除事件
![]()
inotifywait -mrq --timefmt '%d-%m-%y %H:%M' --format '%T %w%f' -e create,close_write,delete /data 监控多个事件用逗号隔开。 create ,创建、 close_write,修改、 delete ,删除 四、编写脚本 实时同步脚本,客户端上编写。 #!/bin/bash inoti=/usr/local/inotify-tools/bin/inotifywait $inoti -mrq --timefmt '%d-%m-%y %H:%M' --format '%T %w%f' -e create,close_write,delete /data \ | while read file do rsync -az /data/ --delete rsync_backup@192.168.189.240::data/ --password-file=/etc/rsync.password done ++++++++++++++++++++++++++++++++++ #!/bin/bash CMD=/usr/local/inotify-tools/bin/inotifywait SRC_DIR=/home/backup/xtrabackup DST_DIR=backup RSY_USER=rsync_backup RSY_PASS=/etc/rsync.password RSY_SER=192.168.189.78 $CMD -mrq --timefmt '%d-%m-%y %H:%M' --format '%T %w%f' -e create,close_write,delete $SRC_DIR \ | while read file do rsync -az $SRC_DIR --delete $RSY_USER@$RSY_SER::$DST_DIR --password-file=$RSY_PASS done ++++++++++++++++++++ 两个脚本都可以 +++++++++++++++++++++++++++ 在客户端,执行实时同步的脚本,进行测试。
在客户端上,/data目录下,创建几个文件,模拟create 事件
服务器上的 /192.168.189.240/data/ 没有实时同步前的文件
服务器上,实时同步后的文件。
客户端修改文件,同步到服务端,测试。
在服务器端打开 这个文件
客户端删除文件,服务器端也同步删除文件,测试。
服务器端查看,/192.168.189.241/data/.txt文件有没有被删除。
客户端执行的时候,最好是在后台执行。并把它写在rc.local /usr/bin/sh /server/scripts/inotify.sh &
chmod +x /etc/rc.d/rc.local 设置开机启动这个脚本 echo "/usr/bin/sh /server/scripts/inotify.sh &" >>/etc/rc.local
![]()
![]()
------------------------------- END ---------------------------------------------