summaryrefslogtreecommitdiff
path: root/procedures/databasecluster.md
diff options
context:
space:
mode:
Diffstat (limited to 'procedures/databasecluster.md')
-rw-r--r--procedures/databasecluster.md87
1 files changed, 87 insertions, 0 deletions
diff --git a/procedures/databasecluster.md b/procedures/databasecluster.md
new file mode 100644
index 0000000..1c26165
--- /dev/null
+++ b/procedures/databasecluster.md
@@ -0,0 +1,87 @@
+# Database Cluster (baboon.sshjunkie.com)
+
+## Overview
+The database cluster consists of two PostgreSQL database servers hosted on `baboon.sshjunkie.com`. These servers are used to store data for services such as Mastodon and AzuraCast. The cluster ensures high availability and fault tolerance through replication and backup strategies.
+
+## Installation
+Install PostgreSQL on both nodes in the cluster:
+
+```bash
+# Update package list and install PostgreSQL
+sudo apt update
+sudo apt install -y postgresql postgresql-contrib
+
+# Ensure PostgreSQL is running
+sudo systemctl start postgresql
+sudo systemctl enable postgresql
+```
+
+## Configuration
+### PostgreSQL Configuration Files:
+- **pg_hba.conf**:
+ - Allow replication and local connections.
+ - Example:
+ ```ini
+ local all postgres md5
+ host replication all 192.168.0.0/16 md5
+ ```
+- **postgresql.conf**:
+ - Set `wal_level` for replication:
+ ```ini
+ wal_level = hot_standby
+ max_wal_senders = 3
+ ```
+
+### Replication Configuration:
+- Set up streaming replication between the two nodes (`baboon.sshjunkie.com` as the master and the second node as the replica).
+
+1. On the master node, enable replication and restart PostgreSQL.
+2. On the replica node, set up replication by copying the data directory from the master node and configure the `recovery.conf` file.
+
+Example `recovery.conf` on the replica:
+```ini
+standby_mode = on
+primary_conninfo = 'host=baboon.sshjunkie.com port=5432 user=replicator password=your_password'
+trigger_file = '/tmp/postgresql.trigger.5432'
+```
+
+## Usage
+- **Check the status of PostgreSQL**:
+ ```bash
+ sudo systemctl status postgresql
+ ```
+
+- **Promote the replica to master**:
+ ```bash
+ pg_ctl promote -D /var/lib/postgresql/data
+ ```
+
+## Backups
+Use `pg_basebackup` to create full backups of the cluster. Example:
+
+```bash
+pg_basebackup -h baboon.sshjunkie.com -U replicator -D /backups/db_backup -Ft -z -P
+```
+
+Automate backups with cronjobs for regular snapshots.
+
+## Troubleshooting
+- **Issue**: Replica is lagging behind.
+ - **Solution**: Check network connectivity and ensure the replica is able to connect to the master node. Monitor replication lag with:
+ ```bash
+ SELECT * FROM pg_stat_replication;
+ ```
+
+## Monitoring
+- **Monitor replication status**:
+ ```bash
+ SELECT * FROM pg_stat_replication;
+ ```
+
+- **Monitor database health**:
+ ```bash
+ pg_isready
+ ```
+
+## Additional Information
+- [PostgreSQL Streaming Replication Documentation](https://www.postgresql.org/docs/current/warm-standby.html)