Centos 7.4 Rsync 数据同步备份配置

一、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 ---------------------------------------------