1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/lustlost-ubackup

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Универсальная система удаленного резервного копирования UBackup

Описание

Эта система решает проблему резервного копирования более чем 20 000 баз данных (включая MySQL, Redis, SSDB) в удаленном месте.

Каждый день создается около 400 000 резервных копий (99% баз данных имеют стратегию ежечасной резервной копии).

Каждый день осуществляется передача более 40 ТБ данных в удаленное место.

Поддержка произвольного резервного копирования

  • Эта система отвечает за резервное копирование и передачу в удаленное место, но не контролирует процесс создания резервных копий. Пользователи самостоятельно пишут скрипты резервного копирования, при этом должны следовать определенным требованиям и записывать информацию о резервных копиях в соответствующие лог-файлы.
Нормы для скриптов резервного копирования:

1. Каждое резервное копирование должно быть полным (например, Redis использует RDB для полного резервного копирования).

2. Полное резервное копирование с последующими дифференциальными резервными копиями (например, MySQL использует Xtrabackup).

Лог-файлы генерируются следующим образом:

    Успешное резервное копирование: back_log первая строка — ok, вторая строка — имя файла.

    Неудачное резервное копирование: back_log первая строка — wrong, вторая строка — сообщение об ошибке.
```Если используется второй метод, то при создании `back_log` также должна быть создана одна и та же информация в `last_all_log`.
```markdown
- Управление приоритетами очередей резервного копирования, важные резервные копии имеют высший приоритет для отправки в удаленное место.

### Поддержка различных типов оповещений
- Неправильное выполнение скрипта резервного копирования (код выхода отличен от нуля).
- Отсутствие резервного копирования в течение установленного времени.
- Недействительное резервное копирование.

Для оповещений был создан плагин Chrome для напоминаний.

### Поддержка линейного масштабирования кластера
- Кластер поддерживает получение данных, регулирование веса, увеличение вместимости путем простого добавления узлов.
- Узлы конфигурируются таким образом, чтобы зарезервировать определенное пространство; если это пространство превышено, работа автоматически приостанавливается. После этого, если остальные узлы продолжают работать нормально, весь кластер может продолжить работу.

### Поддержка многомерного анализа данных
- Метаданные хранятся в ES, анализ данных выполняется по мере необходимости.

### Однокнопочный восстановление
- В сочетании со скриптами восстановления можно быстро найти местоположение резервной копии, скачать её и восстановить данные.
```## Архитектурное описание

### Схема архитектуры
![Схема архитектуры](https://cloud.githubusercontent.com/assets/3296743/15817881/c18875f2-2c0c-11e6-8258-a3c2caf7cc24.png)

### Страница статистики
![Статистика1](https://cloud.githubusercontent.com/assets/3296743/15818212/974bf8c0-2c0e-11e6-90f2-216eb0db25e8.png)
![Статистика2](https://cloud.githubusercontent.com/assets/3296743/15818211/974a3634-2c0e-11e6-9d14-983b3e5aa6ae.png)

### Страница оповещений
![Оповещения](https://cloud.githubusercontent.com/assets/3296743/15818208/973ef350-2c0e-11e6-8c4c-bbfe6aca3447.png)

### Страница управления кластером
![Управление кластером](https://cloud.githubusercontent.com/assets/3296743/15818209/9743a77e-2c0e-11e6-9296-6785873788d8.png)

## Способы развертывания

### Установка базового окружения
Установите Elasticsearch и Redis, затем скачайте исходный код

git clone git@github.com:lustlost/ubackup.git

Инициализируйте ES Mapper

python ubackup/server/create_es_mapper.py


### Клиентская часть

yum install python-redis -y yum install rsync xinetd -y sed -i '/disable/ s#yes#no#g' /etc/xinetd.d/rsync cd ubackup/client cp uuzuback.conf /etc/

Убедитесь, что конфигурационный файл `/etc/rsyncd.conf` включает следующие модули (конкретные значения можно адаптировать под вашу ситуацию):

[backup] path = /data/backup/ hosts allow = 0.0.0.0/0 read only = yes


Перезапустите службу `xinetd`

/etc/init.d/xinetd restart


[global] server_id = 111111 # ID сервера, уникальный идентификатор, который может быть номером активного имущества game_id = 31 # ID игры, полученное из управления играми в Dashboard op_id = 1 # зарезервированное поле, заполните любыми данными interval = 3600 # время интервала для выполнения резервного копирования redis_host = 0.0.0.0 # адрес Redis на стороне сервера redis_port = 6379 # порт Redis на стороне сервера redis_queue = uuzuback # имя очереди Redis на стороне сервера my_ip = 127.0.0.1 # IP текущего компьютера log = /var/log/uuzu_back.log # путь к логам error_log = /var/log/uuzu_back.error # путь к ошибочным логам

[mysql3306]   # один раздел для одного экземпляра резервного копирования
back_type = mysql  # тип резервного копирования
instance = 3306    # номер экземпляра, для резервного копирования баз данных используется номер порта
rsync_model = backup/database_3306 # имя модуля rsync
back_dir = /data/backup/database_3306/ # путь к файлам резервного копирования
back_log = /var/log/mysql_3306.log # путь к журналам резервного копирования
last_all_log = /var/log/last_3306.log # путь к последнему полному резервному копированию, если нет необходимости различать полные и частичные резервные копии, этот параметр можно пропустить
script = sh /usr/local/uuzuback/mysql_backup.sh /etc/my.cnf # скрипт резервного копирования

[redis6379]
back_type = redis
instance = 6379
rsync_model = backup/redisbase_6379
back_dir = /data/backup/redisbase_6379/
back_log = /var/log/redis_6379.log
script = sh /usr/local/uuzuback/redis_backup.sh /data/conf/redis_conf

Добавьте `python uuzuback_client.py` в crontab, интервал времени cron должен совпадать с значением interval в конфигурационном файле.
```
### Серверная часть:
Установите зависимости
```
yum install supervisor MySQL-python -y
pip install redis
cd ubackup/server/
cp uuzuback.conf /etc/
```

Конфигурационный файл
```
[global]
work_thread = 4 # количество потоков для выполнения rsync
rsync_bwlimit = 62000 # ограничение пропускной способности для rsync
server_root_path = /backup/uuzubackup/ # корневой каталог локального резервного копирования
reserve = 1000 # размер, который следует оставить свободным на локальном устройстве
interval = 0 # интервал в секундах между попытками получения резервной копии каждым потоком
redis_host = 127.0.0.1 # адрес redis
redis_port = 6379 # порт redis
redis_queue = level1 uuzuback_f # название очереди, чем ближе к началу списка, тем выше приоритет
log = /var/log/uuzuback.log 
error_log = /var/log/uuzuback.error
myip = 127.0.0.1 # локальный IP адрес
retry = 3 # количество попыток повторного выполнения
message_redis_host = 127.0.0.1 # адрес глобальной очереди
message_redis_port = 6379 # порт глобальной очереди
message_queue = message # название глобальной очереди
mysqlkeeptime = 15 # время хранения данных
rediskeeptime = 15 # время хранения данных
node_id = 5 # идентификатор узла, полученный с Dashboard для отчета о состоянии узла
```

Запуск сервиса
Добавьте конфигурационный сегмент в `/etc/supervisord.conf`, путь к исполняемому файлу серверной части следует указывать в соответствии с реальными условиями
Откройте `to_es.py`
Измените информацию о соединении с Redis, ES и dashboard в строках 5-9```markdown
[program:uuzu_backup_server]
command=/usr/bin/python /usr/local/uuzuback/uuzuback_server.py
autorestart=true
autostart=true
stdout_logfile=/var/log/uuzu_backup_server.log

[program:to_es]
command=/usr/bin/python /usr/local/uuzuback/to_es.py
autorestart=true
autostart=true
stdout_logfile=/var/log/uuzu_backup_to_es.log
```

### Дашборд:
```
cd ubackup/dashboard
pip install -r requirements.txt
```

Измените `config.py` и настройте строки подключения к базе данных, затем выполните

```
python -c 'from myapp import db;db.create_all()'
```
Запустите сервис
```
python runserver.py
```
Доступен через порт  Yöntem 5000

### Отправка информации о ноде:

Отправка информации о очередях
```
На сервере Redis
Измените dashboard_url в server/update_queue.py
Добавьте cronjob
python update_queue.py {{ID}} добавьте в cronjob, ID
Используйте конфигурацию любого узла
```
Отправка информации о дисках
```
На сервере ноды
Измените dashboard_url в server/update_disk.py
Добавьте cronjob
python update_disk.py добавьте в cronjob
Установите node_id в конфигурационном файле как ID на дашборде
```

### Корректировка:
```markdown
[program:uuzu_backup_server]
command=/usr/bin/python /usr/local/uuzuback/uuzuback_server.py
autorestart=true
autostart=true
stdout_logfile=/var/log/uuzu_backup_server.log

[program:to_es]
command=/usr/bin/python /usr/local/uuzuback/to_es.py
autorestart=true
autostart=true
stdout_logfile=/var/log/uuzu_backup_to_es.log
```

### Дашборд:
```
cd ubackup/dashboard
pip install -r requirements.txt
```

Измените `config.py` и настройте строки подключения к базе данных, затем выполните

```
python -c 'from myapp import db;db.create_all()'
```
Запустите сервис
```
python runserver.py
```
Доступен через порт 5000

### Отправка информации о ноде:

Отправка информации о очередях
```
На сервере Redis
Измените dashboard_url в server/update_queue.py
Добавьте cronjob
python update_queue.py {{ID}} добавьте в cronjob, ID
Используйте конфигурацию любого узла
```
Отправка информации о дисках
```
На сервере ноды
Измените dashboard_url в server/update_disk.py
Добавьте cronjob
python update_disk.py добавьте в cronjob
Установите node_id в конфигурационном файле как ID на дашборде
```

Корректный перевод:
```markdown
[program:uuzu_backup_server]
command=/usr/bin/python /usr/local/uuzuback/uuzuback_server.py
autorestart=true
autostart=true
stdout_logfile=/var/log/uuzu_backup_server.log

[program:to_es]
command=/usr/bin/python /usr/local/uuzuback/to_es.py
autorestart=true
autostart=true
stdout_logfile=/var/log/uuzu_backup_to_es.log
```

### Дашборд:
```
cd ubackup/dashboard
pip install -r requirements.txt
```

Измените `config.py` и настройте строки подключения к базе данных, затем выполните

```
python -c 'from myapp import db;db.create_all()'
```
Запустите сервис
```
python runserver.py
```
Доступен через порт 5000

### Отправка информации о ноде:

Отправка информации о очередях
```
На сервере Redis
Измените dashboard_url в server/update_queue.py
Добавьте cronjob
python update_queue.py {{ID}} добавьте в cronjob, ID
Используйте конфигурацию любого узла
```
Отправка информации о дисках
```
На сервере ноды
Измените dashboard_url в server/update_disk.py
Добавьте cronjob
python update_disk.py добавьте в cronjob
Установите node_id в конфигурационном файле как ID на дашборде
```

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/lustlost-ubackup.git
git@api.gitlife.ru:oschina-mirror/lustlost-ubackup.git
oschina-mirror
lustlost-ubackup
lustlost-ubackup
master