在业务Linux服务器中有大量的非结构化文档需要备份的情况,,,如果定期去备份,源服务器出现问题,两个备份时间之间产生的数据就会丢失。所以需要一种源服务器中文件发生改变就能差量备份的工具。rsync+sersync就很适合。
实例:
A服务器:192.168.21.17 centos7 产生源数据的服务器
B服务器:192.168.21.21 centos7 备份服务器
firewalld selinux 先关闭
首先安装rsync服务。(AB服务器都需要安装)
yum install -y rsync #安装rsync
systemctl enable rsyncd #开机启动
B服务器(备份服务器)
mkdir /backup #创建一个备份路径,也就是备份数据存放的目录
echo 'rsync_backup:123456' > /etc/rsync.password #创建一个密码文件,用于A服务器推送数据到此服务器的密码验证
chmod 600 /etc/rsync.password #赋予可执行权限
vi /etc/rsyncd.conf
uid = root
gid = root
use chroot = no
#disable = no
#fake super = yes
max connections = 200
timeout = 300
pid file=/var/run/rsyncd.pid
#lock file=/var/run/rsync.lock
log file = /var/log/rsyncd.log
[backup] #这个地方要注意,后面sersync会使用这个【】中的标识
path = /backup
#comment = backup export area
ignore errors
read only = false
list = false
hosts allow = *
#host deny = 0.0.0.0/0
auth users = rsync_backup
secrets file = /etc/rsync.password
验证:
systemctl start rsyncd #启动rsyncd服务
netstat -antpu |grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 1144/rsync
A服务器(产生源数据的服务器):
在A服务器上面创建rsync客户端的密码文件
echo '123456' > /etc/rsync.password #这里的123456就是B服务器上创建的密码,,,在这里不用添加用户
systemctl start rsyncd #启动rsyncd服务
假如需要备份此A服务器的 /backup 目录。
初步的手动测试,在A服务器上运行:
rsync -avzPh --delete /backup/ rsync://rsync_backup@192.168.21.21/backup --password-file=/etc/rsync.password
我本机的测试结果是这样的。
这就说明AB服务器上装的rsync没问题,,B上的rsyncd.conf配置文件参数没问题,密码文件也没问题。
最后一步,在A服务器上部署sersync,,目的是自动化,
wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz #下载
tar -zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz #解压
mv GNU-Linux-x86 /usr/local/sersync #移动
cd /usr/local/sersync && mkdir conf bin logs #进入目录,并创建相关目录
mv sersync2 bin/ && mv confxml.xml conf/ #将解压的文件放入对应目录
这算是安装好了,接下来是配置
vi /usr/local/sersync/conf/confxml.xml #配置xml文件
找到如下内容:
<sersync>
<localpath watch="/backup"> #"/backup"需要备份的目录----需要编辑----
<remote ip="192.168.21.21" name="backup"/> #"192.168.21.21"为B服务器的IP----需要编辑----
<!--<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"/> #B服务器的auth users用户及密码文件路径
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/usr/local/sersync/log/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once--> #"/usr/local/sersync/log/rsync_fail_log.sh" 这个地址为log地址,,如果有报错也不用管。
<crontab start="false" schedule="600"><!--600mins-->
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync>
添加环境变量:
PATH=/usr/local/sersync/bin:$PATH #临时添加
vi /root/.bashrc #永久添加
PATH=/usr/local/sersync/bin:$PATH
最后一步,开启sersync
sersync2 -d -r -o /usr/local/sersync/conf/confxml.xml
我这边输出如下:
其中无法访问的“rsync_fail_log.sh”不用管他,,,或者自己再研究下。
最后测试,,,,
1、在A服务器的/backup 目录中添加文件,几秒钟之后在B服务器 /backup 目录中查看是否有同步;
2、编辑A服务器的/backup 目录中文本文档内容,几秒钟之后在B服务器 /backup 目录中查看文档内容有无同步。
---------------------------------------完----------------------------------------------------