Odstranění starých nezpracovaných souborů sig kardiostimulátoru. Instalace a základní nastavení kardiostimulátoru a CLVM

Častou příčinou provozních poruch jsou problémy s počítači a systémy. A ve většině případů řešení problému nevyžaduje zapojení programátora přímo na místě. Proto všechno větší číslo klienti využívají službu vzdálené správy serveru od společnosti Roxis.

Jak se postup provádí?

Pomocí hardwarových a softwarových přístupových nástrojů se náš specialista připojuje k zařízení pro vzdálenou údržbu serverů. Zároveň bude umět:

  • provést zálohu. Pomůže zabránit ztrátě informací v případě nouzového selhání;
  • nářadí preventivní práce. Technik kontroluje provozuschopnost zařízení a ujišťuje se, že je dostatek místo na disku, upravuje rychlost načítání procesů. Při vzdáleném servisu počítačů navíc otestuje potřebný software a nainstaluje chybějící komponenty;
  • vyčistit zařízení od malware. Viry zpomalují systémy a snižují efektivitu zaměstnanců;
  • eliminovat poruchy. Když dojde k poruše, provedou systémy sledování distribuce kompatibilní s různými operačními systémy (Windows, Linux, Android, Mac OS X a iOS). vzdálená služba servery a lokální sítě. Pokud se problém do hodiny nevyřeší, do vaší kanceláře se dostaví programátor Roxis.

Lelik13a 20. července 2015 ve 13:33

HA-Cluster založený na Pacemaker pro LXC a virtualizaci kontejnerů Docker

  • Virtualizace

V tomto článku popíšu instalaci a konfiguraci Active/Active clusteru založeného na Pacemaker, Corosync 2.xa CLVM pomocí sdíleného úložiště. Ukážu vám, jak přizpůsobit tento cluster pro práci s kontejnery LXC a Docker. Popíšu příkazy pro práci s clusterem. A vzpomenu si na hrábě, do kterého jsem se dostal, což, doufám, ulehčí osud dalším gaunerům.

Budu používat CentOS 7 + epel a aktuální verze balíčky v nich. Hlavním nástrojem pro práci s Pacemakerem bude PCS (konfigurační systém kardiostimulátoru/korosync).

Příprava serveru

Použil jsem dvouuzlovou konfiguraci, ale počet lze podle potřeby zvýšit. Servery mají společné sdílené úložiště připojené přes SAS. Pokud to nemáte po ruce, můžete použít úložiště připojené přes FC nebo iSCSI. Budete potřebovat dva svazky, jeden pro obecné potřeby, druhý pro Docker. Jeden svazek můžete rozdělit na dvě části.
Nainstalujte CentOS 7, epel repository a nakonfigurujte síť. Použití bondingu pro síťová rozhraní a multipath pro SAS je žádoucí. Pro práci s různými vlany nakonfigurujeme příslušné br0.VID mosty, ke kterým pak navážeme LXC kontejnery. Nebudu popisovat detaily - vše je standardní.

Aby LXC a Docker fungovaly, musíte zakázat standardní firewald.
# systemctl stop firewalld.service # systemctl vypnout firewalld.service # setenforce Permisivní Také přepneme selinux do režimu povolný pro usnadnění nastavení a odvážných experimentů. Později, až to odladíme, možná přepneme zpět.

Okamžitě zadáme potřebné adresy a jména /etc/hosts na všech uzlech:
#nodes, vlan 10 10.1.0.1 cluster-1 10.1.0.2 cluster-2 #nodes ipmi, vlan 314 10.1.15.1 ipmi-1 10.1.15.2 ipmi-2 #docker, vlan registr 12 10.1.2.10 docker.

K práci budete potřebovat mechanismus STONITH (“Shoot The Other Node In The Head”), pro který používáme ipmi. Nakonfigurujte pomocí ipmitool:
# ipmitool shell impitool> uživatelské jméno 2 admin impitool> uživatelské heslo 2 "velmi tajné heslo" # < privilege level> ) impitool> user priv 2 4 1 Vytvořte uživatele admin (id=2) a udělte mu administrátorská práva (livel=4) ke kanálu spojenému se síťovým rozhraním (channel=1).

Síť pro ipmi je vhodné umístit do samostatné vlan, zaprvé to umožní její izolaci a zadruhé nebudou problémy s konektivitou, pokud IPMI BMC (baseboard management controller) sdílí síťové rozhraní se serverem .
impitool> lan sada 1 ipsrc statický impitool> lan sada 1 ipaddr 10.1.15.1 impitool> lan sada 1 síťová maska ​​255.255.255.0 impitool> lan sada 1 defgw ipaddr 10.1.15.254 nastavení přístupu impitool lan:31pi lanid set 1 access on impitool> lan set 1 auth ADMIN MD5 ipmitool> channel setaccess 1 2 callin=on ipmi=on link=on privilegium=4 Na ostatních uzlech je to stejné, jen IP jsou jiné.

Konektivitu můžete zkontrolovat takto:
# ipmitool -I lan -U admin -P "velmi tajné heslo" -H 10.1.15.1 bmc info

Instalace a základní nastavení kardiostimulátoru a CLVM

Pokud nevíte, co je Pacemaker, pak je vhodné si o tom nejprve přečíst. Dobré a v ruštině o kardiostimulátoru.
Na všechny uzly instalujeme balíčky z repozitáře epel:
# yum nainstalujte kardiostimulátor ks agenti zdrojů plot-agenti-vše
Na všech uzlech nastavujeme heslo pro správce clusteru hacluster. Pracuje pod tímto uživatelem PCS a k dispozici je také webové rozhraní pro správu.
echo ZMĚNA | passwd --stdin hacluster

Další operace se provádějí na jednom uzlu.
Nastavení ověřování:
# pcs cluster auth cluster-1 cluster-2 -u hacluster -p ZMĚNA --force
Vytvoříme a spustíme cluster „Cluster“ dvou uzlů:
# nastavení clusteru pcs --force --name Cluster cluster-1 cluster-2 # pcs cluster start --all
Podívejme se na výsledek:
# ks stav clusteru Stav clusteru: Poslední aktualizace: st 8. července 14:16:32 2015 Poslední změna: st 8. července 10:01:20 2015 zásobník: corosync Aktuální DC: cluster-1 (1) - oddíl s kvorem Verze: 1.1 .12-a14efad 2 Nakonfigurováno uzlů 17 Nakonfigurováno zdrojů (ještě přijdou) Stav PCSD: cluster-1: Online cluster-2: Online
Existuje jedno upozornění: pokud je https_proxy nastaveno v proměnných prostředí, pak ks může lhát o stavu uzlů, zřejmě se snaží použít proxy.

Spustíme a zaregistrujeme démona při spuštění pcsd:
# systemctl spustit pcsd # systemctl povolit pcsd
Poté je webové rozhraní pro správu clusteru dostupné na adrese "https://node_ip:2224"

Rozhraní vám umožní zobrazit stav clusteru, přidat nebo změnit jeho parametry. Je to maličkost, ale milá.

Protože máme pouze dva uzly, nebudeme mít kvorum, takže musíme tuto zásadu deaktivovat:
# pcs sada vlastností no-quorum-policy=ignore
Chcete-li automaticky spustit uzly clusteru, stačí přidat do spuštění kardiostimulátor:
# systemctl povolit kardiostimulátor

CLVM a GFS2 vyžadují ke svému fungování DLM (Distributed Lock Manager). CLVM i DLM v RHEL7 (CentOS 7) chybí jako nezávislí démoni a jsou klastrovými prostředky. Současně je pro fungování DLM vyžadován STONITH, jinak se odpovídající prostředek clusteru nespustí. Nastavení:
# pcs sada vlastností stonith-enabled=true # pcs stonith vytvořit cluster-1.stonith fence_ipmilan ipaddr="ipmi-1" passwd="ipmi heslo" login="admin" action="reboot" method="cycle" pcmk_host_list= cluster -1 pcmk_host_check=static-list stonith-timeout=10s op.monitor interval=10s #pcs stonith create cluster-2.stonith fence_ipmilan ipaddr="ipmi-2" passwd="ipmi password" login="admin" action="reboot" method="cycle" pcmk_host_list=cluster-2 pcmk_host_check=static-list stonith-timeout=10s op monitor interval=10s # pcs omezení umístění cluster-1.stonith se vyhýbá cluster-1=NEKONEČNO # ks omezení umístění cluster-2 cluster-2=NEKONEČNO
proč tomu tak je? Stručně řečeno, vytvoříme dva kamenné zdroje, z nichž každý je zodpovědný za svůj vlastní uzel, a zakážeme jim pracovat na uzlu, na který mají cílit.

Pojďme nakonfigurovat další globální parametry.
Pro experimenty je užitečné nakonfigurovat migraci prostředků po prvním selhání:
# pcs výchozí hodnoty zdroje migrace-threshold=1
Abychom zajistili, že se prostředek, který migroval do jiného uzlu v důsledku selhání, nevrátil, po obnovení uzlu nastavíme:
# pcs defaults resource-stickiness=100 Kde „100“ je určitá váha, na základě které Pacemaker vypočítává chování zdroje.

Chcete-li zabránit tomu, aby se uzly navzájem střílely uprostřed odvážných experimentů, doporučuji výslovně nastavit politiku selhání zdrojů:
# pcs resource op defaults on-fail=restart Jinak na nejzajímavějším místě bude fungovat stoith, který ve výchozím nastavení selže příkaz „stop“.

Nainstalujte CLVM na každý uzel:
# yum install lvm2 lvm2-cluster
Nakonfigurujeme LVM tak, aby fungoval v clusteru na každém uzlu:
# lvmconf --enable-cluster
Vytváříme zdroje dlm A clvmd v clusteru:
# vytvoření zdroje ks dlm ocf:pacemaker:řízený op monitor interval=30s on-fail=klon klonování plotu interleave=skutečně objednané=pravda # vytvoření zdroje ks clvmd ocf:heartbeat:clvm interval monitoru op=30s on-fail=klon klonování plotu interleave= true order=true Toto jsou kritické zdroje pro náš cluster, takže pro případ selhání explicitně nastavíme zásadu stoith ( on-fail=plot). Prostředek musí běžet na všech uzlech clusteru, takže je deklarován jako klonovaný ( klon). Spouštíme zdroje jeden po druhém, nikoli paralelně ( objednané=pravda). Pokud zdroj závisí na jiných klonových zdrojích, pak nečekáme na spuštění všech ukázek prostředků na všech uzlech, ale spokojíme se s místním ( prokládat=pravda). Věnujte pozornost posledním dvěma parametrům, mohou výrazně ovlivnit chod clusteru jako celku a stále budeme mít prostředky na klonování.

Nastavíme pořadí, ve kterém jsou zdroje spouštěny, v jakém clvmd začíná až poté dlm. Příkazy již používají název služby *-klon, který označuje zdroj na konkrétním uzlu:
# pcs constraint order start dlm-clone then clvmd-clone # pcs constraint colocation add clvmd-clone with dlm-clone Zavazujeme se také ke spuštění zdroje clvmd-klon spolu s dlm-klon na jednom uzlu. V našem případě dvou uzlů se to zdá zbytečné, ale v obecný případ *-klon zdroje mohou být menší než počet uzlů a pak se společné umístění stává kritickým.

Ihned po vytvoření prostředků jsou spuštěny na všech uzlech, a pokud je vše v pořádku, pak můžeme začít vytvářet sdílené logické svazky a systémy souborů. clvmd bude sledovat integritu metadat a upozorní všechny uzly na změny, takže operaci provádíme na jednom uzlu.
Inicializujte oddíly pro použití v LVM:
# pvcreate /dev/mapper/mpatha1 # pvcreate /dev/mapper/mpatha2
Obecně se práce s clusterovaným LVM téměř neliší od práce s běžným LVM, pouze s tím rozdílem, že pokud je skupina svazků (VG) označena jako clusterovaná, pak jsou její metadata řízena pomocí clvmd. Vytvořte skupiny svazků:
# vgcreate --clustered y shared_vg /dev/mapper/mpatha1 # vgcreate --clustered y shared_vg-ex /dev/mapper/mpatha2
Obecná konfigurace clusteru byla dokončena, budeme pokračovat v jeho plnění. Z pohledu Pacemakera je zdrojem jakákoli služba, proces, IP adresa, jejíž provoz lze řídit skripty. Samotné zdrojové skripty jsou podobné init skriptům a také provádějí sadu funkcí start, stop, monitor atd. Hlavní zásadou, kterou se budeme řídit, je umístění dat nezbytných pro zdroj běžící na jednom uzlu logický oddíl shared_vg skupiny a další souborový systém dle libosti; data potřebná na obou uzlech současně jsou umístěna na GFS2. V prvním případě bude integritu dat monitorovat Pacemaker, který řídí počet a umístění běžících zdrojů, včetně používaných souborových systémů. Ve druhém případě vnitřní mechanismy GFS2. Skupina shared_vg-ex bude zcela přidělena logickému oddílu pro Docker. Faktem je, že Docker vytváří řídký svazek (tenký zajišťovaný), který může být aktivní pouze ve výhradním režimu na jednom uzlu. A vložte tento svazek samostatná skupina vhodné pro další práci a konfiguraci.

Práce s LXC v clusteru

Budeme pracovat pomocí utilit lxc-*, které jsou součástí balíčku lxc. Vložíme:
# yum nainstalovat lxc lxc-šablony
Nastavte výchozí parametry pro budoucí kontejnery:
# cat /etc/lxc/default.conf lxc.start.auto = 0 lxc.network.type = veth lxc.network.link = br0.10 lxc.network.flags = up # paměť a swap lxc.cgroup.memory. limit_in_bytes = 256 mil. lxc.cgroup.memory.memsw.limit_in_bytes = 256 mil. Typ sítě bude veth– uvnitř kontejneru je rozhraní eth0, vně kontejneru bude připojeno k mostu br0,10. Z omezení, která používáme pouze zpaměti, je naznačíme. Pokud chcete, můžete podle principu zaregistrovat jakékoli podporované jádrem lxc.cgroup.state-název-objektu=hodnota. Můžete je také měnit za chodu pomocí lxc-cgroup. V systému souborů jsou tyto parametry uvedeny v cestě /sys/fs/cgroup/TYPE/lxc/CT-NAME/jméno-objektu. Důležitý bod ohledně omezení: parametr memory.limit_in_bytes musí být uvedeno dříve memory.memsw.limit_in_bytes. A také druhý parametr je součet paměti a swapu a musí být větší nebo roven prvnímu. Jinak se stroj spustí bez omezení paměti.
Umístění, spouštění a zastavování kontejnerů bude řídit Pacemaker, takže automatické nakládání kontejnerů výslovně vypínáme.

Každý kontejner LXC bude žít ve svém vlastním logickém svazku skupiny shared_vg. Nastavíme výchozí název VG:
# cat /etc/lxc/lxc.conf lxc.bdev.lvm.vg = shared_vg
Toto umístění vám umožní spustit kontejner na libovolném uzlu v clusteru. Konfigurační soubory kontejneru musí být také sdíleny, takže vytvořte společný souborový systém a nakonfigurujte jeho použití na všech uzlech:
# lvcreate -L 500M -n lxc_ct shared_vg # mkfs.gfs2 -p lock_dlm -j 2 -t Cluster:lxc_ct /dev/shared_vg/lxc_ct Vyberte zamykací protokol lock_dlm, protože úložiště je sdílené. Vytvoříme dva protokoly podle počtu uzlů ( -j2). Název nakonfigurujeme v tabulce zámků, kde Cluster- název našeho clusteru.

# pcs resource create fs-lxc_ct Filesystem fstype=gfs2 device=/dev/shared_vg/lxc_ct directory=/var/lib/lxc clone order=true interleave=true # pcs omezení order start clvmd-clone then fs-lxc_ct-clone Spustit další zdroj klonu, jako Souborový systém, pole zařízení A adresář jsou vyžadovány a popište, co a kde namontovat. A označujeme pořadí, ve kterém je prostředek spuštěn, protože bez clvmd není souborový systém připojen. Poté se adresář, kde LXC ukládá nastavení kontejneru, připojí na všechny uzly.

Vytvoříme první kontejner:
# lxc-create -n lxc-racktables -t oracle -B lvm --fssize 2G --fstype ext4 --vgname shared_vg -- -R 6.6 zde lxc-racktables- název kontejneru, věštec– použitá šablona. -B určuje typ použitého úložiště a parametry. lxc-vytvořit vytvoří oddíl LVM a rozbalí se tam základní systém, podle šablony. Po "--" jsou uvedeny parametry šablony, v mém případě - verze.
V době psaní tohoto článku šablona z balíčku pro centos na lvm nefungovala, ale oracle mi vyhovoval.
Pokud potřebujete nasadit systém založený na balíčcích deb, musíte nejprve nainstalovat obslužný program debootstrap. Připravený systém je nejprve nasazen do /var/cache/lxc/ a každé další spuštění lxc-create aktualizuje systémové balíčky na aktuální verze. Pohodlné sestavení pro sebe vlastní šablona, se všemi potřebnými předvolbami. Standardní šablony jsou umístěny zde: /usr/share/lxc/templates.
Můžete také použít speciální šablonu " stáhnout“, který stáhne již připravené systémové archivy z úložiště.

Nádoba je připravena. Kontejnery můžete spravovat pomocí nástrojů lxc-*. Spustíme jej na pozadí, podíváme se na jeho stav, zastavíme jej:
# lxc-start -n lxc-racktables -d # lxc-info -n lxc-racktables Název: lxc-racktables Stav: RUNNING PID: 9364 Využití CPU: 0,04 sekund Využití BlkIO: 0 bajtů Využití paměti: 1,19 MiB 0 KMem využití: bajtů Odkaz: vethS7U8J1 TX bajtů: 90 bajtů RX bajtů: 90 bajtů Celkem bajtů: 180 bajtů # lxc-stop -n lxc-racktables
Další parametry kontejneru nakonfigurujeme buď v jeho konzoli pomocí lxc-konzole, nebo někde namontováním lvm sekce kontejneru.

Nyní můžete předat ovládání kardiostimulátoru. Nejprve si však vezměme nový soubor řízení prostředků GitHub-A:
# wget -O /usr/lib/ocf/resource.d/heartbeat/lxc https://raw.githubusercontent.com/ClusterLabs/resource-agents/master/heartbeat/lxc # chmod +x /usr/lib/ocf/ resource.d/heartbeat/lxc
Adresář /usr/lib/ocf/resource.d/ obsahuje soubory správy prostředků v hierarchii poskytovatel/typ. Celý seznam zdrojů můžete zobrazit pomocí příkazu pcs resource list. Zobrazit popis konkrétního zdroje - popis zdroje ks .

Příklad:

# pcs resource description ocf:heartbeat:lxc ocf:heartbeat:lxc – Spravuje kontejnery LXC Umožňuje spravovat kontejnery LXC clusterem. Pokud kontejner běží "init", provede také řádné vypnutí. "Předpokládá se", že systém "init" provede řádné vypnutí, pokud je mu předložen signál "kill -PWR". Na "sysvinit" by to vyžadovalo, aby kontejner měl soubor inittab obsahující "p0::powerfail:/sbin/init 0" Absolutně netuším, jak se to dělá s "upstart" nebo "systemd", YMMV, pokud váš kontejner používá jeden z nich. Možnosti prostředků: kontejner (povinný): Jedinečný název pro tuto "Instanci kontejneru", např. "test1".


config (vyžadováno): Absolutní cesta k souboru obsahujícímu konkrétní konfiguraci pro tento kontejner, např. "/etc/lxc/test1/config".
log: Absolutní cesta k souboru protokolu kontejneru use_screen: Poskytuje možnost zachytit „kořenovou konzolu“ z kontejneru a zobrazit ji na samostatné obrazovce. Chcete-li zobrazit výstup obrazovky, spusťte "screen -r (název kontejneru)" Výchozí hodnota je nastavena na "false", změňte na "true" pro aktivaci této možnosti
Do našeho clusteru tedy přidáme nový prostředek:
# pcs resource create lxc-racktables lxc container=lxc-racktables config=/var/lib/lxc/lxc-racktables/config # pcs constrating order start fs-lxc_ct-clone pak lxc-racktables A zadejte pořadí spouštění.
Zdroj se spustí okamžitě a jeho stav lze zjistit pomocí příkazu pcs status. Pokud se spuštění nezdaří, bude to také možný důvod. Příkaz pcs resource debug-start <resource id> vám umožní spustit prostředek a zobrazit výsledek:
# pcs resource debug-start lxc-racktables Spuštění operace pro lxc-racktables (ocf:heartbeat:lxc) vrátilo 0 > stderr: DEBUG: Stav lxc-racktables: Stav: ZASTAVENO > stderr: INFO: Spouštění lxc-racktables: > stderr DEBUG: Stav lxc-racktables: Stav: RUNNING > stderr: DEBUG: lxc-racktables start: 0 Je ale potřeba s ním být opatrný, ignoruje nastavení clusteru pro umístění prostředků a spustí ho na aktuálním uzlu. A pokud zdroj již běží na jiném uzlu, může dojít k překvapení. Modifikátor "--full" poskytne mnoho dalších informací. Sice zvládá kontejner Pacemaker, ale i tak s ním může pracovat každý lxc-* utility, samozřejmě pouze na uzlu, ve kterém je

momentálně
# pcs resource move <resource id> V tomto případě se kontejner správně vypne na jednom uzlu a spustí se na jiném.

LXC bohužel nemá slušný nástroj pro živou migraci, ale až bude mít, bude možné nastavit migraci také. Chcete-li to provést, budete muset vytvořit další sdílený oddíl na GFS2, kam budou umístěny výpisy, a upravit skript prostředku lxc tak, aby spouštěl funkce migrate_to a migrate_from.
Podíval jsem se na projekt CRIU, ale nepodařilo se mi ho zprovoznit na CentOS 7.

Přesun kontejneru OpenVZ do LXC

Vytvoříme nový logický oddíl a přeneseme data z kontejneru OpenVZ (vypnuto):
# lvcreate -L 2G -n lxc-openvz shared_vg # mkfs.ext4 /dev/shared_vg/lxc-openvz # mount /dev/shared_vg/lxc-openvz /mnt/lxc-openvz # rsync -avh --numeric-ids -e "ssh" openvz:/vz/private/ / /mnt/lxc-openvz/
Vytvoříme konfigurační soubor pro nový kontejner, zkopírujeme a změníme obsah lxc-racktables:
# mkdir /var/lib/lxc/lxc-openvz # cp /var/lib/lxc/lxc-racktables/config /var/lib/lxc/lxc-openvz/
V konfiguračním souboru musíte změnit pole:
lxc.rootfs = /dev/shared_vg/lxc-openvz lxc.utsname = openvz #lxc.network.hwaddr
V případě potřeby nastavte omezení a požadované síťový most. Musíte také změnit nastavení sítě v kontejneru a přepsat je v rozhraní eth0 a opravte soubor etc/sysconfig/network.

V zásadě může být kontejner již spuštěn, ale pro lepší kompatibilita s LXC je třeba zlepšit obsah. Jako příklad jsem použil šablonu k vytvoření kontejneru centos (/usr/share/lxc/templates/lxc-centos), konkrétně obsah funkcí configure_centos a configure_centos_init s malou úpravou. Věnujte zvláštní pozornost vytvoření skriptu etc/init/power-status-changed.conf bez něj, kontejner nebude možné správně vypnout. Nebo inittab kontejner musí obsahovat pravidlo jako: "p0::powerfail:/sbin/init 0" (v závislosti na distribuci).

/etc/init/power-status-changed.conf

# power-status-changed - vypnutí na SIGPWR
#
start na napájení-stav-změněn

Exec /sbin/shutdown -h nyní „SIGPWR přijato“


Pokud je někdo příliš líný, aby na to přišel sám (a marně), můžete použít můj (na vlastní nebezpečí a riziko). MAC adresa Je lepší opravit kontejner v konfiguračním souboru.
Portované kontejnery mohou mít problémy s konzolí - nelze ji získat pomocí lxc-console . Tento problém řeším pomocí skriptu agetty(alternativní Linux getty), který byl součástí přenosných kontejnerů. A nastavení init, který spouští procesy jako:
/sbin/agetty -8 38400 /dev/console /sbin/agetty -8 38400 /dev/tty1 Receptura /etc/init/ a skripty byly vypůjčeny z vytvořeného čistého kontejneru a přepracovány pro agetty.

/etc/init/start-ttys.conf

#
# Tato služba spustí nakonfigurovaný počet gettys.
#

# vytvořte prosím soubor start-ttys.override a vložte tam své změny.

Env ACTIVE_CONSOLES=/dev/tty
env X_TTY=/dev/tty1
úkol
skript
. /etc/sysconfig/init
pro tty v $(echo $ACTIVE_CONSOLES); dělat
[ "$RUNLEVEL" = "5" -a "$tty" = "$X_TTY" ] && pokračovat
initctl start tty TTY=$tty
hotovo
koncový skript


/etc/init/console.conf

# konzole - getty
#
# Tato služba udržuje getty na konzole z místa, kde je systém
# se spustil, dokud se znovu nevypne.

Start na zastaveném rc RUNLEVEL=
zastavit na úrovni běhu [!2345]
env kontejner

Respawn
#exec /sbin/mingetty --nohangup --noclear /dev/console
exec /sbin/agetty -8 38400 /dev/console


/etc/init/tty.conf

# tty - getty
#
# Tato služba udržuje getty na zadaném zařízení.
#
# Neupravujte tento soubor přímo. Pokud chcete změnit chování,
# vytvořte prosím soubor tty.override a vložte tam své změny.

Zastavte na úrovni běhu

Respawn
například $TTY
#exec /sbin/mingetty --nohangup $TTY
exec /sbin/agetty -8 38400 $ TTY
použití "tty TTY=/dev/ttyX - kde X je ID konzoly"

Zkoušel jsem použít mingetty v migrovaném kontejneru se systémem CentOS 6.6, ale odmítl pracovat s chybou v protokolech:
# /sbin/mingetty --nohangup /dev/console console: žádné ovládání tty: Operace není povolena

LXC lze ovládat přes libvrt, pomocí ovladače lxc:///, ale tato metoda je nebezpečná a RedHat hrozí odebráním podpory z distribuce.
Pro ovládání přes libvrt v Pacemaker existuje zdrojový skript ocf:heartbeat:VirtualDomain, který může ovládat jakýkoli VM v závislosti na ovladači. Funkce zahrnují živou migraci pro KVM. Myslím, že pomocí kardiostimulátoru Správa KVM, bude podobný, ale nepotřeboval jsem to.

Práce s Dockerem v clusteru

Nastavení Pacemakeru pro práci s Dockerem je podobné jako nastavení LXC, ale existují rozdíly v designu.
Nejprve si nainstalujme Docker, jelikož je součástí distribuce RHEL/CentOS 7, nebudou žádné problémy.
# yum instalační docker
Naučme Docker pracovat s LVM. Chcete-li to provést, vytvořte soubor /etc/sysconfig/docker-storage-setup s obsahem:
VG=shared_vg-ex Kde uvedeme, ve které skupině svazků Dockeru vytvořit náš fond. Zde můžete také nastavit další parametry (man docker-storage-setup).

Spusťte docker-storage-setup:
# docker-storage-setup Zaokrouhlení velikosti na plný fyzický rozsah 716,00 MiB Vytvořen logický svazek "docker-poolmeta".
Logický svazek „docker-pool“ byl vytvořen.
VAROVÁNÍ: Převod logického svazku shared_vg-ex/docker-pool a shared_vg-ex/docker-poolmeta na svazky dat a metadat.
TOTO ZNIČÍ OBSAH LOGICKÉHO SVAZKU (systém souborů atd.) Převedený sdílený_vg-ex/docker-pool na tenký fond.
Logický svazek "docker-pool" se změnil. #lvs | grep docker-pool docker-pool shared_vg-ex twi-aot--- 17,98 g 14,41 2,54 Docker používá tenký zřízený svazek, což omezuje jeho použití v clusteru. Takový svazek nemůže být aktivní na více uzlech současně. Pojďme nakonfigurovat LVM tak, aby svazky ve skupině shared_vg-ex nebyly automaticky aktivovány. Chcete-li to provést, musíte v souboru /etc/lvm/lvm.conf (na všech uzlech) explicitně zadat skupiny (nebo jednotlivé svazky), které budou automaticky aktivovány: auto_activation_volume_list = [ "shared_vg" ] Přeneseme ovládání tohoto svazku na kardiostimulátor:.

# pcs resource create lvm-docker-pool LVM volgrpname=shared_vg-ex exclusive=yes # pcs omezení order start clvmd-clone then lvm-docker-pool # pcs constraint colocation add lvm-docker-pool with clvmd-clone Now group volumes
shared_vg-ex bude aktivován na uzlu, kde je prostředek spuštěn lvm-docker-pool Docker použije vyhrazenou IP pro kontejnery NAT z externí sítě. Opravíme to v konfiguraci:# cat /etc/sysconfig/docker-network DOCKER_NETWORK_OPTIONS="--ip=10.1.2.10 -fixed-cidr=172.17.0.0/16" Nebudeme konfigurovat samostatný most, necháme jej použít výchozí

docker0
, stačí opravit síť pro kontejnery. Snažil jsem se naznačit vhodnou síť pro kontejnery, ale narazil jsem na nepochopitelné chyby. Google naznačil, že nejsem jediný, a tak jsem se spokojil s prostou opravou sítě, kterou si Docker pro sebe vybral. Docker také nezastaví most, když je vypnutý a neodstraní IP adresu, ale protože most není připojen k žádné

Základní nastavení je hotové, naplníme cluster příslušnými prostředky. Protože za Docker bude odpovědná sada zdrojů, je vhodné je seskupit. Všechny prostředky ve skupině běží na stejném uzlu a spouštějí se postupně podle pořadí ve skupině. Ale musíte vzít v úvahu, že pokud jeden ze zdrojů skupiny selže, celá skupina bude migrovat do jiného uzlu. A také, když vypnete jakýkoli zdroj ve skupině, vypnou se také všechny následující zdroje. Prvním zdrojem skupiny bude svazek vytvořený LVM:
# pcs skupina prostředků přidat docker lvm-docker-pool
Vytvoříme zdroj - IP adresu vydanou Dockerem:
# pcs resource create dockerIP IPaddr2 --group docker --after lvm-docker-pool ip=10.1.2.10 cidr_netmask=24 nic=br0.12
Kromě svazků LVM používá Docker k ukládání svých dat také souborový systém. Proto musíte vytvořit další sekci pod kontrolou Pacemaker. Protože tato data potřebuje pouze spuštění Dokceru, bude zdroj obyčejný.
# lvcreate -L 500M -n docker-db shared_vg # mkfs.xfs /dev/shared_vg/docker-db # pcs resource create fs-docker-db Filesystem fstype=xfs device=/dev/shared_vg/docker-db directory=/var /lib/docker --group docker --after dockerIP
Nyní můžete přidat samotného démona Docker:
# pcs resource create dockerd systemd:docker --group docker --after fs-docker-db
Po úspěšném spuštění prostředků skupiny se v uzlu, kde se Docker usadil, podíváme na jeho stav a ujistíme se, že je vše v pořádku.

informace o dockeru:

# docker info Kontejnery: 5 Obrázky: 42 Ovladač úložiště: devicemapper Název fondu: shared_vg--ex-docker--pool Velikost bloku: 524,3 kB Systém záložních souborů: xfs Datový soubor: Soubor metadat: Využitý datový prostor: 2,781 GB Datový prostor Celkem: 19,3 GB dostupného datového prostoru: 16,52 GB Použitý prostor pro metadata: 852 kB Prostor pro metadata Celkem: 33,55 MB Dostupný prostor pro metadata: 32,7 MB Udev Sync Podporováno: true Verze knihovny: 1.02.93-RHEL7 (2015-01-28) Nativní Spouštěcí ovladač: -0.2 Verze jádra: 3.10.0-229.7.2.el7.x86_64 Operační systém: CentOS Linux 7 (jádrových) CPU: 4 Celková paměť: 3,703 GiB Název: cluster-2

S Dockerem již můžete pracovat jako obvykle. Abychom však obrázek dokončili, vytvořte a přidejte do našeho clusteru registr Docker. Pro registr použijeme samostatnou IP a jméno 10.1.2.11 (dregistry) a souborové úložiště obrázků bude umístěno v samostatné sekci.
# lvcreate -L 10G -n docker-registry shared_vg # mkfs.ext4 /dev/shared_vg/docker-registry # mkdir /mnt/docker-registry # pcs resource create docker-registry Systém souborů fstype=ext4 device=/dev/shared_vg/docker -adresář registru=/mnt/docker-registry --group=docker –after=dockerd # pcs resource create registryIP IPaddr2 --group docker --after docker-registry ip=10.1.2.11 cidr_netmask=24 nic=br0.12
V uzlu, kde běží Docker, vytvoříme registr kontejnerů:
# docker create -p 10.1.2.11:80:5000 -e REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/var/lib/registry -v /mnt/docker-registry:/var/lib/registry -h dregistry --name=dregistry registry:2 Nastavení přesměrování port do kontejneru (10.1.2.11:80 → 5000). Zahrnutý adresář /mnt/docker-registry. Název hostitele a název kontejneru.
Výstup dockeru ps -a zobrazí vytvořený kontejner připravený ke spuštění.

Dejme to kontrolu Pacemakerovi. Nejprve si stáhněte nový zdrojový skript:
# wget -O /usr/lib/ocf/resource.d/heartbeat/docker https://raw.githubusercontent.com/ClusterLabs/resource-agents/master/heartbeat/docker # chmod +x /usr/lib/ocf/ resource.d/heartbeat/docker
Je důležité zajistit, aby zdrojové skripty byly identické na všech uzlech, jinak může dojít k překvapením. Samotný prostředek skriptu „docker“ může vytvořit požadované kontejnery dané parametry jejich stažením z registru. Proto můžete jednoduše používat Docker běžící neustále na uzlech clusteru s společný rejstřík a osobní úložiště. A Pacemaker ovládá pouze jednotlivé kontejnery, ale to není tak zajímavé a nadbytečné. Ještě jsem nepřišel na to, co dělat s Dockerem.
Přenesme tedy kontrolu nad hotovou nádobou na Pacemaker.
# pcs resource create dregistry docker reuse=true image="docker.io/registry:2" --group docker --after registryIP opětovné použití=pravdadůležitý parametr, jinak bude kontejner po zastavení smazán. obraz Musíte zadat úplné souřadnice kontejneru, včetně registru a značky. Skript prostředku vybere připravený kontejner podle názvu registr a spustí se.
Pojďme přidat náš místní registr do konfigurace Dockeru na uzlech clusteru (/etc/sysconfig/docker).
ADD_REGISTRY="--add-registry dregistry" INSECURE_REGISTRY="--insecure-registry dregistry" Nepotřebujeme HTTPS, takže jej deaktivujeme pro místní registr.

Poté restartujeme docker service systemctl restart docker na uzlu, kde se nachází, nebo restartujeme dockerd pcs resource na libovolném uzlu v clusteru. A můžeme využít možnosti našeho osobního registru na 10.1.2.11 (dregistry).

Nyní na příkladu kontejnerů Docker ukážu, jak pracovat se šablonami v Pacemakeru. Bohužel, schopnosti utility ks jsou zde velmi omezené. Vůbec neví, jak používat šablony jako takové, ale pro omezení umožňuje vytvořit některá spojení, ale pracovat s nimi ks není pohodlné. Naštěstí přichází na pomoc možnost upravit konfiguraci clusteru přímo v souboru xml:
# pcs cluster cib > /tmp/cluster.xml # upravit podle potřeby # pcs cluster cib-push /tmp/cluster.xml

Prostředky dockeru musí splňovat následující požadavky:

  • je na stejném uzlu jako prostředky skupiny docker
  • spustit po všech prostředcích skupiny docker
  • kontejnery musí být vzájemně nezávislé na svém stavu
Toho lze samozřejmě dosáhnout přiřazením závislostí ke každému použití kontejneru omezení ks, ale konfigurace se ukazuje jako těžkopádná a obtížně čitelná.

Nejprve si vytvoříme tři experimentální kontejnery, pro které jsem použil kontejner s Nginx. Kontejner je předem stažen a odeslán do místního registru:
# docker pull nginx:latest # docker push nginx:latest # pcs resource create doc-test3 docker reuse=false image="dregistry/nginx:latest" --disabled # pcs resource create doc-test2 docker reuse=true image="dregistry /nginx:latest" --disabled # pcs resource create doc-test docker reuse=true image="dregistry/nginx:latest" --disabled Zdroje jsou vytvořeny zakázány, jinak se pokusí spustit a v závislosti na štěstí uzlu.

Do čerstvě nahraného xml přidáme fond zdrojů. Definování společného umístění (sekce):
Tady to začíná obecné sdružení (kolokační sada, id="docker-col") s požadavkem soužití na stejném uzlu ( skóre="INFINITY"). První sloučení zdrojů ( id="docker-col-0") s vlastnostmi:

  • současné spuštění zdrojů ( seequential="false")
  • zdroje nejsou závislé na postavení toho druhého ( require-all="false")
  • role zdrojů ( role="Zahájeno")
Štítek zdroj_ref odkazuje na existující klastrové prostředky, které mají být zahrnuty do této federace. Parametr role="Zahájeno" kritický
A druhé sdružování zdrojů ( id="docker-col-1"), který zahrnuje všechny prostředky skupiny přístavní dělník.
Moc nerozumím logice toho, jak tento parametr funguje. role v tomto provedení, ale mělo by to být takto (testováno experimenty).

Objednávací sada, který určuje pořadí, ve kterém jsou zdroje spouštěny:
Zde je to transparentnější, nejprve spustíme zdroje skupiny přístavní dělník, pak hromadně a nezávisle na všech kontejnerech.

Po načtení změněné konfigurace lze kontejner bezpečně zapnout/vypnout a smazat. To neovlivní provoz ostatních zdrojů. Požadavek na sdílené umístění však vynutí přesun všech přidružených zdrojů do jiného uzlu clusteru v případě přenosu jakéhokoli zdroje. Na výstupu ks tato nastavení vypadají takto:
omezení # ks --plné | grep -i set Sady zdrojů: nastavit ukotvitelný panel (id:order_doc-0) nastavit doc-test doc-test2 doc-test3 sekvenční=false required-all=false (id:order_doc-1) (id:order_doc) Sady prostředků: nastavit doc-test doc-test2 doc-test3 role=Zahájeno sekvenční=false required-all=false (id:docker-col-0) nastavit ukotvitelný panel (id:docker-col-1) skóre nastavení=NEKONEČNO (id:docker-col )

Šablony zdrojů jsou zpracovány podobným způsobem. Vytvořme šablonu pro kontejner LXC (v sekci):

Do kterého si zapíšeme hlavní parametry zdroje. A přepišme nastavení prostředků, aby bylo možné používat tuto šablonu:

Po aktualizaci konfigurace byl výstup vlastností prostředku velmi krátký:
# pcs resource show lxc-racktables Zdroj: lxc-racktables (template=lxc-template) Atributy: container=lxc-racktables config=/var/lib/lxc/lxc-racktables/config
Je pravda, že vytváření nových zdrojů pomocí počítačů pomocí šablon zatím nebude fungovat.
Zbývá opravit pořadí spouštění LXC kontejnerů v podobné asociaci jako u Dockeru.

Chcete-li ovládat Pacemaker, můžete nainstalovat balíček crmsh z úložiště

, Decentralizované sítě


Chci vám říci o jiném způsobu, jak načíst rovnováhu. O Pacemakeru a IPaddr (resource agent) a jejich nastavení pro Active/Passive cluster již bylo řečeno poměrně hodně, ale našel jsem velmi málo informací o organizaci plnohodnotného Active/Active clusteru pomocí tohoto modulu. Pokusím se tuto situaci napravit.


Nejprve vám řeknu podrobněji, proč je tato metoda vyvažování pozoruhodná:

  • Nedostatek externího balanceru- Na všech uzlech v clusteru je nakonfigurována jedna společná virtuální IP adresa. Všechny žádosti jsou odesílány na něj. Uzly reagují na požadavky na tuto adresu náhodně a na základě vzájemné dohody.
  • Vysoká dostupnost- Pokud jeden uzel spadne, jeho zodpovědnost převezme jiný.
  • Snadné nastavení- Konfigurace se provádí pouze 3-5 příkazy.

Vstupní data

Podívejme se na obrázek na začátku článku, uvidíme následující zařízení:

  • Brána- IP: 192.168.100.1
  • HostA- IP: 192.168.100.101
  • HostB- IP: 192.168.100.102
  • HostC- IP: 192.168.100.103

Klienti budou kontaktovat externí adresu naší brány, která všechny požadavky přesměruje na virtuální IP 192.168.100.100, která bude nakonfigurována na všech třech uzlech našeho clusteru.

Příprava

Nejprve se musíme ujistit, že se všechny naše uzly mohou navzájem kontaktovat pomocí jediného názvu hostitele, kvůli spolehlivosti je lepší okamžitě přidat adresy uzlů do /etc/hosts:


192.168.100.101 hostA 192.168.100.102 hostB 192.168.100.103 hostC

Nainstalujme všechny potřebné balíčky:


yum install pcs pacemaker corosync #CentOS, RHEL apt-get install pcs pacemaker corosync #Ubuntu, Debian

Při instalaci pcs vytvoří uživatele hacluster, dejme mu heslo:


echo ZMĚNA | passwd --stdin hacluster

auth clusteru ks HostA HostB HostC -u hacluster -p ZMĚNA --force

Vytvoříme a spustíme cluster „Cluster“ se třemi uzly:


nastavení clusteru pcs --force --name Cluster hostA hostB hostC pcs cluster start --all

Podívejme se na výsledek:


stav clusteru ks

Závěr

Stav clusteru: Poslední aktualizace: Čt 19. ledna 12:11:49 2017 Poslední změna: Út 17. ledna 21:19:05 2017 haclusterem přes crmd na hostA Zásobník: corosync Aktuální DC: hostA (verze 1.1.14-70404b0) - oddíl s nakonfigurovanými uzly kvora 3 a 0 zdroji Online: [ hostA hostB hostC ] Stav PCSD: hostA: Online hostB: Online hostC: Online


Některé kroky byly vypůjčeny z článku Lelik13a, díky jemu za to.


V našem konkrétním případě náš cluster nevyžaduje kvorum ani stonith, takže můžeme bezpečně zakázat obojí:


sada vlastností pc no-quorum-policy=ignorovat sadu vlastností pcstonith-enabled=false

V budoucnu, pokud budete mít zdroje, pro které je to nutné, můžete se obrátit na článek Silvar.

Pár slov o MAC adresách

Než začneme, musíme pochopit, že všechny naše uzly budou nakonfigurovány se stejnou IP a stejnou mac adresou, na kterou budou střídavě reagovat.


Problém je v tom, že každý switch funguje tak, že si při provozu vytváří vlastní tabulku switchů, ve které je každá mac adresa spojena s konkrétním fyzickým portem. Přepínací tabulka se sestavuje automaticky a slouží k odlehčení sítě od „zbytečných“ paketů L2.


Pokud je tedy mac adresa v přepínací tabulce, pakety budou odeslány pouze na jeden port, kterému je přiřazena stejná mac adresa.


To nám bohužel nevyhovuje a musíme zajistit, aby všichni naši hostitelé v clusteru „viděli“ všechny tyto pakety současně. Jinak toto schéma nebude fungovat.


Nejprve se musíme ujistit, že mac adresa, kterou používáme, je multicastová adresa. To znamená, že je v rozsahu 01:00:5E:00:00:00 - 01:00:5E:7F:FF:FF . Po přijetí paketu pro takovou adresu jej náš přepínač předá na všechny ostatní porty kromě zdrojového. Navíc některé spravované přepínače umožňují konfigurovat a definovat více portů pro konkrétní MAC adresu.


Možná budete také muset zakázat dynamickou kontrolu ARP, pokud ji váš přepínač podporuje, protože může způsobit zablokování odpovědí arp od vašich hostitelů.

Nastavení prostředku IPaddr

Nyní se dostáváme k nejzajímavější části.


V současné době existují dvě verze IPaddr s podporou klonování:

    IPaddr2(ocf:heartbeat:IPaddr2) - Standardní agent prostředků pro vytváření a provozování virtuální IP adresy. Obvykle se instaluje se standardním balíčkem resource-agents.

  • IPaddr3(ocf:percona:IPaddr3) - Vylepšená verze IPaddr2 od Percona.
    Tato verze obsahuje opravy zaměřené na práci konkrétně v režimu klonování.
    Je vyžadována samostatná instalace.

Chcete-li nainstalovat IPaadr3, spusťte tyto příkazy na každém hostiteli:


curl --create-dirs -o /usr/lib/ocf/resource.d/percona/IPaddr3 https://raw.githubusercontent.com/percona/percona-pacemaker-agents/master/agents/IPaddr3 chmod u+x / usr/lib/ocf/resource.d/percona/IPaddr

Vytvořme zdroj pro naši virtuální IP adresu:


pcs resource create ClusterIP ocf:percona:IPaddr3 params ip="192.168.100.100" cidr_netmask="24" nic="eth0" clusterip_hash="sourceip-sourceport" op monitor interval="10s"

clusterip_hash- zde je třeba zadat požadovaný typ distribuce požadavku.
Mohou existovat tři možnosti:

  • sourceip - distribuce pouze podle zdrojové IP adresy, tím je zajištěno, že všechny požadavky ze stejného zdroje půjdou vždy na stejného hostitele.
  • sourceip-sourceport - distribuce podle zdrojové IP adresy a odchozího portu. Každé nové připojení přejde na nového hostitele. Nejlepší možnost.
  • sourceip-sourceport-destport - distribuce podle zdrojové IP adresy, odchozího portu a cílového portu. Poskytuje nejlepší distribuci, což je důležité, pokud máte několik služeb spuštěných na různých portech.

Pro IPaddr2 musíte zadat parametr mac=01:00:5E:XX:XX:XX s adresou mac z rozsahu vícesměrového vysílání. IPaddr3 jej nainstaluje automaticky.


Nyní naklonujme náš zdroj:


pcs resource klon ClusterIP meta clone-max=3 clone-node-max=3 globally-unique=true

Tato akce vytvoří v iptables následující pravidlo:



Jak vidíte, je zde použit modul CLUSTERIP.


Funguje to takto:


Všechny pakety přicházejí do tří uzlů, ale všechna tři jádra Linuxu vědí, kolik uzlů přijímá pakety, všechna tři jádra číslují přijaté pakety podle jediného pravidla, a protože vědí, kolik uzlů celkem a počet jeho uzlů, každý server zpracovává pouze jeho část paketů, zbytek paketů server ignoruje - zpracovávají je jiné servery.


Přečtěte si o tom více v tomto

V tomto článku popíšu instalaci a konfiguraci Active/Active clusteru založeného na Pacemaker, Corosync 2.xa CLVM pomocí sdíleného úložiště. Ukážu vám, jak přizpůsobit tento cluster pro práci s kontejnery LXC a Docker. Popíšu příkazy pro práci s clusterem. A vzpomenu si na hrábě, do kterého jsem se dostal, což, doufám, ulehčí osud dalším gaunerům.

Jako serverové distribuce budu používat CentOS 7 + epel a nejnovější verze balíčků v nich. Hlavním nástrojem pro práci s Pacemakerem bude PCS (konfigurační systém kardiostimulátoru/korosync).

Příprava serveru

Použil jsem dvouuzlovou konfiguraci, ale počet lze podle potřeby zvýšit. Servery mají společné sdílené úložiště připojené přes SAS. Pokud to nemáte po ruce, můžete použít úložiště připojené přes FC nebo iSCSI. Budete potřebovat dva svazky, jeden pro obecné potřeby, druhý pro Docker. Jeden svazek můžete rozdělit na dvě části.
Nainstalujte CentOS 7, epel repository a nakonfigurujte síť. Použití bondingu pro síťová rozhraní a multipath pro SAS je žádoucí. Pro práci s různými vlany nakonfigurujeme příslušné br0.VID mosty, ke kterým pak navážeme LXC kontejnery. Nebudu popisovat detaily - vše je standardní.




Nahoru