Spekulatiivista ja tulevaisuuteen katsovaa

Tällä sivulla mainittuja palvelimia Siilo ja Piilo ei vielä ole otettu käyttöön. Käyttöönotto tapahtuu Traconin (2017) jälkeen.

 

Traconin tietojärjestelmien ensisijainen tietokantavaihtoehto on aina PostgreSQL. Syitä ovat ominaisuussetti, luotettavuus, toimintavarmuus, turvallisuus sekä se, että oman PostgreSQL-asennuksemme (palvelimet Siilo ja Piilo) suunnittelu ja toteutus monitorointeineen ja varmuuskopiointeineen on tehty erityisellä huolellisuudella.

Muita tietokannanhallintajärjestelmiä, kuten MariaDB:tä (MySQL) tai MongoDB:tä, voi käyttää sellaisten 3. osapuolen sovellusten tukena, jotka eivät tue PostgreSQL:ää. Traconin kehittäjien tulisi aina koodata omat sovelluksensa PostgreSQL:ää vastaan, ellei muuhun tietokantavalintaan ole järjestelmäkehityksen johtajan hyväksymää perusteltua syytä.

Aputietokantana voi käyttää Redistä. Redistä ajetaan Docker-kontissa sovelluskontin vieressä, ellei erityistä tarvetta esim. HA-setupiin ole.

PostgreSQL-palvelin Siilo (siilo.tracon.fi)

PostgreSQL-palvelin on konfiguroitu Ansible-konfiguraationhallintajärjestelmällä. Tästä vastaa rooli postgresql, jota ei tule sekottaa rooliin postgresql-docker (konekohtainen PostgreSQL-tietokanta Docker-kontissa, ei tuotantokäyttöön).

Palomuuri

Siilon konekohtainen palomuuri sallii SSH-yhteydet kaikkialta ja PostgreSQL-yhteydet (5432) verkosta 91.105.251.64/27. Palomuuriin täytynee puhkaista vielä uusi reikä PostgreSQL-yhteyksiä Piilolta sitten, kun Piilon lopullinen IP-osoite on tiedossa.

Monitorointi

Toteuttamatta, mutta kunhan keritään sinne asti, tehdään se Prometheuksella.

Varmuuskopiointipalvelin Piilo (piilo.tracon.fi)

Tietokantojen varmuuskopiointiratkaisu on Barman. Siilon varmuuskopiointiin käytämme Barmanin dokumentaation suosittelemaa varmuuskopiointisetuppia:

Vanhojen Docker-pohjaisten poistuvien PostgreSQL-palvainten varmuuskopiointiin käytämme samaa ilman archive_commandia, koska Japsu on laiska eikä jaksa setupata SSH-avaimia sinne Docker-konttien sisään.

Barman-varmuuskopiointipalvelin on konfiguroitu Ansible-konfiguraationhallintajärjestelmällä. Tästä vastaa rooli postgresql-barman.

Varmuuskopioinnin tila

PalvelinPostgreSQL:n versioTodettu pvmTila
Siilo10.07.9.2017(warning) Ei vielä luotu.
Neula9.511.9.2017(tick) Varmuuskopiointi toiminnassa.
Nuoli9.57.9.2017(tick) Varmuuskopiointi toiminnassa.
Monokkeli9.57.9.2017(tick) Varmuuskopiointi toiminnassa.
Kurikka9.17.9.2017(error) Ei Barmanin piirissä. Siellä on niin vanha PostgreSQL, että sitä ei yhtä kätevästi saa pultattua kiinni Barmaniin. Täytyy tyytyä jokaöiseen sqldumppiin.

 

Palomuuri

SSH kaikkialta. 

Esimerkkikomentoja

piilossa
sudo -u barman barman check siilo								# onko kaikki hyvin?
sudo -u barman barman backup siilo								# tee base-varmuuskopio
sudo -u barman barman list-backup siilo							# listaa varmuuskopiot
sudo -u barman barman recover siilo 20170902T162930 /tmp/foo 	# palauta varmuuskopio annettuun sijaintiin

Siilo räjähti – Paniikkipalautus Nuolelle

Case: Siilo katosi maan päältä. Piilo toimii, varmuuskopiot tallessa. Hoida tietokannan ajantasaisin tila vaan johonkin jossa conikuvat.fi pääsee käsiksi siihen.

Järjestä barman@piilolle SSH-pääsy Nuolelle esim. omalle käyttäjätunnuksellesi (oma avain barman@piilon authorized_keysiin ja ssh -A barman@piilo).

barman@piilo $ barman recover siilo 20181025T093714 --remote-ssh-command 'ssh japsu@nuoli.tracon.fi' /home/japsu/main
root@nuoli # curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
root@nuoli # cat > /etc/apt/sources.list/pgdg.list << EOF
deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
EOF
root@nuoli # apt update && apt install postgresql-11
root@nuoli # rm -rf /var/lib/postgresql/11/main
root@nuoli # mv /home/japsu/main /var/lib/postgresql/11/
root@nuoli # chown -R postgres:postgres /var/lib/postgresql/11/main
root@nuoli # cat >> /etc/postgresql/11/main/pg_hba.conf << EOF

# docker bridge
host    all             all             172.17.0.1/16           md5
EOF
root@nuoli # cat >> /etc/postgresql/11/main/postgresql.conf << EOF
listen_address = '*'
root@nuoli # sudo ufw allow from 172.17.0.1/16 to any port 5433
root@nuoli # service postgresql start

Nyt voikin sit muuttaa Ansiblesta esim. edegal_postgresql_hostname = nuoli.tracon.fi:5433 ja deplata.

Tiettyyn ajanhetkeen palaaminen varmuuskopiosta

Voi hitsin pimpulat! Joku Jesse hakkeroi sisään Kompassiin ja sotki datan. Nyt täytyy palata ajassa takaisin päin viimeisimpään tunnettuun ehjään ajanhetkeen. Jos Siilossa on vielä PostgreSQL pystyssä, varmuuskopioidaan sen nykyinen, vahingoittunut tila forensiikkaa ym. varten:

piilossa
sudo -u barman backup siilo

Seuraavaksi sammutetaan Siilosta PostgreSQL palautuksen ajaksi:

siilossa
sudo systemctl stop postgresql

Etsitään ensin sopiva base backup (todnäk toiseksi uusin, koska uusin on äsken varmuuskopioimamme vahingoittunut tila) ja sitten palautetaan tietokanta kyseistä varmuuskopiota ja transaktiolokia käyttäen haluttuun ajanhetkeen ylikirjoittaen Siilon nykyinen tila:

piilossa
sudo -u barman barman list-backup siilo
sudo -u barman barman recover siilo 20170902T162930 /var/lib/postgresql/9.6/main --target-time "2017-09-03T20:00:00Z" --remote-ssh-command "ssh postgres@siilo.tracon.fi"

Siilon PostgreSQL:n datahakemisto on nyt laitettu sellaiseen kuntoon, että kun PostgreSQL seuraavan kerran käynnistyy, se rullaa tietokannan takaisin valittuun ajanhetkeen.

Tutustutaan Barmanin meille generoiman recovery.conf-tiedoston sisältöön ja varmistetaan että se on kosher. Sitten käynnistetään PostgreSQL, jolloin se suorittaa palautuksen. Tarkistetaan PostgreSQL:n lokista, että palautus sujui mallikkaasti. Lopulta poistetaan recovery.done-tiedosto, jolle nimelle PostgreSQL on uudelleennimennyt Barmanin generoiman recovery.confin.

siilossa
sudo cat /var/lib/postgresql/9.6/main/recovery.conf
sudo systemctl start postgresql
sudo tail -n500 /var/log/postgresql/postgresql-9.6-main.log
sudo rm /var/lib/postgresql/9.6/main/recovery.done

Tietokannan palautuksen jälkeen varmuuskopiointi pitää vielä resetoida ja potkaista uudelleen käyntiin. Tässä vaiheessa on hyvä tehdä uusi base backup palautetusta, ehjästä tilasta.

piilossa
sudo -u barman barman check siilo						# näyttää parit FAILEDit
sudo -u barman barman receive-wal --create-slot siilo
sudo -u barman barman receive-wal --reset siilo
sudo -u barman barman check siilo						# saattaa kestää muutaman sekunnin kunnes FAILEDit ovat vaihtuneet OK:ksi
sudo -u barman barman backup siilo

PostgreSQL:n päivitys

Oletus: vanha versio 10, uusi versio 11, päivitettävä palvelin Siilo, varmuuskopiointipalvelin Piilo

piilossa
# eka on hyvä käydä ottaas täys varmuuskopio piilossa vanhalla versiolla
sudo -u barman barman backup siilo
 
# ja asentaas uuden version clientit ku vanhat ei oo yhteensopivia uuden serverin kanssa
sudo apt update
sudo apt upgrade
sudo apt install postgresql-client-11
siilossa
# ÄLÄ poista vanhaa versiota palvelimesta vielä tässä vaiheessa! Sen binäärejä tarvitaan rullaamaan kanna uuteen versioon.
sudo apt update
sudo apt upgrade
sudo apt install postgresql-11
 
# asennus loi tyhjän tietokannan, joka on tiellä. varmistathan että tässä on UUDEN version numero, ei vanhan
sudo pg_dropcluster 11 main
 
# ja sit me päivitetään
sudo pg_upgradecluster 10 main
 
# tässä vaiheessa on hyvä testaa että esim. https://conikuvat.fi toimaa
# sit voiki poistaa vanhan. varmista että tässä on VANHAN version numero, ei uuden
sudo pg_dropcluster 10 main
sudo apt purge postgresql-10
piilossa
# Sit pitäis vielä suostutella Barman jatkamaan varmuuskopiointia uudesta versiosta. Höhö lol mitenhän se tehdään.
sudo -iu barman
cd /var/lib/barman
mv siilo siilo-10
barman cron
barman switch-wal siilo
 
# Sit iteroidaan kunnes kaikki FAILEDit muuttuu OK:ks
barman status siilo
 
# Otetaan täys backup uudesta versiosta
barman backup siilo
 
# Lopuks hyvä tarkastaa vielä kaikki
for cmd in check status replication-status; do barman $cmd siilo; done
  • No labels