PostgreSQL o Postgres es un sistema de gestión de base de datos relacional de objetos (ORDBMS) de código abierto con más de 15 años de desarrollo activo. Es un poderoso servidor de base de datos que puede manejar grandes cargas de trabajo. PostgreSQL se puede utilizar en servidores Linux, Unix, BSD y Windows.
La replicación de la base de datos maestra/esclava es un proceso de copia (sincronización) de datos de una base de datos en un servidor (el maestro) a una base de datos en otro servidor (el esclavo). El principal beneficio de este proceso es distribuir bases de datos a varias máquinas, de modo que cuando el servidor maestro tiene un problema, hay una máquina de respaldo con los mismos datos disponibles para manejar las solicitudes sin interrupción.
PostgreSQL proporciona varias formas de replicar una base de datos. Se puede utilizar con fines de copia de seguridad y para proporcionar un servidor de base de datos de alta disponibilidad. En este tutorial, le mostraremos cómo instalar y configurar la replicación maestro-esclavo de PostgreSQL 9.6 en un servidor CentOS 7. Usaremos el modo de espera activo, y es un muy buen punto de partida para aprender PostgreSQL en profundidad.
Lo que haremos
- Instalar PostgreSQL 9.6
- Iniciar y configurar PostgreSQL 9.6
- Configurar cortafuegos
- Configurar servidor maestro
- Configurar servidor esclavo
- Pruebas
Requisito previo
- 1 servidor CentOS 7
- Maestro - Permiso de lectura y escritura - IP:10.0.15.10
- 1 servidor CentOS 7
- Esclavo - Solo permiso de lectura - IP:10.0.15.11
- Privilegios de raíz
Paso 1:instalar PostgreSQL 9.6
En este tutorial, discutiremos cómo instalar la última versión de PostgreSQL 9.6 en el servidor CentOS 7. De forma predeterminada, el repositorio oficial de CentOS ofrece una versión anterior, por lo que debemos instalar PostgreSQL desde el repositorio oficial.
Agregue un nuevo repositorio de PostgreSQL 9.6 al sistema.
yum -y install https://yum.postgresql.org/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
Ahora instale PostgreSQL 9.6 usando el siguiente comando yum.
yum -y install postgresql96-server postgresql96-contrib
De esta manera, puede instalar PostgreSQL 9.6.
Paso 2:iniciar y configurar PostgreSQL 9.6
Antes de iniciar el servicio de postgres, debemos inicializar la base de datos. Para esto, vaya a '/usr/pgsql-9.6/bin ' e inicialice la base de datos con la configuración de postgres 'postgresql96-setup '.
cd /usr/pgsql-9.6/bin
./postgresql96-setup initdb
A continuación, inicie el servicio postgres y habilítelo para que se inicie automáticamente al iniciar el sistema.
systemctl start postgresql-9.6
systemctl enable postgresql-9.6
De forma predeterminada, postgres se ejecuta en el puerto 5432. Así que asegúrese de que el estado del puerto 5432 sea 'ESCUCHAR ' ejecutando el comando netstat de la siguiente manera.
netstat -plntu
Si no tiene un comando netstat, instale net-tools. Es parte de las herramientas de red.
yum -y install net-tools
Entonces se ha iniciado PostgreSQL 9.6. Pero aún necesitamos configurar la contraseña para el usuario de postgres. Inicie sesión como usuario 'postgres' y luego acceda al shell 'psql' de postgres.
su - postgres
psql
Dar el 'postgres ' usuario nueva contraseña con la consulta a continuación.
\password postgres
Enter new password:
Entonces se inició PostgreSQL 9.6 y se configuró una nueva contraseña para el usuario de postgres.
Paso 3:configurar el cortafuegos
Firewalld es una herramienta de administración de firewall predeterminada en CentOS 7. Iniciaremos este servicio y abriremos el puerto para la conexión de PostgreSQL.
Inicie firewalld y permita que se inicie automáticamente en el arranque del sistema usando los siguientes comandos:
systemctl start firewalld
systemctl enable firewalld
A continuación, agregue un nuevo servicio de postgres a firewalld con los siguientes comandos.
firewall-cmd --add-service=postgresql --permanent
firewall-cmd --reload
Ahora compruebe el puerto abierto del servicio.
firewall-cmd --list-all
Y verá que el servicio PostgreSQL se ha agregado al firewalld.
Paso 4:configurar el servidor maestro
En este paso, configuraremos un servidor maestro para la replicación. Este es el servidor principal, que permite el proceso de lectura y escritura de las aplicaciones que se ejecutan en él. PostgreSQL en el maestro se ejecuta solo en la dirección IP '10.0.15.10' y realiza la replicación de transmisión al servidor esclavo.
Vaya al directorio de datos de pgsql '/var/lib/pgsql/9.6/data ' y edite el archivo de configuración 'postgresql.conf '.
cd /var/lib/pgsql/9.6/data
vim postgresql.conf
Descomente la línea 'listen_addresses' y cambie el valor de la dirección IP del servidor a '10.0.15.10'.
listen_addresses = '10.0.15.10'
Descomente la línea 'wal_level' y cambie el valor a 'hot_standby '.
wal_level = hot_standby
Para el nivel de sincronización, usaremos la sincronización local. Descomente y cambie la línea de valor como se muestra a continuación.
synchronous_commit = local
Habilite el modo de archivo y asigne a la variable archive_command un comando como valor.
archive_mode = on
archive_command = 'cp %p /var/lib/pgsql/9.6/archive/%f'
Para la configuración de 'Replicación', elimine el comentario de la línea 'wal_sender' y cambie el valor a 2 (en este tutorial, usamos solo 2 servidores maestro y esclavo), y para 'wal_keep_segments' el valor es 10.
max_wal_senders = 2
wal_keep_segments = 10
Para el nombre de la aplicación, elimine el comentario de la línea 'synchronous_standby_names' y cambie el valor a 'pgslave01 '.
synchronous_standby_names = 'pgslave01'
Eso es todo. Guarde estos cambios y salga del editor.
Continuando, en el archivo postgresql.conf, el modo de archivo está habilitado, por lo que debemos crear un nuevo directorio para fines de archivo.
Cree un nuevo directorio, cambie su permiso y cambie el propietario al usuario de postgres.
mkdir -p /var/lib/pgsql/9.6/archive/
chmod 700 /var/lib/pgsql/9.6/archive/
chown -R postgres:postgres /var/lib/pgsql/9.6/archive/
Ahora edite el archivo pg_hba.conf.
vim pg_hba.conf
Pegue la configuración a continuación al final de la línea.
# Localhost
host replication replica 127.0.0.1/32 md5
# PostgreSQL Master IP address
host replication replica 10.0.15.10/32 md5
# PostgreSQL SLave IP address
host replication replica 10.0.15.11/32 md5
Guardar y Salir. Toda la configuración está completa. Ahora, reinicie PostgreSQL 9.6 usando el siguiente comando.
systemctl restart postgresql-9.6
A continuación, debemos crear un nuevo usuario con privilegios de replicación. Crearemos un nuevo usuario llamado 'réplica '.
Inicie sesión como usuario de postgres y cree una nueva 'réplica ' usuario con contraseña '[email protected] '.
su - postgres
createuser --replication -P replica
Enter New Password:
Entonces, con esto, la configuración maestra de PostgreSQL 9.6 se completó y se creó el usuario para la replicación.
Paso 5:configurar el servidor esclavo
En este paso, configuraremos el servidor Esclavo. Queremos reemplazar el directorio de datos de postgres en el servidor esclavo con los datos de postgres del servidor maestro, y luego configurar el servidor esclavo para que se ejecute bajo la dirección IP '10.0.15.11', y finalmente habilitar hot_standby para permitir solo leer sin escribir.
Antes de comenzar a configurar el servidor esclavo, detenga el servicio de postgres usando el siguiente comando systemctl.
systemctl stop postgresql-9.6
Luego vaya al directorio de postgres y al directorio de datos de copia de seguridad.
cd /var/lib/pgsql/9.6/
mv data data-backup
Cree un nuevo directorio de datos y cambie los permisos de propiedad del directorio al usuario de postgres.
mkdir -p data/
chmod 700 data/
chown -R postgres:postgres data/
A continuación, inicie sesión como usuario de postgres y copie todo el directorio de datos del 'Maestro ' servidor al 'Esclavo ' servidor como usuario réplica.
su - postgres
pg_basebackup -h 10.0.15.10 -U replica -D /var/lib/pgsql/9.6/data -P --xlog
Password:
Escriba su contraseña y espere la transferencia de datos del servidor maestro al esclavo.
Una vez completada la transferencia, vaya al directorio de datos de postgres y edite el archivo postgresql.conf en el servidor esclavo.
cd /var/lib/pgsql/9.6/data/
vim postgresql.conf
Cambie el valor de 'listen_addresses' a la dirección IP del servidor esclavo '10.0.15.11'.
listen_addresses = '10.0.15.11'
Habilitar 'hot_standby ' en el servidor esclavo descomentando la siguiente línea y cambiando el valor a 'on '.
hot_standby = on
Eso es todo. Guarde los cambios y salga del editor.
Luego crea un nuevo 'recovery.conf ' archivo con vim.
vim recovery.conf
Pegue la siguiente configuración en él.
standby_mode = 'on'
primary_conninfo = 'host=10.0.15.10 port=5432 user=replica [email protected] application_name=pgslave01'
trigger_file = '/tmp/postgresql.trigger.5432'
Guarde los cambios y salga del archivo.
Cambie los permisos de propiedad del archivo recovery.conf a los del usuario 'postgres'.
chmod 600 recovery.conf
chown postgres:postgres recovery.conf
E inicie PostgreSQL 9.6 en el servidor esclavo.
systemctl start postgresql-9.6
La configuración del servidor esclavo se ha completado.
Ahora, cuando verifique el servidor Esclavo, verá que PostgreSQL 9.6 se está ejecutando en el servidor con la dirección IP '10.0.15.11 '.
netstat -plntu
Paso 6 - Prueba
La instalación y la configuración para la replicación maestro-esclavo de PostgreSQL 9.6 están completas. Para probar la configuración, verifique el flujo de estado de la replicación y pruebe la replicación de datos del Maestro al Esclavo.
Inicie sesión en el servidor maestro y cambie al usuario de postgres.
su - postgres
A continuación, verifique la replicación del estado de transmisión de PostgreSQL con los siguientes comandos.
psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;"
psql -x -c "select * from pg_stat_replication;"
Debería ver que el valor del estado es 'streaming ', y sync_state es 'sync '.
A continuación, pruebe insertando datos del maestro y luego verifique todos los datos en el servidor esclavo.
Inicie sesión como usuario de postgres y acceda al shell de PostgreSQL en el 'MASTER ' servidor.
su - postgres
psql
Crear nueva tabla 'replica_test ' e inserte algunos datos con las siguientes consultas de inserción.
CREATE TABLE replica_test (test varchar(100));
INSERT INTO replica_test VALUES ('howtoforge.com');
INSERT INTO replica_test VALUES ('This is from Master');
INSERT INTO replica_test VALUES ('pg replication by hakase-labs');
Y ahora inicie sesión en el 'ESCLAVO ' servidor similar a la forma en que lo hizo en el maestro.
su - postgres
psql
Verifique todos los datos de la tabla 'replica_test' utilizando la consulta a continuación.
select * from replica_test;
Así verás que todos los datos están replicados del 'MAESTRO ' servidor al 'ESCLAVO ' servidor.
Prueba adicional
Prueba para realizar la acción 'WRITE' desde el servidor 'SLAVE'.
INSERT INTO replica_test VALUES ('this is SLAVE');
Y el resultado debería ser 'No se puede ejecutar INSERT '.
Entonces, la instalación y configuración de PostgreSQL 9.6 Master-Slave Replication en CentOS 7 es exitosa.
Referencias
- https://www.postgresql.org/download/linux/redhat/
- https://www.server-world.info/en/note?os=CentOS_7