sql >> Databáze >  >> RDS >> PostgreSQL

Ansible miluje PostgreSQL

Ansible je prostě skvělý a PostgreSQL je určitě úžasný, pojďme se podívat, jak úžasně spolupracují!

====================Oznámení v hlavním vysílacím čase! =====================

PGConf Europe 2015 se letos bude konat 27. až 30. října ve Vídni.

Předpokládám, že se možná zajímáte o správu konfigurace, orchestraci serveru, automatizované nasazení (proto čtete tento příspěvek na blogu, že?) a rádi pracujete s PostgreSQL (určitě) na AWS (volitelně), pak se možná budete chtít připojit k mé přednášce „Správa PostgreSQL pomocí Ansible“ 28. října, 15-15:50.

Podívejte se prosím na úžasný rozvrh a nenechte si ujít šanci zúčastnit se největší evropské události PostgreSQL!

Doufám, že se tam uvidíme, ano, rád piju kávu po rozhovorech 🙂

====================Oznámení v hlavním vysílacím čase! =====================

Co je Ansible a jak funguje?

Motto Ansible je „Jednoduchá, bez agenta a výkonná automatizace IT s otevřeným zdrojovým kódem ” citací z Ansible docs.

Jak je vidět z obrázku níže, domovská stránka Ansible uvádí, že hlavní oblasti použití Ansible jsou:poskytování, správa konfigurace, nasazení aplikací, nepřetržité doručování, zabezpečení a dodržování předpisů, orchestrace. Nabídka přehledu také ukazuje, na které platformy můžeme Ansible integrovat, tj. AWS, Docker, OpenStack, Red Hat, Windows.

Pojďme se podívat na hlavní případy použití Ansible, abychom pochopili, jak funguje a jak je užitečný pro IT prostředí.

Zajišťování

Ansible je váš věrný přítel, když chcete automatizovat vše ve vašem systému. Je to bez agenta a můžete jednoduše spravovat své věci (tj. servery, load balancery, přepínače, firewally) přes SSH. Ať už vaše systémy běžící na bare-metalových nebo cloudových serverech Ansible tu bude a pomůže vám zřídit vaše instance. Jeho idempotentní vlastnosti zajišťují, že budete vždy ve stavu, jaký jste si přáli (a očekávali).

Správa konfigurace

Jednou z nejtěžších věcí je neopakovat se v opakujících se operačních úkolech a zde opět přichází na mysl Ansible jako spasitel. Za starých dobrých časů, kdy byly časy špatné, sysadminové psali mnoho skriptů a připojovali se k mnoha mnoha serverům, aby je použili, a evidentně to nebylo to nejlepší v jejich životě. Jak všichni víme, manuální úkoly jsou náchylné k chybám a vedou k heterogennímu prostředí namísto homogenního a lépe ovladatelného, ​​což rozhodně činí náš život více stresujícím.

S Ansible můžete psát jednoduché playbooky (s pomocí velmi informativní dokumentace a podpory její obrovské komunity) a jakmile napíšete své úkoly, můžete volat širokou škálu modulů (např. AWS, Nagios, PostgreSQL, SSH, APT, File moduly). Výsledkem je, že se můžete soustředit na kreativnější činnosti než na ruční správu konfigurací.

Nasazení aplikace

Když jsou artefakty připraveny, je velmi snadné je nasadit na řadu serverů. Vzhledem k tomu, že Ansible komunikuje přes SSH, není třeba stahovat z úložiště na každém serveru nebo se trápit starodávnými metodami, jako je kopírování souborů přes FTP. Ansible může synchronizovat artefakty a zajistit, aby byly přenášeny pouze nové nebo aktualizované soubory a odstraněny zastaralé soubory. To také urychluje přenos souborů a šetří velkou šířku pásma.

Kromě přenosu souborů pomáhá Ansible také připravit servery na produkční použití. Před přenosem může pozastavit sledování, odebrat servery z nástrojů pro vyrovnávání zatížení a zastavit služby. Po nasazení může spouštět služby, přidávat servery pro vyrovnávání zatížení a obnovovat monitorování.

To vše se nemusí dít na všech serverech najednou. Ansible může pracovat na podmnožině serverů najednou a zajistit nasazení bez výpadků. Například může najednou nasadit 5 serverů najednou a po dokončení je může nasadit na dalších 5 serverů.

Po implementaci tohoto scénáře jej lze spustit kdekoli. Vývojáři nebo členové týmu QA mohou za účelem testování provádět nasazení na svých vlastních počítačích. Aby bylo možné z jakéhokoli důvodu rozmístění vrátit zpět, vše, co Ansible potřebuje, je umístění posledních známých funkčních artefaktů. Poté je může snadno znovu nasadit na produkční servery a uvést systém zpět do stabilního stavu.

Nepřetržité doručování

Nepřetržité dodávání znamená přijetí rychlého a jednoduchého přístupu k vydání. K dosažení tohoto cíle je zásadní používat ty nejlepší nástroje, které umožňují časté uvolňování bez prostojů a vyžadují co nejmenší lidský zásah. Vzhledem k tomu, že jsme se dozvěděli o možnostech nasazení aplikací Ansible výše, je docela snadné provádět nasazení s nulovými prostoji. Dalším požadavkem na nepřetržité dodávky je méně manuálních procesů, což znamená automatizaci. Ansible může automatizovat jakýkoli úkol od poskytování serverů až po konfiguraci služeb, aby byly připraveny na produkci. Po vytvoření a otestování scénářů v Ansible se stává triviálním postavit je před kontinuální integrační systém a nechat Ansible dělat svou práci.

Zabezpečení a dodržování předpisů

Zabezpečení je vždy považováno za nejdůležitější věc, ale zajištění bezpečnosti systémů je jednou z nejtěžších věcí, kterou lze dosáhnout. Musíte si být jisti bezpečností vašich dat i bezpečností dat vašich zákazníků. Abyste si byli jisti zabezpečením svých systémů,  definování zabezpečení nestačí, musíte být schopni toto zabezpečení použít a neustále monitorovat své systémy, abyste zajistili, že budou s tímto zabezpečením nadále v souladu.

Ansible se snadno používá, ať už jde o nastavení pravidel brány firewall, zamykání uživatelů a skupin nebo použití vlastních zásad zabezpečení. Svou podstatou je bezpečný, protože můžete opakovaně používat stejnou konfiguraci a provede pouze změny nezbytné k tomu, aby byl systém opět v souladu.

Orchestrování

Ansible zajišťuje, že všechny zadané úkoly jsou ve správném pořadí a vytváří soulad mezi všemi zdroji, které spravuje. Organizace komplexních vícevrstvých nasazení je snazší díky možnosti správy konfigurace a nasazení Ansible. Například, vezmeme-li v úvahu nasazení softwarového balíku, obavy, jako je zajištění připravenosti všech databázových serverů před aktivací aplikačních serverů nebo konfigurace sítě před přidáním serverů do nástroje pro vyrovnávání zatížení, již nejsou komplikovaným problémem.

Ansible také pomáhá orchestraci dalších nástrojů pro orchestraci, jako je Amazon’s CloudFormation, OpenStack’s Heat, Docker’s Swarm atd. Tímto způsobem, místo abyste se učili různé platformy, jazyky a pravidla; uživatelé se mohou soustředit pouze na syntaxi Ansible YAML a výkonné moduly.

Co je modul Ansible?

Moduly nebo knihovny modulů poskytují Ansible prostředky pro řízení nebo správu zdrojů na místních nebo vzdálených serverech. Plní různé funkce. Modul může být například zodpovědný za restartování počítače nebo může jednoduše zobrazit zprávu na obrazovce.

Ansible umožňuje uživatelům psát své vlastní moduly a také poskytuje základní nebo extra moduly připravené k použití.

A co příručky Ansible?

Ansible nám umožňuje organizovat naši práci různými způsoby. V jeho nejpřímější podobě můžeme pracovat s moduly Ansible pomocí „ansible ” nástroj příkazového řádku a soubor inventáře.

Inventář

Jedním z nejdůležitějších konceptů je inventář . Potřebujeme soubor inventáře, abychom Ansible věděli, ke kterým serverům se potřebuje připojit pomocí SSH, jaké informace o připojení vyžaduje a volitelně, které proměnné jsou k těmto serverům přidruženy.

Soubor inventáře je ve formátu podobném INI. V souboru inventáře můžeme určit více než jednoho hostitele a seskupit je do více než jedné skupiny hostitelů.

Náš vzorový soubor inventáře hosts.ini je podobný následujícímu:

[dbservers]
db.example.com

Zde máme jednoho hostitele s názvem „db.example.com“ ve skupině hostitelů s názvem „dbservers“. V souboru inventáře můžeme také zahrnout vlastní porty SSH, uživatelská jména SSH, klíče SSH, informace o proxy, proměnné atd.

Protože máme připravený soubor inventáře, abychom viděli doby provozu našich databázových serverů, můžeme vyvolat Ansibleův „příkaz “ a spusťte „uptime ” na těchto serverech:

ansible dbservers -i hosts.ini -m command -a "uptime"

Zde jsme dali Ansible pokyn, aby načetl hostitele ze souboru hosts.ini, připojil je pomocí SSH, provedl „uptime ” na každém z nich a poté vytiskněte jejich výstup na obrazovku. Tento typ spouštění modulu se nazývá příkaz ad-hoc .

Výstup příkazu bude vypadat takto:

[email protected] ~/blog/ansible-loves-postgresql # ansible dbservers -i hosts.ini -m command -a "uptime"
db.example.com | success | rc=0 >>
21:16:24 up 93 days,  9:17,  4 users,  load average: 0.08, 0.03, 0.05

Pokud však naše řešení obsahuje více než jeden krok, je obtížné je spravovat pouze pomocí ad-hoc příkazů.

Zde jsou knihy Ansible. Umožňuje nám to uspořádat naše řešení do souboru playbooku integrací všech kroků pomocí úkolů, proměnných, rolí, šablon, obslužných programů a inventáře.

Pojďme se krátce podívat na některé z těchto termínů, abychom pochopili, jak nám mohou pomoci.

Úkoly

Dalším důležitým pojmem jsou úkoly. Každá úloha Ansible obsahuje název, modul, který má být volán, parametry modulu a volitelně předběžné/následné podmínky. Umožňují nám volat moduly Ansible a předávat informace po sobě jdoucím úkolům.

Proměnné

Existují také proměnné. Jsou velmi užitečné pro opětovné použití informací, které jsme poskytli nebo shromáždili. Můžeme je definovat buď v inventáři, v externích souborech YAML nebo v playbookech.

Příručka

Ansible playbooky jsou napsány pomocí syntaxe YAML. Může obsahovat více než jednu hru. Každá hra obsahuje název hostitelských skupin, ke kterým se lze připojit, a úkoly, které musí provést. Může také obsahovat proměnné/role/handlery, pokud jsou definovány.

Nyní se můžeme podívat na velmi jednoduchou příručku, abychom viděli, jak ji lze strukturovat:

---

- hosts: dbservers
  gather_facts: no

  vars:
    who: World

  tasks:
  - name: say hello
    debug: msg="Hello {{ who }}"

  - name: retrieve the uptime
    command: uptime

V této velmi jednoduché příručce jsme Ansible řekli, že by měla fungovat na serverech definovaných v hostitelské skupině „dbservers“. Vytvořili jsme proměnnou nazvanou „kdo“ a poté jsme definovali naše úkoly. Všimněte si, že v první úloze, kde jsme vytiskli ladicí zprávu, jsme použili proměnnou „who“ a způsobili, že Ansible vytiskl na obrazovku „Hello World“. Ve druhém úkolu jsme řekli Ansible, aby se připojil ke každému hostiteli a poté tam provedl příkaz „uptime“.

Moduly Ansible PostgreSQL

Ansible poskytuje řadu modulů pro PostgreSQL. Některé z nich jsou umístěny pod základními moduly, zatímco jiné lze nalézt pod doplňkovými moduly.

Všechny moduly PostgreSQL vyžadují, aby byl balíček Python psycopg2 nainstalován na stejném počítači se serverem PostgreSQL. Psycopg2 je databázový adaptér PostgreSQL v programovacím jazyce Python.

Na systémech Debian/Ubuntu lze balíček psycopg2 nainstalovat pomocí následujícího příkazu:

apt-get install python-psycopg2

Nyní tyto moduly podrobně prozkoumáme. Například pro účely budeme pracovat na serveru PostgreSQL na hostiteli db.example.com na portu 5432 s postgres uživatele a prázdné heslo.

postgresql_db

Tento základní modul vytváří nebo odstraňuje danou databázi PostgreSQL. V terminologii Ansible zajišťuje přítomnost nebo nepřítomnost dané PostgreSQL databáze.

Nejdůležitější možností je požadovaný parametr „name “. Představuje název databáze na serveru PostgreSQL. Dalším významným parametrem je „stav “. Vyžaduje jednu ze dvou hodnot:přítomný nebo nepřítomný . To nám umožňuje vytvořit nebo odebrat databázi, která je identifikována hodnotou uvedenou v jménu parametr.

Některé pracovní postupy mohou také vyžadovat specifikaci parametrů připojení, jako je login_host , port , login_user a přihlašovací_heslo .

Vytvořme databázi s názvem „module_test ” na našem serveru PostgreSQL přidáním následujících řádků do našeho souboru playbooku:

- postgresql_db: name=module_test
                 state=present
                 login_host=db.example.com
                 port=5432
                 login_user=postgres

Zde jsme se připojili k našemu testovacímu databázovému serveru na db.example.com s uživatelem; postgres . Nemusí to však být postgres user jako uživatelské jméno může být cokoliv.

Odebrání databáze je stejně snadné jako její vytvoření:

- postgresql_db: name=module_test
                 state=absent
                 login_host=db.example.com
                 port=5432
                 login_user=postgres

Všimněte si hodnoty „absent“ v parametru „state“.

postgresql_ext

Je známo, že PostgreSQL má velmi užitečná a výkonná rozšíření. Například nedávné rozšíření je tsm_system_rows což pomáhá načíst přesný počet řádků při vzorkování tabulek. (Pro další informace se můžete podívat na můj předchozí příspěvek o metodách vzorkování tabulek.)

Tento extra modul přidává nebo odstraňuje rozšíření PostgreSQL z databáze. Vyžaduje dva povinné parametry:db a jméno . db parametr odkazuje na název databáze a jméno parametr odkazuje na název rozšíření. Máme také stát parametr, který potřebuje přítomný nebo nepřítomný hodnoty a stejné parametry připojení jako v modulu postgresql_db.

Začněme vytvořením rozšíření, o kterém jsme hovořili:

- postgresql_ext: db=module_test
                  name=tsm_system_rows
                  state=present
                  login_host=db.example.com
                  port=5432
                  login_user=postgres

postgresql_user

Tento základní modul umožňuje přidávat nebo odebírat uživatele a role z databáze PostgreSQL.

Je to velmi výkonný modul, protože zajišťuje přítomnost uživatele v databázi a zároveň umožňuje úpravu oprávnění nebo rolí.

Začněme tím, že se podíváme na parametry. Jediným povinným parametrem je zde „name “, který odkazuje na uživatele nebo název role. Stejně jako ve většině modulů Ansible také „stav “ parametr je důležitý. Může mít jeden z přítomných nebo nepřítomný hodnoty a jeho výchozí hodnota je přítomný .

Kromě parametrů připojení jako v předchozích modulech jsou některé další důležité volitelné parametry:

  • db :Název databáze, kde budou udělena oprávnění
  • heslo :Heslo uživatele
  • soukromí :Oprávnění ve formátu „priv1/priv2“ nebo oprávnění tabulky ve formátu „table:priv1,priv2,…“
  • role_attr_flags :Atributy role. Možné hodnoty jsou:
    • [NE]SUPERUSER
    • [NE]CREATEROLE
    • [NE]CREATEUSER
    • [NE]CREATEDB
    • [NE]ZDĚDIT
    • [NE]PŘIHLÁŠENÍ
    • [NE]REPLIKACE

Chcete-li vytvořit nového uživatele s názvem ada s heslem lovelace a oprávnění pro připojení k databázi module_test , můžeme do naší příručky přidat následující:

- postgresql_user: db=module_test
                   name=ada
                   password=lovelace
                   state=present
                   priv=CONNECT
                   login_host=db.example.com
                   port=5432
                   login_user=postgres

Nyní, když máme uživatelku připravenou, můžeme jí přidělit nějaké role. Chcete-li povolit „ada“ přihlásit se a vytvářet databáze:

- postgresql_user: name=ada
                   role_attr_flags=LOGIN,CREATEDB
                   login_host=db.example.com
                   port=5432
                   login_user=postgres

Můžeme také udělit globální nebo tabulková oprávnění, jako je „INSERT “, „AKTUALIZACE “, „VYBRAT “ a „DELETE ” pomocí priv parametr. Jedním důležitým bodem, který je třeba vzít v úvahu, je, že uživatele nelze odebrat, dokud nejsou nejprve odebrána všechna udělená oprávnění.

postgresql_privs

Tento základní modul uděluje nebo odebírá oprávnění k objektům databáze PostgreSQL. Podporované objekty jsou:table , sekvence , funkce , databáze , schéma , jazyk , tabulkový prostor a skupina .

Požadované parametry jsou „databáze“; název databáze, které se má udělit/odebrat oprávnění, a „role“; seznam názvů rolí oddělených čárkami.

Nejdůležitější volitelné parametry jsou:

  • typ :Typ objektu pro nastavení oprávnění. Může být jeden z:tabulka, sekvence, funkce, databáze, schéma, jazyk, tabulkový prostor, skupina . Výchozí hodnota je table .
  • objs :Databázové objekty pro nastavení oprávnění. Může mít více hodnot. V takovém případě jsou objekty odděleny čárkou.
  • soukromí :Čárkami oddělený seznam oprávnění k udělení nebo odebrání. Možné hodnoty zahrnují:ALL , VYBRAT , AKTUALIZOVAT , VLOŽIT .

Podívejme se, jak to funguje udělením všech oprávnění „veřejnosti ” schéma na “ada “:

- postgresql_privs: db=module_test
                    privs=ALL
                    type=schema
                    objs=public
                    role=ada
                    login_host=db.example.com
                    port=5432
                    login_user=postgres

postgresql_lang

Jednou z velmi výkonných funkcí PostgreSQL je jeho podpora pro prakticky jakýkoli jazyk, který lze použít jako procedurální jazyk. Tento extra modul přidává, odstraňuje nebo mění procedurální jazyky s databází PostgreSQL.

Jediný povinný parametr je „lang “; název procedurálního jazyka, který se má přidat nebo odebrat. Další důležité možnosti jsou „db “; název databáze, do které je jazyk přidán nebo z níž je odebrán, a „důvěra “; možnost, aby byl jazyk pro vybranou databázi důvěryhodný nebo nedůvěryhodný.

Povolme jazyk PL/Python pro naši databázi:

- postgresql_lang: db=module_test
                   lang=plpython2u
                   state=present
                   login_host=db.example.com
                   port=5432
                   login_user=postgres

Dáme vše dohromady

Nyní, když víme, jak je Ansible playbook strukturován a které PostgreSQL moduly máme k dispozici, můžeme nyní spojit naše znalosti v Ansible playbooku.

Konečná podoba našeho playbooku main.yml je následující:

---

- hosts: dbservers
  sudo: yes
  sudo_user: postgres
  gather_facts: yes

  vars:
    dbname: module_test
    dbuser: postgres

  tasks:
  - name: ensure the database is present
    postgresql_db: >
      state=present
      db={{ dbname }}
      login_user={{ dbuser }}

  - name: ensure the tsm_system_rows extension is present
    postgresql_ext: >
      name=tsm_system_rows
      state=present
      db={{ dbname }}
      login_user={{ dbuser }}

  - name: ensure the user has access to database
    postgresql_user: >
      name=ada
      password=lovelace
      state=present
      priv=CONNECT
      db={{ dbname }}
      login_user={{ dbuser }}

  - name: ensure the user has necessary privileges
    postgresql_user: >
      name=ada
      role_attr_flags=LOGIN,CREATEDB
      login_user={{ dbuser }}

  - name: ensure the user has schema privileges
    postgresql_privs: >
      privs=ALL
      type=schema
      objs=public
      role=ada
      db={{ dbname }}
      login_user={{ dbuser }}

  - name: ensure the postgresql-plpython-9.4 package is installed
    apt: name=postgresql-plpython-9.4 state=latest
    sudo_user: root

  - name: ensure the PL/Python language is available
    postgresql_lang: >
      lang=plpython2u
      state=present
      db={{ dbname }}
      login_user={{ dbuser }}

Nyní můžeme spustit náš playbook pomocí příkazu „ansible-playbook“:

[email protected] ~/blog/ansible-loves-postgresql # ansible-playbook -i hosts.ini main.yml

PLAY [dbservers] **************************************************************

GATHERING FACTS ***************************************************************
ok: [db.example.com]

TASK: [ensure the database is present] ****************************************
changed: [db.example.com]

TASK: [ensure the tsm_system_rows extension is present] ***********************
changed: [db.example.com]

TASK: [ensure the user has access to database] ********************************
changed: [db.example.com]

TASK: [ensure the user has necessary privileges] ******************************
changed: [db.example.com]

TASK: [ensure the user has schema privileges] *********************************
changed: [db.example.com]

TASK: [ensure the postgresql-plpython-9.4 package is installed] ***************
changed: [db.example.com]

TASK: [ensure the PL/Python language is available] ****************************
changed: [db.example.com]

PLAY RECAP ********************************************************************
db.example.com             : ok=8    changed=7    unreachable=0    failed=0

Inventář a soubor playbooku najdete v mém úložišti GitHub vytvořeném pro tento blogový příspěvek. Existuje také další příručka s názvem „remove.yml“, která zruší vše, co jsme udělali v hlavní příručce.

Další informace o Ansible:

  • Podívejte se na jejich dobře napsané dokumenty.
  • Podívejte se na video rychlého startu Ansible, které je opravdu užitečným návodem.
  • Řiďte se plánem jejich webinářů, na seznamu je několik skvělých nadcházejících webinářů.

  1. Odstranění položky z ListView a databáze pomocí OnItemClickListener

  2. Jak vytvořit blog v PHP a MySQL databázi - Backend

  3. Cloud Vendor Deep-Dive:PostgreSQL na DigitalOcean

  4. Instalace SQL Server 2017 krok za krokem -1