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

Nasazení a konfigurace PostgreSQL pomocí Puppet

Puppet je software s otevřeným zdrojovým kódem pro správu konfigurace a nasazení. Byla založena v roce 2005, je multiplatformní a má dokonce svůj vlastní deklarativní jazyk pro konfiguraci.

Úlohy související se správou a údržbou PostgreSQL (nebo jiného softwaru) sestává z každodenních, opakujících se procesů, které vyžadují monitorování. To platí i pro ty úlohy provozované skripty nebo příkazy prostřednictvím plánovacího nástroje. Složitost těchto úloh se exponenciálně zvyšuje, jsou-li prováděny na rozsáhlé infrastruktuře, nicméně použití Puppet pro tento druh úloh může často vyřešit tyto typy velkých problémů, protože Puppet centralizuje a automatizuje výkon těchto operací velmi agilním způsobem.

Puppet funguje v rámci architektury na úrovni klient/server, kde se provádí konfigurace; tyto operace jsou poté rozptýleny a spuštěny na všech klientech (známých také jako uzly).

Uzel agentů obvykle běží každých 30 minut a shromáždí sadu informací (typ procesoru, architektura, IP adresa atd..), které se také nazývají fakta, a poté informace odešle master, který čeká na odpověď, aby zjistil, zda je možné použít nějaké nové konfigurace.

Tyto skutečnosti umožní masteru přizpůsobit stejnou konfiguraci pro každý uzel.

Velmi zjednodušeně je Puppet jedním z nejdůležitějších nástrojů DevOps k dispozici dnes. V tomto blogu se podíváme na následující...

  • Případ použití pro Puppet &PostgreSQL
  • Instalace loutky
  • Konfigurace a programování loutky
  • Konfigurace Puppet pro PostgreSQL 

Instalace a nastavení Puppet (verze 5.3.10) popsané níže byly provedeny na sadě hostitelů používajících CentOS 7.0 jako operační systém.

Případ použití pro Puppet &PostgreSQL

Předpokládejme, že je problém ve vašem firewallu na počítačích, které hostí všechny vaše PostgreSQL servery, pak by bylo nutné odmítnout všechna odchozí připojení k PostgreSQL a provést to co nejdříve.

Puppet je pro tuto situaci perfektní nástroj, zejména proto, že rychlost a efektivita nezbytný. O tomto příkladu uvedeném v sekci „Konfigurace Puppet pro PostgreSQL“ budeme hovořit pomocí správy parametru listen_addresses.

Instalace loutky

Existuje soubor běžných kroků, které je třeba provést na hlavním hostiteli nebo hostiteli agenta:

Krok jedna

Aktualizace souboru /etc/hosts s názvy hostitelů a jejich IP adresou

192.168.1.85 agent agent.severalnines.com

192.168.1.87 master master.severalnines.com puppet

Krok dva

Přidání repozitářů Puppet do systému

$ sudo rpm –Uvh https://yum.puppetlabs.com/puppet5/el/7/x86_64/puppet5-release-5.0.0-1-el7.noarch.rpm

Pro jiné operační systémy nebo verze CentOS lze nejvhodnější úložiště nalézt v Puppet, Inc. Yum Repositories.

Krok tři

Konfigurace serveru NTP (Network Time Protocol)

$ sudo yum -y install chrony

Krok čtyři

Chrony se používá k synchronizaci systémových hodin z různých NTP serverů, a tak udržuje čas synchronizovaný mezi hlavním a agentním serverem.

Po instalaci chrony  musí být povolena a restartována:

$ sudo systemctl enable chronyd.service

$ sudo systemctl restart chronyd.service

Krok 5

Zakázat parametr SELinux

V souboru /etc/sysconfig/selinux musí být parametr SELINUX (Security-Enhanced Linux) deaktivován, aby neomezoval přístup na obou hostitelích.

SELINUX=disabled

Krok šest

Před instalací loutky (buď master nebo agent) musí být firewall v těchto hostitelích odpovídajícím způsobem definován:

$ sudo firewall-cmd -–add-service=ntp -–permanent 

$ sudo firewall-cmd –-reload 

Instalace Mistra loutek

Jakmile je do systému přidáno úložiště balíčků puppet5-release-5.0.0-1-el7.noarch.rpm, lze instalaci puppetserveru provést:

$ sudo yum install -y puppetserver

Parametr max. přidělení paměti je důležité nastavení pro aktualizaci souboru /etc/sysconfig/puppetserver na 2 GB (nebo na 1 GB, pokud se služba nespustí):

JAVA_ARGS="-Xms2g –Xmx2g "

V konfiguračním souboru /etc/puppetlabs/puppet/puppet.conf je nutné přidat následující parametrizaci:

[master]

dns_alt_names=master.severalnines.com,puppet



[main]

certname = master.severalnines.com

server = master.severalnines.com

environment = production

runinterval = 1h

Služba puppetserver používá  port 8140 k naslouchání požadavkům uzlu, proto je nutné zajistit, aby byl tento port povolen:

$ sudo firewall-cmd --add-port=8140/tcp --permanent

$ sudo firewall-cmd --reload

Po provedení všech nastavení v loutkovém mistrovi je čas spustit tuto službu:

$ sudo systemctl start puppetserver

$ sudo systemctl enable puppetserver

Instalace Puppet Agent

Agent Puppet v úložišti balíčků puppet5-release-5.0.0-1-el7.noarch.rpm je také přidán do systému, instalaci puppet-agenta lze provést ihned:

$ sudo yum install -y puppet-agent

Konfigurační soubor puppet-agent /etc/puppetlabs/puppet/puppet.conf je také potřeba aktualizovat přidáním následujícího parametru:

[main]

certname = agent.severalnines.com

server = master.severalnines.com

environment = production

runinterval = 1h

Další krok spočívá v registraci uzlu agenta na hlavním hostiteli provedením následujícího příkazu:

$ sudo /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true

service { ‘puppet’:

ensure => ‘running’,

enable => ‘true’

  }

V tuto chvíli na hlavním hostiteli čeká na žádost loutkového agenta o podepsání certifikátu:

To musí být podepsáno provedením jednoho z následujících příkazů:

$ sudo /opt/puppetlabs/bin/puppet cert sign agent.severalnines.com

nebo

$ sudo /opt/puppetlabs/bin/puppet cert sign --all

Konečně (a jakmile loutkář podepíše certifikát) je čas použít konfigurace na agenta získáním katalogu od loutkáře:

$ sudo /opt/puppetlabs/bin/puppet agent --test

Parametr --test v tomto příkazu neznamená test, nastavení získaná z hlavního serveru se použije na místního agenta. Aby bylo možné otestovat/zkontrolovat konfigurace z hlavního serveru, musí být proveden následující příkaz:

$ sudo /opt/puppetlabs/bin/puppet agent --noop

Konfigurace a programování loutky

Puppet používá deklarativní programovací přístup, jehož účelem je specifikovat, co dělat, a nezáleží na způsobu, jak toho dosáhnout!

Nejzákladnější částí kódu na Puppet je zdroj, který specifikuje vlastnost systému, jako je příkaz, služba, soubor, adresář, uživatel nebo balíček.

Níže je uvedena syntaxe zdroje pro vytvoření uživatele:

user { 'admin_postgresql':

  ensure     => present,

  uid        => '1000',

  gid        => '1000',

  home       => '/home/admin/postresql'

}

K předchozí třídě (také známé jako manifest) souboru s příponou „pp“ (to znamená Puppet Program) lze připojit různé zdroje, nicméně několik manifestů a dat (jako jsou fakta, soubory a šablony) vytvoří modul. Všechny logické hierarchie a pravidla jsou znázorněny v níže uvedeném diagramu:

Účelem každého modulu je obsahovat všechny potřebné manifesty pro spuštění jednoho úkoly modulárním způsobem. Na druhou stranu koncept třídy není stejný jako v objektově orientovaných programovacích jazycích, v Puppet funguje jako agregátor zdrojů.

Uspořádání těchto souborů má specifickou strukturu adresářů, kterou je třeba dodržovat:

Ve kterých je účel každé složky následující:

Složka

Popis

manifesty

Kód loutky

soubory

Statické soubory ke zkopírování do uzlů

šablony

Soubory šablon ke zkopírování do spravovaných uzlů (lze je upravit pomocí proměnných)

příklady

Manifest ukázat, jak modul používat

Třídy(manifesty) mohou být použity jinými třídami, jak je znázorněno v příkladu níže:manifest init.pp na dev_accounts používá skupiny manifestů z modulu účtů.
class dev_accounts {

  $rootgroup = $osfamily ? {

    'Debian'  => 'sudo',

    'RedHat'  => 'wheel',

    default   => warning('This distribution is not supported by the Accounts module'),

  }



  include accounts::groups



  user { 'username':

    ensure      => present,

    home        => '/home/admin/postresql',

    shell       => '/bin/bash',

    managehome  => true,

    gid         => 'admin_db',

    groups      => "$rootgroup",

    password    => '$1$7URTNNqb$65ca6wPFDvixURc/MMg7O1'

  }

}

V další části vám ukážeme, jak vygenerovat obsah složky s příklady a také příkazy pro testování a publikování jednotlivých modulů.

Konfigurace Puppet pro PostgreSQL

Než představíme několik příkladů konfigurace pro nasazení a údržbu databáze PostgreSQL, je nutné nainstalovat loutkový modul PostgreSQL (na hostitelský server), abyste mohli využívat všechny jejich funkce:

$ sudo /opt/puppetlabs/bin/puppet module install puppetlabs-postgresql

V současné době jsou ve veřejném úložišti modulů Puppet Forge k dispozici tisíce modulů připravených k použití na Puppet.

Krok jedna

Nakonfigurujte a nasaďte novou instanci PostgreSQL. Zde je veškeré potřebné programování a konfigurace pro instalaci nové instance PostgreSQL do všech uzlů.

Prvním krokem je vytvoření nového adresáře se strukturou modulu, jak bylo dříve sdíleno:

$ cd /etc/puppetlabs/code/environments/production/modules

$ mkdir db_postgresql_admin

$ cd db_postgresql_admin; mkdir{examples,files,manifests,templates}

Potom musíte do souboru manifestu manifests/init.pp zahrnout třídu postgresql::server poskytovanou nainstalovaným modulem:

class db_postgresql_admin{

  include postgresql::server

}

Chcete-li zkontrolovat syntaxi manifestu, je vhodné provést následující příkaz:

$ sudo /opt/puppetlabs/bin/puppet parser validate init.pp

Pokud není vráceno nic, znamená to, že syntaxe je správná

Abyste si ukázali, jak používat tento modul v ukázkové složce, je nutné vytvořit nový soubor manifestu init.pp s následujícím obsahem:

include db_postgresql_admin

Ukázkové umístění v modulu musí být otestováno a aplikováno na hlavní katalog:

$ sudo /opt/puppetlabs/bin/puppet apply --modulepath=/etc/puppetlabs/code/environments/production/modules --noop init.pp

Nakonec je nutné definovat, ke kterému modulu má každý uzel přístup v souboru „/etc/puppetlabs/code/environments/production/manifests/site.pp“ :

node ’agent.severalnines.com’,’agent2.severalnines.com’{

 include db_postgresql_admin

}

Nebo výchozí konfigurace pro všechny uzly:

node default {

 include db_postgresql_admin

}

Uly obvykle každých 30 minut kontrolují hlavní katalog, nicméně tento dotaz lze vynutit na straně uzlu následujícím příkazem:

$ /opt/puppetlabs/bin/puppet agent -t

Nebo pokud je účelem simulovat rozdíly mezi hlavní konfigurací a aktuálním nastavením uzlu, lze použít parametr nopp (bez operace):

$ /opt/puppetlabs/bin/puppet agent -t --noop

Krok dva

Aktualizujte instanci PostgreSQL, aby naslouchala všem rozhraním. Předchozí instalace definuje nastavení instance ve velmi restriktivním režimu:povoluje pouze připojení na localhost, což mohou potvrdit hostitelé přidružení k portu 5432 (definováno pro PostgreSQL):

$ sudo netstat -ntlp|grep 5432

tcp        0 0 127.0.0.1:5432          0.0.0.0:* LISTEN   3237/postgres       

tcp6       0 0 ::1:5432                :::* LISTEN   3237/postgres       

Aby bylo možné poslouchat celé rozhraní, je nutné mít v souboru /etc/puppetlabs/code/environments/production/modules/db_postgresql_admin/manifests/init.pp následující obsah

class db_postgresql_admin{

  class{‘postgresql:server’:

        listen_addresses=>’*’ #listening all interfaces

       }

}

Ve výše uvedeném příkladu je deklarována třída postgresql::server a nastavení parametru listen_addresses na „*“, což znamená všechna rozhraní.

Nyní je port 5432 spojen se všemi rozhraními, lze jej potvrdit pomocí následující IP adresy/portu:„0.0.0.0:5432“

$ sudo netstat -ntlp|grep 5432

tcp        0 0 0.0.0.0:5432            0.0.0.0:* LISTEN   1232/postgres       

tcp6       0 0 :::5432                 :::* LISTEN   1232/postgres  

Chcete-li vrátit výchozí nastavení:povolte databázová připojení pouze z localhost, parametr listen_addresses musí být nastaven na „localhost“ nebo v případě potřeby zadat seznam hostitelů:

listen_addresses = 'agent2.severalnines.com,agent3.severalnines.com,localhost'

Chcete-li načíst novou konfiguraci z hlavního hostitele, stačí si ji vyžádat v uzlu:

$ /opt/puppetlabs/bin/puppet agent -t

Krok tři

Vytvořte databázi PostgreSQL. Instanci PostgreSQL lze vytvořit s novou databází a také s novým uživatelem (s heslem) pro použití této databáze a pravidlem pro soubor pg_hab.conf, které povolí připojení k databázi pro tohoto nového uživatele:

class db_postgresql_admin{

  class{‘postgresql:server’:

        listen_addresses=>’*’ #listening all interfaces

  }



   postgresql::server::db{‘nines_blog_db’:

     user => ‘severalnines’,          password=> postgresql_password(‘severalnines’,’passwd12’)

   }



   postgresql::server::pg_hba_rule{‘Authentication for severalnines’:

     Description =>’Open access to severalnines’,

     type => ‘local’,

database => ‘nines_blog_db’,

     user => ‘severalnines’,

address => ‘127.0.0.1/32’

         auth_method => ‘md5’

   }

}

Tento poslední zdroj má název „Autentizace pro několik devítek“ a soubor pg_hba.conf bude mít ještě jedno další pravidlo:

# Rule Name: Authentication for severalnines

# Description: Open access for severalnines

# Order: 150

local   nines_blog_db   severalnines 127.0.0.1/32    md5

Chcete-li načíst novou konfiguraci z hlavního hostitele, stačí si ji vyžádat v uzlu:

$ /opt/puppetlabs/bin/puppet agent -t

Krok čtyři

Vytvořte uživatele pouze pro čtení. Chcete-li vytvořit nového uživatele s oprávněními pouze pro čtení, je třeba do předchozího manifestu přidat následující zdroje:

postgresql::server::role{‘Creation of a new role nines_reader’:

createdb   => false,

createrole => false,

superuser => false,     password_hash=> postgresql_password(‘nines_reader’,’passwd13’)

}

postgresql::server::pg_hba_rule{‘Authentication for nines_reader’:

     description =>’Open access to nines_reader’,

     type => ‘host’,

database => ‘nines_blog_db’,

     user => ‘nines_reader’,

address => ‘192.168.1.10/32’,

         auth_method => ‘md5’

   }

Chcete-li načíst novou konfiguraci z hlavního hostitele, stačí si ji vyžádat v uzlu:

$ /opt/puppetlabs/bin/puppet agent -t

Závěr 

V tomto příspěvku na blogu jsme vám ukázali základní kroky k nasazení a zahájení konfigurace databáze PostgreSQL automatickým a přizpůsobeným způsobem na několika uzlech (což mohou být dokonce virtuální počítače).

Tyto typy automatizace vám mohou pomoci stát se efektivnějšími, než když to děláte ručně, a konfiguraci PostgreSQL lze snadno provést pomocí několika tříd dostupných v úložišti puppetforge


  1. Jak CAST() funguje v MariaDB

  2. Použití LogMiner k nalezení aktuálních změn

  3. Oracle Database 21c pro platformy Linux

  4. Automatické ladění Azure SQL Database