Important fixes (except the new store):
- Fixed a possible use-after-free in the OSD during error handling of initial
commit/rollback of objects in EC pools.
- Fixed a possible free of an invalid pointer in the OSD during read errors
from snapshot/clone chains in EC pools.
- Fixed possibly incorrect handling of commit/rollback operations in EC pools
during pool PG count changes.
- Fixed the inverted fsync enable parameter in the ublk driver (fsync was not
enabled on pools without immediate_commit).
- Added the raw-ls command for debugging purposes to find object versions in
the cluster using listing operations.
New store fixes:
- Improved startup speed by using LSN-based sorting only for objects with a
large number of intermediate versions.
- Added skip_double_claim option as a temporary workaround to fix the rare OSD
startup error with the "double claimed block" message, observed by several
users. This option does not affect data integrity.
- Fixed incorrect rechecking of small writes during startup, which in theory
could lead to duplicate small write object entries on the OSD.
- Fixed fsync operation for disks with a writeback cache (without capacitors):
- Fixed incorrect semantics of consecutive fsyncs (next fsync was not blocked
by the previous one).
- Added fsync when copying small writes from the buffer to the data device
(somehow forgotten during initial development).
- Added fsync after the initial garbage collection during OSD startup.
- Fixed incorrect cast of LSN from uint64 to uint32, breaking fsync when
reaching LSN 2^32.
- Added missing verification of the metadata header checksum during startup.
- Fixed incorrect updating of object checksums in perfect_csum_update=true mode.
- Fixed a possible OSD crash with "assertion failed" when processing a malformed
EC STABILIZE operation.
- Fixed the accounting of active compactor coroutines.
- Removed broken and untested new->old store conversion support.
Minor issues fixed:
- Incorrect accounting of OSD local operation statistics in replicated pools.
- Missing non-zero exitcodes on vitastor-disk resize command errors.
- Missing reset of the list of inconsistent objects during PG restarts.
- Theoretically possible hangs of various OSD operations when working with
completely corrupted objects (without a single available copy), and possibly
in some other very rare situations.
- Incorrect fsyncs when deleting objects from pools without immediate_commit
(on disks with a writeback cache), which previously could leave garbage when
deleting misplaced objects.
- Possible crash/memory corruption of the NFS server during a targeted attack
on NFS-RDMA.
- Possibly incorrect handling of ENOSPC/EIO write errors in replicated pools,
leading to inability to retry the write later.
- Possible crash instead of a clean error exit when starting an OSD with the
old storage engine on a disk with corrupted journal data.
- Shallow copying of PG configuration in the monitor, however, not related to
actual bugs.
- Incorrect checking of allocated blocks in the QEMU driver in an unused code
branch (without the BDRV_WANT_ZERO flag).
- Possible memory leak on read errors of corrupted objects.
- Possible incorrect PG states when corrupted objects are detected.
- Possible failure to mark all "bad" copies of an object during scrubs without
checksums and with a large number of replicas (> 4).
- Incorrect checksum calculation in the old storage engine when
bitmap_granularity < 4096 (a practically unused configuration).
- Theoretically possible OSD crash in rare cases during a scrub and simultaneous
object recovery.
- Theoretically possible OSD crash when handling PING operation errors.
- Slightly suboptimal logic for reusing the RDMA send buffer.
- Possible memory leak when canceling an already running scrub via no_scrub.
- Possible memory corruption when a client (e.g., QEMU code) passes invalid
buffers and the writeback cache is enabled.
- Potentially incorrect search for corrupted parts of EC objects (inability
to find a "good" combination) during a scrub with checksums disabled.
- Possible additional memory usage on the OSD side when handling failed reads
from snapshots (not a leak however - the memory was freed upon client
disconnection).
- Potential sudden write slowdown at certain pg epoch values due to incorrect
epoch update logic in etcd.
86 lines
4.4 KiB
Markdown
86 lines
4.4 KiB
Markdown
[Документация](../../README-ru.md#документация) → Установка → Установка в Docker
|
|
|
|
-----
|
|
|
|
[Read in English](docker.en.md)
|
|
|
|
# Установка в Docker
|
|
|
|
Vitastor можно установить в Docker/Podman. При этом etcd, мониторы и OSD запускаются
|
|
в контейнерах, но всё остальное выглядит максимально приближенно к установке из пакетов:
|
|
- используется сеть хост-системы
|
|
- для автозапуска используются udev и systemd
|
|
- журналы записываются в journald (не в json-файлы журналов docker)
|
|
- в хост-систему устанавливаются обёртки для вызова консольных инструментов vitastor-disk,
|
|
vitastor-cli и других через контейнер
|
|
|
|
Такая установка полезна тогда, когда установка из пакетов невозможна или неудобна,
|
|
например, в нестандартных Linux-дистрибутивах.
|
|
|
|
Если вам нужна не просто контейнеризованная инсталляция, вы также можете обратить внимание
|
|
на Vitastor Kubernetes-оператор: https://github.com/Antilles7227/vitastor-operator
|
|
|
|
## Установка контейнеров
|
|
|
|
Инструкция по установке максимально простая.
|
|
|
|
1. Скачайте Docker-образ желаемой версии: \
|
|
`docker pull vitalif/vitastor:v3.0.12`
|
|
2. Установите скрипты в хост-систему командой: \
|
|
`docker run --rm -it -v /etc:/host-etc -v /usr/bin:/host-bin vitalif/vitastor:v3.0.12 install.sh`
|
|
3. Перезагрузите правила udev: \
|
|
`udevadm control --reload-rules`
|
|
4. Включите сервис vitastor-host: \
|
|
`systemctl enable --now vitastor-host`
|
|
|
|
После этого вы можете возвращаться к разделу [Быстрый старт](../intro/quickstart.ru.md).
|
|
|
|
## Podman
|
|
|
|
Если вы используете Podman, перед установкой контейнеров Vitastor выполните следующие
|
|
команды от имени суперпользователя:
|
|
|
|
```
|
|
ln -s podman /usr/bin/docker
|
|
|
|
mkdir -p /etc/systemd/system/systemd-udevd.service.d
|
|
|
|
cat >/etc/systemd/system/systemd-udevd.service.d/override.conf <<EOF
|
|
[Service]
|
|
CapabilityBoundingSet=~
|
|
SystemCallFilter=@mount capset
|
|
EOF
|
|
|
|
systemctl daemon-reload
|
|
|
|
systemctl restart systemd-udevd
|
|
```
|
|
|
|
Без этих настроек udev не может делать вызовы внутрь Podman-контейнеров и определение дисков Vitastor не работает.
|
|
|
|
## Обновление контейнеров
|
|
|
|
Сначала обязательно проверьте раздел [Обновление Vitastor](../usage/admin.ru.md#обновление-vitastor),
|
|
чтобы понять, не требуются ли вам какие-то дополнительные действия.
|
|
|
|
После этого для обновления Docker-инсталляции вам нужно просто поменять опцию `VITASTOR_VERSION`
|
|
в файле `/etc/vitastor/docker.conf` и перезапустить все сервисы Vitastor командой:
|
|
|
|
`systemctl restart vitastor.target`
|
|
|
|
## QEMU
|
|
|
|
В Docker-образ также входят QEMU, qemu-img и qemu-storage-daemon, собранные с поддержкой Vitastor.
|
|
|
|
Однако настроить запуск QEMU в Docker сложнее и способ запуска зависит от используемого интерфейса
|
|
виртуализации (OpenNebula, Proxmox и т.п.). Также для OpenNebula, например, требуется патченый
|
|
Libvirt.
|
|
|
|
Поэтому по умолчанию Docker-сборка пока что не включает в себя готового способа запуска QEMU
|
|
и QEMU рекомендуется устанавливать из пакетов или собирать самостоятельно.
|
|
|
|
## fio
|
|
|
|
fio также входит в Docker-контейнер vitastor, и в хост-систему устанавливается обёртка `vitastor-fio`
|
|
для запуска fio в контейнер.
|