nfs+rsync+inotify+sersync实现数据同步备份

一、实验环境

192.168.10.200 rsync备份服务器
192.168.10.201 nfs数据共享服务器
192.168.10.129 nfs-client(apache)
实验需求:
rsync提供同步模块
nfs提供共享目录
客户端通过挂载共享目录,上传文件至nfs服务器
模拟nfs服务器故障,将rsync服务器变成服务器,实现故障切换

二、开始部署

1、备份服务器部署rsync

(1)安装rsync 
[root@backup ~]# yum install -y rsync
(2)修改配置文件
[root@backup ~]# vi /etc/rsyncd.conf
uid=rsync #运行进程的身份                             
gid=rsync #运行进程的组                       
port=873  #监听端口号                         
fake super=yes #不用让rsync以root身份也可以传输root用户的文件等,保持文件完整性                   
use chroot=no #no在备份连接文件时失效,yes不会是有,但服务端也要有这个源文件(关闭假根功能)(yes不安全)                      
max connection=200 #最大连接数                
timeout=600 #客户端连接超时时间                      
ignore errors #传输过程中忽略错误                    
read only=false #选择不是只读,可以可读可写                  
list = false #不允许别人查看模块信息                            
auth users=rsync_backup #虚拟用户          
secrets file=/etc/rsync.passwd #认证密码文件路径   
log file=/var/log/rsyncd.log #日志文件路径          
[backup] #模块名                              
comment = commit #模块注释信息     
path = /backup #模块对应的路径 
(3)环境创建
[root@backup ~]# useradd -M -s /sbin/nologin rsync
[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R rsync.rsync /backup/
[root@backup ~]# echo 'rsync_backup:1' > /etc/rsync.passwd
[root@backup ~]# chmod 600 /etc/rsync.passwd 
(4)启动服务
[root@backup ~]# systemctl start rsyncd && systemctl enable rsyncd
(5)验证(nfs服务器)
[root@nfs ~]# yum install -y rsync
#推送一个文件验证是否成功
[root@nfs ~]#  rsync -avz /etc/passwd rsync_backup@192.168.10.200::backup
#没有实现免密 要输入密码“1”
#下面实现免密
[root@nfs ~]# echo '1' >/etc/rsync.passwd
[root@nfs ~]# chmod 600 /etc/rsync.passwd
再次推送的时候,只需在后面加上
--password-file=/etc/nfs.passwd即可

2、NFS服务器上部署nfs+inotify
(1)安装nfs-utils,rpcbind、

[root@nfs ~]# yum install -y nfs-utils

(2)启动rpcbind和nfs服务

[root@nfs ~]# systemctl start rpcbind nfs && systemctl enable nfs
#先启动rpcbind,后启动nfs!

(3)修改配置文件

[root@nfs ~]# vi /etc/exports
/data 192.168.10.0/24(rw,all_squash,sync)

(4)创建环境

[root@nfs ~]# mkdir -p /data 
[root@nfs ~]# chown -R nfsnobody.nfsnobody /data/

(5)重新加载配置文件

[root@nfs ~]# exportfs -arv

(6)验证

客户端(web01):
安装nfs-utils
[root@web01 ~]# yum install -y nfs-utils
[root@web01 ~]# showmount -e 192.168.10.201
Export list for 192.168.10.201:
/data 192.168.10.0/24
挂载nfs共享存储:
[root@web01 ~]# mount 192.168.10.201:/data /var/www/html
[root@web01 html]# echo '192.168.10.201:/data /var/www/html nfs defaults 0 0' >> /etc/fstab 
[root@web01 html]# systemctl enable rpcbind

3、客户端 (web01)配置
(1)安装apache

[root@web01 ~]# yum install -y httpd
[root@web01 ~]# systemctl start httpd && systemctl enable httpd
[root@web01 ~]# mount 192.168.10.201:/data /var/www/html
#如果是多台web服务器,操作步骤一样

问题1:如果nfs服务器挂掉,会导致所有web页面挂掉。
解决方案:
1、将nfs共享目录里的内容,推送至rsync备份服务器
2、将rsync服务器临时变成nfs服务器

问题2:nfs和rsync的程序用户不一样,会导致权限问题
解决方案:
将nfs、rsync、web的程序用户统一

下面操作:
rsync服务器

[root@backup ~]# groupadd -g 666 www
[root@backup ~]# useradd -u 666 -g 666 -M -s /sbin/nologin www
[root@backup ~]# sed -ri 's#(.*)rsync$#\1www#g' /etc/rsyncd.conf
[root@backup ~]# chown -R www.www /backup/
[root@backup ~]# systemctl restart rsyncd

nfs服务器

[root@nfs ~]# groupadd -g 666 www
[root@nfs ~]# useradd -u 666 -g 666 -M -s /sbin/nologin www
[root@nfs ~]# chown -R www.www /data/
[root@nfs ~]# echo "/data 172.16.1.0/24(rw,all_squash,sync,anonuid=666,anongid=666)" > /etc/exports
[root@nfs ~]# exportfs -avr

web服务器

[root@web01 ~]# userdel www #先要删除yum安装httpd时生成的默认用户
[root@web01 ~]# groupadd -g 666 www
[root@web01 ~]# useradd -u 666 -g 666 -M -s /sbin/nologin www

4、nfs服务器部署sersync
对nfs共享目录进行实时监控,当文件发送改变自动触发rsync将改变的内容推送至rsync服务器进行备份,实现实时同步。

(1)安装inotify

#sersync需要依赖inotify和rsync,rsync前面已经装过了,这里只需要安装inotify即可
[root@nfs ~]# wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
[root@nfs ~]# tar -zxvf inotify-tools-3.14.tar.gz 
[root@nfs ~]# cd inotify-tools-3.14
[root@nfs inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify
#如果失败检查是否安装编译所需的依赖包
#yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc
[root@nfs inotify-tools-3.14]# make && make install

(2)安装sersync

[root@nfs ~]# mkdir /server/tools -p
[root@nfs ~]# cd /server/tools/
[root@nfs tools]# wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@nfs tools]# tar zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz 
[root@nfs tools]# mv GNU-Linux-x86/ /usr/local/sersync
[root@nfs tools]# cd /usr/local/sersync/
[root@nfs sersync]# vim confxml.xml
#<head version="2.5">
    #<fileSystem xfs="false"/>  修改为  <fileSystem xfs="true"/>                                    #指定文件系统类型
#<inotify>--------#监控的事件类型
    #<createFile start="false"/>  修改为  <createFile start="true"/>                                #监控新文件产生
    #<modify start="false"/>  修改为  <modify start="true"/>                                        #监控文件修改变化
#<sersync>
    #<localpath watch="/opt/tongbu">  修改为  <localpath watch="/data">                             #监控的目录
    #<remote ip="127.0.0.1" name="tongbu1"/>  修改为  <remote ip="192.168.10.200" name="backup"/>          #修改rsync服务端地址与同步的模块名称
#<rsync>----------#rsync的选项
    #<commonParams params="-artuz"/>  修改为  <commonParams params="-az"/>                         #修改rsync执行同步时使用的参数
    #<auth start="false" users="root" passwordfile="/etc/rsync.pas"/>  修改为  <auth start="true" users="rsync_backup" passwordfile="/etc/nfs.passwd"/>        #修改同步认证用户名与密码文件路径
    #<timeout start="false" time="100"/><!-- timeout=100 -->  修改为  <timeout start="true" time="100"/><!-- timeout=100 -->        #开启同步超时时间,默认100秒
[root@nfs sersync]# echo "1" > /etc/nfs.passwd
[root@nfs sersync]# chmod 600 /etc/nfs.passwd 

(3)启动服务

[root@nfs sersync]# ln -s /usr/local/sersync/sersync2 /usr/bin/
[root@nfs sersync]# sersync2 -dro /usr/local/sersync/confxml.xml 

4、测试

1、在web端新建一个文件

[root@web01 ~]# cd /var/www/html/
[root@web01 html]# touch index.html

2、在nfs和rsync端验证是否同步成功

[root@nfs ~]# ls /data/
index.html
[root@backup ~]# ls /backup/
index.html

5、实现sersync开机自动监控数据同步

[root@nfs ~]# vim /etc/rc.local 
最后一行添加
/usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml
[root@backup backup]# echo "rsync --daemon --config=/etc/rsyncd.conf" >> /etc/rc.local 

重启未实现同步原因
在配置/etc/rc.local的命令未生效,可能是/etc/rc.local做了软连接到/etc/rc.d/rc.local
,要保证都有可执行权限

在这里插入图片描述
由于/etc/rc.local是/etc/rc.d/rc.local的软链接,所以必须确保/etc/rc.local 和 /etc/rc.d/rc.local都有可执行权限。

[root@nfs ~]# chmod +x /etc/rc.d/rc.local 
[root@backup backup]# chmod +x /etc/rc.d/rc.local 
#重启即可

切记!!!过程中有些莫名其妙的错误可能是因为防火墙没关或者selinux在搞鬼,实验中一定要把防火墙、selinux禁止开机启动(ps:因为我就被坑了很多次)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不想敲代码的运维

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值