From db4693c1dc5aab88042741ed49f40fee0ef23633 Mon Sep 17 00:00:00 2001
From: Martin Weise <martin.weise@tuwien.ac.at>
Date: Wed, 31 May 2023 13:45:42 +0200
Subject: [PATCH] Add replication for metadata db in dbrepo2

---
 .env.unix.example                   |  2 ++
 dbrepo-metadata-db/setup-schema.sql |  3 +--
 docker-compose.dbrepo2.yml          | 27 +++++++++++++++++++++++++++
 docker-compose.yml                  |  8 ++++----
 4 files changed, 34 insertions(+), 6 deletions(-)

diff --git a/.env.unix.example b/.env.unix.example
index 5e3cb074dc..c378a36878 100644
--- a/.env.unix.example
+++ b/.env.unix.example
@@ -8,6 +8,8 @@ ELASTIC_PASSWORD=elastic
 METADATA_DB=fda
 METADATA_USERNAME=root
 METADATA_PASSWORD=dbrepo
+METADATA_REPLICATION_USER=rep
+METADATA_REPLICATION_PASSWORD=rep
 BROKER_USERNAME=fda
 BROKER_PASSWORD=fda
 KEYCLOAK_ADMIN=fda
diff --git a/dbrepo-metadata-db/setup-schema.sql b/dbrepo-metadata-db/setup-schema.sql
index 0eb04c0fd5..782e96e89d 100644
--- a/dbrepo-metadata-db/setup-schema.sql
+++ b/dbrepo-metadata-db/setup-schema.sql
@@ -489,8 +489,7 @@ VALUES ('MIT', 'https://opensource.org/licenses/MIT'),
        ('CC-BY-4.0', 'https://creativecommons.org/licenses/by/4.0/legalcode');
 
 INSERT INTO `fda`.`mdb_images` (repository, tag, default_port, dialect, driver_class, jdbc_method)
-VALUES ('mariadb', '10.5', 3306, 'org.hibernate.dialect.MariaDBDialect', 'org.mariadb.jdbc.Driver', 'mariadb'),
-       ('bitnami/mariadb', '10.5', 3306, 'org.hibernate.dialect.MariaDBDialect', 'org.mariadb.jdbc.Driver', 'mariadb');
+VALUES ('bitnami/mariadb', '10.5', 3306, 'org.hibernate.dialect.MariaDBDialect', 'org.mariadb.jdbc.Driver', 'mariadb');
 
 INSERT INTO `fda`.`mdb_images_environment_item` (`key`, value, etype, iid)
 VALUES ('ROOT', 'root', 'PRIVILEGED_USERNAME', 1),
diff --git a/docker-compose.dbrepo2.yml b/docker-compose.dbrepo2.yml
index 8395c8a79e..2ee781b628 100644
--- a/docker-compose.dbrepo2.yml
+++ b/docker-compose.dbrepo2.yml
@@ -46,6 +46,33 @@ services:
       - "9100:9100"
     env_file:
       - .env
+    environment:
+      MARIADB_REPLICATION_MODE: master
+      MARIADB_REPLICATION_USER: "${METADATA_REPLICATION_USER}"
+      MARIADB_REPLICATION_PASSWORD: "${METADATA_REPLICATION_PASSWORD}"
+    logging:
+      driver: json-file
+
+  dbrepo-metadata-db-slave:
+    restart: "no"
+    hostname: metadata-db-slave
+    image: bitnami/mariadb:10.5
+    networks:
+      core:
+    env_file:
+      - .env
+    environment:
+      MARIADB_REPLICATION_MODE: slave
+      MARIADB_REPLICATION_USER: "${METADATA_REPLICATION_USER}"
+      MARIADB_REPLICATION_PASSWORD: "${METADATA_REPLICATION_PASSWORD}"
+      MARIADB_MASTER_HOST: metadata-db
+      MARIADB_MASTER_PORT_NUMBER: 3306
+      MARIADB_MASTER_ROOT_PASSWORD: "${METADATA_PASSWORD}"
+    depends_on:
+      - dbrepo-metadata-db
+    deploy:
+      mode: replicated
+      replicas: 3
     logging:
       driver: json-file
 
diff --git a/docker-compose.yml b/docker-compose.yml
index d921ef70ef..f18117bdf3 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -11,14 +11,14 @@ volumes:
   authentication-service-data:
 
 networks:
-  userdb:
-    name: userdb
+  public:
+    name: public
     driver: bridge
     ipam:
       config:
         - subnet: 172.30.0.0/16
-  public:
-    name: public
+  userdb:
+    name: userdb
     driver: bridge
     ipam:
       config:
-- 
GitLab