The Gathering Technical blog

TG:Online Minecraft Server oppsett

19 Apr 2020, by from Event:CnA:Game

Hei igjen!

Dei fleste fekk vel med seg avlysinga av The Gathering 2020, som da opna eit prosjekt for å dempe TG-abstinensane frå både crew og deltakarar, nemleg TG:Online. TG:Online bestod då av litt konkurransar, mykje streaming, litt stemning på discord og ein tøff Minecraft server, som me skal fordjupe oss i her!

Det starta med at eg kom med eit forslag til den interne ide-gruppa til TG:Online den 17 mars, som lød slik:

Den stjerna skal eigentlig blinke gul og raud

Som da trigga ein del respons. Sjølv om forslaget mitt då var halvveis på kødd, viste det seg at samtlege crewmedlemmar var gira, og at Nextron, so gode som dei er, kunne stille opp med hardware til prosjektet. 12 dagar etter forslaget starta det første møtet der me drøfta korleis prosjektet skulle sjå ut, deretter hadde me to veker til det blei live, og slik blei det:

Hardware

Vi hadde alt ein bestilling på diverse serverar som blei bygd i forkant av avlysinga, som Nextron var gira på å låne vekk til TG:Online i staden for. Me fekk da 2(!) av desse specsa:

2x Intel Xeon Platinum 8280L – 28-Core 2.7Ghz Base 4Ghz Turbo
512GB RAM
2x 256GB M.2 SSD i RAID-1 (boot)
6x 480GB SATA SSD
2x10GbE SFP+

Det er gøy.

Men kor skal vi ha serveren? Vanligvis har me jo alle maskinene våre i vikingskipet, men ettersom den planen gjekk vestover måtte vi går til ein av KANDU sine samarbeidspartnere, nemleg colocation hos Nexthop!
Der har me og ein Fortigare brannmur som fort kan komme til nytte! Tidlegare har Ole Mathias posta bilete frå installasjonen av serverane

Software

I beskrivelsa av software til prosjektet snakkar me om alt av rein software som gjorde prosjektet mogleg, og startar kronologisk med det som er i botnen.

For i botnen starta me med Proxmox til kvar av serverane. Proxmox har blitt veldig populært inna TG sitt tech-miljø, og har opna for lett skalering, IPA, flytting av VM utan downtime med meir, so det var eit sjølvfølgje for oss!

Deretter kjem game sin favoritt, nemleg pterodactyl! Pterodactyl opnar da for veldig lett administering av docker containers av spel, deriblant forskjellige variantar av Minecraft serverar. Det har eit kult API, kjapp deployment muligheit for serverar, brukaradministrering av serverar, tilgang til filsystem og CLI til containerar, administrering av database og mykje meir!

Eksempel oppsett, her er alle “likesida” firkantane VM’ar, og dei avlange er Minecraft server instances i eigne docker containers

Deretter går me til det som er sjølve Minecraft serverane, og det har kanskje behov for ein liten forklaring.

“Vanleg” Minecraft køyrar java som dei fleste veit. Grunna det pluss Minecraft sin utvikling dei siste ti åra brukar Minecraft server instansen hovudsakleg kun ein CPU kjerne, som gjer da eit 56 core beist som me har litt ubrukeleg dersom me skulle berre hatt ein server instance. Difor gjor me som det fleire andre større serverar, nemleg å ha eit proxy oppsett. Det fungerar med at me har ein proxy, som bungeecord eller waterfall, som då i klienten sine auge ser ut som ein heilt vanleg Minecraft server. Om klienten prøvar å kople seg til proxyen, vil den då bli sendt til eit av serverane under proxyen. Proxyen lagar og ein bru for å kople seg mellom serverar, og kan bli konfigurert til å gjer mykje gøy!

Eksempel på proxy blokkdiagram, der waterfall er ein proxy server

Der har me valt å bruke waterfall som proxy server, som då er ein fork av bungeecord, og Tuinity som Minecraft server, som er ein fork av PaperMC, som er ein fork av Spigot. Phew. Me valgte da waterfall og tuinity rett og slett for at internettet sa dei skulle gi betre ytelse, noko som me tenkte me sårt trengte då CPU’en vår ikkje har like god single-core ytelse som dei fleste profesjonelle Minecraft serverar har. Med Tuinity arbeida me internt for å få best mogleg ytelse og optimalisering, og me var veldig bleeding edge med Tuinity verisjonen me køyrde i produksjon.

Litt anna som er verdt å nemne er at me konfigurerte ein close-to autodeploy av forskjellige Minecraft server instances, som gjer at dersom det hadde komt hundrevis, eller tusenvis av folk, kunne vi kjapt skalere opp anntalet survival, creative og lobby instances.

Plugins

Plugins på Minecraft er essensielle for å drive ein større server. Det kan ver plugins for å administrere moderering og banning på tvers av serverar, plugins for å stenge av spawn område, plugins for å lage portalar mellom server instances, osv osv. Naturligvis har me og behov for nokon plugins.

Plugins me brukte, der dei øverste er for server instances mens dei nedenfor er for proxy server

Me skal ikkje gå inn på alle plugins, ettersom der er mange småting som blei konfigurert. Men vi skal gå inn på det mest spennande!

LuckPerms er nok den viktigaste pluginen me hadde i sin heilheit, då det den gjorde var å passe på server rollar på tvers av instances. Dvs om man har moderator rolle på lobby, har man og moderator rolle på adventure server. Me hadde behov for ein felles database for den pluginen som alle serverane snakka til.

Ein anan plugin som krev database er CoreProtect, som loggar alt av aktivitet på kvar server, har rollback muligheit og mykje meir. Kontra LuckPerms krev den ein database per server, dog.

WorldGuard vart kun brukt på Minecraft Creative konkurranse server instancen, då der ikkje var behov for den andre plassar. WorldBorder blei brukt for å førehandsgenerere survival verdenane våre, som gjer me sparar mykje resursar på generering i produksjon.

Tall

Her kjem det som er gøy!

For vi rakk nemleg å bli ferdig med alt akkurat før tida, og hadde ein opplevelse som gjekk over forventningane når det kom til trøbbel!

Totalt var der 384 unike brukarar som besøkte serveren vår, med ein peak på 54 spelarar som var på serveren samstundes. TPS på alle instances var på 20 (det er perfekt) heile tida, utanom når folk lagde TPS-bombs med vilje. Men det blei kjapt rydda opp i.

Me hadde og ein testdag for å sjekke kor mykje ein server instance taklar med alle pluginsa me planla å bruke, på software oppsettet me tenkte å bruke. Då fekk me nær 50 brukarar som spelte samstundes, med ein TPS på 20, og CPU core load på 30%.

Anntal spelarar per tid

Eg vil gi ein stor takk til Christian Relling og Ole Mathias Aarseth Heggem for å bruke insane med innsats på å løyse plugins og det tekniske rundt prosjektet, og eg vil og takke alle byggarane, moderatorane, og støttespelarane rundt prosjektet som gjor at barn og unge fekk game litt samla i påska i år også <3

Link til alle kartene

Event:CnA:Game gjesteinnlegg

15 Mar 2018, by from Event:CnA:Game

God dag!

Fekk tilbod om å skrive om Game og kva teknisk utstyr og programvare me brukar, takkar sjølvsagt ja!
Server Hardware:
I år har vår kjekke snille sponsor Nextron ordna fysiske serverar til Game, kontra tidlegare har me hatt virtuelle maskinar til å køyre programvare. Det blir totalt 5 serverar der 2 er til CS og 3 er til Minecraft, der ein av dei er ein reserve i tilfelle dei to andre skulle slite med noko. Me kjørar SSD’ane i software RAID1 for pålitelegheit, og har tilgang til serverane via IPMI. Spesifikasjonane er som følgjande:

Game – CS:GO #1
20 core Intel Xeon E5-2640v4 2.40GHz
64 GB
2×1 TB SSD
2×10 GbE SFP+
Game – CS:GO #2
20 core Intel Xeon E5-2640v4 2.40GHz
64 GB
2×1 TB SSD
2×10 GbE SFP+
Game – Minecraft #1
Intel Core i7-7820X 3.60GHz, turbo 4.3GHz/4.5GHz
64 GB
2×1 TB SSD
2×10 GbE SFP+
Game – Minecraft #2
Intel Core i7-7820X 3.60GHz, turbo 4.3GHz/4.5GHz
64 GB
2×1 TB SSD
2×10 GbE SFP+
Game – Minecraft ekstra
Intel Core i7-7820X 3.60GHz, turbo 4.3GHz/4.5GHz
64 GB
2×1 TB SSD
2×10 GbE SFP+

I tillegg har me to mindre VM’ar på 4GB RAM, 50GB HDD og 2vCPU kjerne som skal køyre kontrollpanelet til serverane, det snakkar me om vidare
*
Server software:
*

I år skal båe Minecraft og CS køyrast med pterodactyl, noko som er nytt for CS på TG. Med to like system vil eventuell feilsøking av pterodactyl truleg gå betre, då me har fleire i crew med kompetanse for pterodactyl. Om det ikkje går som planlagt, har me og ein fallback løysing CS systemet som kjørte forrige TG. For dei som er ukjent med det, er pterodactyl ikkje eit legemiddel (som eg først trudde) eller ein dinosaur (som Kristian trudde), men eit management panel til spel-serverar. Programvaren har open kjeldekode og tilbyr ein haug med funksjonar frå kontrollering av fleire nodar, API kontroll, rask distribuering av serverar og mykje meir. Det er docker basert, så ein kan skrive eigen docker bilete ein kan distribuere, som me gjer. Meir info hos https://pterodactyl.io/
CS og Minecraft køyrar uavhengig frå kvarandre med eiget panel på kvar sin virtuelle maskin. Det er fullt mogleg å køyre båe Minecraft og CS serverar via eit panel, dog. Det panelet er då kopla til dei fysiske serverane våre som node, der me installera OS, docker, daemon, og lastar opp konfigurasjonsfila for å kople oss på. På nodane kan me då få opp docker bileta som køyrar sjølve spel-serverane. Oppsettet kan likne noko sånt:

Me brukar da 32 serverar til CS fordelt på to nodar, og har ressursar til meir om det skulle meldast på fleire lag. Samstundes kan me køyre opp til 128(!) Minecraft serverar.
CS maskinane kjem til å kjøre GO:TV Relay sånn deltakarar kan sjå stream direkte frå ein spelar om vedkommande ynskar, framfor gjennom Twitch o.l.

Eit anna system me brukar er Unicorn (Unified Net-based Interface for Competition Organization, Rules and News, phew). Unicorn er konkurransesystemet til TG laga for å drifte konkurransane på The Gathering frå ein deltakar ynskjer å delta, fram til han står på scena med premien sin. Det blei først brukt i 2015 og er stadig oppdatert med nye funksjonar og optimalisering.
Backend til Unicorn er skrevet i PHP med ein MySQL database server. Frontend er enn so lenge tett kopla saman med backenden, og brukar ein MVC modell med Smarty templating. Planen på sikt er å skilje front og backend og heller gå over til ein React (eller liknandes) basert frontend. Til fillagring nyttar me oss av tus.io for opplasting av store filar. Dette gir oss moglegheita til å gjer kontinuerlege opplastingar om ein opplasting skulle feile. Deretter flyttast filar over i AWS S3 som blir brukt som eit CDN gjennom AWS CloudFront.
Creative sine konkurransar handterast direkte gjøna UNICORN, der administratorar kan administrere alle aspekt av sine konkurransar. Dette inneberar alt i frå oppretting av konkurranse, mottak av bidrag med kvalifisering & diskvalifisering, resultatavlesning osv. For game har me i tillegg implementert støtte for Toornament som handtera brackets.

Bruk av API:
Til Minecraft brukar me Unicorn. Med Minecraft sendar me queries mot Unicorn sitt API som hentar ut påmeldte lag. Om den finn eit lag, sendar den requests mot pterodactyl og opprettar server. Etter den er oppe og går, sendar systemet kommandoar for oppsett av serveren. CS brukar eBot til administrering, start/stopp av match samt som dei samlar demo og loggar som i atterkant kan bli brukt til å lage fine grafar og statistikk

Eg håpar denne gjeste-artikkelen har vår til hjelp for folk som undrar på det tekniske bak game, og for folk som ynskjer å søke hos oss i CnA (Competitions and Activities)!

Spesiell takk til Jo Emil Holen for å dele mykje informasjon angåande Unicorn!
Og stor takk til alle i Game som var med på å fortelje om deira sine tekniske oppgåver og system me brukar!

About

TG - Technical Blog is the unofficial rambling place for The Gathering.

Collaborators

nlogic logo juniper logo nextron logo fortinet logo telenor logo nexthop logo