задний план
Резервное копирование сервера — одна из ежедневных задач, которые необходимо выполнять, а работа по резервному копированию — это трехмерный процесс, идеального плана не существует, план резервного копирования необходимо определять в соответствии с реальной ситуацией. Программа, которую я вам представил на этот раз, универсальна и больше подходит для резервного копирования небольших серверов, например персональных серверов.
Применимая сцена
- Объем данных на сервере невелик, и частота обновления данных невысока.
- Я надеюсь регулярно выполнять резервное копирование своего личного облачного сервера на локальный компьютер, такой как 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Оптимизация скрипта
Список серверов резервного копирования изменяется непосредственно в сценарии, что немного грязно. Если вы хотите улучшить его, поместите список резервных копий в переменную среды.Сценарий определяет цель резервного копирования, читая значение в переменной среды, поэтому сценарий красивее! Автор не будет делать этот шаг и предоставит каждому возможность поиграть.