Version PostgreSQL: 11.2
[.____] OS: RHEL ou Oracle Linux 7.6 (pour être décidé)
Je suis au stade de la conception de la mise en place d'une base de données de production. En production, la DB sera d'environ 300 Go à 400 Go de taille.
C'est ce que j'ai à l'esprit. S'il vous plaît laissez-moi savoir si c'est une bonne idée d'un déploiement de production PostgreSQL.
Je vais avoir le système de fichiers suivant monté avec les tailles suivantes:
/db ----> 50 GB
/pgdata ---> 500 GB
Je vais initialiser le cluster de base de données dans l'emplacement personnalisé /db/postgres/pg11/data
.
[.____] et dès le début, je commencerai à créer des espaces de table comme ceci:
CREATE TABLESPACE orders_tbs LOCATION '/pgdata/<db_name>/orders_tbs';
... et placer des objets d'affaires dans ces espaces de table comme ceci:
CREATE TABLE orders (id int, order_item text) tablespace orders_tbs;
Merci arkhena, cl cl
Dans ce cas, j'ai pensé à créer un système de fichiers séparé pour les datafiles (/pgdata
) et garder les fichiers de configuration et vous connecter à /db
. Donc, mon idée était mauvaise.
Depuis que je suis en Rhel/Oracle Linux, par défaut, mon $PGDATA
sera /var/lib/pgsql/11/data
.
[.____] mais, je préfère avoir mon $PGDATA
Dans un endroit personnalisé comme /db/postgres/pg11/data
Puisque les datafiles résident dans $PGDATA/base
Répertoire, que diriez-vous de créer une disposition de disque comme ci-dessous à l'aide de LVM?
Un système de fichiers de 50 Go pour le dernier répertoire parent de $ PGDATA /db
et un système de fichiers distinct de 500 Go pour $PGDATA/base
répertoire?
[root@localhost ~]# df -Ph
Filesystem Size Used Avail Use% Mounted on
<output snipped>
.
.
/dev/mapper/VolGroup1-LogVol02 50G 23M 49.9G 1% /db
/dev/mapper/VolGroup1-LogVol04 500G 2.7M 499.9G 1% /db/postgres/pg11/data/base
J'ai besoin de vérifier avec notre administrateur Linux sur la manière dont la disposition de disque ci-dessus peut être créée de manière optimale sans causer de goulots d'étranglement de stockage.
Les espaces de table dans PostgreSQL existent pour des besoins très particuliers (et je doute que moins de 500 Go soit dans cette affaire) et pour la conformité SQL. Si vous envisagez de créer des espaces de table pour stocker éventuellement tout sur le même disque, ne faites pas. Si vous envisagez de créer des espaces de table à l'intérieur de $ pgdata, s'il vous plaît ne faites pas.
Les espaces de table mènent à des opérations de récupération plus complexes (si vous en avez besoin d'une). Vous vous maudirez plus tard, faites-moi confiance.
Vous trouverez de nombreux excellents conseils dans Christophe Pettus Diapositives ( PostgreSQL quand ce n'est pas votre travail ). La diapositive 27 concerne les espaces de table et pourquoi ne pas les utiliser.
Je ne sais pas quelle solution avez-vous adopté enfin, mais si vous ne voulez pas avoir votre $PGDATA
Dans l'emplacement par défaut dans cet article Vous pouvez trouver comment créer une personnalisation $PGDATA
. L'article est d'environ Centos 7 avec PostgreSQL 10:
Si vous souhaitez placer vos données dans (par exemple)/pgdata/10/données, créez le répertoire avec les bons droits ( que je dois ajouter ceci est vraiment important: propriétaire et droits. Ceci est postgres:postgres
et 700
):
# mkdir -p /pgdata/10/data
# chown -R postgres:postgres /pgdata
Ensuite, personnalisez le service SystemD:
# systemctl edit postgresql-10.service
Ajoutez le contenu suivant:
[Service]
Environment=PGDATA=/pgdata/10/data
Cela créera un /etc/systemd/system/postgresql-10.service.d/override.conf
Fichier qui sera fusionné avec le fichier de service d'origine.
Pour vérifier son contenu:
# cat /etc/systemd/system/postgresql-10.service.d/override.conf
[Service]
Environment=PGDATA=/pgdata/10/data
Recharger SystemD:
# systemctl daemon-reload
Initialiser le répertoire de données PostgreSQL:
# /usr/pgsql-10/bin/postgresql-10-setup initdb
Démarrer et activer le service:
# systemctl enable postgresql-10
# systemctl start postgresql-10
Si vous ne le faites pas ou que vous ne pouvez pas toucher le postgresqlXX.service
Fichier pour changer l'emplacement de $PGDATA
Vous pouvez démarrer votre cluster manuellement au lieu d'utiliser SystemCtL:
cd /<location_of_your_PGDATA>
su postgres -c 'pg_ctl start -D <location_of_your_PGDATA> -l <name_of_file_to_log_startup>'