Rsync+inotify+nfs实现数据实时备份方案
技术栈
-
NFS是 Network File System的简写,即网络文件系统。NFS的优点是内核直接支持,部署简单、运行稳定,协议简单、传输效率高。缺点是仅依靠IP地址或主机名来决定用户能否挂载共享目录,容易出现单点故障。
-
rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。
-
Inotify是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。通过inotify实现数据的时时同步,所需要的应用软件inotify-tool。
机器准备
-
10.7.11.9 (nfs节点)
-
10.7.11.5 (备份节点)
-
注意:关闭机器的防火墙 - systemctl stop firewalld
一、部署 nfs 服务器
-
安装nfs-server
#nfs-utils:提供了NFS服务器程序和对应的管理工具 #rpcbind:获取nfs服务器端的端口等信息 yum install -y nfs-utils rpcbind # k8s node 节点需要安装nfs客户端 systemctl enable rpcbind systemctl enable nfs-server systemctl start rpcbind systemctl start nfs-server
-
修改配置
#创建目录 mkdir -p /home/nfs-root/ #/home/nfs-root/表示要共享文件的目录 # *表示所有客户端可访问,也可以写成指定IP网段或者具体的ip #rw:表示读写权限,sync:表示数据同步写入内存硬盘,no_root_squash 会使得根用户在 NFS 客户端上拥有和服务器上相同的权限 /home/nfs-root/ *(insecure,rw,sync,no_root_squash)
-
保存,使生效
#wq exportfs -a exportfs
二、部署 Rsync 服务端(10.7.11.5 )
-
下载 Rsync 软件包
yum -y install rsync
-
新增 vi /etc/rsyncd.conf 配置文件
#用户id uid = root #组id gid = root #程序安全设置 use chroot = no #客户端连接数 max connections = 200 #进程号文件位置 pid file = /var/run/rsyncd.pid #进程锁文件位置 lock file = /var/run/rsync.lock #日志文件位置 log file = /var/run/rsyncd.log #连接超时时间 timeout = 300 #3.1版本以上要加这个 fake super = yes #模块名称 [backup] #同步数据的目录 path = /backup #有错误时忽略 ignore errors #只读模式(true为只读,false为可读可写) read only = false #阻止远程列表 list = false #允许访问的IP hosts allow = 10.7.11.0/24 #禁止访问的IP hosts deny = 0.0.0.0/32 #虚拟用户 auth users = rsync_backup #存放用户和密码的文件 secrets file = /etc/rsync.password
-
创建密码文件 vi /etc/rsync.password
rsync_backup:123456
-
修改 /etc/rsync.password 权限
chmod 600 /etc/rsync.password
-
创建程序用户 rsync
useradd -M -s /sbin/nologin rsync
-
创建 / backup 目录
mkdir /backup
-
守护进程启动 rsync
rsync --daemon
三、部署Rsync 客户端(10.7.11.9)
-
客户端节点新增密码文件 vi /etc/rsync.password
123456
-
修改 / etc/rsync.password 权限
chmod 600 /etc/rsync.password
-
测试 ,将inotify.sh文件传输至服务端
rsync -zav inotify.sh rsync_backup@10.7.11.5::backup --password-file=/etc/rsync.password
-
去服务节点查看
三、部署 inotify 服务
-
下载阿里云网络源
# 首先备份系统自带『yum 源配置文件』,具体路径为:/etc/yum.repos.d/CentOS-Base.repo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak # CentOS 7 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
-
更新 yum 源
yum clean all yum makecache
-
下载 inotify-tools 工具包
yum -y install inotify-tools
-
编写 inotify.sh 脚本
backupServer=10.7.11.5 path=/home/nfs-root inotifywait -mrq --format '%w%f' -e create,close_write,delete $path | while read line doif [ -f $line ];thenrsync -za $line --delete rsync_backup@$backupServer::backup --password-file=/etc/rsync.passwordelsecd $pathrsync -za ./ --delete rsync_backup@$backupServer::backup --password-file=/etc/rsync.passwordfi done
-
后台启动脚本
sh inotify.sh &
-
测试数据同步