NFS Ganesha
NFS Ganesha je opensource NFS server s podporou všech aktuálně používaných verzí NFS protokolu (v3,v4.0,v4.1,v4.2,pNFS) a protokolu 9P (Plan9).
NFS Ganesha je NFS server, který běží v uživatelském prostoru, nikoliv v jádře! V linuxovém prostředí se většinou používá NFS server nfsd , který běží jako proces v linuxovém jádře[1]. Na to je třeba dát pozor, neboť tyto servery nemohou- bez toho aniž by to bylo ošetřeno v konfiguraci - běžet na jednom stroji současně. Oba servery totiž ve výchozím stavu naslouchají na stejném síťovém portu 2049.
|
V oficiálních repozitářích Debianu NFS Ganesha - na rozdíl od GlusterFS - zatím k dispozici není, i když od verze 2.2 jsou součástí zdrojového kódu i soubory potřebné pro sestavení balíku na Debianu. Vývoj je totiž stále poměrně živý. Konfigurační nastavení dosud není ustálené a v detailech se mezi jednotlivými verzemi liší. A pokud se v konfiguraci objeví parametr, který parser nezná, nebo neumí zpracovat, tak to má vliv na nastavení serveru, případně se ani nespustí.
GlusterFS + NFS Ganesha a Pacemaker
NFS Ganesha je vyvíjen jako NFS server pro clusterové prostředí, proto má novější GlusterFS (>=3.7.6), který vyvíjí fa. Red Hat i jakousi podporu pro automatickou konfiguraci exportů, kterou zajišťuje přes Pacemaker - tedy přesněji řečeno přes jeho ovládací CLI pcs. Bohužel se mi to nepodařilo rozběhat, jelikož pcs nemám v sestavení Pacemakeru, který používám, k dispozici.
Sestavení ze zdrojových kódů
Zdrojové repozitáře NFS Ganesha jsou v gitu a pro sestavení se používá cmake. Kromě výchozího git repozitáře nfs-ganesha.git
je součástí i samostatný submodul pro knihovnu libntircp
V současné době (čerstvě po vydání verze 2.3.0) je třeba vzít při kompilaci v patrnost následující body:
|
Naklonování repozitářů
git clone https://github.com/nfs-ganesha/nfs-ganesha.git cd ~/nfs-ganesha.git git submodule update --init git checkout -b v2.3.0 remotes/origin/V2.3.0 cd src/libntirpc git checkout -b v1.4.0 remotes/origin/V2.3.0 git submodule update
{{{1}}} |
Doinstalování balíků potřebných ke kompilaci
Základní sada balíků potřebných pro kompilaci a uspokojení závislostí:
apt-get install \ bison \ cmake \ flex \ libattr1-dev \ libblkid-dev \ libdbus-1-dev \ libdbus-c++-dev \ libdbus-glib-1-dev \ libcap-dev \ libjemalloc-dev \ libkrb5-dev \ libncurses5-dev \ libnfsidmap-dev \ libnfsidmap-dev \ uuid-dev
Dále je třeba doinstalovat balíky pro sestavení požadovaných backendů (FSAL):
- Pro zakompilování podpory pro GlusterFS musí být k dispozici jeho API, které je součástí instalačního balíčku - glusterfs-common
- Aby NFS Ganesha mohl spolupracovat s klientem Samba4 je potřeba zakompilovat podporu pro Winbind4 (MSPAC_SUPPORT) - libwbclient-dev
- Podporu pro Lustre jsem nekompiloval
- Podporu pro XFS jsem nekompiloval
- Podporu ZFS (libzfswrap_init) jsem nekompiloval
Kompilace
Pro sestavení na Debianu je třeba použít malou fintu, kterou jsem našel na https://wiki.mosuma.com/wiki/Nfs-ganesha
A totiž, že se aplikace sestavuje v paralelně umístěném adresáři build
mkdir ~/build cd ~/build cmake \ -DUSE_FSAL_GLUSTER=ON \ -DCMAKE_BINARY_DIR=/usr \ -DCMAKE_BUILD_TYPE=Maintainer ~/nfs-ganesha.git/src/
Pokud jsou v průběhu konfigurace doinstalovávány některé knihovny, je třeba před novým spuštěním cmake smazat tyto soubory...
CMakeCache.txt CPackConfig.cmake CPackSourceConfig.cmake |
NFS Ganesha - konfigurace
Démon ganesha.nfsd pokud nemá na příkazové řádce určeno jinak, hledá při spuštění statický konfigurační soubor ganesha.conf
v adresáři /etc/ganesha
. Dodatečně ho lze konfigurovat prostřednictvím rozhraní DBus - to ovšem umí až novější verze a v systému musí být nainstalované příslušné řídící skripty. Více o tom, bude pojednáno níže.
ganesha.conf
Je výchozí konfigurační soubor, který může obsahovat veškerou konfiguraci serveru, ale také si ji může pomocí direktivy %include
natahovat ze samostatných souborů. Viz ukázkový příklad jejího použití pro natažení obsahu souboru export.conf
z adresáře /etc/exporty_ganesha
:
%include "/etc/exporty_ganesha/export.conf"
Veškeré změny ve statické konfiguraci jsou akceptovány pouze při startu. Pokud není ošetřena změna dynamicky přes DBus rozhraní, je nutno provést restart služby ganesha.nfsd! |
Syntaxe konfiguračních souborů
- Konfigurační soubor(y) mohou obsahovat libovolné UTF-8 znaky
- Lze u nich používat komentáře. Jako komentář se bere jakýkoliv text na řádku, který následuje znak mřížky ( # )
- Jednotlivé položky v konfiguraci je rozděleny do bloků. Každý blok začíná názvem bloku, který následují složené závorky. Např.
FSAL { ... }
- Uvnitř bloku jsou parametry, kterým se přiřazují hodnoty rovnítkem =. Obsah parametru musí být vždy ukončen středníkem. Viz kupř.
Name = "Obsah parametru" ;
- Parametry mohou být uvedeny čistě malými písmeny, ale interně jsou konvertovány podle pravidla, že začínají kapitálkou, tudíž je vhodné používat tuto konvenci rovnou.
- Obsahem parametru mohou být pouze alfanumerické znaky, podtržítka ( _ ), pomlčky ( - ) a tečky ( . ). Je-li obsahem řetězec, musí být uzavřen do uvozovek.
- Obsahem parametru může být i seznam (list), jako např. u parametru Clients v bloku CLIENT. Jednotlivé položky seznamu jsou odděleny čárkou - ( , )
Clients = 192.168.0.10, 192.168.1.0/8;
- Kromě parametrů mohou být součástí některých typů bloků i podbloky, pro které platí totéž co pro bloky.
- Jaké jsou použitelné bloky a jaké mají parametry - včetně vlastnosti jejich obsahu (jestli to má být řetězec, nebo číslo) je popsáno v souboru
/usr/share/doc/ganesha/config_samples/config.txt
Kulaté závorky se v konfiguračním souboru NFS Ganesha nepoužívají! |
Konfigurační bloky
- Nastavení NFS protokolů
- Pro konfiguraci připojení přes NFS a P9 jsou určené bloky NFS_CORE_PARAM, NFS_IP_NAME, NFS_KRB5 a NFSV4
- Plan9
- NFS Ganesha umí fungovat i jako server pro Plan9 protokol. Ten ve výchozím stavu funguje přes port 564 (TCP) a 5640 (RDMA). Blok P9 dovoluje tato výchozí čísla portů změnit. Kromě toho také umožňuje změnit některé parametry pro připojení přes RDMA
- EXPORT
- Jednotlivé položky k exportu se nastavují prostřednictvím bloku EXPORT. Každý takový blok musí být unikátní a mít své vlastní unikátní identifikační číslo (parametr Export_id). EXPORT je základním blokem, kterým se nastavuje co a jak a z jakého úložiště se má exportovat. Úložištěm může být lokální adresář, i datový prostor sdíleného úložiště - vše záleží na tom, jaký je v bloku EXPORT nastaven podblok FSAL. Kdo a s jakými právy může ke sdíleným datům přistupovat se nastavuje v podbloku CLIENT.
- Globální parametry pro FSAL
- Pro některé typy FSAL lze nastavit parametry i na na globální úrovni. Týká se to clusterových souborových systémů CEPH, GPFS, LUSTRE, PT a z lokálních VFS, XFS a ZFS
- Logování
- Pro nastavení parametrů logování je určen blok LOG.
- Režim PROXY
- NFS Ganesha umí fungovat také jako NFS proxy. K tomuto nastavení je určen blok PROXY.
Ověření uživatele přes Kerberos
Aby fungovalo ověřování uživatelů přes Kerberos (knihovna krb5), musí být Kerberos správně nakonfigurován jak na straně serveru, kde běží NFS Ganesha, tak na straně klienta. Pro konfiguraci kerbera se používá blok NFS_KRB5
Jestli Kerberos funguje, lze ověřit takto...
(postup ověření přes kerberos...)
NFS Ganesha pracuje u NFS4 připojení s kerberem v závislosti na tom jak je nastavený parametr SecType:
- krb5
- Místo lokálního UID a GID se použije nastavení získané po ověření klienta přes Kerbera
- krb5i
- Kromě ověření se Kerberos pak využívá i během připojení a to tak, že se přes NFS posílají také kontrolní součty, šifrované přes Kerbera, aby tím bylo zajištěno, že do komunikace mezi serverem a klientem se necpe nikdo třetí
- krb5p
- Kerberos se nepoužije pouze k ověření, ale je jím šifrovaná veškerá komunikace mezi serverem a klientem, což ovšem znamená, že jde i o nejpomalejší variantu spojení, neboť tím stoupá zátěž procesoru jak na straně klienta, tak na straně serveru.
FSAL
FSAL (Filesystem Storage Access Layer) je právě to, čím se NFS Ganesha liší od NFS serveru, který je v kernelu. Pro každý export může být použitý jiný typ FSAL - podle toho jaká data se mají přes NFS zpropagovat:
- VFS
- Používá souborový systém operačního systému (POSIX). Jeho prostřednictvím lze exportovat soubory z lokálních souborových systémů. Jedinou podmínkou je, že lokální FS musí umět používat zamykání souborů ("file handles"), jako kupř. XFS. Tento FSAL podporuje také pNFS protokol pro souborový systém EXOFS a proprietární PanFS - podmínkou je ovšem jedno sdílené úložiště.
- PROXY
- NFS Ganesha umí fungovat také v režimu PROXY. Tj. že se sám přes tento FSAL připojí jako klient k jinému NFS serveru a pak pro něj dělá frontend. Kupř. 9P a NFSv3 klienti tak mohou jeho prostřednictvím přistupovat k jinému NFSv4 serveru. Tento FSAL lze využít i pro vzdálený přístup na NFSv4 server přes striktní firewally.
- GLUSTER
- Je distribuovaný souborový systém, na jehož svazky NFS Ganesha přistupuje přes knihovnu
libgfapi
. Intenzivně se vyvíjí a NFS Ganesha může běžet na jednom i více nodech GlusterFS. Díky tomu, že nody mohou přistupovat na jeden svazek současně, má NFS Ganesha pro tento FSAL i poporu pNFS. Ovšem s tou podmínkou, že pouze jeden z nodů funguje jako primární NFS server, který spravuje metadata. Ostatní nody fungují pouze jako poskytovatelé dat. - ZFS
- ZFS je souborový systém, který dovoluje publikovat úložiště jak ve formě normálního souborového systému, tak jako blokové zařízení. FSAL pro ZFS do něj přistupuje prostřednictvím knihovny libzfswrap přes FUSE. ZFS "pool" lze obsluhovat jak na úrovni diskových oddílů, tak jako normální souborový systém.
- CEPH
- Je distribuovaný souborový systém, který má podobné vlastnosti jako ZFS. FSAL pro CEPH využívá knihovnu
libcephfs
a dovoluje exportovat prostřednictvím jednoho NFS serveru i více než jeden CephFS cluster. NFS Ganesha verze 2.0 však pro CEPH dosud nemá plnou podporu pNFS tak jako pro GlusterFS. - LUSTRE
- Jde o clusterový souborový systém od fy Oracle, který ovšem předpokládá, že všechny nody mají jedno sdílené úložiště. V současné době ale pro něj není podpora pNFS.
- GPFS
- Je proprietární distribuovaný souborový systém fy. IBM. FSAL u něj podporuje všechny verze NFS protokolu, včetně NFSv4.2 s podporou pNFS, ovšem jelikož nejde o oficiální produkt je podpora GPFS v3.5 pouze exeprimentální.
- HPSS
- Je virtuální souborový systém IBM pro přístup k páskovému zálohovacímu systému IBM HPSS.
CLIENT
Konfigurační podblok CLIENT je v nastavení bloku EXPORT velmi důležité. Ba přímo zásadní! Ve výchozím nastavení totiž NFS Ganesha naslouchá na všech síťových rozhraních. A to nejenom na IPv4, ale také na IPv6 adresách. Pokud tedy v bloku EXPORT povolíte připojení bez autorizace přes Kerbera (sys), tak to znamená, že se k vypublikovanému úložišti bude moct připojit každý klient ze kteréhokoliv stroje. Což v případě veřejné adresy představuje dosti značnou bezpečnostní díru.
Zabránit tomu lze tím, že se v bloku EXPORT nastaví výchozí parametr Access_type na none, a jiná hodnota se povolí až u konfigurace podbloku CLIENT. Totéž platí i pro další parametry bloku EXPORT. Klienta, který nebude splňovat kritéria podbloku CLIENT tak NFS Ganesha rovnou odmítne - bez toho že by se ho vůbec pokoušel ověřit vůči Kerberu.
Server nfs-ganesha používá - pokud může - IPv6, proto by mělo být IPv6 připojení aktivní
Od verze 2.2 má FSAL_GLUSTER podporu pro pNFS a ACL
Dynamické řízení NFS Ganesha
Pro dynamické řízení démona ganesha.nfsd se používá Dbus. Jeho prostřednictvím lze za běhu přidávat i odebírat exporty, nastavovat úroveň logování, nebo zjišťovat aktuální parametry. Nedělá se to však přímo, ale pomocí utilit, napsaných v Pythonu (v2.7):
- sm_notify.ganesha
- utilita, která by měla - v případě že dojde k výpadku IP adresy přes kterou byli NFS klienti připojeni - poslat na tyto klientské stanice signál o tom, že si mají změnit IP adresu NFS serveru
- ganesha_stats
- Je utilita, která umožňuje vypisovat různé statistické informace o aktuálně připojených klientech, exportech, datových přenosech aj.
- ganesha_mgr
- Te obslužná utilita, jejímž prostřednictvím lze přidávat či odebírat exporty, vypsat připojené klienty, nebo upravit úroveň logování. Také lze jejím prostřednictvím NFS server korektně vypnout.
- purge_gids
- ?
- grace_period
- Provádí obnovení připojení vzdálených klientů? Zatím nevím. Jako parametr se mu dává IPv6 adresa
- get_clientids
- ?
- fake_recall
- ?
Jak přidat, nebo odebrat exportovanou položku
Jak upravit úroveň logování
- ↑ Od procesů které běží v userspace se ty jaderné ve výpisu příkazu ps liší tím, že jsou uzavřené do hranatých závorek - takže
[nfsd]
.
Odkazy
- https://gluster.readthedocs.org/en/latest/Administrator%20Guide/NFS-Ganesha%20GlusterFS%20Intergration/ - Ganesha na gluster.readthedocs.org - Postup nastavení NFS Ganesha pro podporu clusterového nastavení u GlusterFS
- https://wiki.mosuma.com/wiki/Nfs-ganesha - wiki, podle které jsem postupoval při kompilaci. Finta s adresářem build - ale nefunkční konfigurace.
- http://sourceforge.net/projects/nfs-ganesha/ - Stránky k NFS Ganesha na webu sourceforge.net
- http://nfs-ganesha.sourceforge.net/files/nfs-ganesha-adminguide.pdf - Administrátorská příručka v0.4 k NFS Ganesha z r.. 2008 v PDF formátu na webu sourceforge.net