Hlavní navigace

Distribuovaný sítový filesystém - Coda 6 (2)

9. 12. 2004
Doba čtení: 6 minut

Sdílet

V předchozím dílu jsme načerpali potřebný teoretický základ. Dnes poprvé vyrazíme do akce.

Instalace

Coda se skládá ze čtyř balíčků, které dostanete v některém z mirrorů. Jako první se musí nainstalovat knihovna lwp, kterou potřebují dvě další knihovny rpc2 a rvm. Dílo dovršíte přeložením vlastního balíku coda + následnou instalací client a/nebo server součásti. Mezi podporované operační systémy patří pouze Linux a NetBSD a zčásti Cygwin. Ostatním budete muset mírně domluvit; FreeBSD potřebuje pro úspěšnou kompilaci několik mnou přiložených patchů. Platformy podporované knihovnou lwp jsou v různém stádiu použitelnosti, funguje jen i386 a alpha. Podpora pro 64bitové platformy chybí úplně.

Kernel podpora

Tím však instalační trable nekončí. Coda client potřebuje i podporu v kernelu. Tato podpora by měla již být součástí kernelů výše zmíněných OS. Protože Coda6 potřebuje jinou kernel podporu než Coda5, najdete v balíku i jakési postarší patche pro netbsd 1.6, linux 2.4, freebsd4.8, na které bych moc nesázel. Lepší je upgradovat OS, a s tím získat i kernel level podporu pro Coda6 klienta.

Konfigurace serveru

Konfigurace distribuovaných filesystémů nebývá snadná. Většinou je navíc potřeba zprovoznit ještě kerbera. Coda však naštěstí Kerbera nevyžaduje, ačkoliv ho podporuje. Pro snadnější prvotní konfiguraci Cody vytvořili autoři několik shell scriptů, které mohu jen doporučit.

Hlavní konfigurační script se jmenuje vice-setup a hezky vás provede původní konfigurací serveru. Je to konfigurační wizard. Nevýhodou tohoto scriptu je, že neumí poupravovat stávající konfiguraci. Pokud si budete chtít server znovu nakonfigurovat, smažte předtím adresáře/vice a /vicep[a-z], aby se stará a nová konfigurace nepomíchaly. Server to nemá moc rád. Jedinou věcí, kterou budete chtít v /usr/local/et­c/coda/server­.conf doupravit, bude nastavení mapprivate=1.

Start serveru

Server se skládá z několika procesů, které je potřeba všechny spustit. V BSDlike OS je to bezproblémové, stačí spustit /usr/local/et­c/rc.d/rc.vice start.

U systémů používajících init.d je potřeba spustit init.d scripty auth2.init update.init codasrv.init. Pokud nepůjde spustit update.init, je třeba vytvořit adresář /var/lock/subsys.

Pokud máte více než jeden server, je potřeba mít na všech serverech co nejpřesnější čas. Vlastně přesný být nemusí – shodný zcela postačí. Update client je na to velmi citlivý. Coda není AFS, kde vám může čas lítat až o pět minut a nic se neděje.

Vytvoření root svazku

První věcí, kterou je potřeba po startu serveru udělat, je vytvoření root svazku. Tento svazek není ničím zvláštní – pouze je jeho jméno zapsáno v souboru /vice/db/ROOT­VOLUME. Svazek vytvoříme příkazemcreate­vol_rep cat /vice/db/ROOTVOLUME hostname -f.

Konfigurace klienta

Konfigurace klienta je ještě jednodušší. Slouží k tomu script venus-setup, kterému zadáte jméno serveru a velikost cache jako parametry. Podobně jako u serveru můžete i u klienta aktivovat private mmap, což se provádí v /usr/local/et­c/coda/venus.con­f. Na rozdíl od serveru není tato změna tak znatelná, protože velikost RVM paměti klienta je zhruba o dva řády menší.

Konfigurace kernelu

Před spuštěním klienta je potřeba naládovat Coda modul do kernelu. Nepředpokládám, že by se vyskytovaly kernely s natvrdo zabudovanou podporou pro Codu. Dále je potřeba mít vytvořené device zařízení /dev/cfs0, čehož dosáhneme u systémů nepoužívajících devfs spuštěním ./MAKEDEV cfs v adresáři /etc. Ve FreeBSD 5 není potřeba s devfs nic dělat; Linux s devfs jsem netestoval, nikde totiž devfs kvůli problémovosti nepoužívám. Tím jsme s kernelem hotovi a můžeme začít.

Akce

Klient se spustí příkazem venus. Výsledek úspěšného startu by se měl projevit namountováním coda filesystému na /coda. V tomto adresáři nic neuvidíme, ale pokud máme vše správně nakonfigurováni, měli bychom se po provedení cd naše hostname dostat do root svazku.

Tento svazek je prázdný a nelze do něj nic zapisovat. Coda podporuje podobně jako AFS i anonymní klienty. Pokud chceme něco zapsat, je nutné se přihlásit. To se provádí příkazem clogin user@masina. Pokud nezvoráme heslo changeme, obdržíme od serveru token s platností 25 hodin. Nahamouněné tokeny vypisuje příkaz ctokens.

(hsn@ttyv2):/coda% ctokens
Tokens held by the Cache Manager for hsn:
    @brave.dharma
            Coda user id:    1001
        Expiration time: Sun Nov 21 19:42:47 2004
    @sanatana.dharma
            Coda user id:    1001
            Expiration time: Sun Nov 21 19:34:00 2004

I v případě, že nepoužíváte Kerberos, není nutné přihlašování na více strojů v jednom realmu. Odhlašování se provádí příkazem cunlog.

Správa uživatelů

Dalším krokem je vytváření uživatelských účtů v Coda databázi. Vzdálená administrace uživatelů se provádí pomocí příkazu au. Přesněji řečeno měla by se provádět, kdyby au fungovalo. Definice uživatelů a uživatelských skupin se nachází v souboru /vice/db/prot_u­sers.cdb. Tento soubor je binární a edituje se na master serveru pomocí pdbtool. pdbtool funguje skvěle.

Problém je, že hesla nejsou v tomto souboru uložena. Jsou zašifrována v /vice/db/auth2.pw a vypadají takto:

1001   071a120b12161e45   admin user
1002   121d1f0044404120   # By 1001 at Sat Nov 20 19:58:34 2004 

Po vytvoření uživatele příkazem pdbtool si zapamatujeme jeho id a vložíme další řádek do auth2.pw s nějakým zašifrovaným heslem. Pak již příkaz au cp zafunguje a heslo můžeme změnit.

brave:/# au cp
Your Vice name: hsn
Your password:
RPC2_Bind() --> RPC2_SUCCESS
User name: radim
New password: vole132
AuthChangePasswd() --> AUTH_SUCCESS

Běžný uživatel si nemůže heslo měnit příkazem cpasswd, jelikož cpasswd také nefunguje. Stejně by to nikdo nedělal, protože Coda nepodporuje u hesel expiraci.

Přístupová práva

Coda nepoužívá unixová přístupová práva. V coda stromu si můžeme chmodovat a chownovat dle libosti, ale na funkci se to neprojeví. Coda navíc neimplementuje přístupová práva k souborům, práva lze přiřazovat pouze adresářům. Tato práva se přidělují příkazem cfs s argumentemsa – set attribute a la – list attribute.

Coda podporuje tato práva:

  • r – Read – čtení libovolného souboru v adresáři
  • l – Lookup – výpis adresáře
  • i – Insert – vytváření souborů/adresářů
  • d – Delete – mazání souborů/adresářů
  • w – Write  – zápis do souborů
  • a – Administer – správa přístupových práv

Práva mohou být jak pozitivní, tak i negativní.

Mountování svazků

Svazky se v Coda filesystému mountují podobně jako svazky v Unixu. Narozdíl od Unixu cílový adresář nesmí existovat. Vlastní operace se provádí příkazem cfs mkmount adresář svazek. Tyto mounty si server zapamatuje, a není je proto třeba opakovat při opětovném spuštění klienta. Mountovat lze pochopitelně jen do stromu /coda/realm.

Na rozdíl od Unixu CODA server opravdu nemá rád, pokud mountujete jeden svazek na více míst. Lze to udělat, ale dějí se pak velmi divné věci.

Přidání dalšího serveru

Nic těžkého. Nainstalujte binárky na nový server obvyklým způsobem. Na master serveru přidejte hostname a pořadové číslo nového serveru do /vice/db/servers. Spusťe vice-setup, zadejte jméno master serveru a jeho update heslo. Po stažení systémové databáze nakonfigurujte ještě RVM a partition podobně jako na master serveru a vše je připraveno k provozu. Spusťe server a můžete začít vytvářet nebo replikovat svazky.

Replikace

Nejzajímavější věcí z Cody je server – server replikace. Vytvářet svazky již umíme. Replikované svazky se vytváří createvol_rep – uvedete jen více serverů a je to.

root_podpora

Již existující svazek zreplikujeme následujícím postupem:

  1. Pomocí příkazu volutil info jméno svazku zjistíme replicated groupId. To poznáme podle toho, že začíná 7f.
  2. Na cílovém serveru vytvoříme svazek jméno.číslo repliky a se zjištěným replicated-volid.

    volutil /vicep[a-z] jmeno.N zjistene cislo
  3. Zjistíme id nově vytvořeného svazku pomocí výpisu volutil getvolumelist. Bude začínat I
  4. Vydumpujeme si replikační tabulku do souboru pomocí volutil dumpvrdb /soubor.
  5. Tabulka vypadá nějak takto

    root 7f000000 1 1000001 0 0 0 0 0 0 0 0
    repvol 7f000001 2 1000002 2000004 0 0 0 0 0 0 0

    V našem případě chceme replikovat root svazek, takže přidáme do jeho seznamu místo další nuly id námi vytvořeného svazku 2000005 a zvýšíme počítadlo z 1 na 2.

  6. Tabulku odešleme na server pomocí volutil makevrdb /soubor
  7. Vygenerujeme nový adresář svazků pomocí bldvldb.sh
  8. Námi provedené změny se za pár minut zreplikují na ostatní uzly.

Zde bych poznamenal, že Coda provádí tzv. lazy replikaci. Data se budou kopírovat na druhý server, jen pokud k nim bude chtít někdo přistupovat. Pokud chcete vynutit překopírování celého svazku na nově přidaný server, udělejte v příslušném svazku ls -lR.

Byl pro vás článek přínosný?