Add documentation for VitastorFS
parent
88516ab4bd
commit
e75dcc9a71
|
@ -6,8 +6,8 @@
|
||||||
|
|
||||||
Вернём былую скорость кластерному блочному хранилищу!
|
Вернём былую скорость кластерному блочному хранилищу!
|
||||||
|
|
||||||
Vitastor - распределённая блочная SDS (программная СХД), прямой аналог Ceph RBD и
|
Vitastor - распределённая блочная и файловая SDS (программная СХД), прямой аналог Ceph RBD и CephFS,
|
||||||
внутренних СХД популярных облачных провайдеров. Однако, в отличие от них, Vitastor
|
а также внутренних СХД популярных облачных провайдеров. Однако, в отличие от них, Vitastor
|
||||||
быстрый и при этом простой. Только пока маленький :-).
|
быстрый и при этом простой. Только пока маленький :-).
|
||||||
|
|
||||||
Vitastor архитектурно похож на Ceph, что означает атомарность и строгую консистентность,
|
Vitastor архитектурно похож на Ceph, что означает атомарность и строгую консистентность,
|
||||||
|
@ -63,7 +63,7 @@ Vitastor поддерживает QEMU-драйвер, протоколы NBD и
|
||||||
- [fio](docs/usage/fio.ru.md) для тестов производительности
|
- [fio](docs/usage/fio.ru.md) для тестов производительности
|
||||||
- [NBD](docs/usage/nbd.ru.md) для монтирования ядром
|
- [NBD](docs/usage/nbd.ru.md) для монтирования ядром
|
||||||
- [QEMU и qemu-img](docs/usage/qemu.ru.md)
|
- [QEMU и qemu-img](docs/usage/qemu.ru.md)
|
||||||
- [NFS](docs/usage/nfs.ru.md)-прокси для VMWare и подобных
|
- [NFS](docs/usage/nfs.ru.md) кластерная файловая система и псевдо-ФС прокси
|
||||||
- Производительность
|
- Производительность
|
||||||
- [Понимание сути производительности](docs/performance/understanding.ru.md)
|
- [Понимание сути производительности](docs/performance/understanding.ru.md)
|
||||||
- [Теоретический максимум](docs/performance/theoretical.ru.md)
|
- [Теоретический максимум](docs/performance/theoretical.ru.md)
|
||||||
|
|
|
@ -6,9 +6,9 @@
|
||||||
|
|
||||||
Make Clustered Block Storage Fast Again.
|
Make Clustered Block Storage Fast Again.
|
||||||
|
|
||||||
Vitastor is a distributed block SDS, direct replacement of Ceph RBD and internal SDS's
|
Vitastor is a distributed block and file SDS, direct replacement of Ceph RBD and CephFS,
|
||||||
of public clouds. However, in contrast to them, Vitastor is fast and simple at the same time.
|
and also internal SDS's of public clouds. However, in contrast to them, Vitastor is fast
|
||||||
The only thing is it's slightly young :-).
|
and simple at the same time. The only thing is it's slightly young :-).
|
||||||
|
|
||||||
Vitastor is architecturally similar to Ceph which means strong consistency,
|
Vitastor is architecturally similar to Ceph which means strong consistency,
|
||||||
primary-replication, symmetric clustering and automatic data distribution over any
|
primary-replication, symmetric clustering and automatic data distribution over any
|
||||||
|
@ -63,7 +63,7 @@ Read more details below in the documentation.
|
||||||
- [fio](docs/usage/fio.en.md) for benchmarks
|
- [fio](docs/usage/fio.en.md) for benchmarks
|
||||||
- [NBD](docs/usage/nbd.en.md) for kernel mounts
|
- [NBD](docs/usage/nbd.en.md) for kernel mounts
|
||||||
- [QEMU and qemu-img](docs/usage/qemu.en.md)
|
- [QEMU and qemu-img](docs/usage/qemu.en.md)
|
||||||
- [NFS](docs/usage/nfs.en.md) emulator for VMWare and similar
|
- [NFS](docs/usage/nfs.en.md) clustered file system and pseudo-FS proxy
|
||||||
- Performance
|
- Performance
|
||||||
- [Understanding storage performance](docs/performance/understanding.en.md)
|
- [Understanding storage performance](docs/performance/understanding.en.md)
|
||||||
- [Theoretical performance](docs/performance/theoretical.en.md)
|
- [Theoretical performance](docs/performance/theoretical.en.md)
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
|
|
||||||
- Basic part: highly-available block storage with symmetric clustering and no SPOF
|
- Basic part: highly-available block storage with symmetric clustering and no SPOF
|
||||||
- [Performance](../performance/comparison1.en.md) ;-D
|
- [Performance](../performance/comparison1.en.md) ;-D
|
||||||
|
- [Cluster file system](../usage/nfs.en.md#vitastorfs)
|
||||||
- [Multiple redundancy schemes](../config/pool.en.md#scheme): Replication, XOR n+1, Reed-Solomon erasure codes
|
- [Multiple redundancy schemes](../config/pool.en.md#scheme): Replication, XOR n+1, Reed-Solomon erasure codes
|
||||||
based on jerasure and ISA-L libraries with any number of data and parity drives in a group
|
based on jerasure and ISA-L libraries with any number of data and parity drives in a group
|
||||||
- Configuration via simple JSON data structures in etcd (parameters, pools and images)
|
- Configuration via simple JSON data structures in etcd (parameters, pools and images)
|
||||||
|
@ -46,13 +47,12 @@
|
||||||
- [CSI plugin for Kubernetes](../installation/kubernetes.en.md)
|
- [CSI plugin for Kubernetes](../installation/kubernetes.en.md)
|
||||||
- [OpenStack support: Cinder driver, Nova and libvirt patches](../installation/openstack.en.md)
|
- [OpenStack support: Cinder driver, Nova and libvirt patches](../installation/openstack.en.md)
|
||||||
- [Proxmox storage plugin and packages](../installation/proxmox.en.md)
|
- [Proxmox storage plugin and packages](../installation/proxmox.en.md)
|
||||||
- [Simplified NFS proxy for file-based image access emulation (suitable for VMWare)](../usage/nfs.en.md)
|
- [Simplified NFS proxy for file-based image access emulation (suitable for VMWare)](../usage/nfs.en.md#pseudo-fs)
|
||||||
|
|
||||||
## Roadmap
|
## Roadmap
|
||||||
|
|
||||||
The following features are planned for the future:
|
The following features are planned for the future:
|
||||||
|
|
||||||
- File system
|
|
||||||
- Control plane optimisation
|
- Control plane optimisation
|
||||||
- Other administrative tools
|
- Other administrative tools
|
||||||
- Web GUI
|
- Web GUI
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
|
|
||||||
- Базовая часть - надёжное кластерное блочное хранилище без единой точки отказа
|
- Базовая часть - надёжное кластерное блочное хранилище без единой точки отказа
|
||||||
- [Производительность](../performance/comparison1.ru.md) ;-D
|
- [Производительность](../performance/comparison1.ru.md) ;-D
|
||||||
|
- [Кластерная файловая система](../usage/nfs.ru.md#vitastorfs)
|
||||||
- [Несколько схем отказоустойчивости](../config/pool.ru.md#scheme): репликация, XOR n+1 (1 диск чётности), коды коррекции ошибок
|
- [Несколько схем отказоустойчивости](../config/pool.ru.md#scheme): репликация, XOR n+1 (1 диск чётности), коды коррекции ошибок
|
||||||
Рида-Соломона на основе библиотек jerasure и ISA-L с любым числом дисков данных и чётности в группе
|
Рида-Соломона на основе библиотек jerasure и ISA-L с любым числом дисков данных и чётности в группе
|
||||||
- Конфигурация через простые человекочитаемые JSON-структуры в etcd
|
- Конфигурация через простые человекочитаемые JSON-структуры в etcd
|
||||||
|
@ -48,11 +49,10 @@
|
||||||
- [CSI-плагин для Kubernetes](../installation/kubernetes.ru.md)
|
- [CSI-плагин для Kubernetes](../installation/kubernetes.ru.md)
|
||||||
- [Базовая поддержка OpenStack: драйвер Cinder, патчи для Nova и libvirt](../installation/openstack.ru.md)
|
- [Базовая поддержка OpenStack: драйвер Cinder, патчи для Nova и libvirt](../installation/openstack.ru.md)
|
||||||
- [Плагин для Proxmox](../installation/proxmox.ru.md)
|
- [Плагин для Proxmox](../installation/proxmox.ru.md)
|
||||||
- [Упрощённая NFS-прокси для эмуляции файлового доступа к образам (подходит для VMWare)](../usage/nfs.ru.md)
|
- [Упрощённая NFS-прокси для эмуляции файлового доступа к образам (подходит для VMWare)](../usage/nfs.ru.md#псевдо-фс)
|
||||||
|
|
||||||
## Планы развития
|
## Планы развития
|
||||||
|
|
||||||
- Файловая система
|
|
||||||
- Оптимизация слоя управления
|
- Оптимизация слоя управления
|
||||||
- Другие инструменты администрирования
|
- Другие инструменты администрирования
|
||||||
- Web-интерфейс
|
- Web-интерфейс
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
- [Check cluster status](#check-cluster-status)
|
- [Check cluster status](#check-cluster-status)
|
||||||
- [Create an image](#create-an-image)
|
- [Create an image](#create-an-image)
|
||||||
- [Install plugins](#install-plugins)
|
- [Install plugins](#install-plugins)
|
||||||
|
- [Create VitastorFS](#create-vitastorfs)
|
||||||
|
|
||||||
## Preparation
|
## Preparation
|
||||||
|
|
||||||
|
@ -114,3 +115,9 @@ After that, you can [run benchmarks](../usage/fio.en.md) or [start QEMU manually
|
||||||
- [Proxmox](../installation/proxmox.en.md)
|
- [Proxmox](../installation/proxmox.en.md)
|
||||||
- [OpenStack](../installation/openstack.en.md)
|
- [OpenStack](../installation/openstack.en.md)
|
||||||
- [Kubernetes CSI](../installation/kubernetes.en.md)
|
- [Kubernetes CSI](../installation/kubernetes.en.md)
|
||||||
|
|
||||||
|
## Create VitastorFS
|
||||||
|
|
||||||
|
If you want to use clustered file system in addition to VM or container images:
|
||||||
|
|
||||||
|
- [Follow the instructions here](../usage/nfs.en.md#vitastorfs)
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
- [Проверьте состояние кластера](#проверьте-состояние-кластера)
|
- [Проверьте состояние кластера](#проверьте-состояние-кластера)
|
||||||
- [Создайте образ](#создайте-образ)
|
- [Создайте образ](#создайте-образ)
|
||||||
- [Установите плагины](#установите-плагины)
|
- [Установите плагины](#установите-плагины)
|
||||||
|
- [Создайте VitastorFS](#создайте-vitastorfs)
|
||||||
|
|
||||||
## Подготовка
|
## Подготовка
|
||||||
|
|
||||||
|
@ -116,3 +117,10 @@ vitastor-cli create -s 10G testimg
|
||||||
- [Proxmox](../installation/proxmox.ru.md)
|
- [Proxmox](../installation/proxmox.ru.md)
|
||||||
- [OpenStack](../installation/openstack.ru.md)
|
- [OpenStack](../installation/openstack.ru.md)
|
||||||
- [Kubernetes CSI](../installation/kubernetes.ru.md)
|
- [Kubernetes CSI](../installation/kubernetes.ru.md)
|
||||||
|
|
||||||
|
## Создайте VitastorFS
|
||||||
|
|
||||||
|
Если вы хотите использовать не только блочные образы виртуальных машин или контейнеров,
|
||||||
|
а также кластерную файловую систему, то:
|
||||||
|
|
||||||
|
- [Следуйте инструкциям](../usage/nfs.en.md#vitastorfs)
|
||||||
|
|
|
@ -4,42 +4,146 @@
|
||||||
|
|
||||||
[Читать на русском](nfs.ru.md)
|
[Читать на русском](nfs.ru.md)
|
||||||
|
|
||||||
# NFS
|
# VitastorFS and pseudo-FS
|
||||||
|
|
||||||
Vitastor has a simplified NFS 3.0 proxy for file-based image access emulation. It's not
|
Vitastor has two file system implementations. Both can be used via `vitastor-nfs`.
|
||||||
suitable as a full-featured file system, at least because all file/image metadata is stored
|
|
||||||
in etcd and kept in memory all the time - thus you can't put a lot of files in it.
|
|
||||||
|
|
||||||
However, NFS proxy is totally fine as a method to provide VM image access and allows to
|
Commands:
|
||||||
plug Vitastor into, for example, VMWare. It's important to note that for VMWare it's a much
|
- [mount](#mount)
|
||||||
better access method than iSCSI, because with iSCSI we'd have to put all VM images into one
|
- [start](#start)
|
||||||
Vitastor image exported as a LUN to VMWare and formatted with VMFS. VMWare doesn't use VMFS
|
|
||||||
over NFS.
|
|
||||||
|
|
||||||
NFS proxy is stateless if you use immediate_commit=all mode (for SSD with capacitors or
|
## Pseudo-FS
|
||||||
HDDs with disabled cache), so you can run multiple NFS proxies and use a network load
|
|
||||||
balancer or any failover method you want to in that case.
|
|
||||||
|
|
||||||
vitastor-nfs usage:
|
Simplified pseudo-FS proxy is used for file-based image access emulation. It's not
|
||||||
|
suitable as a full-featured file system: it lacks a lot of FS features, it stores
|
||||||
|
all file/image metadata in memory and in etcd. So it's fine for hundreds or thousands
|
||||||
|
of large files/images, but not for millions.
|
||||||
|
|
||||||
|
Pseudo-FS proxy is intended for environments where other block volume access methods
|
||||||
|
can't be used or impose additional restrictions - for example, VMWare. NFS is better
|
||||||
|
for VMWare than, for example, iSCSI, because with iSCSI, VMWare puts all VM images
|
||||||
|
into one large shared block image in its own VMFS file system, and with NFS, VMWare
|
||||||
|
doesn't use VMFS and puts each VM disk in a regular file which is equal to one
|
||||||
|
Vitastor block image, just as originally intended.
|
||||||
|
|
||||||
|
To use Vitastor pseudo-FS locally, run `vitastor-nfs mount --block /mnt/vita`.
|
||||||
|
|
||||||
|
Also you can start the network server:
|
||||||
|
|
||||||
```
|
```
|
||||||
vitastor-nfs [STANDARD OPTIONS] [OTHER OPTIONS]
|
vitastor-nfs start --block --etcd_address 192.168.5.10:2379 --portmap 0 --port 2050 --pool testpool
|
||||||
|
|
||||||
--subdir <DIR> export images prefixed <DIR>/ (default empty - export all images)
|
|
||||||
--portmap 0 do not listen on port 111 (portmap/rpcbind, requires root)
|
|
||||||
--bind <IP> bind service to <IP> address (default 0.0.0.0)
|
|
||||||
--nfspath <PATH> set NFS export path to <PATH> (default is /)
|
|
||||||
--port <PORT> use port <PORT> for NFS services (default is 2049)
|
|
||||||
--pool <POOL> use <POOL> as default pool for new files (images)
|
|
||||||
--foreground 1 stay in foreground, do not daemonize
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Example start and mount commands (etcd_address is optional):
|
To mount the FS exported by this server, run:
|
||||||
|
|
||||||
```
|
```
|
||||||
vitastor-nfs --etcd_address 192.168.5.10:2379 --portmap 0 --port 2050 --pool testpool
|
mount server:/ /mnt/ -o port=2050,mountport=2050,nfsvers=3,soft,nolock,tcp
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
## VitastorFS
|
||||||
mount localhost:/ /mnt/ -o port=2050,mountport=2050,nfsvers=3,soft,nolock,tcp
|
|
||||||
```
|
VitastorFS is a full-featured clustered (Read-Write-Many) file system. It supports most POSIX
|
||||||
|
features like hierarchical organization, symbolic links, hard links, quick renames and so on.
|
||||||
|
|
||||||
|
VitastorFS metadata is stored in a Parallel Optimistic B-Tree key-value database,
|
||||||
|
implemented over a regular Vitastor block volume. Directory entries and inodes
|
||||||
|
are stored in a simple human-readable JSON format in the B-Tree. `vitastor-kv` tool
|
||||||
|
can be used to inspect the database.
|
||||||
|
|
||||||
|
To use VitastorFS:
|
||||||
|
|
||||||
|
1. Create a pool or choose an existing empty pool for FS data
|
||||||
|
2. Create an image for FS metadata, preferably in a faster (SSD or replica-HDD) pool,
|
||||||
|
but you can create it in the data pool too if you want (image size doesn't matter):
|
||||||
|
`vitastor-cli create -s 10G -p fastpool testfs`
|
||||||
|
3. Mark data pool as an FS pool: `vitastor-cli modify-pool --used-for-fs testfs data-pool`
|
||||||
|
4. Either mount the FS: `vitastor-nfs mount --fs testfs --pool data-pool /mnt/vita`
|
||||||
|
5. Or start the NFS server: `vitastor-nfs start --fs testfs --pool data-pool`
|
||||||
|
|
||||||
|
### Supported POSIX features
|
||||||
|
|
||||||
|
- Read-after-write semantics (read returns new data immediately after write)
|
||||||
|
- Linear and random read and write
|
||||||
|
- Writing outside current file size
|
||||||
|
- Hierarchical structure, immediate rename of files and directories
|
||||||
|
- File size change support (truncate)
|
||||||
|
- Permissions (chmod/chown)
|
||||||
|
- Flushing data to stable storage (if required) (fsync)
|
||||||
|
- Symbolic links
|
||||||
|
- Hard links
|
||||||
|
- Special files (devices, sockets, named pipes)
|
||||||
|
- File modification and attribute change time tracking (mtime and ctime)
|
||||||
|
- Modification time (mtime) and last access time (atime) change support (utimes)
|
||||||
|
- Correct handling of directory listing during file creation/deletion
|
||||||
|
|
||||||
|
### Limitations
|
||||||
|
|
||||||
|
POSIX features currently not implemented in VitastorFS:
|
||||||
|
- File locking is not supported
|
||||||
|
- Actually used space is not counted, so `du` always reports apparent file sizes
|
||||||
|
instead of actually allocated space
|
||||||
|
- Access times (`atime`) are not tracked (like `-o noatime`)
|
||||||
|
- Modification time (`mtime`) is updated lazily every second (like `-o lazytime`)
|
||||||
|
|
||||||
|
Other notable missing features which should be addressed in the future:
|
||||||
|
- Defragmentation of "shared" inodes. Files smaller than pool object size (block_size
|
||||||
|
multiplied by data part count if pool is EC) are internally stored in large block
|
||||||
|
volumes sequentially, one after another, and leave garbage after deleting or resizing.
|
||||||
|
Defragmentator will be implemented to collect this garbage.
|
||||||
|
- Inode ID reuse. Currently inode IDs always grow, the limit is 2^48 inodes, so
|
||||||
|
in theory you may hit it if you create and delete a very large number of files
|
||||||
|
- Compaction of the key-value B-Tree. Current implementation never merges or deletes
|
||||||
|
B-Tree blocks, so B-Tree may become bloated over time. Currently you can
|
||||||
|
use `vitastor-kv dumpjson` & `loadjson` commands to recreate the index in such
|
||||||
|
situations.
|
||||||
|
- Filesystem check tool. VitastorFS doesn't have journal because it would impose a
|
||||||
|
severe performance hit, optimistic CAS-based transactions are used instead of it.
|
||||||
|
So, again, in theory an abnormal shutdown of the FS server may leave some garbage
|
||||||
|
in the DB. The FS is implemented is such way that this garbage doesn't affect its
|
||||||
|
function, but having a tool to clean it up still seems a right thing to do.
|
||||||
|
|
||||||
|
## Horizontal scaling
|
||||||
|
|
||||||
|
Linux NFS 3.0 client doesn't support built-in scaling or failover, i.e. you can't
|
||||||
|
specify multiple server addresses when mounting the FS.
|
||||||
|
|
||||||
|
However, you can use any regular TCP load balancing over multiple NFS servers.
|
||||||
|
It's absolutely safe with `immediate_commit=all` and `client_enable_writeback=false`
|
||||||
|
settings, because Vitastor NFS proxy doesn't keep uncommitted data in memory
|
||||||
|
with these settings. But it may even work without `immediate_commit=all` because
|
||||||
|
the Linux NFS client repeats all uncommitted writes if it loses the connection.
|
||||||
|
|
||||||
|
## Commands
|
||||||
|
|
||||||
|
### mount
|
||||||
|
|
||||||
|
`vitastor-nfs (--fs <NAME> | --block) [-o <OPT>] mount <MOUNTPOINT>`
|
||||||
|
|
||||||
|
Start local filesystem server and mount file system to <MOUNTPOINT>.
|
||||||
|
|
||||||
|
Use regular `umount <MOUNTPOINT>` to unmount the FS.
|
||||||
|
|
||||||
|
The server will be automatically stopped when the FS is unmounted.
|
||||||
|
|
||||||
|
| `-o|--options <OPT>` | Pass additional NFS mount options (ex.: -o async). |
|
||||||
|
|
||||||
|
### start
|
||||||
|
|
||||||
|
`vitastor-nfs (--fs <NAME> | --block) start`
|
||||||
|
|
||||||
|
Start network NFS server. Options:
|
||||||
|
|
||||||
|
| `--bind <IP>` | bind service to <IP> address (default 0.0.0.0) |
|
||||||
|
| `--port <PORT>` | use port <PORT> for NFS services (default is 2049) |
|
||||||
|
| `--portmap 0` | do not listen on port 111 (portmap/rpcbind, requires root) |
|
||||||
|
|
||||||
|
## Common options
|
||||||
|
|
||||||
|
| `--fs <NAME>` | use VitastorFS with metadata in image <NAME> |
|
||||||
|
| `--block` | use pseudo-FS presenting images as files |
|
||||||
|
| `--pool <POOL>` | use <POOL> as default pool for new files |
|
||||||
|
| `--subdir <DIR>` | export <DIR> instead of root directory |
|
||||||
|
| `--nfspath <PATH>` | set NFS export path to <PATH> (default is /) |
|
||||||
|
| `--pidfile <FILE>` | write process ID to the specified file |
|
||||||
|
| `--logfile <FILE>` | log to the specified file |
|
||||||
|
| `--foreground 1` | stay in foreground, do not daemonize |
|
||||||
|
|
|
@ -4,41 +4,152 @@
|
||||||
|
|
||||||
[Read in English](nfs.en.md)
|
[Read in English](nfs.en.md)
|
||||||
|
|
||||||
# NFS
|
# VitastorFS и псевдо-ФС
|
||||||
|
|
||||||
В Vitastor реализована упрощённая NFS 3.0 прокси для эмуляции файлового доступа к образам.
|
В Vitastor есть две реализации файловой системы. Обе используются через `vitastor-nfs`.
|
||||||
Это не полноценная файловая система, т.к. метаданные всех файлов (образов) сохраняются
|
|
||||||
в etcd и всё время хранятся в оперативной памяти - то есть, положить туда много файлов
|
|
||||||
не получится.
|
|
||||||
|
|
||||||
Однако в качестве способа доступа к образам виртуальных машин NFS прокси прекрасно подходит
|
Команды:
|
||||||
и позволяет подключить Vitastor, например, к VMWare.
|
- [mount](#mount)
|
||||||
|
- [start](#start)
|
||||||
|
|
||||||
При этом, если вы используете режим immediate_commit=all (для SSD с конденсаторами или HDD
|
## Псевдо-ФС
|
||||||
с отключённым кэшем), то NFS-сервер не имеет состояния и вы можете свободно поднять
|
|
||||||
его в нескольких экземплярах и использовать поверх них сетевой балансировщик нагрузки или
|
|
||||||
схему с отказоустойчивостью.
|
|
||||||
|
|
||||||
Использование vitastor-nfs:
|
Упрощённая реализация псевдо-ФС используется для эмуляции файлового доступа к блочным
|
||||||
|
образам Vitastor. Это не полноценная файловая система - в ней отсутствуют многие функции
|
||||||
|
POSIX ФС, а метаданные всех файлов (образов) сохраняются в etcd и всё время хранятся в
|
||||||
|
оперативной памяти - то есть, псевдо-ФС подходит для сотен или тысяч файлов, но не миллионов.
|
||||||
|
|
||||||
|
Псевдо-ФС предназначена для доступа к образам виртуальных машин в средах, где другие
|
||||||
|
способы невозможны или неудобны - например, в VMWare. Для VMWare это лучшая опция, чем
|
||||||
|
iSCSI, так как при использовании iSCSI VMWare размещает все виртуальные машины в одном
|
||||||
|
большом блочном образе внутри собственной ФС VMFS, а с NFS VMFS не используется и каждый
|
||||||
|
диск ВМ представляется в виде одного файла, то есть, соответствует одному блочному образу
|
||||||
|
Vitastor, как это и задумано изначально.
|
||||||
|
|
||||||
|
Чтобы подключить псевдо-ФС Vitastor, выполните команду `vitastor-nfs mount --block /mnt/vita`.
|
||||||
|
|
||||||
|
Либо же запустите сетевой вариант сервера:
|
||||||
|
|
||||||
```
|
```
|
||||||
vitastor-nfs [СТАНДАРТНЫЕ ОПЦИИ] [ДРУГИЕ ОПЦИИ]
|
vitastor-nfs start --block --etcd_address 192.168.5.10:2379 --portmap 0 --port 2050 --pool testpool
|
||||||
|
|
||||||
--subdir <DIR> экспортировать "поддиректорию" - образы с префиксом имени <DIR>/ (по умолчанию пусто - экспортировать все образы)
|
|
||||||
--portmap 0 отключить сервис portmap/rpcbind на порту 111 (по умолчанию включён и требует root привилегий)
|
|
||||||
--bind <IP> принимать соединения по адресу <IP> (по умолчанию 0.0.0.0 - на всех)
|
|
||||||
--nfspath <PATH> установить путь NFS-экспорта в <PATH> (по умолчанию /)
|
|
||||||
--port <PORT> использовать порт <PORT> для NFS-сервисов (по умолчанию 2049)
|
|
||||||
--pool <POOL> использовать пул <POOL> для новых образов (обязательно, если пул в кластере не один)
|
|
||||||
--foreground 1 не уходить в фон после запуска
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Пример монтирования Vitastor через NFS (etcd_address необязателен):
|
Примонтировать ФС, запущенную с такими опциями, можно следующей командой:
|
||||||
|
|
||||||
```
|
```
|
||||||
vitastor-nfs --etcd_address 192.168.5.10:2379 --portmap 0 --port 2050 --pool testpool
|
mount server:/ /mnt/ -o port=2050,mountport=2050,nfsvers=3,soft,nolock,tcp
|
||||||
```
|
```
|
||||||
|
|
||||||
```
|
## VitastorFS
|
||||||
mount localhost:/ /mnt/ -o port=2050,mountport=2050,nfsvers=3,soft,nolock,tcp
|
|
||||||
```
|
VitastorFS - полноценная кластерная (Read-Write-Many) файловая система. Она поддерживает
|
||||||
|
большую часть функций POSIX - иерархическую организацию, символические ссылки, жёсткие
|
||||||
|
ссылки, быстрые переименования и так далее.
|
||||||
|
|
||||||
|
Метаданные VitastorFS хранятся в собственной реализации БД формата ключ-значения,
|
||||||
|
основанной на Параллельном Оптимистичном Б-дереве поверх обычного блочного образа Vitastor.
|
||||||
|
И записи каталогов, и иноды, как обычно в Vitastor, хранятся в простом человекочитаемом
|
||||||
|
JSON-формате :-). Для инспекции содержимого БД можно использовать инструмент `vitastor-kv`.
|
||||||
|
|
||||||
|
Чтобы использовать VitastorFS:
|
||||||
|
|
||||||
|
1. Создайте пул для данных ФС или выберите существующий пустой пул
|
||||||
|
2. Создайте блочный образ для метаданных ФС, желательно, в более быстром пуле (на SSD
|
||||||
|
или по крайней мере на HDD, но без EC), но можно и в том же пуле, что данные
|
||||||
|
(размер образа значения не имеет):
|
||||||
|
`vitastor-cli create -s 10G -p fastpool testfs`
|
||||||
|
3. Пометьте пул данных как ФС-пул: `vitastor-cli modify-pool --used-for-fs testfs data-pool`
|
||||||
|
4. Либо примонтируйте ФС: `vitastor-nfs mount --fs testfs --pool data-pool /mnt/vita`
|
||||||
|
5. Либо запустите сетевой NFS-сервер: `vitastor-nfs start --fs testfs --pool data-pool`
|
||||||
|
|
||||||
|
### Поддерживаемые функции POSIX
|
||||||
|
|
||||||
|
- Чтение актуальной версии данных сразу после записи
|
||||||
|
- Последовательное и произвольное чтение и запись
|
||||||
|
- Запись за пределами текущего размера файла
|
||||||
|
- Иерархическая организация, мгновенное переименование файлов и каталогов
|
||||||
|
- Изменение размера файла (truncate)
|
||||||
|
- Права на файлы (chmod/chown)
|
||||||
|
- Фиксация данных на диски (когда необходимо) (fsync)
|
||||||
|
- Символические ссылки
|
||||||
|
- Жёсткие ссылки
|
||||||
|
- Специальные файлы (устройства, сокеты, каналы)
|
||||||
|
- Отслеживание времён модификации (mtime), изменения атрибутов (ctime)
|
||||||
|
- Ручное изменение времён модификации (mtime), последнего доступа (atime)
|
||||||
|
- Корректная обработка изменений списка файлов во время листинга
|
||||||
|
|
||||||
|
### Ограничения
|
||||||
|
|
||||||
|
Отсутствующие на данный момент в VitastorFS функции POSIX:
|
||||||
|
- Блокировки файлов не поддерживаются
|
||||||
|
- Фактически занятое файлами место не подсчитывается и не возвращается вызовами
|
||||||
|
stat(2), так что `du` всегда показывает сумму размеров файлов, а не фактически занятое место
|
||||||
|
- Времена доступа (`atime`) не отслеживаются (как будто ФС смонтирована с `-o noatime`)
|
||||||
|
- Времена модификации (`mtime`) отслеживаются асинхронно (как будто ФС смонтирована с `-o lazytime`)
|
||||||
|
|
||||||
|
Другие недостающие функции, которые нужно добавить в будущем:
|
||||||
|
- Дефрагментация "общих инодов". На уровне реализации ФС файлы, меньшие, чем размер
|
||||||
|
объекта пула (block_size умножить на число частей данных, если пул EC),
|
||||||
|
упаковываются друг за другом в большие "общие" иноды/тома. Если такие файлы удалять
|
||||||
|
или увеличивать, они перемещаются и оставляют за собой "мусор", вот тут-то и нужен
|
||||||
|
дефрагментатор.
|
||||||
|
- Переиспользование номеров инодов. В текущей реализации номера инодов всё время
|
||||||
|
увеличиваются, так что в теории вы можете упереться в лимит, если насоздаёте
|
||||||
|
и наудаляете больше, чем 2^48 файлов.
|
||||||
|
- Очистка места в Б-дереве метаданных. Текущая реализация никогда не сливает и не
|
||||||
|
удаляет блоки Б-дерева, так что в теории дерево может разростись и стать неоптимальным.
|
||||||
|
Если вы столкнётесь с такой ситуацией сейчас, вы можете решить её с помощью
|
||||||
|
команд `vitastor-kv dumpjson` и `loadjson` (т.е. пересоздав и загрузив обратно все метаданные ФС).
|
||||||
|
- Инструмент проверки метаданных файловой системы. У VitastorFS нет журнала, так как
|
||||||
|
журнал бы сильно замедлил реализацию, вместо него используются оптимистичные
|
||||||
|
транзакции на основе CAS (сравнить-и-записать), и теоретически при нештатном
|
||||||
|
завершении сервера ФС в БД также могут оставаться неконсистентные "мусорные"
|
||||||
|
записи. ФС устроена так, что на работу они не влияют, но для порядка и их стоит
|
||||||
|
уметь подчищать.
|
||||||
|
|
||||||
|
## Горизонтальное масштабирование
|
||||||
|
|
||||||
|
Клиент Linux NFS 3.0 не поддерживает встроенное масштабирование или отказоустойчивость.
|
||||||
|
То есть, вы не можете задать несколько адресов серверов при монтировании ФС.
|
||||||
|
|
||||||
|
Однако вы можете использовать любые стандартные сетевые балансировщики нагрузки
|
||||||
|
или схемы с отказоустойчивостью. Это точно безопасно при настройках `immediate_commit=all` и
|
||||||
|
`client_enable_writeback=false`, так как с ними NFS-сервер Vitastor вообще не хранит
|
||||||
|
в памяти ещё не зафиксированные на дисках данные; и вполне вероятно безопасно
|
||||||
|
даже без `immediate_commit=all`, потому что NFS-клиент ядра Linux повторяет все
|
||||||
|
незафиксированные запросы при потере соединения.
|
||||||
|
|
||||||
|
## Команды
|
||||||
|
|
||||||
|
### mount
|
||||||
|
|
||||||
|
`vitastor-nfs (--fs <NAME> | --block) mount [-o <OPT>] <MOUNTPOINT>`
|
||||||
|
|
||||||
|
Запустить локальный сервер и примонтировать ФС в директорию <MOUNTPOINT>.
|
||||||
|
|
||||||
|
Чтобы отмонтировать ФС, используйте обычную команду `umount <MOUNTPOINT>`.
|
||||||
|
|
||||||
|
Сервер автоматически останавливается при отмонтировании ФС.
|
||||||
|
|
||||||
|
| `-o|--options <OPT>` | Передать дополнительные опции монтирования NFS (пример: -o async). |
|
||||||
|
|
||||||
|
### start
|
||||||
|
|
||||||
|
`vitastor-nfs (--fs <NAME> | --block) start`
|
||||||
|
|
||||||
|
Запустить сетевой NFS-сервер. Опции:
|
||||||
|
|
||||||
|
| `--bind <IP>` | принимать соединения по адресу <IP> (по умолчанию 0.0.0.0 - на всех) |
|
||||||
|
| `--port <PORT>` | использовать порт <PORT> для NFS-сервисов (по умолчанию 2049) |
|
||||||
|
| `--portmap 0` | отключить сервис portmap/rpcbind на порту 111 (по умолчанию включён и требует root привилегий) |
|
||||||
|
|
||||||
|
## Общие опции
|
||||||
|
|
||||||
|
| `--fs <NAME>` | использовать VitastorFS с метаданными в образе <NAME> |
|
||||||
|
| `--block` | использовать псевдо-ФС для доступа к блочным образам |
|
||||||
|
| `--pool <POOL>` | использовать пул <POOL> для новых файлов (обязательно, если пул в кластере не один) |
|
||||||
|
| `--subdir <DIR>` | экспортировать подкаталог <DIR>, а не корень ФС |
|
||||||
|
| `--nfspath <PATH>` | установить путь NFS-экспорта в <PATH> (по умолчанию /) |
|
||||||
|
| `--pidfile <FILE>` | записать ID процесса в заданный файл |
|
||||||
|
| `--logfile <FILE>` | записывать логи в заданный файл |
|
||||||
|
| `--foreground 1` | не уходить в фон после запуска |
|
||||||
|
|
Loading…
Reference in New Issue