Primary and Streaming Replica Containers

Replication

This example starts a primary and a replica pod containing a PostgreSQL database.

The container creates a default database called userdb, a default user called testuser and a default password of password.

For the Docker environment, the script additionally creates:

  • A docker volume using the local driver for the primary
  • A docker volume using the local driver for the replica
  • A container named primary binding to port 12007
  • A container named replica binding to port 12008
  • A mapping of the PostgreSQL port 5432 within the container to the localhost port 12000
  • The database using predefined environment variables

And specifically for the Kubernetes and OpenShift environments:

  • emptyDir volumes for persistence
  • A pod named pr-primary
  • A pod named pr-replica
  • A pod named pr-replica-2
  • A service named pr-primary
  • A service named pr-replica
  • The database using predefined environment variables

To shutdown the instance and remove the container for each example, run the following:

./cleanup.sh

Docker

To create the example and run the container:

cd $CCPROOT/examples/docker/primary-replica
./run.sh

Connect from your local host as follows:

psql -h localhost -p 12007 -U testuser -W userdb
psql -h localhost -p 12008 -U testuser -W userdb

Kubernetes and OpenShift

Run the following command to deploy a primary and replica database cluster:

cd $CCPROOT/examples/kube/primary-replica
./run.sh

It takes about a minute for the replica to begin replicating with the primary. To test out replication, see if replication is underway with this command:

${CCP_CLI?} exec -ti pr-primary -- psql -d postgres -c 'table pg_stat_replication'

If you see a line returned from that query it means the primary is replicating to the replica. Try creating some data on the primary:


${CCP_CLI?} exec -ti pr-primary -- psql -d postgres -c 'create table foo (id int)'
${CCP_CLI?} exec -ti pr-primary -- psql -d postgres -c 'insert into foo values (1)'

Then verify that the data is replicated to the replica:

${CCP_CLI?} exec -ti pr-replica -- psql -d postgres -c 'table foo'

primary-replica-dc

If you wanted to experiment with scaling up the number of replicas, you can run the following example:

cd $CCPROOT/examples/kube/primary-replica-dc
./run.sh

You can verify that replication is working using the same commands as above.

${CCP_CLI?} exec -ti primary-dc -- psql -d postgres -c 'table pg_stat_replication'

Helm

This example resides under the $CCPROOT/examples/helm directory. View the README to run this example using Helm link:https://github.com/CrunchyData/crunchy-containers/blob/master/examples/helm/primary-replica/README.md[here].