黑风双煞的结局是什么?他们最终的命运如何?

tmyb

今天跟大家聊聊我前几天搞的“黑风双煞”!别害怕,不是真的杀人放火,是两个服务器之间的文件同步脚本,我给起了这么个吓人的名字,主要是为了好玩,也方便自己记住。

事情是这样的,我手头有两个Linux服务器,一个是跑主站业务的,另一个是做备份和数据分析的。平时主站服务器会产生一些日志文件,还有用户上传的一些图片、视频啥的,我需要定期把这些东西同步到备份服务器上。

一开始我是手动用`scp`命令搞,但是时间一长就觉得太麻烦了,每次都要输命令,输密码,效率太低。于是我就想着写个脚本,让它自动同步。

黑风双煞的结局是什么?他们最终的命运如何?

说干就干!

我选用了`rsync`这个工具。这玩意儿简直是文件同步的瑞士军刀,功能强大,而且速度快。我之前也用过,上手很快。

第一步,安装`rsync`。两台服务器都要装,这个没啥好说的,`yum install rsync`或者`apt-get install rsync`,看你用的啥系统。

第二步,写脚本。这是重点!我新建了一个`*`文件,放在主站服务器上,内容大致如下:

bash

#!/bin/bash

黑风双煞的结局是什么?他们最终的命运如何?

# 定义变量

SOURCE_DIR="/var/www/html/uploads" # 要同步的目录

DEST_USER="backup" # 备份服务器用户名

DEST_IP="192.168.1.100" # 备份服务器IP地址

DEST_DIR="/data/backup/uploads" # 备份服务器目标目录

LOG_FILE="/var/log/*" # 日志文件

黑风双煞的结局是什么?他们最终的命运如何?

# 记录开始时间

START_TIME=$(date +%Y-%m-%d_%H:%M:%S)

echo "[$START_TIME] Sync started..." >> $LOG_FILE

# 使用rsync同步文件

rsync -avz --delete --password-file=/etc/* $SOURCE_DIR $DEST_USER@$DEST_IP:$DEST_DIR >> $LOG_FILE 2>&1

# 记录结束时间

黑风双煞的结局是什么?他们最终的命运如何?

END_TIME=$(date +%Y-%m-%d_%H:%M:%S)

echo "[$END_TIME] Sync finished." >> $LOG_FILE

echo "[$END_TIME] ===========================================" >> $LOG_FILE

# 退出

exit 0

黑风双煞的结局是什么?他们最终的命运如何?

这里面几个关键点:

`SOURCE_DIR`:指定要同步的源目录,也就是主站服务器上放用户上传文件的目录。

`DEST_USER`、`DEST_IP`、`DEST_DIR`:分别是备份服务器的用户名、IP地址和目标目录。

`rsync -avz --delete --password-file=/etc/*`:这是`rsync`命令的核心参数。

`-a`:归档模式,保留所有文件属性,相当于`-rlptgoD`,非常实用。

`-v`:显示详细的同步过程。

黑风双煞的结局是什么?他们最终的命运如何?

`-z`:压缩传输,提高速度。

`--delete`:如果目标目录中有源目录没有的文件,就删除。这个很重要,保证两边数据一致。

`--password-file=/etc/*`:指定密码文件,避免每次都要手动输入密码。

第三步,配置`rsync`密码。为了安全起见,我不想把密码直接写在脚本里,所以使用了密码文件。

在主站服务器上创建一个`/etc/*`文件,内容很简单,只有一行,就是备份服务器用户的密码。

黑风双煞的结局是什么?他们最终的命运如何?

你的密码

然后,修改文件权限,只有root用户可以读写。

bash

chmod 600 /etc/*

chown root:root /etc/*

黑风双煞的结局是什么?他们最终的命运如何?

第四步,配置`rsync`服务端。需要在备份服务器上配置`rsync`服务端,允许主站服务器连接。

修改`/etc/*`文件,添加以下内容:

uid = root

gid = root

黑风双煞的结局是什么?他们最终的命运如何?

use chroot = no

max connections = 10

timeout = 300

pid file = /var/run/*

lock file = /var/run/*

log file = /var/log/*

黑风双煞的结局是什么?他们最终的命运如何?

[uploads]

path = /data/backup/uploads

comment = Backup directory for uploads

uid = backup

gid = backup

read only = no

黑风双煞的结局是什么?他们最终的命运如何?

list = yes

auth users = backup

secrets file = /etc/*

这里解释一下几个关键配置:

`path`:指定备份的目标目录。

黑风双煞的结局是什么?他们最终的命运如何?

`uid`、`gid`:指定运行`rsync`的用户和组。

`read only = no`:允许写入。

`auth users = backup`:指定允许连接的用户名。

`secrets file = /etc/*`:指定密码文件。

同样,也要创建`/etc/*`文件,内容和主站服务器上的一样,只有一行密码,并且修改权限。

第五步,启动`rsync`服务端。

黑风双煞的结局是什么?他们最终的命运如何?

bash

systemctl start rsyncd

systemctl enable rsyncd

第六步,测试脚本。在主站服务器上运行`./*`,看看能不能成功同步文件。如果报错,就仔细检查一下配置,看看是不是哪里写错了。

第七步,设置定时任务。为了让脚本自动运行,我添加了一个定时任务。

黑风双煞的结局是什么?他们最终的命运如何?

bash

crontab -e

在文件末尾添加一行:

0 3 /root/* # 每天凌晨3点运行脚本

黑风双煞的结局是什么?他们最终的命运如何?

这样,每天凌晨3点,脚本就会自动运行,把主站服务器上的文件同步到备份服务器上。

搞定!

整个过程不难,就是需要细心一点,一步一步来。我之所以给它起名叫“黑风双煞”,就是觉得这两个服务器一黑一白,一个主站一个备份,配合起来威力无穷,哈哈!

这个脚本还有很多可以改进的地方,比如可以增加邮件告警,如果同步失败就发邮件通知我;还可以增加一些错误处理逻辑,防止脚本意外中断。以后有时间再慢慢完善。

希望这个分享对大家有所帮助!

黑风双煞的结局是什么?他们最终的命运如何?