Hyppää sisältöön

Welcome to our weekly research support coffee hour on Zoom! Click here for more information.

Warning!

Puhti scratch disk is becoming very full (80+ % ) resulting in performance degradation. Everybody is advised to only keep actively processed data on scratch, all other data should be deleted, transferred to host institute or stored in Lumi-O. No new quota will be granted. Click here for a tool for examining your disk usage.

Edistynyt taso

Tämä opas käyttää OpenShiftin komentorivityökalua oc ja Helmiä Sinun tulee ymmärtää, että OpenShiftin reitit avaavat internetiin vain HTTP/HTTPS-portin

Tietokantojen käyttäminen Rahtissa CSC:n supertietokoneilta

Uusi Rahti LoadBalancer saatavilla

Nyt on mahdollista ottaa LoadBalancer käyttöön Rahtissa.
Toisin kuin reitit, LoadBalancer-palvelu mahdollistaa palveluiden avaamisen internetiin ilman rajoitusta HTTP/HTTPS-liikenteeseen.
Katso lisätietoja yllä linkitetystä dokumentaatiosta.

Seuraava dokumentaatio on edelleen saatavilla, jos käytät mieluummin reittejä ja WebSocatia.

Monet HPC-työvuot vaativat tietokannan. Niiden ajaminen kirjautumissolmulla aiheuttaa useita ongelmia, ja ajaminen Poudassa tuo mukanaan hallinnollista lisätyötä. Rahti on hyvä vaihtoehto, mutta yksi este on se, että Rahti ei tue ulkoisista lähteistä tulevaa muuta kuin HTTP-liikennettä.

Tähän ongelmaan on väliaikainen ratkaisu: muodostetaan TCP-tunneli HTTP-yhteensopivan WebSocket-yhteyden yli. Tämä voidaan toteuttaa käyttämällä WebSocket-yhteyksien muodostamiseen ja tarjoamiseen tarkoitettua komentorivikäyttöliittymän asiakasohjelmaa WebSocat. Tässä Puhdissa/Mahdissa ajettava WebSocat-instanssi muuntaa työvuosta tulevan tietokantapyynnön HTTP-yhteensopivaksi WebSocket-protokollaksi. Kun liikenne saapuu Rahtiin, käytämme toista Rahtin sisällä ajettavaa WebSocat-instanssia muuntamaan WebSocket-yhteyden takaisin TCP-yhteydeksi alkuperäiseen porttiin, johon tietokanta on määritetty vastaanottamaan liikennettä. Alla oleva kuva havainnollistaa prosessia.

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

Tässä oppaassa kuvataan vaiheet tämän toteuttamiseksi käyttäen MariaDB:tä esimerkkitietokantana.

Info

Tämä ratkaisu soveltuu laskennallisesti kevyisiin käyttötapauksiin. Kohtuullista skaalautuvuutta voidaan odottaa enintään noin 100 prosessille, jotka käyttävät samanaikaisesti Rahtissa olevaa tietokantaa. Tämän rajan ylittämistä ei suositella, ja se voi heikentää suorituskykyä.

Vaihe 1: MariaDB:n ja WebSocatin käyttöönotto Rahtissa

Käytämme Bitnamin MariaDB Helm chartia. Tämä Helm Chart ei ole tarkoitettu tuotantokäyttöön, mutta se riittää esittelytarkoituksiin.

Suorita yksinkertaisesti tämä komento:

helm install my-release oci://registry-1.docker.io/bitnamicharts/mariadb
  • Lisää WebSocat käynnistämällä tämä OpenShift-malli. Voit tarkistaa kohdeportin komennolla oc describe services <service name>. Palvelun nimen ja kohdeportin oletusparametrit ovat vastaavasti mariadb ja 3306
oc new-app --file=https://raw.githubusercontent.com/CSCfi/websocat-template/refs/heads/main/websocat-template.yaml \
--param=DATABASE_SERVICE=<service name>.<project name>.svc \
--param=DATABASE_PORT=<port>
  • Muista reitin isäntänimi muodossa websocat-<project name>.2.rahtiapp.fi. Voit tarkistaa tämän myöhemmin komennolla oc get route websocat

Jos avaat reitin URL-osoitteen selaimellasi, sinun pitäisi nähdä tämä viesti:

Only WebSocket connections are welcome here

Vaihe 2: WebSocatin ajaminen CSC:n supertietokoneilla

MariaDB ja WebSocat on nyt otettu käyttöön Rahtissa, ja sinulla pitäisi olla seuraavat tiedot: MariaDB-käyttäjänimi, salasana, tietokannan nimi ja WebSocat-reitin isäntänimi. Näitä tarvitaan tietokantaan yhdistettäessä. Ensin meidän täytyy kuitenkin ajaa websocat-binääri Puhdissa/Mahdissa tarvittavan 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 ajaa WebSocatia kirjautumissolmulla, joten avaa interaktiivinen istunto komennolla sinteractive -i ja käynnistä websocat. Kun kohdeportiksi annetaan 0, WebSocat saa käyttöönsä vapaan portin, jonka voimme poimia komennolla lsof (alla olevat komennot on kätevästi koottu skriptiin). Muista, että websocat-komennolle annetussa reitin isäntänimessä oleva paikkamerkki <project name> viittaa Rahti-projektisi nimeen
websocat -b tcp-l:127.0.0.1:0 wss://websocat-<project name>.2.rahtiapp.fi -E &
ws_pid=$!  # $! contains the process ID of the most recently executed background command
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 "Got target port $(cat /tmp/$USER/${SLURM_JOB_ID}_rahtidb_port)"

Info

Jos haluat käyttää tietokantaasi eräajossa, aja websocat eräajokomentosarjassasi. Voit hyödyntää samaa saatua kohdeporttia, jos lähetät työsi interaktiivisesta istunnosta, jossa websocat on jo käynnissä, websocat -b tcp-l:127.0.0.1:<port> wss://websocat-<project name>.2.rahtiapp.fi -E &. Muussa tapauksessa anna kohdeportiksi 0 ja tarkista lsof:lla, minkä portin se saa käyttöönsä.

  • Nyt websocat on käynnissä interaktiivisessa istunnossa/eräajossa, ja voit yhdistää Rahtissa olevaan MariaDB-tietokantaasi käyttäen saatua kohdeporttia. Voit varmistaa yhteyden esimerkiksi Pythonilla. Huomaa, että alla oleva käyttäjänimi ja salasana viittaavat luotuun tietokantapalveluun, eivät CSC-tunnuksiisi

Info

Jotta tämä esimerkki toimisi, sinun täytyy asentaa mariadb-pythonmoduuli. Tätä kirjoitettaessa käytettävä komento on: pip3 install mariadb=1.0.11 Tämä johtuu siitä, että moduulin nykyinen uusin versio on rikki niillä alustoilla, joilla testasimme tätä. Katso lisätietoja upstream-dokumentaatiosta: https://mariadb.com/docs/connectors/mariadb-connector-python/install

# Module Imports
import mariadb
import sys

# Connect to MariaDB Platform
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"Error connecting to MariaDB Platform: {e}")
    sys.exit(1)

# Get Cursor
cur = conn.cursor()

Huom: websocat-asiakas kuuntelee vain IPv4:ää. Joissakin järjestelmissä on silloin tarpeen käyttää isäntänä 127.0.0.1, muuten käytetään IPv6:ta eikä yhteys muodostu.

Suomenkielinen tekoälykäännös

Sisällössä voi esiintyä virheellistä tietoa tekoälykäännöksestä johtuen.

Klikkaa tästä antaaksesi palautetta