DHIS 2 allows for utilizing read only replicas of the master database (the main DHIS 2 database). The purpose of read replicas is to enhance the performance of database read queries and scale out the capacity beyond the constraints of a single database. Read-heavy operations such as analytics and event queries will benefit from this.
The configuration requires that you have created one or more replicated instances of the master DHIS 2 database. PostgreSQL achieves this through a concept referred to as streaming replication. Configuring read replicas for PostgreSQL is not covered in this guide.
Read replicas can be defined in the dhis.conf configuration file. You can specify up to 5 read replicas per DHIS 2 instance. Each read replica is denoted with a number between 1 and 5. The JDBC connection URL must be defined per replica. The username and password can be specified; if not, the username and password for the master database will be used instead.
The configuration for read replicas in dhis.conf looks like the below. Each replica is specified with the configuration key readN prefix, where N refers to the replica number.
# Read replica 1 configuration # Database connection URL, username and password read1.connection.url = jdbc:postgresql://127.0.0.11/dbread1 read1.connection.username = dhis read1.connection.password = xxxx # Read replica 2 configuration # Database connection URL, username and password read2.connection.url = jdbc:postgresql://127.0.0.12/dbread2 read2.connection.username = dhis read2.connection.password = xxxx # Read replica 3 configuration # Database connection URL, fallback to master for username and password read3.connection.url = jdbc:postgresql://127.0.0.13/dbread3
Note that you must restart your servlet container for the changes to take effect. DHIS 2 will automatically distribute the load across the read replicas. The ordering of replicas has no significance.