sql >> Databáze >  >> RDS >> MariaDB

Případy použití MariaDB a Docker, část 1

Některé z nejčastějších dotazů našich uživatelů se týkají podpory MariaDB v Dockeru, a zejména toho, jak ji lze použít v konkrétních vývojových nebo produkčních nasazeních. Tato série článků se pokusí pokrýt několik případů použití Docker a MariaDB.

Proč zvolit Docker pro MariaDB?

  • Kontejnery Docker lze použít k testování, nasazení a vydání aplikací v jakémkoli prostředí.
  • Nasazení dockerů lze snadno automatizovat, vytvářet prostředí pro nasazení a snadno je reprodukovat ve fázi a produkci.
  • Docker je lehká virtualizace. Hypervizory nejsou potřeba a kontejner MariaDB Docker by měl fungovat stejně dobře jako běžná instalace MariaDB bez jakékoli znatelné režie.
  • Docker je agnostický – jakmile nainstalujete Docker do svého operačního systému, pokyny pro spouštění kontejnerů jsou naprosto stejné, ať už používáte CentOS, Debian nebo Ubuntu, nebo dokonce Mac OS X a Windows.

Několik důležitých bodů o kontejnerech Docker

  • Docker kontejnery jsou neměnné. Po spuštění je nelze snadno upravit (pokud se k nim nepřipojíte a vše nerozbijete).
  • Ve výchozím nastavení a kvůli výše uvedenému nejsou data trvalá. Docker k nápravě používá objemy dat. Kontejner MariaDB používá svazek k uchování dat (více o tom později).

Stav MariaDB v Dockeru

MariaDB byla vždy několik let velmi dobře podporována v Dockeru, díky mnoha snahám týmu a komunity Docker. Docker dodnes podporuje všechna tři vydání MariaDB:5.5, 10.0 a 10.1. Dokovací kontejner MariaDB má následující zvláštnosti:

  • Kořenové heslo MariaDB lze nastavit nebo vygenerovat pomocí proměnných prostředí.
  • Nového uživatele a prázdnou databázi lze vytvořit stejným postupem jako výše.
  • Instance má výchozí trvalý objem dat /var/lib/mysql, který můžete dockeru nechat spravovat interně nebo jej připojit do adresáře podle vašeho výběru.
  • Instanci kontejneru lze připojit k existujícímu datovému svazku (například k zálohě).
  • Síťové porty mohou být svázány s libovolnými porty na straně hostitele.
  • Znalostní báze MariaDB obsahuje rozsáhlý dokumentační článek o dockeru. Přečtěte si to!

Případ použití Dockeru č. 1:Vícenásobný nájem

Běžným případem použití pro MariaDB a Docker je spuštění několika instancí MariaDB na stejných fyzických hostitelích. Již existují řešení, jako je MySQL Sandbox a další, ale žádné z nich neposkytuje flexibilitu, snadné použití a výkon, které Docker nabízí.

Abychom ilustrovali náš názor, začněme tři různé instance MariaDB, z nichž každá používá jinou hlavní verzi:

docker run -d -p 3301:3306 -v ~/mdbdata/mdb55:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=admin --name mdb55 mariadb:5.5
docker run -d -p 3302:3306 -v ~/mdbdata/mdb10:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=admin --name mdb10 mariadb:10.0
docker run -d -p 3303:3306 -v ~/mdbdata/mdb11:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=admin --name mdb11 mariadb:10.1

Docker automaticky stáhne oficiální obrázky mariadb z úložiště a spustí je. Nyní se můžeme jednoduše připojit k jakékoli z těchto instancí pomocí poskytnutého portu a hesla:

$ mysql -u root -padmin -h 127.0.0.1 -P3302
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 2
Server version: 10.0.22-MariaDB-1~jessie mariadb.org binary distribution Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

Všimněte si, že každá z našich instancí bude používat trvalý objem dat umístěný pod ~/mdbdata adresář – Docker za nás automaticky vytvoří tento adresářový strom.

Nyní, když jsme to udělali, pojďme se ponořit do pokročilých funkcí Dockeru. Docker podporuje linuxové kontrolní skupiny (cgroups), které lze použít k omezení, účtování nebo izolaci využití zdrojů. Řekněme, že chceme naši instanci MariaDB 10.1 (s názvem mdb11 ), aby měl vyšší prioritu CPU než ostatní dvě instance. V tomto případě můžeme snížit podíl CPU mdb10 a mdb55 . Každá instance má ve výchozím nastavení maximálně 1024 sdílených CPU, takže pojďme znovu vytvořit náš mdb55 a mdb10 kontejnery s 512 sdílenými CPU.

V preambuli jsme řekli, že kontejnery Docker jsou neměnné. Pokud chceme změnit parametry našich kontejnerů, musíme je odstranit. Toto není problém, protože jsme definovali trvalé objemy dat v ~/mdbdata, takže skutečný obsah naší databáze zůstane zachován, když kontejnery znovu vytvoříme.

docker rm -f mdb55 mdb10
docker run -d -p 3301:3306 --cpu-shares=512 -v ~/mdbdata/mdb55:/var/lib/mysql --name mdb55 mariadb:5.5
docker run -d -p 3302:3306 --cpu-shares=512 -v ~/mdbdata/mdb10:/var/lib/mysql --name mdb10 mariadb:10.0

Znovu jsme vytvořili dvě instance MariaDB s 512 sdílenými CPU. Toto je však měkký limit a je vynucován pouze tehdy, když procesy soutěží o cykly CPU. Pokud jsou ostatní instance nečinné, jakákoli instance je schopna využít až 100 % všech CPU. V praxi to znamená, že pokud všechny tři instance používají CPU současně, každý ze dvou prvních kontejnerů, z nichž každý má 512 sdílení, (mdb55 a mdb10 ) bude moci využívat až 25 % všech CPU, zatímco třetí kontejner, který má 1024 sdílených položek, bude moci využívat až 50 % všech CPU.

Další možností je svázat instanci s konkrétním jádrem CPU, takže znovu vytvořte kontejnery a udělejte to:

docker rm -f mdb55 mdb10 mdb11
docker run -d -p 3301:3306 --cpuset-cpus=0 -v ~/mdbdata/mdb55:/var/lib/mysql --name mdb55 mariadb:5.5
docker run -d -p 3302:3306 --cpuset-cpus=1 -v ~/mdbdata/mdb10:/var/lib/mysql --name mdb10 mariadb:10.0
docker run -d -p 3303:3306 --cpuset-cpus=2-3 -v ~/mdbdata/mdb10:/var/lib/mysql --name mdb11 mariadb:10.1

Ve výše uvedeném příkladu, vzhledem k systému se 4 jádry CPU, mé kontejnery mdb55 a mdb10 poběží každý na samostatném jediném jádru CPU, zatímco mdb11 budou obě zbývající jádra.

Můžeme také řídit způsob, jakým naše kontejnery přistupují k diskovým a paměťovým prostředkům, což je rozhodně užitečné na zaneprázdněném systému – nechcete například utécivý vývojový dotaz využívající celý disk vašich instancí zátěžového testování. Zatímco limity paměti jsou jednoduché, blokové IO sdílení fungují podobným způsobem jako CPU sdílené s tím rozdílem, že výchozí blokové IO sdílení je 500 v rozsahu 10 až 1000.

Omezme naše dva první kontejnery na 512 milionů paměti a 250 blokových IO sdílení:

docker rm -f mdb55 mdb10
docker run -d -p 3301:3306 --blkio-weight=250 --memory=512M -v ~/mdbdata/mdb55:/var/lib/mysql --name mdb55 mariadb:5.5
docker run -d -p 3302:3306 --blkio-weight=250 --memory=512M  -v ~/mdbdata/mdb10:/var/lib/mysql --name mdb10 mariadb:10.0

Podobně jako to, co jsme viděli v příkladu sdílení CPU, pokud tři instance soutěží o IO, každý z prvních dvou kontejnerů bude omezen na 25 % dostupné IO kapacity, přičemž třetí kontejner bude omezen na zbývající kapacitu, např. 50 %.

Omezení běhového prostředí Dockeru je mnohem více, než o čem jsme mluvili zde v tomto článku. Přečtěte si rozsáhlou referenci ke spuštění Dockeru, kde se dozvíte o všech možných možnostech.


  1. Jaký je připojovací řetězec pro localdb pro verzi 11

  2. Logický pohled na konvence pojmenování SQL Serveru

  3. org.postgresql.util.PSQLException:Velké objekty nelze použít v režimu automatického potvrzení

  4. Jak zkontrolovat zastaralé statistiky