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
Palvelin | PostgreSQL:n versio | Todettu pvm | Tila |
---|---|---|---|
Siilo | 10.0 | 7.9.2017 | Ei vielä luotu. |
Neula | 9.5 | 11.9.2017 | Varmuuskopiointi toiminnassa. |
Nuoli | 9.5 | 7.9.2017 | Varmuuskopiointi toiminnassa. |
Monokkeli | 9.5 | 7.9.2017 | Varmuuskopiointi toiminnassa. |
Kurikka | 9.1 | 7.9.2017 | 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
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:
sudo -u barman backup siilo
Seuraavaksi sammutetaan Siilosta PostgreSQL palautuksen ajaksi:
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:
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.
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.
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
# 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
# Ä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
# 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