ZFS Snapshots в Glacier или бэкап бэкапов
После того как на сервере бэкапов, скопилось достаточно данных, появилась мысль что нужно это хоть иногда но тоже бэкапить.
Вариантов было 2 это еще одна железка на которую скидывать снимки или AWS со своим Glacier куда отправлять их в виде архивов, решено было опробовать Glacier.
Amazon пишет что этот сервис предназначен для редкоиспользуемых данных или как они это называют "холодных данных".
Поковыряв aws cli и погуглив, нашел glacier-cmd который мне понравился больше, на его основе и накостылил.
Ставится в пол тычка
Ну собственно как их отправлять, мне надо слать zfs снимки максимально пожатые, все это будет запускать дженкинс раз в месяц и слать на почту отчет все ли ок...
Попробуем запаковать что-то, но прежде надо выяснить оптимальный формат по времени/размеру
Жмем контейнер с мускулем размером 1.6Gb
backup_to_aws.sh
Полезное:
Тут про 408
AWS CLI
Ставится в пол тычка
git clone https://github.com/uskudnik/amazon-glacier-cmd-interface.git cd amazon-glacier-cmd-interface/ python setup.py installСоздаем конфиг
/etc/glacier-cmd.conf
для него нам нужны Secret Access и Access KeyНу собственно как их отправлять, мне надо слать zfs снимки максимально пожатые, все это будет запускать дженкинс раз в месяц и слать на почту отчет все ли ок...
Попробуем запаковать что-то, но прежде надо выяснить оптимальный формат по времени/размеру
Жмем контейнер с мускулем размером 1.6Gb
time zfs send data/hourly/lxc@zfs-auto-snap_hourly-2017-07-02-1535 | gzip -9 > gzip_9.gz real 3m28.468s user 3m27.160s sys 0m3.060sПосле запуска pigz -11 LA улетел в космос и составил 40 единиц, время составило
real 12m1.675s user 321m16.472s sys 0m39.508spigz -9 справился быстро
real 0m15.222s user 4m55.148s sys 0m4.776spigz -8 еще быстрей
real 0m10.638s user 3m11.556s sys 0m4.356sПо итогу, оказалось что -7 оптимально по скорости/размеру
time zfs send data/hourly/lxc@zfs-auto-snap_hourly-2017-07-02-1535 | pigz -7 > gzip_7.gz real 0m8.278s user 2m2.152s sys 0m4.100s
ls -lhS total 5.2G -rw-r--r-- 1 root root 1.6G Oct 26 15:17 clear.img -rw-r--r-- 1 root root 741M Oct 26 15:41 pigz_7.gz -rw-r--r-- 1 root root 740M Oct 26 15:43 pigz_8.gz -rw-r--r-- 1 root root 740M Oct 26 15:15 gzip_9.gz -rw-r--r-- 1 root root 740M Oct 26 15:36 pigz_9.gz -rw-r--r-- 1 root root 719M Oct 26 15:35 pigz_11.gzНастало время отправить в ледник наш файл
glacier-cmd upload test-vault pigz_7.gz Wrote 740.9 MB. Rate 3.97 MB/s.%). Rate 5.54 MB/s, average 3.98 MB/s, ETA 15:54:16. +--------------------------+------------------------------------------------------------------+ | Header | Value | +--------------------------+------------------------------------------------------------------+ | Archive SHA256 tree hash | 09e1c1a69a6e12259f9df1c70b16ca7c255ccfcafab61124e0f446ed5db9d67d | | Uploaded file | pigz_7.gz | +--------------------------+------------------------------------------------------------------+Запросил инфу о том что в хранилище, время обработки 3-4 часа
glacier-cmd inventory test-vault +---------------------------+----------------------------------------------------------------------------------------------+ | Header | Value | +---------------------------+----------------------------------------------------------------------------------------------+ | Status | Inventory retrieval in progress. | | Job ID | iWlNEQISQt46FqlSWzsaNrb3bATEFcoYsBwA-WCqPQD8oRijxNOV6-uef2QxiZX9cuVzXaQ2V84O1rwW9XXCHsL6V1-5 | | Job started (time in UTC) | 2017-10-27T10:47:40.927Z | +---------------------------+----------------------------------------------------------------------------------------------+Можно посмотреть что у нас в работе
glacier-cmd listjobs test-vault +------------------------------------------------------------------+----------------------------------------------------------------------------------------------+------------+--------------------+--------------------------+------------+ | VaultARN | Job ID | Archive ID | Action | Initiated | Status | +------------------------------------------------------------------+----------------------------------------------------------------------------------------------+------------+--------------------+--------------------------+------------+ | arn:aws:glacier:eu-central-1:779573928563:vaults/test-vault | iWlNEQISQt46FqlSWzsaNrb3bATEFcoYsBwA-WCqPQD8oRijxNOV6-uef2QxiZX9cuVzXaQ2V84O1rwW9XXCHsL6V1-5 | None | InventoryRetrieval | 2017-10-27T10:47:40.927Z | InProgress | +------------------------------------------------------------------+----------------------------------------------------------------------------------------------+------------+--------------------+--------------------------+------------+Спустя 4 часа можно посмотреть что же у нас там в хранилище
glacier-cmd inventory test-vault Inventory of vault: arn:aws:glacier:eu-central-1:779573925563:vaults/test-vault Inventory Date: 2017-10-27T00:10:22Z Content: +--------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------+----------------------+------------------------------------------------------------------+-----------+ | Archive ID | Archive Description | Uploaded | SHA256 tree hash | Size | +--------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------+----------------------+------------------------------------------------------------------+-----------+ | 6QC8dpCOB4Vpxyj-4gWaKTaoU8Ho1T9NbSG2JzcD8hBVREDk1Wf4x7jNCNl_k7s_i3q_5gSloD_wmDSEWIlab438iGByJBq2Wlq6nNnWVq-vTYDmodYQCPhIxGyWe2PQAXxE-NWC0A | pigz_7.gz | 2017-10-26T15:54:16Z | acf419d47a976045d84b24ac9f8708428526741f033f9d13268029c6ec6a1166 | 776900631 | +--------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------+----------------------+------------------------------------------------------------------+-----------+ This vault contains 1 items, total size 740.9 MB.Для восстановления надо запросить наш архив, опять ожидаем 4 часа :D
glacier-cmd getarchive test-vault 6QC8dpCOB4Vpxyj-4gWaKTaoU8Ho1T9NbSG2JzcD8hBVREDk1Wf4x7jNCNl_k7s_i3q_5gSloD_wmASEWIlab438iGByJBq2Wlq6nNnWVq-vTYDmodYQCPhIxGyWe2PQAXxE-NWC0A +-----------+----------------------------------------------------------------------------------------------+ | Header | Value | +-----------+----------------------------------------------------------------------------------------------+ | JobId | i6I4Q5CWnLklQl6eK0rsysrE8CrPcvk65zhrRQCIX5VkZle0m6kSUltLC95X38e8KjIk4iU5A4MbjAd2BVYi_6C5RL37 | | RequestId | H95u2kU6zU3lGxn9OccodyUg-VlohF3n63s21US9fOVYrG4 | +-----------+----------------------------------------------------------------------------------------------+Ну и по готовности забираем
glacier-cmd download test-vault '6QC8dpCOB4Vpxyj-4gWaKTaoU8Ho1T9NbSG2JzcD8hBVREDk1Wf4x7jNCNl_k7s_i3q_5gSloD_wmASEWIlab438iGByJBq2Wlq6nNnWVq-vTYDmodYQCPhIxGyWe2PQAXxE-NWC0A' --outfile gpigz_7.gz Wrote 740.9 MB. Rate 3.64 MB/s.). Rate 4.06 MB/s, average 3.64 MB/s, ETA 13:38:16.Ну а дальше дело за малым, накостылить...
backup_to_aws.sh
#!/bin/bash DATE=`date +%Y-%m-%d` ALL_LXC=0 ALL_SNAPSHOTS=0 VAULT=vault SOURCE=( "/data/host1/daily" "/data/host2/daily" "/data/host3/daily" "/data/host4/daily" "/data/host5/daily" "/data/host6/daily" ) for i in "${SOURCE[@]}" do for x in `zfs list -r $i | grep lxc | awk {'print $1'}` do ALL_LXC=$[$ALL_LXC +1] done; for y in `zfs list -t snapshot -r $i | grep $DATE | awk {'print $1'}` do name=$(echo $y | cut -d '/' -f 5) echo "Compression: $y" zfs send $y | pigz -7 > /data/other/aws/$name.gz echo "Send: $name" glacier-cmd upload $VAULT /data/other/aws/$name.gz # aws glacier upload-archive --account-id - --vault-name $VAULT --body /data/other/aws/$name.gz result=$? if [ $result == 0 ]; then echo "Delete local archive" rm /data/other/aws/$name.gz else echo "Upload FAILED" fi ALL_SNAPSHOTS=$[$ALL_SNAPSHOTS +1] sleep 600; done; done; echo "All lxc fs on host: $ALL_LXC" echo "Count snapshots on $DATE: $ALL_SNAPSHOTS"Скрипт у меня дергается раз в месяц, архивирует снимки контейнеров и отправляет в Amazon, в первые разы столкнулся с проблемой
boto.glacier.exceptions.UnexpectedHTTPResponseError: Expected 204, got (408, code=RequestTimeoutException, message=Request timed out.)Помог sleep 600, так же пробовал через aws cli, и натыкался на ту же ошибку, в итоге вернулся на glacier-cmd с добавленой паузой.
Полезное:
Тут про 408
AWS CLI