Guida Come scegliere e configurare una macchina server per Metin2

Stato
Discussione chiusa ad ulteriori risposte.

iltizio

Utente Emerald
1 Novembre 2009
929
60
533
598
Ultima modifica da un moderatore:
Ciao a tutti,
questo thread ha il solo scopo di aiutare nella scelta delle macchine e hosting provider che andranno a creare la base per un game server: in questo caso metin2.
In questa discussione spiegherò inoltre come andrebbe configurata la vostra piccola infrastruttura per far sì che il vostro progetto di metin2 non fallisca per stupidi motivi facilmente evitabili.

VPS, Dedicato o semi-dedicato?
Inanzitutto è doveroso spiegare la differenza tra VPS e Server Dedicato e argomentare quindi i consigli finali sulla scelta tra i due.
Solitamente l'ignoranza porta a dire: "VPS= costa poco, Dedicato = potenza e affidabilità".
In realtà cosa vogliono dire?

VPS: VPS sta per Virtual Private Server, cioè una macchina virtuale (VM) autonoma e riservata a un solo cliente (accesso root). Per entrare nel dettaglio una VM non è altro che una virtualizzazione di una macchina fisica su una reale macchina fisica. In praticaci sono batterie di grosse macchine fisiche che montano un ambiente di virtualizzazione che esegue più macchine virtuali. Praticamente quello che fa VirtualBox. Alcuni VPS sfruttano moderne tecnologie che permettono di spostare automaticamente le VM da una macchina fisica all'altra in caso di carico elevato o indisponibilità della macchina fisica. Quest'ultima funzionalità è quella preferita a livello Enterprise in quanto garantisce una migliore affidabilità che i Dedicati non hanno.
Dedicato: è una macchina fisica solitamente residente in un Datacenter e accesso riservato ad un solo cliente.
Semi-dedicato: una via di mezzo tra un dedicato e un VPS. Da un lato hai i vantaggi della virtualizzazione, dall'altro risorse riservate solo alla tua macchina, come per i dedicati.

Solitamente in ambito aziendale, per ambienti server si evita di utilizzare una macchina fisica come un unico sistema se non per rari e particolari casi come sistema operativo o applicativi poco compatibili con gli ambienti di virtualizzazione o architetture hardware non virtualizzabili.
Quindi in caso di un processore x86_64 quasi sempre si predilige l'installazione di un ambiente di virtualizzazione.
Si preferisce fare così anche in caso di un unico sistema guest da eseguire. In questo caso non si tratta più di VPS ma di semi-dedicati.
Ma perchè utilizzare un ambiente di virtualizzazione per eseguire un unica VM? Perchè con i recenti ambienti di virtualizzazione professionali e non si ha una serie di vantaggi importanti, quali:
  • Creazione di snapshot e copie quasi istantanee della macchina.
  • Migrazione rapida e in alcuni casi anche a caldo su un altra macchina fisica.
  • Gestione ottimale delle risorse.
  • Controllo completo della VM da remoto (console remota).
Per utilizzare questa soluzione tuttavia è necessario avere qualche competenza in più.
Se queste competenze non si hanno ci si può affidare ai VPS o semi-dedicati già pronti forniti direttamente dai provider. Inoltre con i VPS puoi acquistare una macchina piccola adatta alle tue modeste esigenze.

Tuttavia se si opta per una VPS, solitamente, ci sono delle limitazioni per questioni di sicurezza imposte dal provider.

Morale: in ambito metin2 è sempre meglio preferire un VPS o un semi-dedicato piuttosto che un dedicato.

Che macchina serve per un server di metin2?

Un’altra domanda comune è: quali requisiti deve avere una macchina fisica o virtuale per reggere un server di metin2? A questa domanda si sentono risposte assurde tirate fuori per sentito dire da gente che non ha mai startato un server di metin2.

Non credete a chi vi dice che ci vuole per forza un server dedicato da almeno 32GB con 1gbps di velocità di banda per reggere 100 player.

A un server privato di metin2 con un buon numero di player online nello stesso momento (indicativamente 250 che è il massimo che si raggiunge su un server italiano) e con una configurazione dei core e CH nella media bastano e avanzano 8GB di ram, 100GB di hard disk (non servono SSD), 30mbps (ne utilizza anche molti di meno) e una buona protezione DDoS.

Questo basta e avanza perchè? Primo, vabbè l’ho testato, ed effettivamente i consumi sono quelli, ma per chi non ha mai avuto la possibilità di aprire un server di metin2 con un buon numero di player o semplicemente per chi non ci ha mai fatto caso, metin2 è un gioco che risale agli inizi 2000, quindi si parla di 15 anni fa e dovreste sapere tutti che nell’informatica 15 anni sono un’eternità. Le tecnologie sono cambiate parecchio e un PC da 1GB di ram era considerato un’esagerazione. Qui si parla di server, quindi un po’ più di ram. Ai tempi i sistemi erano praticamente tutti a 32 bit (quelli con architettura x86), quindi un sistema poteva vedere al massimo 4GB di ram, a meno chè non veniva abilitato nel kernel il PAE che faceva in modo di utilizzare più di 4 GB, ma arrivava comunque a 4GB a processo, nel nostro caso un core del game server. Per i server ufficiali venivano utilizzate più macchine fisiche che formavano un unico server per ovviare a questo problema. Ora la ram costa poco e i processori sono molto più potenti e multi thread, quindi si crea un’unica macchina per un server oppure più VM.


Come configurare una macchina per un server di metin2?

Configurare la macchina che ospiterà il game server è importante quanto la scelta dell’hardware, anzi se fatta bene si può andare a risparmiare qualche risorsa importante.

La configurazione ti permette principalmente di far sì che il tuo sistema sia stabile e quasi indipendente oltre che sicuro da eventuali intrusioni.

E’ una cosa fondamentale semplicemente perchè se va offline il sistema hai grosse perdite o addirittura il progetto potrebbe fallire. Non importa quanto sia bello e quante persone ci hanno lavorato, se sotto non c’è una base affidabile rischi di buttar via tempo e soldi.

Molti progetti sono falliti per questo, a volte dando la colpa ad un attacco DDoS.


Ammetto che una buona configurazione a livello di sistema non è una cosa alla portata di tutti, ma se non vuoi spendere soldi per un consulente sistemista, puoi seguire qualche piccolo consiglio, e con un po’ di buona volontà e pazienza ci si riesce. Tuttavia consiglio vivamente di far fare queste cose a chi ne capisce qualcosa, altrimenti si rischia di far danno.


Il sistema operativo: FreeBSD
Per prima cosa parliamo del sistema operativo. Tutto gira attorno a lui.

Gli sviluppatori hanno scelto questo sistema operativo che in questi anni non va molto di moda, tuttavia è un ottimo sistema operativo ed è ancora mantenuto bene. E’ un sistema di tipo Unix-Like come Linux, Solaris e Mac OS X. Di questi ultimi due famosi sistemi operativi è il padre e per molti anni è stata la migliore alternativa Open Source degli altri sistemi operativi Closed Source.

Perchè gli sviluppatori hanno scelto proprio FreeBSD e non sistema Linux? Ai tempi linux era poco conosciuto e instabile. Del resto il kernel linux è stato creato da 0, mentre FreeBSD si basa su kernel BSD già utilizzato da molti anni e che ha fatto da base a molti altri sistemi operativi Unix-like.

FreeBSD rimane comunque un ottimo sistema operativo, ma difficile da usare. E’ per questo che i sistemi Linux sono i più utilizzati al momento: semplice da usare ma buono.

Questo sistema ha interessanti funzionalità che i sistemi Linux ancora non hanno e per questo viene continuamente aggiornato.


La versione
Attualmente le versioni stabili (per produzione) sono la 9.3, 10.1 e 10.3 come indicato sul sito ufficiale: https://www.freebsd.org/

A breve verrà rilasciata la nuova versione 11.0.

La scelta del sistema operativo è molto importante. Bisogna scegliere la versione stabile e tenerla aggiornata. Al momento consiglio la 10.3.


Con metin2 al momento non ci sono problemi di compatibilità dato che già con il kernel GENERIC è impostata la compatibilità fino alla versione 4 di FreeBSD. Inoltre è possibile installare le librerie per la compatibilità con i vecchi sistemi, che si possono installare facilmente tramite ports da /usr/ports/misc/compat<numero_versione>x.

Inoltre è possibile eseguire applicativi 32bit da un sistema a 64bit semplicemente installando le librerie per 32bit al momento dell’installazione del sistema operativo o successivamente scaricandole dal server ftp ufficiale di FreeBSD (per FreeBSD 10.3 qua).

Evitate di installare librerie semplicemente scaricandole sciolte dal web, perchè potrebbero non essere compatibili per il vostro sistema.

Quindi vi consiglio un sistema FreeBSD 10.3 amd64.


Filesystem
Una funzionalità interessante di queste ultime versioni è il supporto per gli ZFS.

Gli ZFS sono un nuovo tipo di filesystem derivati da OpenSolaris per sistemi unix che dovrebbero sostituire tutti i tipi di filesystem utilizzati attualmente. Al momento solo Solaris e FreeBSD supportano gli ZFS stabilmente. In questi anni si sta cercando di renderli disponibili anche per Linux, ma attualmente sono utilizzabili solo per test.

In breve questa tipologia di filesystem ha numerosi vantaggi tra i quali l’allargamento del filesystem, autocorrezione degli errori e autocompressione dinamica.

Quindi attualmente sono preferibili ai vecchi UFS anche per produzione.


Scelto il tipo di filesystem bisogna scegliere quanti filesystem creare e dove montarli. Fino adesso molti di voi, per ignoranza, si sono limitati a creare un unico filesystem, ma è una cattiva idea. Solitamente si creano più filesystem per separare le cose. Con gli ZFS è ancora più utile perchè puoi settargli delle proprietà utili come l’autocopressione. Il mio consiglio è di creare almeno 4 filesystem: uno per il sistema (root), uno per la swap (grande come la RAM se > di 4GB altrimenti il doppio), uno per i fileserver e uno per mysql. Questo è il minimo secondo me.


Kernel
Sull’aspetto kernel se non avete buone competenze in materia lasciate perdere o fatevelo fare da qualcuno che lo sa fare.

Di default quando viene installato un sistema FreeBSD, viene utilizzato un kernel con configurazione GENERIC che ha abilitata la compatibilità a un infinità di cose. Questa non è una cosa positiva, dato che rallenta il sistema in fase di boot, riempie ram inutilmente e utilizza maggior CPU. Quindi andrebbe compilato un kernel con il supporto a solo quello che serve a te e al tuo hardware. Per questo non esiste una configurazione che posso consigliarvi perchè dipende molto dall’hardware della vostra macchine. Per informazioni rimando alla documentazione ufficiale: Chapter 8. Configuring the FreeBSD Kernel. Mi raccomando, se lo fate state attenti perchè è rischioso.


Occupazione spazio
Una volta startato noterete che lo spazio sui filesystem si riempirà. Quando andranno in full, cioè si riempiranno completamente, i software non riusciranno più a scrivere causando crash o addirittura irraggiungibilità della macchina anche da console.

Percui questo aspetto è molto importante, ma piuttosto semplice da gestire.

Al giorno d’oggi ci sono tante soluzioni: monitoraggio da remoto, autocompressione del filesystem (vedi ZFS), rotazione automatica dei log e qualche funzionalità integrata all’applicativo. Tutte queste soluzioni sono di prevenzione.

Le cause principale dell’occupazione dei filesystem sono i log e i database. I log di metin2 sono esageratamente verbosi e in poche ore possono occupare gigabyte di spazio. Tuttavia sono solo file di testo e comprimendoli si libera molto spazio. Quindi è buona norma (se non si vogliono comprare hard disk da diversi terabyte) predisporre una rotazione automatica dei log, cancellandoli o comprimendoli. Su FreeBSD è disponibile di default newsyslog che permette di impostare la rotazione automatica dei log. Oppure più banalmente si può schedulare a crontab lo script che cancella i log.

Riguardo a mysql, il db log contiene numerosi dati in continua scrittura e va controllato. Per farlo bisogna agire da mysql sfruttando gli eventi per eseguire automaticamente delle query per pulire le tabelle. Inoltre è consigliabile scegliere dei corretti storage engine in base agli utilizzi delle singole tabelle: Chapter 16 Alternative Storage Engines per le tabelle del db log è consigliabile il tipo Archive o InnoDB.


Monitoraggio
Altro aspetto molto utile e importante è il monitoraggio. Di solito i provider hanno un loro sistema di monitoraggio, ma è spesso limitato al solo monitoraggio della rete.

Oltre alla rete va monitorata anche l’occupazione dei filesystem, l’utilizzo delle risorse (cpu, ram, disk i/o), processi e log. Quindi consiglio uno dei migliori sistemi di monitoraggio remoto: Check_mk. Questo sistema è molto avanzato e allo stesso tempo di facile utilizzo. Rapido da configurare, leggero e molto comodo. Per questo anche le grandi aziende con grandi criticità come banche e ospedali lo utilizzano.


Sicurezza
Altro aspetto fondamentale che tutti sicuramente avete pensato è la sicurezza. Direi che non è bello se un hacker anche non molto bravo entra nel vostro sistema creandovi problemi vari.

Inoltre un problema molto comune è la presenza di attacchi DDoS sempre più frequenti. Per quest’ultimo potete fare poco. Scegliete un buon provider con una buona protezione, impostate bene il firewall e i servizi di rete, limitate la banda e separate l’interfaccia di rete pubblica da quella privata per la gestione.

Per le intrusioni bastano poche modifiche: accesso solo tramite chiave ssh, monitoraggio degli accessi e firewall. Se avete più di un server vi conviene configurare una VPN e/o un sistema ponte.


Backup
Altro aspetto importantissimo. Se sbagliate qualcosa anche solo nella modifica dei file server oppure se la macchina vi da problemi difficilmente riparabili come guasto dell’hard disk come fate? I backup vi salvano il lavoro svolto fin’ora e i progressi dei giocatori. E’ importante sia in fase di test che in produzione. I backup è importante farli anche automatici. Solitamente per un server di produzione consiglio: file server: 1 volta al giorno, datafile, 2 volte al giorno, dump db, ogni 10 minuti. Inutile dire che i backup andrebbero fatti su un supporto esterno.


Ridondanza
I backup a volte non bastano a salvarsi in caso di problemi. Le aziende hanno bisogno di ridondare la propria infrastruttura, a volte è un obbligo di legge.

Mettiamo il caso che la tua macchina fisica diventa irraggiungibile o si guasta, cosa comunque probabile, oppure sbagli qualcosa che ti blocca tutto per ore. Gli utenti cosa fanno? Se ne vanno piano piano e il tuo lavoro non vale niente. Ti sei sporcato la reputazione e i player non ritorneranno. E' successo molte volte.
L'unico modo è prevenire. Tutto quello che c'è scritto sopra aiuta, ma non ti garantisce uptime del 100%.
Per avvicinarti di molto a quel valore esiste il concetto di ridondanza.
Nel nostro caso si tratta di replicare il tutto su un'altra macchina, fisica o virtuale che risiede fisicamente su un altro datacenter (se possibile) o almeno in un altra'macchina fisica.
E' un costo, dato che sono due server invece che uno, ma i vantaggi sono ineguagliabili. Inoltre, come già descritto sopra, i prezzi sono enormemente calati, e dove qualche anno fa ti dovevi comprare un macchinone da €150 al mese per reggere un serverino di metin, ora ti bastano €90 per due macchine fisiche molto buone.

Il risultato di un sistema ridondato è che se una delle due macchine da problemi anche irreparabili, la seconda continua ad erogare il servizio. Metin2 è poco clusterizzabile e non si può creare un sistema ad alta affidabilità al 100%, però con le attuali tecnologie offerte da pochi provider si può ripristinare un sistema in 5 minuti. Per maggiori informazioni riguardo questo aspetto vi invito a leggere questa guida: Metin2 HA cluster

Conclusioni

Un buon compromesso prezzo/qualità che ho studiato e testato è riassunto in questo schema:
pub

Si tratta di due server dedicati uguali, o almeno con lo stesso processore e + o - la stessa quantità di ram e HDD, con ambiente di virtualizzazione (io uso Citrix XenServer), macchina ponte per accesso sicuro e rapido, ip di failover (in pochissimi minuti puoi switchare da un server all'altro) e collegamento privato su rete sicura tra i due server (VPN o soluzione integrata all'ambiente di virtualizzazione).
Tra i vari vantaggi di questa soluzione è che hai tutto quello che ti serve in queste due macchine: sito, backup, monitoraggio, test game e game di produzione, il tutto senza dover spendere troppo per tanti VPS separati.

Una configurazione come questa per progetti grossi nazionali può essere fatta con due server soyoustart da €35/mese l'uno.

Mentre questa è la mia configurazione consigliata di VM di test e produzione:

VM Test
Ideale per lo sviluppo e test con lo staff.
  • FreeBSD 10.3 amd64
  • 4GB RAM
  • 1 vCore (processore server moderno)
  • 30GB HDD (root 15GB, mysql 5GB, game 10GB espandibili a caldo) filesystem ZFS
  • Bandwidth: 20 mbps
  • Accesso sicuro (VPN, ponte o chiave SSH)
  • Firewall
  • Backup automatici su supporto esterno
  • Monitoraggio Check_MK
  • IPv4 pubblico dedicato (failover se ridondato)

VM Produzione
Per aprire o per beta test
  • FreeBSD 10.3 amd64
  • 8GB RAM
  • 2 vCore
  • 50GB HDD (root 15GB, mysql 10GB, game 25GB espandibili a caldo) filesystem ZFS
  • Bandwidth: 50 mbps
  • Accesso sicuro (VPN, ponte o chiave SSH)
  • Firewall
  • Backup automatici su supporto esterno
  • Monitoraggio Check_MK
  • IPv4 pubblico dedicato (failover se ridondato)
 
Ultima modifica:
Bella descrizione però ti sbagli su certi argomenti per esempio un server può avere moltissimi core (ognuno fa il suo uso della ram, ovviamente li reggera ma da qui si arriva al discorso del lag).
 
Bella descrizione però ti sbagli su certi argomenti per esempio un server può avere moltissimi core (ognuno fa il suo uso della ram, ovviamente li reggera ma da qui si arriva al discorso del lag).
Non capisco a cosa ti riferisci. Non mi pare di aver scritto che ci sono dei limiti sul numero di core.
A quale parte ti riferisci?
 
Non capisco a cosa ti riferisci. Non mi pare di aver scritto che ci sono dei limiti sul numero di core.
A quale parte ti riferisci?
Che macchina serve per un server di metin2? (il discorso del hardisk / ram). Più importante l'uso dei core/mysql che quanti player ha il server x reggere o no.
 
Che macchina serve per un server di metin2? (il discorso del hardisk / ram). Più importante l'uso dei core/mysql che quanti player ha il server x reggere o no.
Forse adesso ho capito cosa intendi.
Effettivamente il consumo di RAM, cpu e spazio disco dipende molto da quante istanze gemelle dell'applicativo si vanno a creare, da come viene programmato e come viene compilato. Anche la parte MySQL ha la sua parte: la frequenza di connessioni, la durata è quantità delle transazioni, i lock, la scelta degli storage engine, il tuning e molto altro.
Su queste cose si può aprire un mondo, ma molto legato all'aspetto applicativo, cosa che si allontana dall'argomento di questo thread.
La mia stima e test sono basati su una media generale. Solitamente ogni channel usa mediamente 4 core e vengono usati 2o 3 canali.
Più core metti e più ram e cpu la macchina userà.
Inserirò comunque questa nota, grazie.
 
Forse adesso ho capito cosa intendi.
Effettivamente il consumo di RAM, cpu e spazio disco dipende molto da quante istanze gemelle dell'applicativo si vanno a creare, da come viene programmato e come viene compilato. Anche la parte MySQL ha la sua parte: la frequenza di connessioni, la durata è quantità delle transazioni, i lock, la scelta degli storage engine, il tuning e molto altro.
Su queste cose si può aprire un mondo, ma molto legato all'aspetto applicativo, cosa che si allontana dall'argomento di questo thread.
La mia stima e test sono basati su una media generale. Solitamente ogni channel usa mediamente 4 core e vengono usati 2o 3 canali.
Più core metti e più ram e cpu la macchina userà.
Inserirò comunque questa nota, grazie.

Si infatti, di nulla. Complimenti per la documentazione.
 
Complimenti per la chiarezza della guida. Insieme alla altra mi e stato molto utile. Se hai skype me lo puoi lasciare in messaggio privato. Ho bisogno di chiederti delle cose.
 
Una VM ( per esempio le OVH 2014 ) , non possono montare un proprio kernel. Il kernel è gestito dal virtualizzatore.
Forse non hai capito come funziona la virtualizzazione https://it.m.wikipedia.org/wiki/Virtualizzazione

È vero che alcuni hypervisor di nicchia non supportano alcuni sistemi operativi, ma non vuol dire che la VM non ha il proprio kernel. La VM non è altro che una macchina con un proprio hardware, ma virtuale. Il sistema operativo ha bisogno comunque del proprio kernel per lavorare sull'hardware assegnato dall'hypervisor.
 
Forse non hai capito come funziona la virtualizzazione https://it.m.wikipedia.org/wiki/Virtualizzazione

È vero che alcuni hypervisor di nicchia non supportano alcuni sistemi operativi, ma non vuol dire che la VM non ha il proprio kernel. La VM non è altro che una macchina con un proprio hardware, ma virtuale. Il sistema operativo ha bisogno comunque del proprio kernel per lavorare sull'hardware assegnato dall'hypervisor.
Forse Tu non hai chiaro la cosa.
Con la VPS classic 2014 non puoi cambiare il Kernel.
con le Cloud 2016 si
 
Forse Tu non hai chiaro la cosa.
Con la VPS classic 2014 non puoi cambiare il Kernel.
con le Cloud 2016 si
Le vecchie vps Classic 2014 usavano openvz, che non è un vero hypervisor perché non crea deve vere VM ma dei container. Per intenderci è molto simile alle jail di FreeBSD e alle zone di Solaris.
https://en.m.wikipedia.org/wiki/OpenVZ
Quindi nel caso dei container utilizzi il kernel del sistema che c'è alla base. Infatti openvz funziona solo con distruggere Linux. Ad esempio non puoi metterci FreeBSD o Windows.
 
Le vecchie vps Classic 2014 usavano openvz, che non è un vero hypervisor perché non crea deve vere VM ma dei container. Per intenderci è molto simile alle jail di FreeBSD e alle zone di Solaris.
https://en.m.wikipedia.org/wiki/OpenVZ
Quindi nel caso dei container utilizzi il kernel del sistema che c'è alla base. Infatti openvz funziona solo con distruggere Linux. Ad esempio non puoi metterci FreeBSD o Windows.
Infatti... A questo mi riferisco. Le 2016 tutto ok
 
Stato
Discussione chiusa ad ulteriori risposte.