-
Rahtin tietokantoihin pääsy CSC-supertietokoneista
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.

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:
- 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 vastaavastimariadbja 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 komennollaoc get route websocat
Jos avaat reitin URL-osoitteen selaimellasi, sinun pitäisi nähdä tämä viesti:
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.
- Lataa
websocatGitHubista ja lisää sePATH-muuttujaasi. Esimerkiksi:
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 -ija käynnistäwebsocat. Kun kohdeportiksi annetaan 0, WebSocat saa käyttöönsä vapaan portin, jonka voimme poimia komennollalsof(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
websocaton 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.