# ๐Ÿ’พ Storage Storage vormt een belangrijk onderdeel van de Tulpencraft-infrastructuur. Minecraft is sterk afhankelijk van snelle en betrouwbare opslag. Niet alleen de serverbestanden zelf staan op disk, maar ook werelddata, chunks, plugins, configuraties, logs en eventuele backups. Binnen Tulpencraft wordt onderscheid gemaakt tussen: * ๐Ÿ’ฟ fysieke NVMe-opslag op de Proxmox-host; * ๐Ÿ–ฅ๏ธ virtuele disks van de Tulpencraft-VM's; * ๐Ÿ“ filesystems binnen de VM's; * ๐ŸŒ Minecraft-werelddata; * ๐Ÿ“‹ logs en configuraties; * ๐Ÿ’พ backups. --- ## ๐Ÿ—๏ธ Huidige opslagarchitectuur Tulpencraft draait momenteel als virtuele infrastructuur op de Proxmox-node **`hv002`**. De Proxmox-host beschikt over **NVMe-storage**, waardoor de virtuele machines van Tulpencraft gebruikmaken van snelle onderliggende opslag. De huidige architectuur is: ```text ๐Ÿ–ฅ๏ธ Fysieke Proxmox-host โ””โ”€โ”€ hv002 โ”‚ โ””โ”€โ”€ โšก NVMe storage โ”‚ โ”œโ”€โ”€ ๐Ÿ–ฅ๏ธ mc-proxy001 โ”‚ โ”œโ”€โ”€ Velocity โ”‚ โ”œโ”€โ”€ Lobby โ”‚ โ”œโ”€โ”€ Database โ”‚ โ””โ”€โ”€ overige netwerkdiensten โ”‚ โ”œโ”€โ”€ ๐ŸŽฎ Survival VM โ”‚ โ”œโ”€โ”€ ๐ŸŽฏ Events VM โ”‚ โ””โ”€โ”€ โž• toekomstige Tulpencraft VM's ``` De fysieke storage wordt door Proxmox aan de VM's beschikbaar gesteld als virtuele opslag. > **Tulpencraft schrijft niet rechtstreeks naar de fysieke NVMe-disks van `hv002`.** De Minecraft-servers zien hun opslag als virtuele disks die door Proxmox aan de betreffende VM worden aangeboden. --- ## โšก NVMe-storage De huidige Proxmox-host **`hv002`** maakt gebruik van **NVMe-opslag**. Dit is gunstig voor Tulpencraft omdat Minecraft regelmatig veel kleine lees- en schrijfacties uitvoert. Vooral de volgende activiteiten kunnen veel storage-I/O veroorzaken: * chunkgeneratie; * chunkloading; * wereldsaves; * wereldgeneratie; * grote WorldEdit-operaties; * backups; * databaseactiviteiten; * pluginactiviteiten. NVMe biedt hierbij doorgaans aanzienlijk lagere latency en hogere I/O-prestaties dan traditionele HDD-opslag. De exacte fysieke configuratie van de NVMe-opslag, zoals: * aantal NVMe-drives; * merk en model; * RAID-configuratie; * controller; * filesystem; * Proxmox-storagebackend; wordt niet door Tulpencraft beheerd en wordt daarom niet als onderdeel van de Tulpencraft-configuratie vastgelegd. --- ## ๐Ÿ–ฅ๏ธ Virtuele disks Iedere Tulpencraft-VM krijgt รฉรฉn of meerdere virtuele disks. Binnen de VM ziet Linux deze bijvoorbeeld als: ```text /dev/sda /dev/sdb ``` De exacte device-namen zijn afhankelijk van de virtuele hardwareconfiguratie. De opslag volgt vervolgens de Linux-opbouw: ```text Virtuele disk โ”‚ โ–ผ Partitie โ”‚ โ–ผ Filesystem โ”‚ โ–ผ Mountpoint โ”‚ โ–ผ Applicatie ``` --- ## ๐Ÿ“ Minecraft-data De Minecraft-data wordt binnen Tulpencraft onder: ```text /srv/minecraft/ ``` geplaatst. Een server kan bijvoorbeeld bestaan uit: ```text /srv/minecraft/survival/ โ”œโ”€โ”€ world/ โ”œโ”€โ”€ world_nether/ โ”œโ”€โ”€ world_the_end/ โ”œโ”€โ”€ plugins/ โ”œโ”€โ”€ config/ โ””โ”€โ”€ logs/ ``` Hierdoor blijft de applicatiedata duidelijk gescheiden van de overige systeemdirectories. --- ## ๐ŸŒ Werelddata Minecraft-werelden bestaan uit een groot aantal chunkbestanden. Bij een Survival-server kan de opslag daardoor blijven groeien naarmate spelers nieuwe gebieden ontdekken. De omvang wordt onder andere bepaald door: * aantal spelers; * hoeveelheid verkende chunks; * wereldgrenzen; * Nether-gebruik; * The End; * gegenereerde structuren; * plugins; * mapgeneratie; * gebruiksduur. Daarom wordt niet alleen gekeken naar de huidige hoeveelheid vrije ruimte, maar ook naar de **groeisnelheid van de werelddata**. --- ## โšก Storage-performance Voor Minecraft is niet alleen de totale opslagcapaciteit belangrijk. Ook de prestaties van de opslag zijn relevant. Belangrijke factoren zijn: * latency; * IOPS; * throughput; * queue depth; * filesystem performance; * virtualisatie-overhead; * storage contention. De NVMe-opslag van `hv002` biedt hiervoor een sterke basis. Dit is met name relevant wanneer meerdere VM's tegelijkertijd actief zijn. Niet alleen Tulpencraft maakt immers gebruik van de fysieke host. --- ## ๐Ÿ“Š Storage monitoring Storage wordt periodiek gecontroleerd. ### Schijfruimte ```bash df -h ``` ### Inodes ```bash df -ih ``` ### Block devices ```bash lsblk ``` ### Filesystems ```bash lsblk -f ``` ### Grootste directories ```bash sudo du -xh /srv/minecraft --max-depth=1 | sort -h ``` Voor een specifieke server: ```bash sudo du -xh /srv/minecraft/survival --max-depth=1 | sort -h ``` --- ## ๐Ÿšจ Vrije ruimte Een filesystem mag niet onbeperkt vollopen. Wanneer een filesystem volledig volloopt kunnen onder andere: * Minecraft niet meer schrijven; * logs niet meer worden bijgewerkt; * werelddata niet meer worden opgeslagen; * databases problemen krijgen; * services crashen; * updates mislukken. Ook op Proxmox-niveau kan een volledig gevulde storage problemen veroorzaken voor meerdere VM's. Storagecapaciteit wordt daarom beschouwd als een operationele resource die actief bewaakt moet worden. --- ## ๐Ÿงน Storage opruimen Bij ruimteproblemen wordt eerst vastgesteld waar de ruimte naartoe gaat. ```bash df -h ``` Daarna bijvoorbeeld: ```bash sudo du -xh / --max-depth=1 2>/dev/null | sort -h ``` En specifiek voor Minecraft: ```bash sudo du -xh /srv/minecraft --max-depth=2 | sort -h ``` Mogelijke oorzaken zijn: * werelddata; * oude backups; * oude logs; * crash reports; * tijdelijke bestanden; * oude plugins; * ongebruikte serverbestanden. > **Minecraft-wereldbestanden worden nooit zomaar verwijderd.** Eerst wordt vastgesteld wat de bestanden zijn en of ze daadwerkelijk niet meer nodig zijn. --- ## ๐Ÿ“‹ Logs Minecraft produceert logbestanden die eveneens opslagruimte gebruiken. Bijvoorbeeld: ```text /srv/minecraft//logs/ ``` Een logdirectory kan worden gecontroleerd met: ```bash du -sh /srv/minecraft/*/logs ``` Naast Minecraft-logs bestaan er onder andere: * systemd journal logs; * audit logs; * SELinux logs; * pluginlogs; * applicatielogs. Logging maakt daarom onderdeel uit van de totale storageplanning. --- ## ๐Ÿ—„๏ธ Database De huidige Tulpencraft-database draait intern op: ```text mc-proxy001 ``` De database gebruikt daarmee eveneens storage van deze VM. In de huidige ontwikkelfase is dit bewust eenvoudig gehouden. Wanneer Tulpencraft groeit, kan de database worden afgesplitst naar een eigen VM. Bijvoorbeeld: ```text mc-proxy001 โ”œโ”€โ”€ Velocity โ””โ”€โ”€ Lobby + mc-db001 โ””โ”€โ”€ MySQL / MariaDB ``` Hierdoor kunnen databasebelasting, opslag en backups onafhankelijker worden beheerd. --- ## ๐Ÿ’พ Backups Backups mogen bij voorkeur niet uitsluitend op dezelfde storage blijven staan als de VM die wordt geback-upt. Bij een probleem met de onderliggende storage kunnen anders zowel productiegegevens als backups worden geraakt. Gewenste situatie: ```text ๐Ÿ–ฅ๏ธ Tulpencraft VM โ”‚ โ–ผ ๐Ÿ’พ Backup โ”‚ โ–ผ ๐Ÿ“ฆ Aparte backup-opslag ``` De concrete backupstrategie wordt beschreven op: * [[technische-infrastructuur:backups|Backups]] --- ## ๐ŸงŠ Snapshots Snapshots kunnen nuttig zijn vรณรณr grote wijzigingen aan VM's. Bijvoorbeeld vรณรณr: * systeemwijzigingen; * migraties; * configuratiewijzigingen; * upgrades. Een snapshot is echter **geen vervanging voor een backup**. Snapshots gebruiken bovendien extra storagecapaciteit en moeten daarom niet onbeperkt worden bewaard. --- ## ๐Ÿ—๏ธ Toekomstige storagearchitectuur Wanneer Tulpencraft verder groeit, kan de infrastructuur verder worden opgesplitst. Een mogelijke toekomstige architectuur: ```text ๐Ÿ–ฅ๏ธ Proxmox Node โ”‚ โšก NVMe storage โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ–ผ โ–ผ โ–ผ mc-proxy001 mc-db001 mc-lobby001 โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐Ÿ–ฅ๏ธ Game server node โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ–ผ โ–ผ โ–ผ Survival Events SkyBlock ``` Afhankelijk van de benodigde resources kan dit worden uitgevoerd op: * รฉรฉn krachtige Proxmox-node; * meerdere Proxmox-nodes; * een afzonderlijke game-servernode; * of een combinatie van fysieke en virtuele servers. --- ## ๐Ÿ“ˆ Opschalen Wanneer de beschikbare storage onvoldoende wordt, zijn verschillende opties mogelijk: ### VM vergroten De virtuele disk kan worden uitgebreid wanneer de onderliggende Proxmox-storage hiervoor voldoende capaciteit heeft. ### Extra virtuele disk Een extra virtuele disk kan worden gebruikt voor bijvoorbeeld: ```text /srv/minecraft/ ``` Dit kan nuttig zijn om Minecraft-data los te koppelen van het operating system. ### Extra Proxmox-storage Wanneer de fysieke host onvoldoende capaciteit heeft, kan extra storage worden toegevoegd of kan worden gemigreerd naar een andere storageomgeving. ### Extra fysieke infrastructuur Bij verdere groei kan Tulpencraft uiteindelijk gebruikmaken van eigen fysieke infrastructuur. --- ## ๐Ÿงฑ Storage en beschikbaarheid Storage is onderdeel van de totale beschikbaarheid van Tulpencraft. Een storageprobleem kan zich bijvoorbeeld ontwikkelen als: ```text ๐Ÿ’พ Storageprobleem โ”‚ โ–ผ ๐Ÿ“€ I/O-fouten โ”‚ โ–ผ ๐Ÿ–ฅ๏ธ VM-problemen โ”‚ โ–ผ ๐ŸŽฎ Minecraft-problemen ``` Daarom wordt storage niet alleen als capaciteitsprobleem gezien, maar ook als onderdeel van **beschikbaarheid en continuรฏteit**. --- ## ๐Ÿ” Security Storage kan gevoelige gegevens bevatten. Denk bijvoorbeeld aan: * databasebestanden; * configuraties; * logs; * spelersgegevens; * pluginconfiguraties; * backups. Toegang tot storage wordt daarom beperkt tot bevoegde systeemgebruikers. Linux-bestandsrechten, SELinux en VM-isolatie vormen hierbij belangrijke beveiligingslagen. Zie ook: * [[technische-infrastructuur:server-hardening|Server hardening]] * [[technische-infrastructuur:selinux|SELinux]] --- ## ๐Ÿ“Œ Huidige situatie | Onderdeel | Huidige situatie | | | ----------------- | ------------------------------------------ | ---------------------- | | ๐Ÿ–ฅ๏ธ Virtualisatie | Proxmox VE | | | ๐Ÿ–ฅ๏ธ Host | `hv002` | | | ๐Ÿข Hosting | Override.nl / FastWebHosting.nl | | | โšก Fysieke storage | **NVMe** | | | ๐Ÿ’ฟ Storagegebruik | Via Proxmox | | | ๐Ÿ–ฅ๏ธ Minecraft | Virtuele machines | | | ๐Ÿ“ Minecraft-data | `/srv/minecraft/` | | | ๐Ÿ—„๏ธ Database | Momenteel intern op `mc-proxy001` | | | ๐Ÿ’พ Backups | Zie [[technische-infrastructuur:backups | Backups]] | | ๐Ÿ“Š Monitoring | Zie [[technische-infrastructuur:monitoring | Monitoring & logging]] | De fysieke NVMe-configuratie van `hv002` wordt verder niet gedetailleerd gedocumenteerd, omdat deze onderdeel is van de hostingomgeving van Override.nl / FastWebHosting.nl. --- ## ๐ŸŒท Uitgangspunten Binnen Tulpencraft gelden voor storage de volgende uitgangspunten: 1. ๐Ÿ’พ Storage moet voldoende capaciteit hebben voor groei. 2. โšก Storage-performance is belangrijk voor Minecraft. 3. ๐Ÿšจ Filesystems worden niet bewust volledig gevuld. 4. ๐ŸŒ Minecraft-werelddata wordt niet zonder controle verwijderd. 5. ๐Ÿ’พ Backups worden bij voorkeur op afzonderlijke storage bewaard. 6. ๐ŸงŠ Snapshots zijn geen backups. 7. ๐Ÿ–ฅ๏ธ VM-storage wordt beheerd vanuit Proxmox. 8. ๐Ÿ“Š Storagegebruik wordt gemonitord. 9. ๐Ÿ” Storage wordt volgens least-privilege beveiligd. 10. ๐Ÿ“ˆ Bij groei wordt tijdig opgeschaald. --- ## ๐Ÿ“š Gerelateerde documentatie * [[technische-infrastructuur:overzicht|Technische infrastructuur]] * [[technische-infrastructuur:os-installatie|OS-installatie]] * [[technische-infrastructuur:rocky-linux-10|Rocky Linux 10]] * [[technische-infrastructuur:server-hardening|Server hardening]] * [[technische-infrastructuur:firewall|Firewall]] * [[technische-infrastructuur:selinux|SELinux]] * [[technische-infrastructuur:systemd|systemd]] * [[technische-infrastructuur:monitoring|Monitoring & logging]] * [[technische-infrastructuur:backups|Backups]] * [[serverinfrastructuur:overzicht|Serverinfrastructuur]] > **Opmerking:** de exacte fysieke NVMe-configuratie van `hv002` valt onder het beheer van de hostingomgeving en kan in de toekomst wijzigen.