一. 环境说明
为了实现zabbix备份数据库自动同步,到备份服务器搭建
解决方案是在后端建立一个数据发布服务器,该服务器作为rsync客户端,通过inotify机制实时监控网站数据,当数据发生变化后调用rsync命令上传数据到备份服务器(也是rsync服务器)
我使用3台机器做的实验
pc1的ip为10.10.251.49(复制 sync),同步备份客户端mysql数据,也是rsync服务端,需要修改/etc/rsyncd.conf配置文件
pc3的ip为10.10.251.65(主 inotify+sync),作为自动备份zabbix_mysql数据库服务器,是rsync的客户端,不需要配置/etc/rsyncd.conf,但是需要安装inotify
也可以互相同步文件,反过来搭建就可以实现
需要关闭selinux ,防火墙
二. 在服务器上部署rsync服务器
在服务器上部署rsync服务,这些rsync服务需要提供客户端上传功能,以实现客户端主机将数据推送到rsync服务器,这样我们只需要在10.10.251.49主机上修改数据,就可以实时推送数据到zabbix_mysql数据库服务器上
pc1的配置如下
yum -y install rsync #centos7中默认已安装
mkdir -p /root/bak #建立数据同步存放目录
chmod 770 /root/bak #修改权限,必须要有读,写,执行权限,否而会失败。
chown nobody.nobody /root/bak #修改所属
然后添加修改配置文件,vim /etc/rsyncd.conf 如下
transfer logging = yes
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
uid = nobody
gid = nobody
use chroot = no
ignore errors
read only = no
[zabbix1] #
comment = zabbix1 名字随意
path = /root/bak #同步主机上的目录,
auth users = tom
secrets file = /etc/rsyncd.secrets #根据这个名字创建文档,可以自己修改路径名字
host allow = 10.10.251.65 #从哪个主机同步,就写那个ip
list = false
然后设置密码文件,防火墙
echo "tom:123" > /etc/rsyncd.secrets # 需要创建用户名为tom 密码为123 的用户
chmod 600 /etc/rsyncd.secrets #加权限
systemctl restart rsyncd
rsync --daemon #一定记得要开启rsync
echo "rsync --daemon" >> /etc/rc.local 设置开机运行
三。主 inotify+sync服务器(10.10.251.65)
1. 安装相应软件
yum -y install rsync
systemctl start rsyncd
rsync --daemon #开启rsync
yum -y install automake libtool #安装编译安装软件所需工具
wget http://downloads.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz #下载inotify-tool软件包
解压后进入inotify-tools-3.13目录,执行如下安装
./configure #默认安装路径是/usr/local,如果想改变路径可在后面加参数 --prefix 路径名
make && make install
2. 设置密码文件
echo "123" > /root/rsync.pass #123为rsync服务端配置的用户名为tom的密码
chmod 600 /root/rsync.pass
红字部分注意对应。
3. 编写监控脚本
vim notify_rsync.sh
#!/bin/bash
host_slave=10.10.251.49 # 对端想要同步的ip
master_src=/root/bak #同步路径
inotify_home=/usr/local/ #inotifywait (这个试行程序的路径)
${inotify_home}/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write,modify,delete,create,attrib $master_src \
| while read file
do
rsync -az --delete ${master_src} rsynclsl@${host_slave}::zabbix1 --password-file=/root/rsync.pass
done
然后执行此脚本 sh notify_rsync.sh,注意脚本会一直运行,你去主上创建,在备份机就可以看到效果了,就因为不知道这个,排错多一个小时
之后就可以实现同步如下图