diff --git a/docker/mariaDB/mysql-healthcheck.sh b/docker/mariaDB/mysql-healthcheck.sh new file mode 100644 index 0000000000..9f62f5805e --- /dev/null +++ b/docker/mariaDB/mysql-healthcheck.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +mysql -h"$HOSTNAME" -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" --silent -e"use $MYSQL_DATABASE" diff --git a/docker/mysql/standalone/conf/mysql.cnf b/docker/mariaDB/primary/conf/mysql.cnf similarity index 96% rename from docker/mysql/standalone/conf/mysql.cnf rename to docker/mariaDB/primary/conf/mysql.cnf index 5f441bf95b..afdb54d4dd 100644 --- a/docker/mysql/standalone/conf/mysql.cnf +++ b/docker/mariaDB/primary/conf/mysql.cnf @@ -10,7 +10,7 @@ character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci # Unique identifying number of the server. -server_id = 1 +server-id = 1 # Set binary log file base name. log_bin=mysql-bin.log diff --git a/docker/mariaDB/read/conf/mysql.cnf b/docker/mariaDB/read/conf/mysql.cnf new file mode 100644 index 0000000000..f83dcab899 --- /dev/null +++ b/docker/mariaDB/read/conf/mysql.cnf @@ -0,0 +1,22 @@ +[mysqld] + +# Default authentication plugin +default-authentication-plugin=caching_sha2_password + +# Default character charset +character-set-server=utf8mb4 + +# Default collation server +collation-server=utf8mb4_unicode_ci + +# Max connections +max_connections=500 + +# Unique identifying number of the server. +server-id = 2 + +# Set binary log file base name. This should be identical to the binary log file base name in source. +log_bin=mysql-bin.log + +# Set the relay log file base name used by replica. This is needed to avoid error incase hostname is changed in future. +relay_log=mysql-relay-bin.log diff --git a/jenkins/mariadb-with-replication/Makefile b/jenkins/mariadb-with-replication/Makefile new file mode 100644 index 0000000000..e8d0d10485 --- /dev/null +++ b/jenkins/mariadb-with-replication/Makefile @@ -0,0 +1,21 @@ +.PHONY: clean up down +all: up + +compose := docker-compose -f docker-compose.yml + +up: + $(compose) up --detach + +down: + $(compose) down --volumes --remove-orphans + +logs: + $(compose) logs + +clean: down + +cli-primary: + $(compose) exec mysql-primary mysql -u root -ppassword lisk + +cli-replica: + $(compose) exec mysql-read-replica mysql -u root -ppassword lisk diff --git a/jenkins/mariadb-with-replication/docker-compose.yml b/jenkins/mariadb-with-replication/docker-compose.yml new file mode 100644 index 0000000000..37bb23e567 --- /dev/null +++ b/jenkins/mariadb-with-replication/docker-compose.yml @@ -0,0 +1,64 @@ +version: '3.3' +services: + mysql-primary: + image: mariadb:10.7 + container_name: mysql-primary + command: mysqld + volumes: + - ../../docker/mariadb/primary/conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf + - mysql-primary-data:/var/lib/mysql + - ../../docker/mariadb/primary/init:/docker-entrypoint-initdb.d + restart: always + networks: + - services_network + environment: + - MYSQL_ROOT_PASSWORD=password + - MYSQL_USER=lisk + - MYSQL_PASSWORD=password + ports: + - '127.0.0.1:3306:3306' + healthcheck: + test: ['CMD', 'mysqladmin', 'ping', '-hlocalhost', '-ppassword'] + + mysql-read-replica: + image: mariadb:10.7 + depends_on: + mysql-primary: + condition: service_healthy + command: mysqld + volumes: + - ../../docker/mariadb/read/conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf + - ../../docker/mariadb/read/init:/docker-entrypoint-initdb.d + restart: always + expose: + - '3306' + networks: + - services_network + deploy: + mode: replicated + replicas: 1 + endpoint_mode: vip + environment: + - MYSQL_ROOT_PASSWORD=password + healthcheck: + test: ['CMD', 'mysqladmin', 'ping', '-hlocalhost', '-ppassword'] + + mysql-read-replica-haproxy: + image: nginx:latest + depends_on: + mysql-read-replica: + condition: service_healthy + volumes: + - ../../docker/nginx.conf:/etc/nginx/nginx.conf:ro + ports: + - '127.0.0.1:3307:3307' + networks: + - services_network + healthcheck: + test: ['CMD', 'service', 'nginx', 'status'] + +networks: + services_network: + +volumes: + mysql-primary-data: diff --git a/jenkins/mariadb-with-replication/mysql-healthcheck.sh b/jenkins/mariadb-with-replication/mysql-healthcheck.sh new file mode 100644 index 0000000000..7b5781e334 --- /dev/null +++ b/jenkins/mariadb-with-replication/mysql-healthcheck.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +mysql -h"$HOSTNAME" -u"$MARIADB_USER" -p"$MARIADB_PASSWORD" --silent -e"use $MARIADB_DATABASE" diff --git a/jenkins/mariadb/docker-compose.yml b/jenkins/mariadb/docker-compose.yml index 6aeb77f849..215ca2fe31 100644 --- a/jenkins/mariadb/docker-compose.yml +++ b/jenkins/mariadb/docker-compose.yml @@ -7,7 +7,7 @@ services: image: mariadb:10.7 command: mysqld --max_connections=500 volumes: - - ../../docker/mysql/standalone/conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf + - ../../docker/mariadb/primary/conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf - db-data:/var/lib/mysql - ./mysql-healthcheck.sh:/healthcheck.sh restart: always diff --git a/jenkins/mysql-with-replication/docker-compose.yml b/jenkins/mysql-with-replication/docker-compose.yml index c6537637d9..88a429a440 100644 --- a/jenkins/mysql-with-replication/docker-compose.yml +++ b/jenkins/mysql-with-replication/docker-compose.yml @@ -4,7 +4,7 @@ services: image: mysql:8 container_name: mysql-primary platform: linux/amd64 - command: mysqld --max_connections=500 + command: mysqld volumes: - ../../docker/mysql/primary/conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf - mysql-primary-data:/var/lib/mysql @@ -27,7 +27,7 @@ services: mysql-primary: condition: service_healthy platform: linux/amd64 - command: mysqld --max_connections=500 + command: mysqld volumes: - ../../docker/mysql/read/conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf - ../../docker/mysql/read/init:/docker-entrypoint-initdb.d diff --git a/jenkins/mysql/docker-compose.yml b/jenkins/mysql/docker-compose.yml index 7b8f7782b4..1ab81aa5bb 100644 --- a/jenkins/mysql/docker-compose.yml +++ b/jenkins/mysql/docker-compose.yml @@ -8,7 +8,7 @@ services: platform: linux/amd64 command: mysqld --max_connections=500 volumes: - - ../../docker/mysql/standalone/conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf + - ../../docker/mysql/primary/conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf - db-data:/var/lib/mysql - ./mysql-healthcheck.sh:/healthcheck.sh restart: always