Para este tutorial es necesario tener instalado docker en sus maquinas, en este tutorial se utilizó windows 10 con wsl ubuntu:18.04.
Se recomienta tener conocimientos en docker, Platzi tiene un curso de Docker que les ayudara.
1.Bajamos la imagen de postgres, en este caso se utilizó postgres alpine, es una version bastante liviana y es funcional para este caso:
docker pull postgres:alpine
2.Construimos los dos contenedores de postgres que necesitaremos (master y replica)
2.1.Contenedor de master
nombre del contenedor: postgres-db-master
contraseña: password-master
puerto: 5435
docker run -d --name postgres-db-master \
-e POSTGRES_PASSWORD=password-master \
-p 5435:5432 postgres:alpine
2.2.Contenedor de replica (slave)
nombre del contenedor: postgres-db-replica
contraseña: password-replica
puerto: 5434
docker run -d --name postgres-db-replica \
-e POSTGRES_PASSWORD=password-replica \
-p 5434:5432 postgres:alpine
- Verificamos que los contenedores esten arriba con el comando
docker ps

En este punto tenemos dos contenedores de docker corriendo con postgres:alpine, cada uno exponiendo un puerto para poder acceder a él, tener presentes los puertos que definimos y las contraseñas tanto para master como para replica. En caso de que pierdan la información podemos verificarla con docker inspect <name-container>
Por ejemplo: podemos verificar el hostport y el password de master con los siguientes comandos:
docker inspect postgres-db-master -f '{{ json .NetworkSettings.Ports }}' | jq '.'
jq se utiliza para dar formato, lo podemos instalar con sudo apt install jq

docker inspect postgres-db-master -f '{{ json .Config.Env }}' | jq '.'

Lo mismo pueden hacer para replica remplazando el nombre del contenedor.
- Creamos las conexiones en pgadmin (son libres de trabajar con el editor visual o por consola, en este caso trabajaremos con pgadmin para seguir la misma metodologia explicada por el porfesor en el curso de postgresql - clase Implementación de Réplicas en Postgres)
Conexion de master

Conexion de replica

Conexion exitosa:

- Ahora vamos a realizar toda la configuración para conectar las bases de datos en modo replica. Para esto necesitamos acceder al contenedor de master para hacer las respectivas modificaciones en los archivos de configuración de postgres.
5.1. Para acceder al contenedor de master utilizamos el siguiente comando:
docker exec -it postgres-db-master bash
5.2. Modificamos con vi el archivo postgresql.conf tal como el profesor explico en la clase pero en este caso en un contenedor de docker.
vi var/lib/postgresql/data/postgresql.conf
Debera abrirse el editor de vi:

Con las flechas bajamos y realizamos las siguientes modificaciones:



Para salir del editor y guardar los cambios presionamos Esc y luego shift + z + z
5.3. Ahora debemos permitir la conexión remota entre master y replica. Para esto debemos añadir la ip de replica en la lista de servicios permitidos en master, esto para evitar que la base de datos replica tenga que autenticarse. Añadirmos la ip en el archivo pg_hba.conf. Para editarlo usamos el siguiente comando:
vi var/lib/postgresql/data/pg_hba.conf
Debera abrirse el editor de vi:

Con las flechas bajamos y añadimos la ip de replica:

Esta ip la podemos verificar con docker inspect (podemos abrir otra consola para hacer le inspect):
docker network inspect bridge -f '{{json .Containers}}' | jq '.'

bridge es la red a donde por defecto se conectan los contenedores y podemos verificarla con:
docker network ls
En caso de que quieran ver todo el inspect de la red bridge lo pueden hacer con:
docker network inspect bridge
5.4. Ahora debemos reiniciar el contenedor de master, previamente debemos salir de la consola interactiva escribiendo exit.
docker restart postgres-db-master
- Ahora vamos a configurar replica.
6.1. Debemos copiar toda la información de master en replica, de modo que las dos esten identicas, y luego la iniciamos en modo slave.
Es importante que los siguientes dos comandos se ejecuten rapidamente uno seguido del otro, ya que si no el contenedor se va a caer. Por lo que recomiendo tener ambos comandos a la mano.
En caso de que se caiga el contenedor lo que deben hacer es reiniciar el contenedor nuevamente (docker restart postgres-db-replica), acceder en forma interactiva (docker exec -it postgres-db-replica bash) e intentar de nuevo el borrado y copiado.
Antes de copiar tenemos que borrar lo que hay en el directorio /var/lib/postgresql/data/*, si no borramos nos saldra un error diciendo que la el directorio no esta vacio.
rm -rf /var/lib/postgresql/data/*
Luego realizamos el copiado con el siguiente comando, aqui debemos definir el gateway de la red donde estan conectados los contenedores (master y replica) y el puerto de master:
pg_basebackup -U postgres -R -D /var/lib/postgresql/data/ \
--host=172.17.0.1 --port=5435
El backslash indica solamente salto de linea.
Para verificar el gateway podemos hacerle un inspect a bridge o usar el siguiente comando:
docker network inspect bridge -f '{{json .IPAM.Config}}' | jq '.'

6.2. Una vez copiados los datos desde master a replica, necesitamos configurar replica para que funcione como slave, para esto entramos a editar postgresql.conf y ponemos en on el parametro hot_standby
vi var/lib/postgresql/data/postgresql.conf

Nuevamente para salir del editor y guardar los cambios presionamos Esc y luego shift + z + z
En este punto hemos configurado las dos bases de datos como maestro-esclavo, para comprobarlo regresamos a pgadmin nos desconectamos del server de replica,

y nos conectamos de nuevo,

tal como esperabamos ya que hemos copiado toda la configuración de master a replica por lo que la contraseña de replica ahora es la misma de master.
- Ahora intentamos crear una bd en replica, nos debe salir el siguiente error, ya que replica es de solo lectura, por lo que no podremos realizar ninguna modificación como insert, update, delete, etc.

7.1 Si lo intentamos desde master, nos debe permitir crear la base de datos y adicionalmente la base de datos debe aparecer en replica.

Espero les sirva de ayuda este tutorial.
Curso de PostgreSQL