BSDPORTAL.RU

На этом сайте обсуждаются вопросы использования ОС FreeBSD
 Портал  •  Статьи  •  Форум  •  Wiki  •  Поиск  •  FAQ  •  Обои  •   Официальная документация  •  Новые темы 

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
СообщениеДобавлено: Чт 12 апр, 2018 11:51 am 
Не в сети

Зарегистрирован: Ср 11 апр, 2018 6:15 pm
Сообщения: 3
Доброго всем времени суток.
Прежде чем писать пост, я изучал 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 очень сложно. Спасибо всем за внимание.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пт 13 апр, 2018 11:08 am 
Не в сети
Аватара пользователя

Зарегистрирован: Пн 26 мар, 2007 6:04 pm
Сообщения: 1112
Откуда: Kiev
Цитата:
Далее моя проблема, в которую я упёрся и не могу понять, что я сделал не так...
Подгружаем 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/)

_________________
"Винда съела дрова и резет здесь не фурычит"
"Все говорят, что у меня /dev/hands кривой и я всё делаю через /dev/ass. А у меня этих файлов вообще нет!"


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пт 13 апр, 2018 11:17 am 
Не в сети

Зарегистрирован: Пт 13 апр, 2018 10:28 am
Сообщения: 1
1) Пересоздай zpool.cache (тот который ты принес с "боевого сервера" не подойдет :)

2) Про mbuffer уже написали.

3) поскольку обьем все же большой то сжать тоже не помешает, только не тормозным gzip, а что нибудь типа lz4, zstd и не как файлы, а через pipe при пересылке.
В freebsd 11 у zfs send есть опция -e (пересылать уже сжатые блоки lz4)

4) Переносить через zfs send работающую базу нельзя, только остановленную.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пт 13 апр, 2018 11:34 am 
Не в сети
Аватара пользователя

Зарегистрирован: Пн 26 мар, 2007 6:04 pm
Сообщения: 1112
Откуда: Kiev
NetUser писал(а):
4) Переносить через zfs send работающую базу нельзя, только остановленную.

Если останов базы - критичен, то можно (это совсем не означает, что нельзя, а то, что можно, но не желательно). Лично переносил снепшоты mysql/postgresql с работающих баз. Из около 20-30 раз таких переносов неудач не было. Единственный момент - снепшоты базы и логов должны быть сделаны в один и тот же момент (если они находятся на разных zfs)

_________________
"Винда съела дрова и резет здесь не фурычит"
"Все говорят, что у меня /dev/hands кривой и я всё делаю через /dev/ass. А у меня этих файлов вообще нет!"


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пт 13 апр, 2018 2:02 pm 
Не в сети

Зарегистрирован: Пт 03 сен, 2004 1:26 pm
Сообщения: 2255
ramzes508 писал(а):
Теперь вопросы по существу:
1. Как мне победить ошибку "failed to initialize ZFS library". Я явно накосячил либо в "zpool create", либо zpool export/import.


явно и про это уже намекали...

простая логика: "failed to initialize ZFS library"
- либо модули zfs не подгружены, что врядли
- либо корень не смонтирован и где уж тут найти библиотки

значит, скорей всего zpool create с указанием альтернативного корня
и перед импортом, правильно задать mountpoint для корня.
либо import с указанием альтернативного монтирования чтобы посмотреть
затем характеристики пула и mountpoint'ы

верхнее, всего лишь личное мнение, что мешает потренироваться в Виртуалке?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вт 17 апр, 2018 6:30 pm 
Не в сети

Зарегистрирован: Ср 11 апр, 2018 6:15 pm
Сообщения: 3
Доброго времени дня!

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, пытался гуглить, но в интернете просто каша полная. я реально не понимаю

Прошу вас, помогите! :cry:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вт 17 апр, 2018 6:34 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн 26 мар, 2007 6:04 pm
Сообщения: 1112
Откуда: Kiev
1) подключить диск, папку, ... любым удобным способом
2) можно и без mbuffer, если это livecd.

_________________
"Винда съела дрова и резет здесь не фурычит"
"Все говорят, что у меня /dev/hands кривой и я всё делаю через /dev/ass. А у меня этих файлов вообще нет!"


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Чт 19 апр, 2018 2:54 pm 
Не в сети

Зарегистрирован: Ср 11 апр, 2018 6:15 pm
Сообщения: 3
Проблему так и не победил с "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 с сервера А . Но на полностью рабочей машине так просто второй пул не принимается. У меня не получилось пока что.. Может подскажете какое решение?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Зарегистрированные пользователи: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
Яндекс.Метрика