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