DRBD-re hardlink, softlink/symlink, mount bind, vagy drbdlinks a szervízek áthelyezésére?

Fórumok

Sziasztok!

Elmondom lentebb, hogy mi a cél, hogy csinálnám, és várom az észrevételeket, hogy jól közelítem-e meg a dolgokat. Köszönöm.

Hagyományos aktív-passzív DRBD megoldás esetén van a DRBD-ben egy XFS ami mondjuk a /drbd/, meg XFS a többi / és /var felcsatolt részeken is.
Ez adott.

Amit nem akarok átmozgatni a /drbd/ -re:

- alap DRBD konfigurációk
- pacemaker
- corosync

Amit viszont DRBD-re akarok átrakni, vagy az új dolgokat direktbe rá rakni, ha failover van, a másik gép is pont azokat a konfigurációkat, beállításokat lássa, nem beszélve az adatokról:

- /drbd/adatok/ (minden adat itt lesz)

- LXC konfigurációk és konténerek

- libvirt, amin keresztül használom az LXC-t /var/lib/libvirt könytár

- ha jól gondolom, de még nem tartok itt, a pacemaker és corosync-nek minden konfigjának lokálisan, drbd-n kívül kell lennie, hogy olvasni tudja akkor is, ha a gép éppen passzív, nem aktív. Tehát ezen kívül nem fog kelleni más, mert minden LXC-n / Libvirt-en belül belül lesz, mint konténer.Ha jól értem az egész működését, akkor ez fog történni:

- node1 aktív lesz, a /drbd/ fel lesz mount-olva mint aktív drbd és innen elindul a pacemaker+corosync által kezelve a libvirt-en át az lxc, azon belül pedig a konténerek: mysql, apache, postfix, de ezek konténeren belül vannak, a /drbd/ alatt valahol, meg az adatok is.

- ha bármi történik a node1 géppel, akkor a node2-n lévő drbd-t másodlagosból (passzív) elsődlegessé (aktívvá) kapcsolja a corosync+pacemaker, elérhető lesz a /drbd/ alatt minden, mint az előző gépen, a corosync+pacemaker elindítja az lxc-t a libvirt-en keresztül és elindulnak a szolgáltatások... majd minden szép és jó... később meg akár ugyanígy vissza a node1-re. Kb ennyi elvileg jó esetben.

Kérdés:
1.: Megfelelő-e, ha simán a libvirt beállításait így átmozgatom a drbdre és rakok rá symlinkeket:

ln -s /drbd/etc/libvirt/ /etc/libvirt
ln -s /drbd/var/lib/libvirt/ /var/lib/libvirt

Majd ezeket beállítom a másik gépen is, ahol nyilván nem fog élni a link, mivel nincs felmountolva a /drbd/ . De amint fel lesz, akkor működik, elindulnak a szolgáltatások ha el lesznek indítva. Természetesen mind a két gépre azonos csomagok kerülnek fel pontosan.

2.: Van-e ennél jobb megoldás, például hard link vagy mount bind út? Vagy bármi más, amire nem gondoltam?

3.: Felraktam a drbdlinks nevű cuccot, de nem működik, ha jól értem a működését:

http://www.tummy.com/software/drbdlinks/

Beállítottam neki a /var/lib/libvirt könytárat:

mountpoint('/drbd', shared = 1 )

valamint a konfigjába:
link('/var/lib/libvirt/')

De csak annyit csinál, hogy a /var/lib/libvirt/ könyvtárat átnevezi, és nem történik semmi a /drbd/var/lib/libvirt/ mappában, hiába indítottam el, hiába initialize_shared_storage, vagy checklinks. Ha leállítom, visszanevezi a könytárat, de nem csinál semmit a /drbd/-n belül.

Nagyon keveset használtam symlnk és az ln parancsokat, így nyilván triviális dolgokat sem vehetek figyelembe.

Köszönöm előre is az észrevételeket.

Hozzászólások

Pont tegnap volt erről egy ~2.5 órás, igen mély előadás a linuxakademia.hu -n. Tartalmát tekintve érdemes megvásárolni. Az első 2 kérdésre tuti találsz benne választ.

1, Legtobb esetben (libvirt-tol fuggetlenul) elegendo sima symlink is, arra figyelj ne akarjon elindulni a szolgaltatas csak corosync-bol es megfelelo mount utan. Olyankor okozhat pl gondot ha valami chroot-on belul rakod symlink-et es nincs joga elerni.
2, bind mount-ot berakhatod corosync-be, pl chroot eseten hasznos.
3, passz

+1 olykor elony lehet ha nincs szinkronizalva a konfig, hanem manualisan tartod szinkronban, mert ha abban rontasz el valamit ami miatt nem indul el a service akkor konnyen azon kaphatod magad, hogy billeg 2 node kozott corosync resource mivel egyiken se tudja elinditani.

Blackluck, köszönöm a válaszaidat.

1. Chroot-nál én is a mount --bind -et fogom használni, bár még nem teszteltem, hogy a Selinux mennyire fogja szeretni.

2. Corosync-et hamarosan jobban megvizsgálom, de köszönöm a tippet.

+1 -re: a drbd konfigjait működés miatt sem rakom, rakhatom a /drbd alá. Te mit nem raknál a /drbd -be bele (de logikailag akár oda való is lehetne), mint konfiguráció, mi az, amit manuálisan frissítenél? LXC? Libvirt?

Elvileg a struktúra az egyszerű, hogy libvirt-en keresztül az LXC elindítja a chroot-olt konténereket, a konténerek bind mount által elérik a közös mappákat, egymással meg privát IP-n kommunikálnak a konténerek.

Látjátok értelmét a konténerek SSH portjának, belépésének lehetőségének szigorításán, például csak a megadott privát IP címekről való engedélyezést, valamint csak kulcs és jelszóval? A konténereknek csak a szolgáltatást nyújtó portja lesz forwardolva a host gépre, apache esetén a 80 és 443. A szervert elérni a host-on keresztül fogom kizárólag. Az apache külön user alatt fog futni, csak az fog root-ként futni, ami elkerülhetetlen.

Külön lesz a PHP-s CGI-nek is konténer. Ha azt felnyomják, akkor a legnagyobb baj, hogy a megosztott könyvtárakban lévő fájlokat látni, de inkább törölni tudják (backup-ról meg visszarakom). Meg még az, amire nem gondoltam :)

Sakk-matt,
KaTT :)