Ubuntu20.04通过rsync和inotify实现定时备份

2023-04-22  本文已影响0人  羋学僧

通过rsync和inotify实现定时备份与实时备份。

为了避免主服务单点故障,可以将数据备份到远程备份机器。可以使用rsync工具同步Jenkins home到远程,可以利用rsync工具的 “--exclude-from=FILE”功能,定制一个exclude文件,过滤掉无需备份的数据。

实例拓扑图

基础配置:(两台都要做 更改源为阿里源)
cat > /etc/apt/sources.list <<'EOF'
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted   #优先检索focal的main和restricted组件。
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal universe
deb http://mirrors.aliyun.com/ubuntu/ focal-updates universe
deb http://mirrors.aliyun.com/ubuntu/ focal multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu focal-security main restricted
deb http://mirrors.aliyun.com/ubuntu focal-security universe
deb http://mirrors.aliyun.com/ubuntu focal-security multiverse
EOF
更新源
apt-get update

一、备份服务器操作(backup服务器)(10.10.201.156上)

备份服务器:主服务器或主机文件将需要备份的文件同步到此服务器上,即从WEB服务器上同步过来进行备份。

1.1安装rsync

sudo apt-get install rsync
ubuntu 20.04 默认已经安装

1.2修改/etc/dault/rsync文件

sudo vim /etc/default/rsync

修改如下部分:

RSYNC_ENABLE=true(默认为false)

1.3方便管理rsync配置文件,新建文件夹rsync

sudo mkdir -p /etc/rsync/

1.4建立密码文件rsync.secrets

密码文件是双机同步时认证的关键,两机密码需要相同。

1.建立密码文件
vim /etc/rsync/rsyncd.secrets

如下www-data是用户名 123456是密码

www-data:123456

保存退出

2.赋予权限
chmod 600 /etc/rsync/rsyncd.secrets

1.5建立文件存储的目录

备份到备份服务器的文件 存储的目录 (路径要和下面配置文件中定义的一样 我的存储位置是/var/www/pub)

mkdir -p /var/www/pub

1.6拷贝文件rsyncd.conf,并自定义修改内容

1.拷贝rsyncd.conf 模板文件到/etc/rsyncd.conf
cp /usr/share/doc/rsync/examples/rsyncd.conf /etc/rsyncd.conf

2.编辑配置文件
vim /etc/rsyncd.conf
如下

# 日志文件路径
log file=/var/log/rsyncd
# pid文件
pid file=/var/run/rsyncd.pid
# 模块名称(重要)
[www-data]
comment = public archive
# 备份文件的存储路径,需要确保存在(重要) 和上面1.5建立的一样
path = /var/www/pub
use chroot = yes
# 最大连接数10个
# max connections=10
# lock文件
lock file = /var/lock/rsyncd
# 不仅读也要写权限
read only = no
list = yes
# uid与pid非必要情况可设置为www-data
uid = root
pid = root
# 用户名称
auth users = www-data
# 指定同步校验用户时的密码文件
fake super = yes
# 密码文件
secrets file = /etc/rsync/rsyncd.secrets
strict modes = yes
# 指定主服务器ip
hosts allow = 10.10.201.155
# 是否忽略错误
ignore errors = no
# 是否忽略非可读的
ignore nonreadable = yes
# 日志转移
transfer logging = yes
# 日志输出格式
log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.
# 最大响应时间
timeout = 600
refuse options = checksum dry-run
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

1.7启动服务

从启动服务
/etc/init.d/rsync restart
查看服务状态
/etc/init.d/rsync status

或者
从启动服务
systemctl restart   rsync
查看服务状态
systemctl status   rsync

二、主服务器配置(WEB服务器)(10.10.201.155上)

主服务器:指重要文件的原件在该服务器上。

2.1安装rsync

sudo apt-get install rsync

2.2修改/etc/dault/rsync文件

sudo vim /etc/default/rsync
修改如下部分:
RSYNC_ENABLE=true(默认为false)

2.3方便管理rsync配置文件,新建文件夹rsync

sudo mkdir -p /etc/rsync/

2.4建立密码文件rsync.secrets

密码文件是双机同步时认证的关键,两机密码需要相同(这里只需要密码就行)

1.创建密码文件
vi /etc/rsync/rsyncd.secrets
如下
123456
保存退出

2.赋予权限
chmod 600 /etc/rsync/rsyncd.secrets

2.5验证主从服务器的连接状态

rsync -vzrtopg --progress www-data@10.10.201.156::www-data --password-file=/etc/rsync/rsyncd.secrets

解释一下各个参数的含义:
www-data : 在备份服务器上设置的用户名
10.10.201.156 : 备份服务器ip
www-data : 备份服务器10.10.201.156中rsyncd.conf中模块名称

2.6测试数据备份效果

将WEB服务器(10.10.201.155)上的文件备份到备份服务器(10.10.201.156)上

1.建立测试用的目录(需要备份的文件 例如nginx的配置文件)
mkdir -p /etc/nginx
2.建立一些文件
touch /etc/nginx/{1,2,3,4}
3.执行备份文件的操作
rsync -avzPt --delete /etc/nginx/ www-data@10.10.201.156::www-data --password-file=/etc/rsync/rsyncd.secrets

解释一下各个参数的含义:
/etc/nginx/ : 需要备份的文件的存储路径
www-data : 在备份服务器上设置的用户名
10.10.201.156 : 备份服务器ip
www-data : 备份服务器中rsyncd.conf中模块名称

##############################总结   ######################################
总结来说:通过rsync将主web服务器/etc/nginx/路径下的所有文件备份到用户名为www-data,
ip地址为10.10.201.156的备份服务器,里面的rsyncd.conf文件中的www-data模块下的path
(也就是/var/www/pub)指向路径里面。
如果/etc/nginx后面不加 / 就会将nginx文件夹整个保存到/var/www/pub下。如下

rsync -avzPt --delete /etc/nginx www-data@10.10.201.156::www-data --password-file=/etc/rsync/rsyncd.secrets
##################################################################################

三、定时备份

3.1选择命令编辑方式

crontab -e
选择3

3.2输入定时命令

在最后一行添加如下 后 保存提出
0 5 * * * rsync -avzPt --delete /etc/nginx/ www-data@10.10.201.156::www-data --password-file=/etc/rsync/rsyncd.secrets

解释一下各个参数的含义:
0 :指分钟
5 :指小时
即在每天5点00分执行该备份命令。

下面为每5分钟运行一次
*/5 * * * * rsync -avzPt --delete /etc/nginx/ www-data@10.10.201.156::www-data --password-file=/etc/rsync/rsyncd.secrets

四、实时备份

(只要WEB服务器上监控的目录 /etc/nginx 有变化 就同步到backup备份服务器上 包括添加 修改 删除等)

4.1安装inotify web服务器上(10.10.201.155上)

安装
apt-get install inotify-tools

安装完成后,inotifywait默认路径为/usr/bin/inotifywait

4.2创建脚本

vim /etc/rsync/rsync.init.sh 
> #!/bin/bash
> /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib /etc/rsync/temp/ | while read files
> do
> rsync -avzPt --delete --password-file=/etc/rsync/rsyncd.secrets /etc/rsync/temp/ www-data@192.168.27.131::www-data
> echo "{files} was rsynced" >> /temp/rsync.log 2>&1
> done
> EOF

解释一下各个参数的含义:
#!/bin/bash : 脚本文件必备
/usr/bin/inotifywait : inotifywait默认路径
modify,delete,create,attrib : 修改,删除,新建,更改格式(对文件操作)
/etc/nginx/ : 监听的文件路径
while read files : 文件被读取时
echo “{files} was rsynced” >> /temp/rsync.log 2>&1 : 日志信息保存

4.3修改脚本权限

chmod 755 /etc/rsync/rsync.init.sh

4.4设置脚本开机自启

1.先查看rc-local 是否启动
systemctl status rc-local.service
2. 启动服务
systemctl start rc-local.service
 
3.重启服务
systemctl restart rc-local 
4.添加开启启动 rc-local.service
systemctl enable  rc-local.service

4.添加rc-local.service软连接
ln -sf /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service

5.编辑rc-local.service
vim /etc/systemd/system/rc-local.service
最后一行 添加如下
[Install]
WantedBy=multi-user.target
Alias=rc-local.service

保存退出

4.5创建rc.local文件并赋权

1.编辑文件
vim /etc/rc.local
如下
#!/bin/bash
/bin/bash /etc/rsync/rsync.init.sh > /dev/null 2>&1 &
exit 0

2.赋予权限
chmod 755 /etc/rc.local

4.6重新加载服务

1.刷新
systemctl daemon-reload
2.查看服务状态
systemctl status rc-local.service

4.7测试

web服务器(10.10.201.155)建立几个文件如下

1.进入WEB服务器的监控的目录
cd /etc/nginx
2.建立文件
touch 1
touch 12
touch 123
touch 1234

备份服务器(10.10.201.156)去查看

1.进入备份文件的目录
cd /var/www/pub
2.查看文件 (已经实时备份过来了)
ls
上一篇下一篇

猜你喜欢

热点阅读