使用rsync服务+nas方案解决服务器存储安全性问题的一种方案

当前服务器上了满速的nvme(970 EVO Plus(MZ-V7S1T0B),但却不敢把重要应用(比如gitlab)放在上面跑,因为这玩意一旦哪天罢了工,数据的可恢复性为0。

或许我们可以使用nvme的raid1卡来解决这个问题,但又不好确认raid1卡是否能成功的被vmware esxi识别,同时价格也是需要考虑的因素。

顺便说一句:970 EVO Plus在vmware esxi 6.7.0上表现良好,即插即用。
image.png

rsync

而rsync恰好能够解决这个问题,基本的思路很简单:

  1. 在nas端开启rsync服务
  2. 在客户端启用rsync,并设置需要同步的文件夹

nas端

nas我们可以使用群晖或是FreeNAS,或是使用FreeBSD的zfs系统来打造。本文以群晖为例。

群晖的官方网站有关于如何启用rsync的说明这为我们实现此功能降低了难度。

按上文我们创建一个备案专用文件夹(比如bak),然后创建一个只有当前文件夹读写权限的用户(用户组建议先选择为管理员,避免一些ssh认证问题),设置一个复杂点的密码,在应用设置上,仅勾选rsync。

另外建议使用个非22端口,这个应该是更安全一点。

客户端

nas就绪后,我们开始在客户端上安装rsync服务。

debian

系统不重要,重要的是是否可以成功安装rsync服务。

# su -
# bash
# apt install sshpass
# pat install rsync

接下来我们先使用ssh连接一下主机,避免产生rsync Host key verification failed错误。

# ssh -p yoursshport rsyncuser@your.nas.domain.name

安装完毕后,开始尝试进行同步:

# sshpass -p "rsyncpassword" rsync -av -e 'ssh -p yoursshport' --progress /home/panjie rsyncuser@your.nas.domain.name::bak/foldername

FreeBSD

首先按官网指导安装rsync客户端

[root@nfs /yzpool/data/hosts]# pkg install sshpass
[root@nfs /yzpool/data/hosts]# pkg install rsync
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
--
Some scripts provided by rsync such as rrsync requires
python which is not installed by default

最后提示我们还需要安装python

# pkg install python

定时任务

rsync有个非常大的优点在于其同步的时候,会进行差异化同步,这极好的保证了备份的效率。
结合定时任务,我们便可以实现按一定周期进行同步的目的。

debain

我先建议个批处理文件(比如为: rsync.sh),并保存在/home/username下,内容就是我们前面执行的命令:

#!/bin/bash
sshpass -p "rsyncpassword" rsync -av -e 'ssh -p yoursshport' --progress /home/panjie rsyncuser@your.nas.domain.name::bak/foldername \
> /home/panjie/rsync.log
echo "done at $(date)" >> /home/panjie/rsync.log
cat /home/panjie/rsync.log

保存后为其增加执行权限:#chmod -x rsync.sh,然后执行一遍看是否报错:#./rsync.sh。没有错误的话把nas中的同步用户用户组设置为普通用户后再执行一遍#./rsync.sh

最后执行crontab -e便可以设置定时任务了:

# crontab -e

然后输入以下内容:

0 */1 * * * /home/panjie/rsync.sh

上述定义了一个每1小时执行一次的策略。可以借助crontab.gura来快速生成相关的计划任务。

FreeBSD

我先建议个批处理文件(比如为: rsync.sh),并保存在/home/username下,内容就是我们前面执行的命令:

#!/bin/bash
/usr/local/bin/sshpass -p "rsyncpassword" /usr/local/bin/rsync -av -e 'ssh -p yoursshport' --progress /home/panjie rsyncuser@your.nas.domain.name::bak/foldername \
> /home/panjie/rsync.log
echo "done at $(date)" >> /home/panjie/rsync.log
cat /home/panjie/rsync.log
注意:一定在要.sh中使用命令的全路径,所以其不会自动执行成功。如果我们只为sshpass使用了全路径,却忘了给rsync全路径,则会出现Failed to run command: No such file or directory错误.

保存后为其增加执行权限:#chmod -x rsync.sh,然后执行一遍看是否报错:#./rsync.sh。没有错误的话把nas中的同步用户用户组设置为普通用户后再执行一遍#./rsync.sh

最后执行crontab -e便可以设置定时任务了:

# crontab -e

然后输入以下内容:

0 */1 * * * /home/panjie/rsync.sh

上述定义了一个每1小时执行一次的策略。可以借助crontab.gura来快速生成相关的计划任务。

FreeBSD系统要求自动任务中的命令是全路径,为了保证计划任务顺利被执行,需要使用$ env -i SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/home/panjie NAME=panjie /home/panjie/rsync.sh来测试。注意上述命令中的panjie应该换成你自己的用户名。

NEXT

FreeBSD启用ZFS快照功能
FreeBSD系统打造安全可靠的ZFS存储池
FreeBSD系统安装NFS(Network File System)服务并启用基于 IP 认证的机制
FreeBSD启用ZFS快照功能


河北工业大学梦云智软件开发团队
河北工业大学梦云智软件开发团队
1 篇内容引用
2.6k 声望
204 粉丝
0 条评论
推荐阅读
统一为gitlab runner 设置 npm 仓库地址
由于众所周知的原因,npm在执行install 或 ci时请求官方仓库会相当慢,为此我们可以在gitlab的全局中设置以下环境变量来为npm指定国内的阿里云仓库。方法如下:

myskies阅读 259

基于分布式数据库本身的定时备份方法
在大型分布式数据库中,对于数据的保护显得尤为重要,备份则是对数据进行保护的一种合理手段。若要对不断更新的数据进行保护,则可以在指定时间点对数据库数据进行备份。这样,当数据库发生故障时,可以及时还原...

KaiwuDB阅读 422

封面图
使用 NineData 实现企业级数据库备份, 数据备份告别“拆盲盒” ?
小八,一名平平凡凡的运维人员,但这一天对他来说又是不平凡的一天。因为公司的服务被黑客攻击了,为了恢复业务,业务需要从备份中恢复数据。但事情进展得并不顺利,备份恢复时间长、恢复数据不准确等问题,让领...

NineData阅读 262

封面图
使用 NineData 实现备份集的实时查询
数据作为一家公司的重要资产,其重要程度不言而喻。数据库为数据提供存取服务,担任着重要的角色,如果因数据误删、服务器故障、病毒入侵等原因导致数据丢失或服务不可用,会对公司造成重大损失,所以数据库备份...

NineData阅读 257

封面图
英方软件加入龙蜥社区,联手夯实数字基础设施坚实底座
近日, 上海英方软件股份有限公司(以下简称“英方软件”)签署了 CLA(Contributor License Agreement,贡献者许可协议),正式加入龙蜥社区(OpenAnolis)。

龙蜥社区阅读 251

封面图
8 个最佳 WP 备份插件
网站被黑客或其他恶意软件入侵和丢失数据的新闻如今非常普遍。这就是为什么信息技术领域最热门的讨论是网络安全。您是否知道我们使用的 96% 的应用程序都存在漏洞,这些漏洞可能导致您的网站或数据永远消失?黑客...

六翼开源阅读 129

2.6k 声望
204 粉丝
宣传栏