задний план
Резервное копирование сервера — одна из ежедневных задач, которые необходимо выполнять, а работа по резервному копированию — это трехмерный процесс, идеального плана не существует, план резервного копирования необходимо определять в соответствии с реальной ситуацией. Программа, которую я вам представил на этот раз, универсальна и больше подходит для резервного копирования небольших серверов, например персональных серверов.
Применимая сцена
- Объем данных на сервере невелик, и частота обновления данных невысока.
- Я надеюсь регулярно выполнять резервное копирование своего личного облачного сервера на локальный компьютер, такой как MacBook (это то, что я использую)
- Некоторые небольшие сервисы, используемые внутри компании для резервного копирования.
идеи
rsyncЭто очень эффективный инструмент синхронизации файлов, который может выполнять удаленную дифференциальную синхронизацию большого количества файлов.rsyncФункции, дифференциальная синхронизация и возобновляемая передача в точках останова делают процесс синхронизации файлов очень эффективным. и он используетsshВ качестве канала передачи, независимо от того, в какой сети вы находитесь, резервная передача может осуществляться очень безопасно.
Обычно мы используемrsyncпуть черезcronНастройте временные задачи, чтобы вызватьrsyncСделайте резервную копию. Но этот подход будет иметь некоторые проблемы в реальном использовании:
- Необходимо редактировать и настраивать указанный файл, что неудобно для схемы копирования
- Требует дополнительной установки
rsyncа такжеcron, для обычногоdockerДля людей, которые этого не делают, «установка программного обеспечения» просто слишком большая проблема! - Когда интервал резервного копирования слишком короткий, если последнее резервное копирование не было завершено, одновременно будут запущены два процесса резервного копирования.В прошлом по этой причине сервер резервного копирования зависал, но у автора также есть решение к этой проблеме, и я расскажу о ней в следующий раз.
Можно ли все запустить в докере,docker-compose.yml, линияdocker-compose up, ты сможешьJust work
план
Сохраните следующее какdocker-compose.yml, войдите в этот каталог файлов и запуститеdocker-compos up
version: "3"
services:
rsync:
image: instrumentisto/rsync-ssh
restart: always
container_name: rsync
volumes:
- ${HOME}/.ssh:/root/.ssh
- ${PWD}/backup:/backup
entrypoint:
- /bin/sh
- -c
- |
# 输出包含当前时间的日志
function log() {
echo -e "`date -d @?((\`date +%s\`+3600*8)) '+%Y-%m-%d %H:%M:%S'` ?@"
}
# 备份服务器,用法:
# backup <备份名> <服务器地址> [备份目录默认/docker/.]
function backup() {
log "============================"
log "开始备份: ?1"
rsync -az --timeout=3600 -P --partial --delete -e ssh root@?2:?{3:-/docker/.} /backup/?2.backup
log "结束备份: ?1"
}
# 开始备份任务
while true
do
# 根据实际情况类推,添加服务器
backup "Gitlab服务器" "192.168.2.2" /root/.
backup "ineva.cn服务器" "ineva.cn"
# 休眠5分钟
log "休眠5分钟"
sleep 300
done
Проблемы, возникающие при докеризации
- Чрезвычайно легкое зеркальное отображение, предпочтительно основанное на
alpine
Наконец нашел зеркало идеального соответствияinstrumentisto/rsync-ssh, Только4Mразмер, есть все необходимые функции
-
rsyncиспользуетsshДля подключения нужно указать приватный ключ
Трюк для решения этой проблемы, сначала настройте备份载体服务器Aможно подключить к需要备份的主机B, то.sshкаталог сопоставляется сcontainerПреимущество этого в том, что вам нужно только убедиться, что A может подключиться к B, и контейнер также получит те же разрешения.
- Как запускать несколько скриптов, не добавляя лишних файлов, и писать на отдельных строках
Я пробовал несколько решений раньше, и может выполнять несколько скриптов, но все они должны быть написаны в одну строку.Если скриптов слишком много, неудобно поддерживать и читать, и, наконец, нашел решение:GitHub.com/docker-case пациент…, единственное, на что нужно обратить внимание, так это на то, что в скрипте$БудетyamlСинтаксисом считается префикс имени переменной окружения, который необходимо экранировать и изменить на?Просто
- Время вывода журнала находится в часовом поясе 0, Китай находится в зоне +08:00, время вывода нелегко прочитать
По этой причине автор специально написал статью для ознакомления с решением этой проблемы.Заинтересованные друзья могут глянуть:
Способ изменения часового пояса в Docker, особенно в alpineОптимизация скрипта
Список серверов резервного копирования изменяется непосредственно в сценарии, что немного грязно. Если вы хотите улучшить его, поместите список резервных копий в переменную среды.Сценарий определяет цель резервного копирования, читая значение в переменной среды, поэтому сценарий красивее! Автор не будет делать этот шаг и предоставит каждому возможность поиграть.