nav-img
Evolution

Руководство администратора Network Block Device

Network Block Device (NBD) отвечает за серверную часть протокола сетевого блочного устройства. Протокол предоставляет доступ к томам SDS как к обычным блочным устройствам.

Список доступных действий

  • NBD_OPT_EXPORT_NAME — идентифицирует том и тип аренды в формате volume_id[:lease_type];

  • NBD_OPT_GO/NBD_OPT_INFO — содержит информацию о томе в виде отдельных инфо-запросов, включая описание тома в формате shard_id:volume_id:lease_type:use_count и размер блока;

  • NBD_OPT_LIST — отображает список идентификаторов томов, подключенных к серверу на данный момент;

  • NBD_OPT_ABORT — разрыв соединения на этапе обмена опциями;

  • NBD_CMD_READ — чтение;

  • NBD_CMD_WRITE — запись;

  • NBD_CMD_TRIM — трим;

  • NBD_CMD_DISC — разрыв сессии, soft disconnect;

  • NBD_CMD_FLUSH — сброс кэша.

Опции командной строки

Доступные опции командной строки:

nbd_server --help
A multi-sharded NBD server to proxy client requests to SDS volumes through libclient backend NBD Server options:
-h [ --help ] show help message
--help-seastar show help message about seastar options
--help-loggers print a list of logger names and exit
--log-to-file arg (=1) redirect log output to the file
--log-level arg (=info) log level: [trace, debug, info, warn, error]
--log-dir arg (=/var/log/storage) path to directory where log files will be located
--log-buf-cnt arg (=30) number of internal logger buffers (min 1)
--log-buf-size-mb arg (=1) size (in MB) of logger buffer (min 1)
--log-compress-level arg (=3) compression level for zstd algo
--log-rotate-file-cnt arg (=20) number of files for rotation
--log-rotate-file-size-mb arg (=128) file size (in MB) when rotation should happen (0 - no threshold)
--config arg (=/etc/storage/nbdd/nbd.conf) Path to NBD server config file
--seastar-config arg (=/etc/storage/nbdd/seastar.conf) Path to Seastar config file
--host-config arg (=/etc/storage/host.yml) SDS cluster config
--membership arg (=/etc/storage/mds_list.yml) MDS server list
--open-timeout-sec arg (=10) Volume opened and ready timeout in seconds
--cs-rpc-timeout-sec arg (=60) CS RPC request timeout in seconds
--port arg (=10809) NBD port to use
--ip arg (=0.0.0.0) IP to listen to incoming connections
--use-tcp arg (=0) Use TCP connection
--socket-path arg (=/var/run/storage/nbdd/nbd_unix_domain.socket) Unix domain socket for incoming connections
--sequential arg (=0) Handle requests sequentially
--prom-ip arg (=0.0.0.0) ip of Prometheus endpoint
--prom-port arg (=9991) port of Prometheus endpoint

Стандартные опции фрэймворка Seastar и логирования

По умолчанию сервер запускается на всех доступных шардах. Чтобы запустить сервер на одном шарде и перенаправить логирование на стандартный вывод, используйте команду:

$ nbd_server -c 1 --log-to-file 0

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

Использование вместе со стандартным NBD-клиентом

Для проверки работоспособности сервера воспользуйтесь стандартным NBD-клиентом. В приведеннм ниже примере предполагается, что SDS-кластер уже развернут, в нем созданы два тома с идентификаторами 99c84d46befcb876 и aecfbdcd70800d70.

  1. Установите NBD-клиент из пакетов дистрибутива:

    apt install nbd-client
  2. Загрузите модуль ядра nbd.ko:

    modprobe nbd
  3. Запустите сервер через loopback:

    nbd_server --use-tcp 1 --log-to-file 0
  4. Подключитесь к томам:

    nbd-client --nonetlink --name=99c84d46befcb876 127.0.0.1 /dev/nbd0
    nbd-client --no-optgo --nonetlink --name=aecfbdcd70800d70:LEASE_EXCLUSIVE 127.0.0.1 /dev/nbd1

    Где:

    • nonetlink — опция означает, что пользователь не будет использовать интерфейс netlink вместо стандартного ioctl;

    • no-optgo— опция запрещает пользователю использовать NBD_OPT_GO протокола NBD для фазы установления соединения.

  5. В случае успеха клиент выведет размер подключенного тома:

    Negotiation: ..size = 16384MB
    bs=512, sz=17179869184 bytes

Теперь с подключенными устройствами можно работать как с обычными блочными. Например, создать на них разделы и файловую систему или запустить Fio:

fio --filename=/dev/nbd0 --direct=1 --rw=randrw --bs=64k --ioengine=libaio --iodepth=8 --runtime=120 --numjobs=1 --time_based --group_reporting --name=throughput-test-job --eta-newline=1

Устройство можно отключить от сервера командой nbd-client -d /dev/nbd0.

Получение информации по томам

Для получения списка подключенных томов воспользуйтесь стандартным NBD-клиентом. Пример TCP-сессии:

nbd-client --nonetlink -l 127.0.0.1

Стандартный клиент не поддерживает информационные опции. Для получения более подробной информации установите утилиту nbdinfo командой apt install libnbd-bin.

Аналогичный nbd-client запрос в nbdinfo:

$ nbdinfo nbd://localhost --list
protocol: newstyle-fixed without TLS, using simple packets
export="0x99c84d46befcb876":
export-size: 17179869184 (16G)
uri: nbd://localhost:10809/0x99c84d46befcb876
is_rotational: false
is_read_only: false
can_cache: false
can_df: false
can_fast_zero: false
can_flush: true
can_fua: false
can_multi_conn: false
can_trim: true
can_zero: false
block_size_minimum: 4096
block_size_preferred: 4096
block_size_maximum: 1048576
export="0xaecfbdcd70800d70":
export-size: 17179869184 (16G)
uri: nbd://localhost:10809/0xaecfbdcd70800d70
is_rotational: false
is_read_only: false
can_cache: false
can_df: false
can_fast_zero: false
can_flush: true
can_fua: false
can_multi_conn: false
can_trim: true
can_zero: false
block_size_minimum: 4096
block_size_preferred: 4096
block_size_maximum: 1048576

При необходимости можно получить более подробную информацию по отдельному тому:

nbdinfo nbd://localhost/99c84d46befcb876
protocol: newstyle-fixed without TLS, using simple packets export="0x99c84d46befcb876":
description: 0:0x99c84d46befcb876:LEASE_SHARED_RW:1
export-size: 17179869184 (16G)
content: data
uri: nbd://localhost:10809/99c84d46befcb876
is_rotational: false
is_read_only: false
can_cache: false
can_df: false
can_fast_zero: false
can_flush: true
can_fua: false
can_multi_conn: false
can_trim: true
can_zero: false
block_size_minimum: 4096
block_size_preferred: 4096
block_size_maximum: 1048576

Запуск NBD-сервиса и включение автозапуска

Параметры запуска считываются из конфигурационных файлов /etc/storage/nbdd/nbd.conf и /etc/storage/nbdd/seastar.conf.

Запуск сервиса и включение автозапуска:

systemctl start storage-nbdd.service
systemctl enable storage-nbdd.service

Остановка сервиса:

systemctl stop storage-nbdd.service

Проверка состояния сервиса:

systemctl is-active storage-nbdd.service