Forum général.général Optimisation d'un serveur de base de données (PG)

2
22
juin
2016

Bonjour tout le monde,

Je gère un cluster de calcul monté comme suit :
-2 pfSense inter-connectés en entrée, filtrant les utilisateurs sur leurs adresses IP,
-3 serveurs faisant tourner Proxmox: 2 grosses babasses (1 HP DL360G7 et 1 HP DL360G8, 24 coeurs chacun, 192Go RAM chacun) + 1 ch'ti qui sert juste pour faire le quorum de Proxmox,
-1 SAN de 12To pour poser les machines virtuelles
-1 NAS pour les backups des VMs

Pour l'instant les utilisateurs (une soixantaine) sont répartis en groupes, chaque groupe ayant une base de donnée PostgreSQL où sont stockés des tables (…) et des fonctions qui lorsqu'elles sont exécutées, brassent de grosses quantités de données (plusieurs dizaine de millions d'enregistrements). Toutes ces bases de données sont gérées par un seul serveur PostgreSQL (9.4) qui tourne sur une seule VM de 2To (configurée en haute dispo dans Proxmox). De plus chaque utilisateur peut se connecter en SSH sur son répertoire personnel, et à un répertoire partagé entre tous les utilisateurs. L'authentification se fait via LDAP. Tous les utilisateurs se connectent depuis l'extérieur.
D'autres Vms tournent aussi sur le cluster, mais elles sont insignifiantes ici.

Les problèmes :
1- Lorsque un utilisateur, membre d'un groupe, se connecte au serveur de base de données, il peut avoir un listing de toutes les bases existantes sur le serveur. Il ne peut bien sûr pas y accéder à cause des règles d'accès, mais il peut voir qui est connecté. Niveau confidentialité c'est pas ça.
2- Lorsqu'un utilisateur lance une fonction, il y a un impact sur les temps de réponse des autres bases puisque les CPU et la RAM sont partagés.
3- La VM où tourne le serveur de base de données n'utilise la puissance que d'une seule des 2 babasses, l'autre étant au repos pour récupèrer la VM au cas où le premier serveur plante (HA).

Du coup, je me demande (et c'est le but de mon post ici) qu'elle est la meilleure solution pour palier à tous ça. Pour l'instant j'imagine passer tout ce petit monde dans des VM par groupe d'utilisateurs, et de répartir ces VMs équitablement sur les 2 serveurs.
Est-ce que ça serait plus pertinent d'un point de vue performance/facilité d'utiliser des conteneurs (OpenVZ car Proxmox 3.4, sinon upgrade en 4.0 pour du LXC)? Sinon Docker? Ou monter une plate-forme OpenStack, mais jamais fait et la doc parle de plusieurs serveurs physiques?
De plus, nous avons besoin de propager des patchs correctifs sur les bases de données, je me vois mal faire ça à la main sur chaque VM. J'imagine que des softs comme Puppet ou Chef pourraient aider, mais est-ce bien fait pour?
Pareil pour la gestion des utilisateurs. Pour l'instant c'est relativement simple avec LDAP et Webmin qui propage les modifs sur l'unique machine, mais comment faire sur X machines?
Après, il restera la question du routage, avec une unique adresse IP publique, il va falloir jouer avec les sous-domaines j'imagine.

Merci de votre aide

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.