Bonjour
Je souhaite fournir du PostgreSQL as a service à différents tenants.
Mon archi type est la suivante:
- 3 DC + chacun sa baie, 1 serveur physique par DC
- couche cluster pacemaker/corosync, avec un resourceset pgsql-ha gérant 3 resources pgsql (1 master + 2 slaves, quorum à 2)
- réplication streaming avec 1 sync (remote_apply) + 1 async (synchronous_standby_names à 1 (node 2, node 3))
Je rencontre plusieurs problématiques dans mon administration quotidienne :
- isolation des perfs: un tenant qui décide de faire des benchs (ou des bétises) peut impacter les autres (surtout avec le mode sync en remote_apply) + customisation du niveau de sync selon tenant (dégradable sur opé planifiée)
- isolation des incidents: un tenant qui code comme ... vous pouvez l'imaginer et me laisse des connexions ouvertes pendant des heures alors qu'on transact à fond => bloat => chute des perfs => freeze du cluster => impact général et pas seulement de la db du tenant
- isolation des droits d'admin (superusers) : qui pourraient avoir accès aux db des autres tenants ou décider de restart une instance qui host des db ne leur appartenant pas
- planification des opérations de maintenance cluster/engine : obtenir un accord unanime de l'ensemble des tenants owners sur un créneau prend des semaines (et de l'énergie)
Mon idée est de fournir une instance par tenant pour régler la majorité des problèmes:
- il y aurait donc plusieurs instances en local avec chacune sa VIP layer 3 dédiée
- côté hardware, le nouveau limitant serait alors le CPU (côté RAM ou I/O, on est Très larges, en TB et full flash)
- côté réseau, on est sur du 25GB/s dédié, avec de l'iSCSI entre les nodes et le SAN
- côté pcs/corosync, il peut gérer N resourcesset de resources pgsql indépendamment
Ma 1ère difficulté se situe à l'installation des binaires en considérant les upgrades mineurs. Mon objectif ressemblant à:
Autant cela ne pose pas de problème pour les releases majeures (/usr/pgsql-X), autant pour les releases mineures, je n'ai pas de solution propre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 /usr/pgsql-9.6.24/... /usr/pgsql-13.6/... /usr/pgsql-13.7/... /usr/pgsql-14.1/... /usr/pgsql-14.2/... + /var/lib/pgsql/data/instance_A /instance_B /instance_C /instance_... /var/lib/pgsql/arch/instance_A /instance_B /instance_C /instance_...
J'en ai une avec yum install blabla --installroot=/usr/pgsql-X.y mais cela recrée toute l'arbo système en dessous (et je me retrouve avec /usr/pgsql-X.y/usr/pgsql-X/bin).
J'ai également considéré de télécharger les sources et de les recompiler en adaptant les arborescences, mais sachant qu'il me faudrait refaire cela tous les 3 mois, j'imagine qu'il y a certainement une meilleure solution.
Je ne suis pas parvenu à trouver d'exemple sur le net avec du multi-local-minor-instances pour Postgres.
Avez-vous des documents ou des idées qui pourraient m'aider ?
Merci à vous
Partager