NFS Ganesha

Z DCEwiki
Skočit na navigaci Skočit na vyhledávání

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).

Upozornění 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í.

Takhle jsem se kupř. zasekal na parametru Squash. V ukázkovém příkladu bylo No_Root_Squash, ale Ganesha akceptoval pouze No_root_squash. NFS server se sice spustil, ale připojení bylo jen pro čtení, ačkoliv mount vypisoval, že je připojení rw


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

Upozornění 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:
  • Naklonovaný repozitář nemá větev master nastavenou na nejčerstvější verzi serveru, ale na verzi 2.2.0. Přičemž ale až verze 2.3.0 řeší některé záležitosti spojené s GlusterFS, které řeší výkon i paralelizaci.
  • Ani ve verzi 2.3.0 (vydané 27. října 2015) ještě není opraven problém s parsováním nastavení serveru pro vybrané IPv4 subnety. (Řešení jsem našel v mailu od Johannese Fuchse, který reagoval na podobný problém https://www.mail-archive.com/nfs-ganesha-devel@lists.sourceforge.net/msg00769.html - viz poznámka u kompilace zdrojového kódu

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
Poznámka {{{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
Poznámka Toto jsou aktuální názvy instalačních balíků Debianu unstable. Do budoucna není vyloučeno, že se jejich názvy mohou drobně změnit, proto si vždy před instalací zkontrolujte, pod jakým názvem máte potřebné instalační balíky k dispozici.

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/
Upozornění 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
Pro sestavování binárních balíčků lze s výhodou využít overlay systému. Díky tomu lze pak bez problémů odseparovat to co bylo nainstalováno před kompilací a co patří k instalaci aplikace.


Konfigurace serveru nfs-ganesha a glusterfs

Od verze 2.2 má FSAL_GLUSTER podporu pro pNFS a ACL

Poznámka GlusterFS ve výchozím nastavení spouští pro každý svazek NFS server, který je v kernelu. Novější verze GlusterFS už má integrovaný přepínač ganesha (resp. nfs-ganesha) , kterým lze zapnout (nebo naopak zapnout) podporu pro server NFS Ganesha. Jinak bude GlusterFS automaticky spuštět pro NFS export svazků procesy kernelového NFS serveru. Spouštění kernelového NFS servery lze zabránit pouze nastavením parametru nfs.disable na ON v konfiguraci svazku.

Aby fungovalo ověřování přes krb5 s nfs-ganesha, musí být použití krb5 správné nakonfigurované. To lze ověřit takto...

(postup ověření přes kerberos...)

Server nfs-ganesha používá - pokud může - IPv6, proto by mělo být IPv6 připojení aktivní

Zároveň je třeba na všech nodech, kde nfs-ganesha poběží, aby se kernelový NFS server nespouštěl.

Export a unexport GlusterFS svazků skrze nfs-ganesha se dělá přes dbus. Lze ovšem udělat i manuálně..

Odkazy

  1. 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].
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.