BSDPORTAL.RU http://bsdportal.ru/ |
|
Клонирование пула ZFS с боевого сервера http://bsdportal.ru/viewtopic.php?f=58&t=28668 |
Страница 1 из 2 |
Автор: | ramzes508 [ Чт 12 апр, 2018 11:51 am ] |
Заголовок сообщения: | Клонирование пула ZFS с боевого сервера |
Доброго всем времени суток. Прежде чем писать пост, я изучал freebsd с начала года, читал много статей, старался вникнуть во все, что с этим связано, постоянно спотыкался и вставал вновь, но сейчас я решился обратиться сюда. Мне была поставлена задача настроить backup-копирование или репликацию сервера Freebsd 10.3, сервер боевой, крутится БД Postgress, php, веб-сервер и т.д., гасить его ни в коем случае нельзя. На тот момент я в глаза не видел ZFS и всё, что с ним связано. Прочитал мануал от oracle по zfs я понял, что смогу реализовать два варианта: 1. Выгрузить все дата сеты в архив, скопировать архивы из удаленного сервера на новый и развернуть локально. 2. Отправить целиком пул с датасетами на новый сервер zfs send & zfs receive по ssh. Вариант 1 мне не понравился сразу, т.к. когда я запустил выгрузку всех снэпшотов в архив Код: cd /var/backups/ zfs send main-pool@snapshot_2018.03.19 | gzip -9 > backup_main-pool_`date +%Y.%m.%d`.gz zfs send main-pool/ROOT@snapshot_2018.03.19 | gzip -9 > backup_main-pool_root_`date +%Y.%m.%d`.gz zfs send main-pool/ROOT/default@snapshot_2018.03.19 | gzip -9 > backup_main-pool_root_default_`date +%Y.%m.%d`.gz zfs send main-pool/tmp@snapshot_2018.03.19 | gzip -9 > backup_main-pool_tmp_`date +%Y.%m.%d`.gz zfs send main-pool/usr@snapshot_2018.03.19 | gzip -9 > backup_main-pool_usr_`date +%Y.%m.%d`.gz zfs send main-pool/usr/home@snapshot_2018.03.19 | gzip -9 > backup_main-pool_usr_home_`date +%Y.%m.%d`.gz zfs send main-pool/usr/ports@snapshot_2018.03.19 | gzip -9 > backup_main-pool_usr_ports_`date +%Y.%m.%d`.gz zfs send main-pool/usr/src@snapshot_2018.03.19 | gzip -9 > backup_main-pool_usr_src_`date +%Y.%m.%d`.gz zfs send main-pool/var@snapshot_2018.03.19 | gzip -9 > backup_main-pool_var_`date +%Y.%m.%d`.gz zfs send main-pool/var/audit@snapshot_2018.03.19 | gzip -9 > backup_main-pool_var_audit_`date +%Y.%m.%d`.gz zfs send main-pool/var/crash@snapshot_2018.03.19 | gzip -9 > backup_main-pool_var_crash_`date +%Y.%m.%d`.gz zfs send main-pool/var/log@snapshot_2018.03.19 | gzip -9 > backup_main-pool_var_log_`date +%Y.%m.%d`.gz zfs send main-pool/var/mail@snapshot_2018.03.19 | gzip -9 > backup_main-pool_var_mail_`date +%Y.%m.%d`.gz zfs send main-pool/var/tmp@snapshot_2018.03.19 | gzip -9 > backup_main-pool_var_tmp_`date +%Y.%m.%d`.gz сервер начал работать на пределе (хотя сервер у нас арендован не самой слабой мощности), и получилось так, что обработка 500GB данных main-pool/ROOT/default@snapshot_2018.03.19 практически парализовало работу офиса днем, хотя запускал процесс вечером и за ночь он не завершился. Вариант запуска на выходные можно конечно рассматривать, но я решил идти по пути варианта 2, он мне показался менее нагруженным. Постараюсь описать подробно, возможно вы мне поможете скорректировать инструкцию, за это вам будет плюс к карме ![]() Один сервер находится в Германии, виртуальный сервер я развернул в Москве. Загружаемся на новом сервере "Freebsd03" с liveCD Настраиваем сетку. У меня сетевой интерфейс называется em0. Код: ifconfig em0 add 192.168.0.9 netmask 255.255.255.0 route add default 192.168.0.254 Для настройки ssh подгружаемся в файловую систему unionfs. Код: mkdir /tmp/etc mount_unionfs /tmp/etc /etc Редактируем конфиг sshd чтобы подключаться по ssh root-ом. Код: ee /etc/ssh/sshd_config Строка "PermitRootLogin yes" Создаем любой простой пароль для подключения к этому хосту по ssh. Код: passwd root Запускаем сервис sshd. Код: service sshd onestart Далее я уже подключился для удобства к новому серверу по ssh для вставки всех команд. Смотрим диски в системе. У меня диск называется da0. Код: sysctl -a | grep disk Смотрим таблицу разметки. Код: gpart show Удаляем ее командой. У меня диск пустой, поэтому аккуратнее с этой командой надо быть ![]() Код: gpart destroy -F da0 Создаем новую таблицу и делаем разметку диска. Постарался сделать по аналогии с сервером в Германии, только у меня на виртуальном сервере нет зеркала и размер диска будет 800gb. Цитата: => 34 3907029101 ada0 GPT (1.8T) 34 6 - free - (3.0K) 40 1024 1 freebsd-boot (512K) 1064 984 - free - (492K) 2048 4194304 2 freebsd-swap (2.0G) 4196352 3902832640 3 freebsd-zfs (1.8T) 3907028992 143 - free - (72K) => 34 3907029101 ada1 GPT (1.8T) 34 6 - free - (3.0K) 40 1024 1 freebsd-boot (512K) 1064 984 - free - (492K) 2048 4194304 2 freebsd-swap (2.0G) 4196352 3902832640 3 freebsd-zfs (1.8T) 3907028992 143 - free - (72K) Код: gpart create -s GPT da0 gpart add -t freebsd-boot -s 512 da0 gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0 gpart add -t freebsd-swap -s 2G da0 gpart add -t freebsd-zfs da0 Создаем pool "main-pool". Вот тут я долго топтался, если исключал ключ -m, то у меня была ошибка, что нельзя смонтировать в "/". Так же читал по другим ключам, но информации по ним очень мало... Еще на будущее зафиксировал себе, что -f используем в случае, когда устройства при создании зеркала имеют разный размер, пул создастся, но размер будет соответствовать меньшему устройству. Код: zpool create -f -O canmount=off -m none main-pool /dev/da0p3 Если посмотреть боевой сервер и новый, то разница в mount-point, я не знаю пока, критично это или нет, но я стараюсь сделать идентичные настройки. Цитата: Боевой сервер zfs list NAME USED AVAIL REFER MOUNTPOINT main-pool 1.59G 866G 96K /main-pool main-pool/ROOT 449M 866G 96K none main-pool/ROOT/default 449M 866G 448M / main-pool/tmp 160K 866G 96K /tmp main-pool/usr 1.15G 866G 96K /usr main-pool/usr/home 96K 866G 96K /usr/home main-pool/usr/ports 628M 866G 628M /usr/ports main-pool/usr/src 547M 866G 547M /usr/src main-pool/var 900K 866G 96K /var main-pool/var/audit 104K 866G 96K /var/audit main-pool/var/crash 96K 866G 96K /var/crash main-pool/var/log 336K 866G 240K /var/log main-pool/var/mail 172K 866G 108K /var/mail main-pool/var/tmp 96K 866G 96K /var/tmp Новый сервер zfs list NAME USED AVAIL REFER MOUNTPOINT main-pool 85K 771G 19K none root@:~ # zfs list Перешел на боевой сервер, с которого буду переносить "main-pool". Сделал рекурсивный снэпшот пула с дочерними файловыми системами. Код: zfs snapshot -r main-pool@snapshot Список снэпшотов. Код: zfs list -t snapshot Цитата: NAME USED AVAIL REFER MOUNTPOINT main-pool@snapshot 0 - 96K - main-pool/ROOT@snapshot 0 - 96K - main-pool/ROOT/default@snapshot 460K - 447M - main-pool/tmp@snapshot 64K - 96K - main-pool/usr@snapshot 0 - 96K - main-pool/usr/home@snapshot 0 - 96K - main-pool/usr/ports@snapshot 8K - 628M - main-pool/usr/src@snapshot 0 - 547M - main-pool/var@snapshot 0 - 96K - main-pool/var/audit@snapshot 8K - 96K - main-pool/var/crash@snapshot 0 - 96K - main-pool/var/log@snapshot 96K - 144K - main-pool/var/mail@snapshot 64K - 96K - main-pool/var/tmp@snapshot 0 - 96K - Далее я отправил снэпшот со старого на новый сервер, на котором буду разворачивать main-pool. Список ключей отметил для себя: Цитата: // -R zfs send используется для отправки потока репликации всех дочерних файловых систем -i zfs send создает инкрементные снэпшоты -F zfs receive означает перезаписать файловую систему, в том случае если она уже создана -v zfs receive отображение текущего прогресса Код: zfs send -R main-pool@snapshot | ssh 192.168.0.9 zfs receive -vFd main-pool Прописываем загрузку пула. (Начиная с FreeBSD версии 10, у нас корень является "/ROOT/default", я убил на это понимание 2 дня) Код: zpool set bootfs=main-pool/ROOT/default main-pool Указываем mountpoint для пула main-pool Код: zfs set mountpoint=/main-pool main-pool Делаем экспорт хранилища. Код: zpool export main-pool Подгружаем pool. Импорт экспортированного хранилища. Цитата: Если ключ -d не задан, команда ищет /dev/disk. но я все равно указал. Если размонтировать какую-либо из файловых систем не удается, ее можно размонтировать принудительно с помощью параметра "-f" Проверяю какой пул готов для импорта Код: zpool import Цитата: root@:~ # zpool import pool: main-pool id: 18244119390875913029 state: ONLINE action: The pool can be imported using its name or numeric identifier. config: main-pool ONLINE da0p3 ONLINE Далее моя проблема, в которую я упёрся и не могу понять, что я сделал не так... Подгружаем pool. Импорт экспортированного хранилища. Код: zpool import -f -d /dev/da0p3 main-pool Далее я проверяю список zfs Код: zpool list И у меня валится ошибка инициализации библиотеки ZFS Цитата: root@:~ # zpool list internal error: failed to initialize ZFS library root@:~ # Теперь вопросы по существу: 1. Как мне победить ошибку "failed to initialize ZFS library". Я явно накосячил либо в "zpool create", либо zpool export/import. 2. Подскажите мне как работать со снэпшотами, если их выгрузить в архив, скачать и пытаться развернуть локально. Конкретно я не понимаю как указать эти архивы в livecd и запустить zfs receive из архива в пул. Буду очень рад конструктивному ответу. 3. И третий момент вылез буквально вчера: При тестировании с виртуального сервера на виртуальный, в рамках одного гипервизора, у меня 25GB передает по ssh минут 5, но когда я запустил "zfs send -R main-pool@snapshot | ssh 192.168.0.9 zfs receive -vFd main-pool" из Германии в Москву через интернет - у меня за сутки передалось всего 26GB, причем на сервере-приемнике загрузка памяти была максимальная 10GB из 10GB, и мне кажется, что передача данных застопорилась именно из-за этого. Пробелы у меня есть, но сразу всю систему осилить после windows очень сложно. Спасибо всем за внимание. |
Автор: | skeletor [ Пт 13 апр, 2018 11:08 am ] |
Заголовок сообщения: | Re: Клонирование пула ZFS с боевого сервера |
Цитата: Далее моя проблема, в которую я упёрся и не могу понять, что я сделал не так... Подгружаем pool. Импорт экспортированного хранилища. Код: zpool import -f -d /dev/da0p3 main-pool Что по вашему тут должен сделать ключ '-d', если в man'e про него написано следующее: Цитата: -d dir Searches for devices or files in dir. The -d option can be specified multiple times. ? Мне кажется вы сами себе создали проблему, и пытаетесь её решить. Если сделать пул в livecd и потом zpool export/import то он должен проходить даже без ключа '-f'. Почему бы вам не проделать тоже самое, но по официальной доке https://wiki.freebsd.org/RootOnZFS/GPTZFSBoot ? У вас какие-то куски из разных источников. 1) Может модуль ZFS побился, а может что-то ещё. Ещё как вариант попробовать удалить /boot/zfs/zpool.cache, перегрузиться, и попробовать ещё раз импортировать. 2) С ними можно работать по разному (можно в файл, можно просто пересылать). Что бы понять суть работы, зачем оно нужно желательно прочитать доку по работе zfs/zpool, можно даже взять с сайта oracle (там совместимость 95%) 3) Если вы хотите передать максимально быстро, то не используйте ssh для передачи (достаточно простого nc). Дополнительно можно использовать mbuffer (https://dan.langille.org/2014/05/03/zfs ... g-mbuffer/) |
Автор: | NetUser [ Пт 13 апр, 2018 11:17 am ] |
Заголовок сообщения: | Re: Клонирование пула ZFS с боевого сервера |
1) Пересоздай zpool.cache (тот который ты принес с "боевого сервера" не подойдет ![]() 2) Про mbuffer уже написали. 3) поскольку обьем все же большой то сжать тоже не помешает, только не тормозным gzip, а что нибудь типа lz4, zstd и не как файлы, а через pipe при пересылке. В freebsd 11 у zfs send есть опция -e (пересылать уже сжатые блоки lz4) 4) Переносить через zfs send работающую базу нельзя, только остановленную. |
Автор: | skeletor [ Пт 13 апр, 2018 11:34 am ] |
Заголовок сообщения: | Re: Клонирование пула ZFS с боевого сервера |
NetUser писал(а): 4) Переносить через zfs send работающую базу нельзя, только остановленную. Если останов базы - критичен, то можно (это совсем не означает, что нельзя, а то, что можно, но не желательно). Лично переносил снепшоты mysql/postgresql с работающих баз. Из около 20-30 раз таких переносов неудач не было. Единственный момент - снепшоты базы и логов должны быть сделаны в один и тот же момент (если они находятся на разных zfs) |
Автор: | lavr [ Пт 13 апр, 2018 2:02 pm ] |
Заголовок сообщения: | Re: Клонирование пула ZFS с боевого сервера |
ramzes508 писал(а): Теперь вопросы по существу: 1. Как мне победить ошибку "failed to initialize ZFS library". Я явно накосячил либо в "zpool create", либо zpool export/import. явно и про это уже намекали... простая логика: "failed to initialize ZFS library" - либо модули zfs не подгружены, что врядли - либо корень не смонтирован и где уж тут найти библиотки значит, скорей всего zpool create с указанием альтернативного корня и перед импортом, правильно задать mountpoint для корня. либо import с указанием альтернативного монтирования чтобы посмотреть затем характеристики пула и mountpoint'ы верхнее, всего лишь личное мнение, что мешает потренироваться в Виртуалке? |
Автор: | ramzes508 [ Вт 17 апр, 2018 6:30 pm ] |
Заголовок сообщения: | Re: Клонирование пула ZFS с боевого сервера |
Доброго времени дня! 1. Перепробовал все ваши советы...Какой день подряд я бьюсь над этой проблемой и у меня не получается решить "failed to initialize ZFS library". Вот пример из видео на youtube, делаю уже один в один как автор, или я с ума схожу или чего-то еще! ссылка Код: # ifconfig vtnet0 add 10.0.0.191 netmask 255.255.255.0 # route add default 10.0.0.176 # mkdir /tmp/etc # mount_unionfs /tmp/etc /etc # vi /etc/ssh/sshd_config PermitRootLogin yes # service sshd onestart # passwd Password # sysctl -a | grep disk # gpart show # gpart destroy -F vtbd0 # gpart create -s gpt vtbd0 # gpart add -t freebsd-boot -s 512 vtbd0 # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 vtbd0 # gpart add -t freebsd-swap -s 1G vtbd0 # gpart add -t freebsd-zfs vtbd0 # zpool create -m /mnt example2 /dev/vtbd0p3 # zfs snapshot -r example@23-03-2017 # zfs list -t snaphot # zfs send -R example@23-03-2017 | ssh 10.0.0.191 zfs receive -vFd example2 # reboot # zpool import -f example2 # zpool list # df -h Вот у него работает zpool list после zpool import -f example2, у меня же валится ошибка "internal error: failed to initialize ZFS library". Скажу так, что после перезагрузки система подгружается, все работает, я вижу поднятую копию сервера виртуалки 1, но я не уверен, что из-за этой ошибки все будет работать корректно, если я буду переносить боевой сервер. Пункт номер два. Я так же скоро с ума сойду, я 3 дня сидел читал форумы, гуглил но так и не понял 2 вещи: 1. я гружусь в Livecd, предварительно выгрузил с основго сервера архив со снэпшотами, мне нужно указать на архив снэпшота, чтобы выполнить zfs send /receive в рамках одной виртуалки, без использования передачи пула по сети... но я абсолютно не понимаю как это сделать, как в livecd указать на снэпшот, куда его надо поместить на usb диск или сетевую папку и как мне вообще примонитровать это, какой командой будет отображаться и доступен сетевой ресурс в локалке. 2. mbuffer должен работать с двух сторон, ты настраиваешь его слушать на сервере приемнике и потом отправляешь с основного сервера. Но как мне поднять mbuffer в livecd? я пытался установить порты на livecd, пытался гуглить, но в интернете просто каша полная. я реально не понимаю Прошу вас, помогите! ![]() |
Автор: | skeletor [ Вт 17 апр, 2018 6:34 pm ] |
Заголовок сообщения: | Re: Клонирование пула ZFS с боевого сервера |
1) подключить диск, папку, ... любым удобным способом 2) можно и без mbuffer, если это livecd. |
Автор: | ramzes508 [ Чт 19 апр, 2018 2:54 pm ] |
Заголовок сообщения: | Re: Клонирование пула ZFS с боевого сервера |
Проблему так и не победил с "internal error: failed to initialize ZFS library". Решил забить на неё. Жаль, что никто не дал решения. Делаю так Код: # zpool create -o cachefile=/boot/zfs/zpool.cache -m /mnt -f main-pool /dev/da0p3 # zpool set bootfs=main-pool/ROOT/default main-pool Переношу пул, перегружаюсь, снова Livecd Код: # zpool import -f -o altroot=/mnt main-pool # zfs set mountpoint=/main-pool main-pool # zpool export main-pool # zpool import main-pool Тут ошибка "internal error: failed to initialize ZFS library" # reboot Еще Может кто-то даст решение как настроить периодическую отправку снэпшотов всего пула из сервера А на сервер Б (наполнение постоянными инкрементными снепшотами)? Получается, что сейчас мне надо грузиться в LiveCD и ждать приема снэпшота пула. Держать постоянно сервер-приемник в режиме live-cd для приема постоянных снэпшотов не есть хорошо. Электричество или еще чего.. Хотелось бы настроить периодичную отправку zfs send/receive без моего участия. Я пробовал на работающий полноценный сервер Б с пулом test-pool отправлять пул main-pool с сервера А . Но на полностью рабочей машине так просто второй пул не принимается. У меня не получилось пока что.. Может подскажете какое решение? |
Автор: | ramzes508 [ Сб 28 апр, 2018 10:18 am ] |
Заголовок сообщения: | Re: Клонирование пула ZFS с боевого сервера |
Доброго времени суток! Прошу помочь, очередная проблема. Решил пойти путем zfs send reveive через архивирование, .т.к вариант по сети потерпел фиаско. Но у меня возникла теперь новая проблема при выполнении тех же действий, у меня просто не грузится система и снова выкидывает в livecd Код: На боевом сервере. Делаем рекурсивный снэпшот: # zfs snapshot -r main-pool@snapshot Монтируем шару с архивами: # mkdir /var/snapshots # mount_smbfs -I 192.168.0.200 -E koi8-r:cp866 //guest@TEAM/distr/snapshot/ /var/snapshots Отправляем снэпшоты в файл: # zfs send -Rv main-pool@snapshot | gzip > /var/snapshots/snapshot/main-pool.snapshot.gz Грузимся на новом сервере Freebsd02 с liveCD. Настроим сетку. У меня сетевой интерфейс называется em0: # ifconfig em0 add 192.168.0.8/24 # route add default 192.168.0.254 Для настройки ssh подгрузим файловую систему unionfs: # mkdir /tmp/etc # mount_unionfs /tmp/etc /etc Редактируем конфиг sshd: # ee /etc/ssh/sshd_config Строка "PermitRootLogin yes" Создадим любой простой пароль для подключения к этому хосту по ssh: # passwd Запускаем сервис sshd: # service sshd onestart Смотрим диски в системе. У меня диск называется da0: # sysctl -a | grep disk Смотрим таблицу разметки: # gpart show Если она есть удаляем ее командой: # gpart destroy -F da0 Создаем GPT диск: # gpart create -s GPT da0 Создаем раздел boot: # gpart add -t freebsd-boot -s 512 da0 Создание swap размером 2G: # gpart add -t freebsd-swap -s 4G da0 Создаем раздел ZFS: # gpart add -t freebsd-zfs /dev/da0 Устанавливаем pMBR и gptzfsboot загрузчик: # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0 Load ZFS kernel module: # kldload /boot/kernel/opensolaris.ko # kldload /boot/kernel/zfs.ko Создаем pool main-pool: # zpool create -m /mnt main-pool da0 Монтируем шару с архивами: # mkdir /var/snapshots # mount_smbfs -I 192.168.0.200 -E koi8-r:cp866 //guest@TEAM/distr/snapshot/ /var/snapshots Восстанавливаем пул со всеми дочерними датасетами: # gunzip -c -d /var/snapshots/snapshot/main-pool.snapshot.gz | zfs receive -vFd main-pool Прописываем загрузку пула: # zpool set bootfs=main-pool/ROOT/default main-pool Выгружаем пул: # zpool export main-pool Подгружаем pool: # zpool import -f -o altroot=/mnt main-pool Указываем mountpoint для пула main-pool: # zfs set mountpoint=/main-pool main-pool # reboot Прошу помочь, куда копать. |
Автор: | ramzes508 [ Сб 28 апр, 2018 10:23 am ] |
Заголовок сообщения: | Re: Клонирование пула ZFS с боевого сервера |
Пробовал так же с командами Код: # mkdir /boot/zfs # zpool export main-pool && zpool import main-pool # cp /boot/zfs/zpool.cache /main-pool/boot/zfs ругается, что нету такой директории. |
Автор: | ramzes508 [ Сб 28 апр, 2018 4:51 pm ] |
Заголовок сообщения: | Re: Клонирование пула ZFS с боевого сервера |
Смог скопировать кэш, но толку мне это дало целых 0. Код: Восстанавливаем пул со всеми дочерними датасетами: # gunzip -c -d /var/snapshots/snapshot/main-pool.snapshot.gz | zfs receive -vFd main-pool Выгружаем пул: # zpool export main-pool Подгружаем pool: # zpool import -f -o cachefile=/tmp/zpool.cache -o altroot=/mnt main-pool Копируем: # cp /tmp/zpool.cache /mnt/boot/zfs Прописываем загрузку пула: # zpool set bootfs=main-pool/ROOT/default main-pool Выгружаем пул: # zfs unmount -a Указываем mountpoint для пула main-pool: # zfs set mountpoint=/main-pool main-pool Перегружаемся: # reboot Система не грузится после выполнения всех действий. Даже и не знаю куда вообще копать и смотреть, попа какая-то, если честно... |
Автор: | ramzes508 [ Вт 01 май, 2018 7:15 pm ] |
Заголовок сообщения: | Re: Клонирование пула ZFS с боевого сервера |
Кто-нибудь может подсказать, куда смотреть? |
Автор: | skeletor [ Ср 02 май, 2018 5:32 pm ] |
Заголовок сообщения: | Re: Клонирование пула ZFS с боевого сервера |
Цитата: Устанавливаем pMBR и gptzfsboot загрузчик: # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0 Load ZFS kernel module: # kldload /boot/kernel/opensolaris.ko # kldload /boot/kernel/zfs.ko Создаем pool main-pool: # zpool create -m /mnt main-pool da0 Вы сначала ставите загрузчик, а потом отдаёте весь диск под пул, соответственно, загрузчик перетирается zfs'ом. Либо бы отдаёте весь диск da0 под zfs (тогда морока с gpart add ... отпадает), либо вы делаете (создаёте пул на разделе da0p3, а не на всём da0) Код: zpool create -m /mnt main-pool da0p3 И ещё: не пробуйте куски инструкций с разных источников. Возьмите официальный и делайте через него. Тренироваться можно и в virtualbox'e. |
Автор: | ramzes508 [ Пн 07 май, 2018 11:00 am ] |
Заголовок сообщения: | Re: Клонирование пула ZFS с боевого сервера |
Спасибо, да, нашел свою ошибку. Никакой кэш в итоге не трогал, все заработало на тестовых серверах без проблем. Буду пробовать в эти дни разворачивать боевой сервер. Выложу два своих варианта по SSH и SMB. SSH: Код: На боевом сервере: # zfs snapshot -r main-pool@snap # zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT main-pool@snap 0 - 96K - main-pool/ROOT@snap 0 - 96K - main-pool/ROOT/default@snap 0 - 455M - main-pool/tmp@snap 0 - 96K - main-pool/usr@snap 0 - 96K - main-pool/usr/home@snap 0 - 96K - main-pool/usr/ports@snap 0 - 634M - main-pool/usr/src@snap 0 - 547M - main-pool/var@snap 0 - 96K - main-pool/var/audit@snap 0 - 96K - main-pool/var/crash@snap 0 - 96K - main-pool/var/log@snap 0 - 164K - main-pool/var/mail@snap 0 - 100K - main-pool/var/tmp@snap 0 - 96K - # zfs list NAME USED AVAIL REFER MOUNTPOINT main-pool 1.60G 44.7G 96K /main-pool main-pool/ROOT 455M 44.7G 96K none main-pool/ROOT/default 455M 44.7G 455M / main-pool/tmp 96K 44.7G 96K /tmp main-pool/usr 1.15G 44.7G 96K /usr main-pool/usr/home 96K 44.7G 96K /usr/home main-pool/usr/ports 634M 44.7G 634M /usr/ports main-pool/usr/src 547M 44.7G 547M /usr/src main-pool/var 648K 44.7G 96K /var main-pool/var/audit 96K 44.7G 96K /var/audit main-pool/var/crash 96K 44.7G 96K /var/crash main-pool/var/log 164K 44.7G 164K /var/log main-pool/var/mail 100K 44.7G 100K /var/mail main-pool/var/tmp 96K 44.7G 96K /var/tmp На новом сервере: # ifconfig em0 add 172.20.10.11/28 # route add default 172.20.10.1 # mkdir /tmp/etc # mount_unionfs /tmp/etc /etc # ee /etc/ssh/sshd_config Строка "PermitRootLogin yes" # passwd # service sshd onestart # sysctl -a | grep disk # gpart show # gpart destroy -F ada0 # gpart create -s GPT ada0 # gpart add -t freebsd-boot -s 512 ada0 # gpart add -t freebsd-swap -s 2G ada0 # gpart add -t freebsd-zfs ada0 # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0 # zpool create -f -m /mnt main-pool /dev/ada0p3 На боевом сервере: # zfs send -R main-pool@snap | ssh 172.20.10.11 zfs receive -vFd main-pool На новом сервере: # zpool set bootfs=main-pool/ROOT/default main-pool # reboot # zpool import -f -o altroot=/mnt main-pool Проверяю пул после импорта: # zfs list # zpool list # zpool get bootfs main-pool Меняю точку монтирования: # zfs set mountpoint=/main-pool main-pool # reboot SMB Код: На боевом сервере.
# mkdir /var/snapshots # mount_smbfs -I 172.20.10.5 -E koi8-r:cp866 //guest@WINXP/share/ /var/snapshots # zfs snapshot -r main-pool@snap # df -h Filesystem Size Used Avail Capacity Mounted on main-pool/ROOT/default 45G 455M 45G 1% / devfs 1.0K 1.0K 0B 100% /dev main-pool 45G 96K 45G 0% /main-pool main-pool/tmp 45G 96K 45G 0% /tmp main-pool/usr/home 45G 96K 45G 0% /usr/home main-pool/usr/ports 45G 634M 45G 1% /usr/ports main-pool/usr/src 45G 547M 45G 1% /usr/src main-pool/var/audit 45G 96K 45G 0% /var/audit main-pool/var/crash 45G 96K 45G 0% /var/crash main-pool/var/log 45G 164K 45G 0% /var/log main-pool/var/mail 45G 100K 45G 0% /var/mail main-pool/var/tmp 45G 96K 45G 0% /var/tmp //GUEST@WINXP/SHARE 50G 2.9G 47G 6% /var/backups # zfs send -Rv main-pool@snap | gzip -1 > /var/snapshots/main-pool.zfs.gz На новом сервере: # ifconfig em0 add 172.20.10.11/28 # route add default 172.20.10.1 # mkdir /tmp/etc # mount_unionfs /tmp/etc /etc # ee /etc/ssh/sshd_config Строка "PermitRootLogin yes" # passwd # service sshd onestart # sysctl -a | grep disk # gpart show # gpart destroy -F ada0 # gpart create -s GPT ada0 # gpart add -t freebsd-boot -s 512 ada0 # gpart add -t freebsd-swap -s 2G ada0 # gpart add -t freebsd-zfs ada0 # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0 # zpool create -f -m /mnt main-pool /dev/ada0p3 # mkdir /var/snapshots # mount_smbfs -I 172.20.10.5 -E koi8-r:cp866 //guest@WINXP/share/ /var/snapshots # gunzip -c -d /var/snapshots/main-pool.zfs.gz | zfs receive -vFd main-pool # zpool set bootfs=main-pool/ROOT/default main-pool # reboot # zpool import -f -o altroot=/mnt main-pool Проверяю пул после импорта: # zfs list # zpool list # zpool get bootfs main-pool Меняю точку монтирования: # zfs set mountpoint=/main-pool main-pool # reboot |
Автор: | ramzes508 [ Пт 11 май, 2018 10:59 am ] |
Заголовок сообщения: | Re: Клонирование пула ZFS с боевого сервера |
Кто-нибудь сталкивался с работой инкрементных снэпшотов через архивы? Как я понимаю, если у нас имеется снэпшот full, далее я в архив выгружаю снепшоты с ключом "-i" inc1, inc2, inc3, inc4, inc5. При восстановлении нужно развернуть full снэпшот и продолжать разворачивать каждый инкрементный архив руками отдельно - inc1, inc2, inc3, inc4, inc5 ? И как я понимаю, я не могу запустить передачу комбинированных снимков в новую файловую систему их архивов, как на примере передачи по ssh: Код: # zfs receive -d -F pool/fs < /snaps/fs@all-I # zfs list NAME USED AVAIL REFER MOUNTPOINT pool 428K 16.5G 20K /pool pool/fs 71K 16.5G 21K /pool/fs pool/fs@snapA 16K - 18.5K - pool/fs@snapB 17K - 20K - pool/fs@snapC 17K - 20.5K - pool/fs@snapD 0 - 21K - Доку oracle читал уже. |
Автор: | skeletor [ Пн 14 май, 2018 1:41 pm ] |
Заголовок сообщения: | Re: Клонирование пула ZFS с боевого сервера |
Тут нет понятия full/не-full снепшотов. снепшотов - это снимок ФС на конкретный момент времени и он хранит лишь дельту между датой снимка и текущим моментом. Если есть несколько снепшотов, то все промежуточные снепшоты хранят тоже дельту, между временем создания и ближайшим следующим снепшотом. Что такое комбинированные снимки? |
Автор: | ramzes508 [ Пн 14 май, 2018 4:50 pm ] |
Заголовок сообщения: | Re: Клонирование пула ZFS с боевого сервера |
Добрый день! После переноса боевого сервера на новый, возникла проблема со свапом, точнее отсутствием... Кто может подсказать, куда смотреть? Код: root@global-card:~ # gpart show
=> 34 1887436733 da0 GPT (900G) 34 512 1 freebsd-boot (256K) 546 4194304 2 freebsd-swap (2.0G) 4194850 1883241917 3 freebsd-zfs (898G) root@global-card:~ # swapon -a swapon: /dev/ada0p2: No such file or directory swapon: /dev/ada1p2: No such file or directory root@global-card:~ # top -b 0 last pid: 32290; load averages: 0.22, 0.15, 0.23 up 3+22:46:05 15:48:02 43 processes: 1 running, 41 sleeping, 1 stopped Mem: 471M Active, 174M Inact, 1347M Wired, 292K Cache, 7933M Free ARC: 805M Total, 170M MFU, 356M MRU, 912K Anon, 10M Header, 268M Other Swap: |
Автор: | ramzes508 [ Вт 15 май, 2018 11:42 am ] |
Заголовок сообщения: | Re: Клонирование пула ZFS с боевого сервера |
Поправил /etc/fstab. |
Автор: | ramzes508 [ Сб 26 янв, 2019 3:06 pm ] |
Заголовок сообщения: | Re: Клонирование пула ZFS с боевого сервера |
Доброго времени суток! Прошу в очередной раз помощи. Моя прошлая реализация по бэкап-копированию оказалась не очень быстрым решением, а если быть точным - сутки на архивацию снэпшота в gzip и передачу по сети. И сутки на разворачивание на резервном сервере. Я решил организовать репликацию на второстепенный сервер, чтобы в случае чего просто загрузиться с этого пула. Я создаю бэкап сервер с двумя HDD da0, da1. На da0 установлен голый FreeBSD 10.3, пул zroot. На da1 я сделал разметку согласно инструкциям Код: # gpart create -s GPT da1 # gpart add -t freebsd-boot -s 512 da1 # gpart add -t freebsd-swap -s 4G da1 # gpart add -t freebsd-zfs da1 # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da1 # zpool create main-pool /dev/da1p3 # gpart show => 34 1048575933 da0 GPT (500G) 34 6 - free - (3.0K) 40 1024 1 freebsd-boot (512K) 1064 984 - free - (492K) 2048 8388608 2 freebsd-swap (4.0G) 8390656 1040183296 3 freebsd-zfs (496G) 1048573952 2015 - free - (1.0M) => 34 1929379773 da1 GPT (920G) 34 512 1 freebsd-boot (256K) 546 8388608 2 freebsd-swap (4.0G) 8389154 1920990653 3 freebsd-zfs (916G) root@freebsd01:~ # отправляю снэпшот на второй пул Код: # zfs send -Rv zroot@full | zfs receive -vFd main-pool Загружаюсь с livecd Код: # zpool import -f -o altroot=/mnt zroot # zpool import -f -o altroot=/mnt main-pool # zpool set bootfs=main-pool/ROOT/default main-pool # zfs set mountpoint=/main-pool main-pool # zpool get bootfs NAME PROPERTY VALUE SOURCE zroot bootfs zroot/ROOT/default local main-pool bootfs main-pool/ROOT/default local # zpool export main-pool # zpool export zroot Первое чего я не смог настроить, так это выбрать загрузку между двумя пулами, у меня получилось только через BIOS поменять приоритет загрузки с диска da1, и тогда пул main-pool смог самостоятельно загрузиться. Далее, когда я переключился обратно на загрузку с пула zroot da0 и вернулся в него, я уже не смог подключить к системе пул main-pool с диска da1 Код: root@freebsd01:~ # zpool list NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT zroot 492G 1.54G 490G - 0% 0% 1.00x ONLINE - root@freebsd01:~ # zpool status pool: zroot state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM zroot ONLINE 0 0 0 da0p3 ONLINE 0 0 0 errors: No known data errors root@freebsd01:~ # zpool import pool: main-pool id: 4608178919354020060 state: ONLINE action: The pool can be imported using its name or numeric identifier. config: main-pool ONLINE da1p3 ONLINE Выполняю root@freebsd01:~ # zpool import main-pool И всё, На все команды zpool и zfs такая ошибка. internal error: failed to initialize ZFS library Если выполняю команду как указано ниже, то работает, но получается какое-то временное монтирование, т.к. после рестарта сервера пул main-pool с диска da1 опять не примонтирован. Код: root@freebsd01:~ # zpool import -f -o altroot=/mnt main-pool root@freebsd01:~ # zpool list NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT main-pool 912G 909M 911G - 0% 0% 1.00x ONLINE /mnt zroot 492G 1.54G 490G - 0% 0% 1.00x ONLINE - root@freebsd01:~ # zfs list NAME USED AVAIL REFER MOUNTPOINT main-pool 909M 883G 19K /mnt/main-pool main-pool/ROOT 364M 883G 19K none main-pool/ROOT/default 364M 883G 364M /mnt main-pool/tmp 28K 883G 19K /mnt/tmp main-pool/usr 544M 883G 19K /mnt/usr main-pool/usr/home 19K 883G 19K /mnt/usr/home main-pool/usr/ports 155M 883G 155M /mnt/usr/ports main-pool/usr/src 389M 883G 389M /mnt/usr/src main-pool/var 172K 883G 19K /mnt/var main-pool/var/audit 19K 883G 19K /mnt/var/audit main-pool/var/crash 19K 883G 19K /mnt/var/crash main-pool/var/log 66.5K 883G 47K /mnt/var/log main-pool/var/mail 29.5K 883G 20.5K /mnt/var/mail main-pool/var/tmp 19K 883G 19K /mnt/var/tmp zroot 1.54G 475G 96K /zroot zroot/ROOT 406M 475G 96K none zroot/ROOT/default 406M 475G 406M / zroot/tmp 160K 475G 96K /tmp zroot/usr 1.15G 475G 96K /usr zroot/usr/home 96K 475G 96K /usr/home zroot/usr/ports 625M 475G 625M /usr/ports zroot/usr/src 547M 475G 547M /usr/src zroot/var 824K 475G 96K /var zroot/var/audit 96K 475G 96K /var/audit zroot/var/crash 104K 475G 96K /var/crash zroot/var/log 268K 475G 176K /var/log zroot/var/mail 164K 475G 100K /var/mail zroot/var/tmp 96K 475G 96K /var/tmp root@freebsd01:~ # Смысл всего заключается в том, чтобы выполнялась репликацию с удаленного сервера на мой бэкап-сервер, в пул main-pool da1. В случае сбоя в любой момент сделать рестарт и загрузиться из этого пула, посмотреть или сохранить из него данные в БД, потом опять перезагрузиться в пул zroot da0 и продолжать делать снэпшоты репликации. Сервер удаленный это БД, если бы были просто файлы, то было бы конечно все проще. Это мое видение ситуации по решению данной проблемы. Может быть мне дадут более грамотный совет, как мне будет правильнее реализовать репликацию с возможностью выполнить быстрый откат до нужного состояния и сразу же загрузиться с реплики. Сервер с БД примерно 500GB. |
Автор: | lavr [ Пн 28 янв, 2019 1:04 am ] |
Заголовок сообщения: | Re: Клонирование пула ZFS с боевого сервера |
ramzes508 писал(а): Доброго времени суток! Прошу в очередной раз помощи. Моя прошлая реализация по бэкап-копированию оказалась не очень быстрым решением, а если быть точным - сутки на архивацию снэпшота в gzip и передачу по сети. И сутки на разворачивание на резервном сервере. Я решил организовать репликацию на второстепенный сервер, чтобы в случае чего просто загрузиться с этого пула. Я создаю бэкап сервер с двумя HDD da0, da1. На da0 установлен голый FreeBSD 10.3, пул zroot. На da1 я сделал разметку согласно инструкциям Код: # gpart create -s GPT da1 # gpart add -t freebsd-boot -s 512 da1 # gpart add -t freebsd-swap -s 4G da1 # gpart add -t freebsd-zfs da1 # gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da1 # zpool create main-pool /dev/da1p3 # gpart show => 34 1048575933 da0 GPT (500G) 34 6 - free - (3.0K) 40 1024 1 freebsd-boot (512K) 1064 984 - free - (492K) 2048 8388608 2 freebsd-swap (4.0G) 8390656 1040183296 3 freebsd-zfs (496G) 1048573952 2015 - free - (1.0M) => 34 1929379773 da1 GPT (920G) 34 512 1 freebsd-boot (256K) 546 8388608 2 freebsd-swap (4.0G) 8389154 1920990653 3 freebsd-zfs (916G) root@freebsd01:~ # отправляю снэпшот на второй пул Код: # zfs send -Rv zroot@full | zfs receive -vFd main-pool Загружаюсь с livecd Код: # zpool import -f -o altroot=/mnt zroot # zpool import -f -o altroot=/mnt main-pool # zpool set bootfs=main-pool/ROOT/default main-pool # zfs set mountpoint=/main-pool main-pool # zpool get bootfs NAME PROPERTY VALUE SOURCE zroot bootfs zroot/ROOT/default local main-pool bootfs main-pool/ROOT/default local # zpool export main-pool # zpool export zroot Первое чего я не смог настроить, так это выбрать загрузку между двумя пулами, у меня получилось только через BIOS поменять приоритет загрузки с диска da1, и тогда пул main-pool смог самостоятельно загрузиться. Далее, когда я переключился обратно на загрузку с пула zroot da0 и вернулся в него, я уже не смог подключить к системе пул main-pool с диска da1 Код: root@freebsd01:~ # zpool list NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT zroot 492G 1.54G 490G - 0% 0% 1.00x ONLINE - root@freebsd01:~ # zpool status pool: zroot state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM zroot ONLINE 0 0 0 da0p3 ONLINE 0 0 0 errors: No known data errors root@freebsd01:~ # zpool import pool: main-pool id: 4608178919354020060 state: ONLINE action: The pool can be imported using its name or numeric identifier. config: main-pool ONLINE da1p3 ONLINE Выполняю root@freebsd01:~ # zpool import main-pool И всё, На все команды zpool и zfs такая ошибка. internal error: failed to initialize ZFS library Если выполняю команду как указано ниже, то работает, но получается какое-то временное монтирование, т.к. после рестарта сервера пул main-pool с диска da1 опять не примонтирован. Код: root@freebsd01:~ # zpool import -f -o altroot=/mnt main-pool root@freebsd01:~ # zpool list NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT main-pool 912G 909M 911G - 0% 0% 1.00x ONLINE /mnt zroot 492G 1.54G 490G - 0% 0% 1.00x ONLINE - root@freebsd01:~ # zfs list NAME USED AVAIL REFER MOUNTPOINT main-pool 909M 883G 19K /mnt/main-pool main-pool/ROOT 364M 883G 19K none main-pool/ROOT/default 364M 883G 364M /mnt main-pool/tmp 28K 883G 19K /mnt/tmp main-pool/usr 544M 883G 19K /mnt/usr main-pool/usr/home 19K 883G 19K /mnt/usr/home main-pool/usr/ports 155M 883G 155M /mnt/usr/ports main-pool/usr/src 389M 883G 389M /mnt/usr/src main-pool/var 172K 883G 19K /mnt/var main-pool/var/audit 19K 883G 19K /mnt/var/audit main-pool/var/crash 19K 883G 19K /mnt/var/crash main-pool/var/log 66.5K 883G 47K /mnt/var/log main-pool/var/mail 29.5K 883G 20.5K /mnt/var/mail main-pool/var/tmp 19K 883G 19K /mnt/var/tmp zroot 1.54G 475G 96K /zroot zroot/ROOT 406M 475G 96K none zroot/ROOT/default 406M 475G 406M / zroot/tmp 160K 475G 96K /tmp zroot/usr 1.15G 475G 96K /usr zroot/usr/home 96K 475G 96K /usr/home zroot/usr/ports 625M 475G 625M /usr/ports zroot/usr/src 547M 475G 547M /usr/src zroot/var 824K 475G 96K /var zroot/var/audit 96K 475G 96K /var/audit zroot/var/crash 104K 475G 96K /var/crash zroot/var/log 268K 475G 176K /var/log zroot/var/mail 164K 475G 100K /var/mail zroot/var/tmp 96K 475G 96K /var/tmp root@freebsd01:~ # Смысл всего заключается в том, чтобы выполнялась репликацию с удаленного сервера на мой бэкап-сервер, в пул main-pool da1. В случае сбоя в любой момент сделать рестарт и загрузиться из этого пула, посмотреть или сохранить из него данные в БД, потом опять перезагрузиться в пул zroot da0 и продолжать делать снэпшоты репликации. Сервер удаленный это БД, если бы были просто файлы, то было бы конечно все проще. Это мое видение ситуации по решению данной проблемы. Может быть мне дадут более грамотный совет, как мне будет правильнее реализовать репликацию с возможностью выполнить быстрый откат до нужного состояния и сразу же загрузиться с реплики. Сервер с БД примерно 500GB. Вы правда не понимаете что происходит при выполнении: Код: root@freebsd01:~ # zpool import main-pool ? Тогда наводящая идея: попробуйте на лету перемонтировать /, /usr и тд и тп? Ну это мелочи, Вы хотите реализовать технологию: multiple bootable root pool zfs? Единственное что приходит в голову, реализовать с помощью BootManager, других вариантов исходя из реализации zfsboot и gptzfsboot, imho нет. Попробовать GRUB2 для BIOS и UEFI, в случае UEFI - rEFInd. Не уверен что ZFS snaphots сделает небезопасный срез БД. Для БД есть технология Master - Slave. |
Страница 1 из 2 | Часовой пояс: UTC + 4 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |