Hyppää sisältöön

Significant changes to Puhti & Mahti authentication coming in April! Read about the SSH key and multi-factor authentication requirements.

Kehittynyt taso

Tämä opas käyttää OpenShiftin CLI työkalua oc. Sinun tulee ymmärtää, että OpenShift Reitit altistavat internetille vain HTTP/HTTPS-portteja

Tietokantojen käyttö Rahdilla CSC:n supertietokoneilla

Uusi Rahti LoadBalancer saatavilla

Rahdilla on nyt mahdollista ottaa käyttöön LoadBalancer. Toisin kuin Reitit, LoadBalancer-palvelu mahdollistaa palveluiden altistamisen internetille ilman, että se rajoittuu HTTP/HTTPS:ään. Tutustu yllä linkitettyyn dokumentaatioon saadaksesi lisätietoja.

Seuraava dokumentaatio on edelleen saatavilla, jos haluat käyttää Reittejä ja Websocat-ohjelmaa.

Monet HPC-työprosessit vaativat tietokannan. Näiden suorittaminen kirjautumissolmussa aiheuttaa useita ongelmia, ja suorittaminen Poutassa tuo hallinnollista kuormitusta. Rahti on hyvä vaihtoehto, mutta yksi este on, että Rahti ei tue HTTP:stä poikkeavaa liikennettä ulkoisista lähteistä.

Tämän ongelman kiertämiseksi voidaan luoda HTTP-yhteensopiva WebSocket-yhteys TCP-tunneloinnin avulla. Tämä voidaan saavuttaa käyttämällä komentoriviasiakasohjelmaa nimeltä WebSocat, jolla voi muodostaa yhteyksiä ja palvella WebSocateja. Tässä tapauksessa Rahdin sisällä toimiva WebSocat-instance muuntaa työprosessista tulevan tietokantakyselyn HTTP-yhteensopivaksi WebSocket-protokollaksi. Kun liikenne saapuu Rahdille, käytämme toista Rahdin sisällä toimivaa WebSocat-instanssia muuntaaksemme WebSocket-yhteyden takaisin TCP-yhteydeksi alkuperäiselle portille, jolle tietokanta on määritetty vastaanottamaan liikennettä. Prosessin piirros on esitetty alla.

Kuva, joka kuvaa WebSocket-yhteyttä CSC:n HPC-ympäristön ja Rahdilla olevan tietokantapalvelun välillä

Tämä opas kuvaa vaiheet tämän saavuttamiseksi käyttäen MariaDB:tä esimerkkitietokantana.

Info

Alla käytetty OpenShift-malli WebSocatin konfiguroimiseen Rahdilla on tuettu beta-versio!

Info

Tämä ratkaisu soveltuu laskennallisesti kevyisiin käyttötapauksiin. Järkevä mittakaava voidaan olettaa noin 100 prosessille, jotka samanaikaisesti käyttävät tietokantaa Rahdilla. Tämän rajan ylittäminen ei ole suositeltavaa ja saattaa heikentää suorituskykyä.

Vaihe 1: MariaDB:n ja WebSocatin asennus Rahdilla

MariaDB:n ja WebSocatin konfigurointi Rahdilla voidaan tehdä joko verkkokäyttöliittymän kautta tai käyttämällä oc komentorivityökalua. Huomaa, että CSC-projektillasi on oltava pääsy Rahdin palveluun. Katso kuinka lisätä palvelun käyttöoikeus projektille.

Info

Kiinnitä huomiota eroon pysyvän ja ohimenevän tallennustilan välillä, kun luot uutta tietokantaa Rahdille. Ohimenevä tietokanta on tarkoitettu tilapäiseen tallennukseen eikä pitäisi pitää luotettavana. Jos Pod, jossa tietokantasi toimii, poistetaan tai käynnistetään uudelleen, menetät kaikki tietosi! Tämän välttämiseksi luo tietokanta pysyvällä levyllä ja varmista, että suoritat säännöllisesti varmuuskopioita esimerkiksi Allas-palveluun.

Vaihtoehto 1: Rahdin verkkokäyttöliittymän käyttö

  • Kirjaudu Rahdin verkkokäyttöliittymään. Katso Pääsyn hankkiminen ohjeet.
  • Ota käyttöön MariaDB "Sovelluskehittäjien katalogista". Löydät kehittäjäkatalogin Kehittäjä-valikon +Lisää-osiosta.
  • Määritä tietokanta. Sinun on valittava tai luotava vähintään Rahdin projekti, johon haluat lisätä tietokannan. Jos luot uuden projektin, varmista, että projektin kuvauksessa on CSC-projektin numero muodossa csc_project: 2001234
  • Luo tietokanta ja muista nämä
    • Yhteyskäyttäjänimi
    • Yhteyssalasana
    • Juuren salasana
    • Tietokannan nimi (sampledb oletuksena)
    • Tietokantapalvelun nimi (mariadb oletuksena)
  • Tarkista luomisen jälkeen verkkoasetukset ja muista ne:
    • Kohdeportti (3306 oletuksena)
    • Isännän osoite (muodossa <palvelunimi>.<projektinimi>.svc)
  • WebSocatin konfiguroimiseen Rahdilla tarvitaan OpenShift-malli. Lataa tai kopioi tämä YAML-tiedosto leikepöydällesi. Huom: tämä on tuettu beta-malli
  • Klikkaa + merkkiä verkkokäyttöliittymän oikeassa yläkulmassa ja liitä malli. Klikkaa luo.
  • Palaa "Sovelluskehittäjien katalogiin" ja ota käyttöön Websocat-malli. Sinun on annettava "Tietokantapalvelun nimi" (mariadb oletuksena) ja "Tietokantaportti" (3306 oletuksena).
  • Kehittäjä-valikossa, siirry Project -> Route ja kopioi Location URL. Käytät tätä URL:ää yhdistymiseen Rahdista ulkopuolelta.

Vaihtoehto 2: oc komentorivityökalun käyttö

oc login https://api.2.rahti.csc.fi:6443 -u <username> -p <password>
  • Luo uusi projekti (namespace) tai siirry olemassa olevaan. Jos luot uuden projektin, varmista, että projektin kuvauksessa on CSC-projektin numero muodossa csc_project: 2001234
oc new-project <project name> --display-name='Uusi projektini'\
   --description='csc_project: <project number>'

tai

oc project <project name>
  • Lisää MariaDB käynnistämällä mariadb-persistent mallin. Muista käyttäjänimi, salasana, tietokannan nimi ja tietokantapalvelun nimi. Käytä -p lippua muokataksesi oletusparametreja
oc new-app --template=mariadb-persistent
  • Lisää WebSocat käynnistämällä OpenShift-malli. Voit tarkistaa kohdeportin komennolla oc describe services <service name>. Palvelun nimi ja kohdeportin oletusparametrit ovat mariadb ja 3306
oc new-app --file=/path/to/websocat-template.yaml\
  --param=DATABASE_SERVICE=<service name>.<project name>.svc\
  --param=DATABASE_PORT=<port>
  • Muista reitti isäntänimi muodossa websocat-<project name>.2.rahtiapp.fi. Voit tarkistaa tämän myöhemmin komennolla oc get route websocat

Jos vierailet reitillä selaimesi kautta, sinun pitäisi nähdä seuraava viesti:

Vain WebSocket-yhteydet ovat tervetulleita tänne

Vaihe 2: WebSocatin suorittaminen CSC:n supertietokoneilla

MariaDB ja WebSocat ovat nyt asetettu Rahdilla, ja sinulla pitäisi olla seuraavat tiedot: MariaDB-käyttäjänimi, salasana, tietokannan nimi ja WebSocat-reitin isäntänimi. Näitä tarvitaan yhdettäessä tietokantaan. Ensin meidän on kuitenkin suoritettava websocat-binaari Puhti/Mahti-palvelimilla vaaditun TCP-tunnelin avaamiseksi.

wget https://github.com/vi/websocat/releases/download/v1.8.0/websocat_amd64-linux-static \
  -O websocat
chmod +x websocat
export PATH=$PATH:$PWD
  • Emme halua suorittaa WebSocatia kirjautumissolmussa, joten avaa interaktiivinen istunto komennolla sinteractive -i ja käynnistä websocat. Antamalla kohdeportiksi 0, WebSocat saa käyttöönsä vapaan portin, jonka voimme selvittää lsof-komennolla (alla olevat komennot on kätevästi laitettu skriptiin). Muista, että <project name>-paikkamerkintä reitin isäntänimessä, joka annetaan websocat-ohjelmaan, viittaa Rahti-projektisi nimeen
websocat -b tcp-l:127.0.0.1:0 wss://websocat-<project name>.2.rahtiapp.fi -E &
ws_pid=$!  # $! sisältää viimeksi suoritetun taustakomennon prosessitunnuksen
mkdir -p /tmp/$USER
lsof -i -p $ws_pid 2>/dev/null | grep TCP | grep -oE "localhost:[0-9]*" | \
  cut -d ":" -f2 > /tmp/$USER/${SLURM_JOB_ID}_rahtidb_port
echo "Saavutettu kohdeportti $(cat /tmp/$USER/${SLURM_JOB_ID}_rahtidb_port)"

Info

Jos haluat käyttää tietokantaasi erässä, suorita websocat eräskriptisi sisällä. Voit käyttää samaa saatua kohdeporttia, jos olet lähettämässä työtäsi interaktiivisesta istunnosta, jossa websocat on jo käynnissä; käy komennolla websocat -b tcp-l:127.0.0.1:<port> wss://websocat-<project name>.2.rahtiapp.fi -E &. Muussa tapauksessa anna kohdeportiksi 0 ja tarkista, mikä portti WebSocatille lopulta myönnetään lsof-komennolla.

  • Nyt websocat toimii interaktiivisessa istunnossa/erätyössä ja voit yhdistää Rahdilla olevaan MariaDB-tietokantaan käyttäen saatua kohdeporttia. Voit tarkistaa yhteyden esimerkiksi Pythonilla. Huomaa, että alla olevassa esimerkissä käytetyt käyttäjänimi ja salasana viittaavat luotuun tietokantapalveluun, eivät CSC-tietoihisi

Info

Jotta tämä esimerkki toimisi, sinun tulee asentaa mariadb python-moduuli. Kirjoitushetkellä käytettävä komento on: pip3 install mariadb=1.0.11 Tämä johtuu siitä, että moduulin uusin versio on rikki alustoille, joilla testasimme tätä. Katso alkuperäisestä dokumentaatiosta lisätietoa: https://mariadb-corporation.github.io/mariadb-connector-python/install.html

# Moduulin tuonnit
import mariadb
import sys

# Yhdistä MariaDB-alustaan
try:
    conn = mariadb.connect(
        user="<username>",
        password="<password>",
        host="127.0.0.1",
        port=<port>,
        database="<database name>"

    )
except mariadb.Error as e:
    print(f"Virhe MariaDB-alustaan yhdistettäessä: {e}")
    sys.exit(1)

# Hanki kursori
cur = conn.cursor()

Huom: Websocat-asiakasohjelma kuuntelee vain IPv4:llä. Joillakin järjestelmillä on sen vuoksi välttämätöntä käyttää isäntänä 127.0.0.1, muuten käytetään IPv6:ta eikä se yhdistä.