ceph jewel how to (gyorstalpaló, akármi)

Ez csak egy egyszerű howto ceph-hez kezdőknek a teljesség igénye nélkül. Az egészet virtualboxban csinálom, csak a játék kedvéért.

Alapok az ábrához:
ceph Mon: Minden ceph storage clusternek van legalább egy monitor démonja. Feladata naprakészen tartani a ceph cluster állapotát illetve az OSD, Placement Ggroup (PG) és a CRUSH mappot.

ceph OSD: Minden ceph storage clusternek van legalább két OSD démonja, hogy "active+clean" állapotba legyen, ez jelzi, hogy minden ok. Ez démon lép interakcióba a logikai lemezzel, tárolja az adatot, visszaállít, Trimmel(ha kell, pl. SSD nél), mozgatja az adatokat, ügyelve az általunk beállított paraméterekre pl. replikációk száma.

ceph MDS: Metadata szerver, csak akkor kell ilyet telepítenünk ha a ceph fájlrendszert szeretnénk kipróbálni.

ceph Client: Mindenki aki használni akarja a storage-ünket.

Tesztkonfig:

  • Hálózat:

  • public network: 192.168.1.0/24 -Ezen komunikálnak a többiek.
    cluster network: 192.168.2.0/24 -Ezen komunikálnak egymással a Ceph OSD-k.
    Íme az öt ceph cluster node és az egy darab ntp server:
    ceph1:
    eth0:192.168.1.124
    eth1:192.168.2.124
    sdb
    ceph2
    eth0:192.168.1.238
    eth1:192.168.2.238
    sdb
    ceph3
    eth0:192.168.1.163
    eth1:192.168.2.163
    sdb
    mon1
    eth0:192.168.1.125
    mon2
    eth0:192.168.1.153
    mon3
    eth0:192.168.1.214
    ntp-srv
    eth0:192.168.1.230

  • Vasak:
  • Alapvetően két interfészük és két lemezük van(egy az OS-nek egy pedig egy OSD-nek) kivéve a monitor node mivel ő nem futtat OSD-t neki elég egy disk. Azért van 3 monitor mert így egy kieshet(quorum), OSD-ből 3 van, a háromszoros replikáció miatt ebből kettő is kieshet anélkül, hogy megállna a storage.
    OS: Ubuntu14.04
    RAM: 1024 MB
    CPU:1
    sda: 8GB (thin provision)
    sdb: 2GB (fixed size disk)
    eth0,eth1

Előkészületek:

  1. Névfeloldás kell DNS vagy hosts fájl.
  2. Telepíteni kell az ntp csomagot és beállítani ugyan azt a timeszervert az összes node-ra: sudo apt-get install ntp -y && sudo sed -i 's/0\.ubuntu\.pool\.ntp\.org/ntp-srv/' /etc/ntp.conf
  3. Jelszó nélküli kulcsos ssh autentikáció kell(ssh-keygen), kell egy user(én "user" nevű felhasználót használok) amelyik az összes node-on fentvan és a kulcsával szabadon jelszó nélkül tud sshval kapcsolódni a cluster gépeire(ssh-copy-id), kivéve persze az ntp szervert.
  4. Jelszó nélküli sudo jog is kell(echo "user ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/user)
  5. Teljes list az előkészületekről itt

Telepítés:
Elejétől végig a user nevű felhasználóval adom ki a parancsot adom ki a parancsokat

  1. sudo echo "deb http://download.ceph.com/debian-jewel/ trusty main" | sudo tee /etc/apt/sources.list.d/ceph.list
  2. wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
  3. sudo apt-get update && sudo apt-get install ceph-deploy -y
  4. mkdir ceph-conf && cd ceph-conf
  5. Monitor nodeok telepítése: ceph-deploy new mon{1..3}
  6. Kommenteljük ki az itt létrejövő ceph.conf-ból az auth részeket és írjuk bele:

    [global]
    ...
    #auth_cluster_required = cephx
    #auth_service_required = cephx
    #auth_client_required = cephx
    # Egyszerűség kedvéért kikapcsolom az auth-ot.
    auth_supported = none
    # Külön válsztjuk a hálózatokat, később jól jön, ha bővítünk vagy keressük a szűk keresztmetszetet.
    public_network = 192.168.1.0/24
    cluster_network = 192.168.2.0/24

    # pg_num számítás: http://ceph.com/pgcalc/
    # én most ezt nagyon nem számolgattam, mert csak teszt rendszer :)
    osd pool default pg num = 64
    osd pool default pgp num = 64

    [osd]
    # Journal számítás MB-ban:
    # expected throughput: Ez a disk vagy a network sebességét jelenti MB/s-ben, azt kell választani a kettő közül amelyik a szűk keresztmetszett.
    # filestore max sync interval: Default 5, futó rendszernél lekérdezni az osd.0-tól így lehet:sudo ceph --admin-daemon /var/run/ceph/ceph-osd.0.asok config show | grep filestore_max_sync_interval
    # osd journal size = {2 * (expected throughput * filestore max sync interval)} kivéve ha pl. külön SSD/HDD partíciót adunk meg journalnak, akkor ez a beállítás érvényét veszti és az egész partíciót használja.
    # itt most nem számolgattam, mivel az összes virtuális gépem ugyan azon az egy szem SSD-én fut, virtuális hálózattal.
    osd_journal_size = 256
    # A recovery és a scrub(ez ilyen fsck jellegű dolog) így lassabb viszont kevésbé terheli le a clustert.
    osd recovery max active = 1
    osd max backfills = 1

  7. Ha a config kész végre telepítjük a ceph-et: ceph-deploy install --release jewel {ceph{1..3},mon{1..3}}
  8. indítsuk el a monitorokat:ceph-deploy mon create-initial
  9. Ez szépen kiírja a nodeok diskjeit, hogy lássuk miből lehet OSD-t csinálni: ceph-deploy disk list ceph{1,2,3} könnyű dolgom van, most csak egy darab sdb nevűre tehetek OSD-t
  10. Elkészítjük az OSD-ket: ceph-deploy osd create ceph{1,2,3}:sdb Ha lenne külön SSD/HDD partíció a journalnak azt itt lehet megadni(persze ez később is módosítható), mégpedig úgy, hogy ceph-deploy osd create ceph{1,2,3}:sdb:sdc1 itt az sdc1 egy minden OSD node-on jelen van
  11. Másoljuk ki az admin kulcsot az admin node-ra, én most mindenhonnan akarom adminolni ceph-deploy admin {ceph{1..3},mon{1..3}}
  12. Most örülnünk kéne mert kész, ehelyett:
    $ ceph -s

    (Ebbe még a hammer verzióval futottam bele, csak azért írom le mert tanúságos lehet)
    $ ceph osd tree

    A ceph osd tree kimenetéből látszik, hogy 0 súllyal(weight) rendelkeznek az OSD-ék(pedig ennek >0 kéne lennie... sebaj beállítjuk kézzel!), a ceph ajánlás az, hogy 1-es súllyozást 1TB-os lemeznek adjunk, mivel ezek nálam virtuális lemezek 256MB(OSD journal)+~1790MB(OSD data) így a "0.00179"-es érték lesz a megfelelő: for i in {0..2}; do ceph osd crush reweight osd.$i 0.00179; done
  13. Ha minden jól megy, ezt kell látnunk:

Teszt:
Ezt már egy client1 nevű gépen csináltam, ami nem része a clusternak, egy monitor-node-ból clónoztam és telepítettem újra ceph kliensnek.

  1. Próbáljuk ki, először is csinálunk az rbd pool-ba egy 200MB-os lemezképet: rbd create rbd/teszt --size 200
  2. Csatoljuk fel(ezt elvileg nem szabad elkövetni a cluster tagjain, csak a ceph klienseken, ezért csináltam egy klienst, majd megpróbáltam felcsatolni):sudo rbd map rbd/teszt

    Kúvvanyád! kis nyomozás után kiderült, hogy ezt a "exclusive-lock"-ot nem támogatja kliens kernel modul... nempara kikapcsoljuk!
  3. Ez kiír egy rakat infót a lemezképrőő rbd info rbd/teszt
  4. Kapcsoljuk ki szépen sorba: rbd feature disable rbd/teszt deep-flatten; rbd feature disable rbd/teszt fast-diff; rbd feature disable teszt exclusive-lock Mehet megint a map: sudo rbd map rbd/teszt és most siker, van egy /dev/rbd0 eszközünk.
  5. Jöhet a megformázás: sudo mkfs.ext4 -m0 /dev/rbd/rbd/teszt Azért ez a path mert /dev/rbd/$POOL_NAME/RBD_IMAGE_NAME
  6. Felmountolom, rakok bele valamit: sudo mount /dev/rbd/rbd/teszt /mnt/; dd if=/dev/random of=/mnt/teszt.iso bs=1024M count=3
  7. "Legyen tánc!"

Hozzászólások

+1 :)

Kérdés, Ceph storage-ot be tudok e applikálni VM tárolóként Hyper-V, ESXi, XenServer alá valahogy?:)

Köszi!

Igen, valahogy be lehet tenni, de natívan és atombiztosan még egyiket sem :(
Személy szerint nem erőltetnem a xent. Én csak régen próbálkoztam az opensource xen-el, de akkor még nem tudta, talán csak úgy ha felcsatolod a ceph imaget és mint bármilyen blokkeszköz oda adod a xennek, így annyira nem üzemeltettném. Kicsit utána keresve elvileg már url=http://xenserver.org/blog/entry/tech-preview-of-xenserver-libvirt-ceph…] "natívan"(libvirtel), de még nem production ready.

Hyper-V és ESXI alá tudtommal csak úgy lehet ha kiajánlod az rbd imageket ISCSI-n vagy NFS-el.

Mostanában nem foglalkoztam ezekkel, szóval nyugodtan cáfoljon meg valaki aki jobban képbe van. Az biztos, hogy kvm+ceph az nagy királyság lehet jó konfiggal ;)

--------------------
http://grant-it.com/