aboutsummaryrefslogtreecommitdiff
path: root/docker
diff options
context:
space:
mode:
authorNick Jones <nick@stackhpc.com>2018-03-09 17:27:00 +0000
committerNick Jones <nick@dischord.org>2018-11-06 11:29:45 +0000
commit25de6deb4b229413c89eb9592d116fa621b15ade (patch)
tree2c1cd53c23527c1d9a5a2d015526e20f004ba5e8 /docker
parent8aac00972d6b3d5f5635b217a2151f9072e3f75d (diff)
downloadkolla-25de6deb4b229413c89eb9592d116fa621b15ade.tar.gz
kolla-25de6deb4b229413c89eb9592d116fa621b15ade.zip
Introduce Percona XtraBackup image
blueprint database-backup-recovery Implements an image suitable for taking MariaDB backups via Percona's XtraBackup tool. Install XtraBackup from Percona's repos, ensuring that packages from this source aren't used for any other purpose. Include a script which invokes XtraBackup with the appropriate options for either a full or incremental backup. Change-Id: Ifebe2045e5815c573c0a2ae05951c428c3f06a92
Diffstat (limited to 'docker')
-rw-r--r--docker/base/Dockerfile.j28
-rw-r--r--docker/base/apt_preferences.debian4
-rw-r--r--docker/base/apt_preferences.ubuntu5
-rw-r--r--docker/base/percona-release.repo13
-rw-r--r--docker/base/sources.list.debian4
-rw-r--r--docker/base/sources.list.ubuntu3
-rw-r--r--docker/xtrabackup/Dockerfile.j224
-rwxr-xr-xdocker/xtrabackup/backup.sh49
8 files changed, 107 insertions, 3 deletions
diff --git a/docker/base/Dockerfile.j2 b/docker/base/Dockerfile.j2
index 639f85297..0b8b81011 100644
--- a/docker/base/Dockerfile.j2
+++ b/docker/base/Dockerfile.j2
@@ -63,15 +63,17 @@ COPY yum.conf /etc/yum.conf
'influxdb.repo',
'nfs_ganesha.repo',
'opendaylight.repo',
- 'td.repo',
- 'rabbitmq_rabbitmq-server.repo'
+ 'percona-release.repo',
+ 'rabbitmq_rabbitmq-server.repo',
+ 'td.repo'
] %}
{% set base_yum_repo_keys = [
'https://artifacts.elastic.co/GPG-KEY-elasticsearch',
+ 'https://grafanarel.s3.amazonaws.com/RPM-GPG-KEY-grafana',
'https://repos.influxdata.com/influxdb.key',
'https://packagecloud.io/gpg.key',
- 'https://grafanarel.s3.amazonaws.com/RPM-GPG-KEY-grafana',
+ 'https://www.percona.com/downloads/RPM-GPG-KEY-percona',
'https://packages.treasuredata.com/GPG-KEY-td-agent'
] %}
{% endif %}
diff --git a/docker/base/apt_preferences.debian b/docker/base/apt_preferences.debian
index e69de29bb..1ac2b108a 100644
--- a/docker/base/apt_preferences.debian
+++ b/docker/base/apt_preferences.debian
@@ -0,0 +1,4 @@
+# Lower the priority of packages from Percona's repos
+Package: *
+Pin: origin repo.percona.com
+Pin-Priority: 100
diff --git a/docker/base/apt_preferences.ubuntu b/docker/base/apt_preferences.ubuntu
index a9baa53a3..12c7057f6 100644
--- a/docker/base/apt_preferences.ubuntu
+++ b/docker/base/apt_preferences.ubuntu
@@ -2,3 +2,8 @@
Package: ceph* *cephfs* librbd* *rados* python-rbd librgw*
Pin: version 13.*
Pin-Priority: -1
+
+# Lower the priority of packages from Percona's repos
+Package: *
+Pin: origin repo.percona.com
+Pin-Priority: 100
diff --git a/docker/base/percona-release.repo b/docker/base/percona-release.repo
new file mode 100644
index 000000000..b7d5c54b8
--- /dev/null
+++ b/docker/base/percona-release.repo
@@ -0,0 +1,13 @@
+[percona-release-$basearch]
+name = Percona-Release YUM repository - $basearch
+baseurl = http://repo.percona.com/release/$releasever/RPMS/$basearch
+enabled = 0
+gpgcheck = 1
+gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Percona
+
+[percona-release-noarch]
+name = Percona-Release YUM repository - noarch
+baseurl = http://repo.percona.com/release/$releasever/RPMS/noarch
+enabled = 0
+gpgcheck = 1
+gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Percona
diff --git a/docker/base/sources.list.debian b/docker/base/sources.list.debian
index 44476cef8..50532ddfb 100644
--- a/docker/base/sources.list.debian
+++ b/docker/base/sources.list.debian
@@ -15,3 +15,7 @@ deb [arch=amd64] https://artifacts.elastic.co/packages/5.x/apt stable main
# main docker repo
deb https://download.docker.com/linux/debian stretch stable
+
+# Percona XtraBackup repo
+deb http://repo.percona.com/apt stretch main
+
diff --git a/docker/base/sources.list.ubuntu b/docker/base/sources.list.ubuntu
index 3c5229ba8..5448bb067 100644
--- a/docker/base/sources.list.ubuntu
+++ b/docker/base/sources.list.ubuntu
@@ -35,3 +35,6 @@ deb http://ppa.launchpad.net/odl-team/carbon/ubuntu xenial main
# rabbitmq repo
deb https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ xenial main
+
+# Percona XtraBackup repo
+deb http://repo.percona.com/apt bionic main
diff --git a/docker/xtrabackup/Dockerfile.j2 b/docker/xtrabackup/Dockerfile.j2
new file mode 100644
index 000000000..72fd82288
--- /dev/null
+++ b/docker/xtrabackup/Dockerfile.j2
@@ -0,0 +1,24 @@
+FROM {{ namespace }}/{{ image_prefix }}base:{{ tag }}
+LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
+
+{% block xtrabackup_header %}{% endblock %}
+
+{% import "macros.j2" as macros with context %}
+
+{% if base_distro in ['centos', 'oraclelinux', 'rhel'] %}
+RUN yum-config-manager --enable percona\*
+{% endif %}
+
+{% if base_distro in ['centos', 'oraclelinux', 'rhel', 'ubuntu', 'debian'] %}
+ {% set xtrabackup_packages = ['percona-xtrabackup-24', 'qpress'] %}
+{% endif %}
+
+{{ macros.install_packages(xtrabackup_packages | customizable("packages")) }}
+
+COPY backup.sh /usr/local/bin/kolla_mariadb_backup.sh
+RUN chmod 755 /usr/local/bin/kolla_mariadb_backup.sh
+
+CMD /usr/local/bin/kolla_mariadb_backup.sh
+
+{% block xtrabackup_footer %}{% endblock %}
+{% block footer %}{% endblock %}
diff --git a/docker/xtrabackup/backup.sh b/docker/xtrabackup/backup.sh
new file mode 100755
index 000000000..f8dff8bd7
--- /dev/null
+++ b/docker/xtrabackup/backup.sh
@@ -0,0 +1,49 @@
+#!/usr/bin/env bash
+
+set -eu
+
+# Execute a full backup
+backup_full() {
+ echo "Taking a full backup"
+ innobackupex --defaults-file=/etc/mysql/my.cnf \
+ --no-timestamp \
+ --stream=xbstream \
+ --compress \
+ --history=$(date +%d-%m-%Y) ./ > \
+ $BACKUP_DIR/mysqlbackup-$(date +%d-%m-%Y-%s).qp.xbc.xbs
+}
+
+# Execute an incremental backup
+backup_incremental() {
+ echo "Taking an incremental backup"
+ innobackupex --defaults-file=/etc/mysql/my.cnf \
+ --no-timestamp \
+ --stream=xbstream \
+ --compress \
+ --incremental \
+ --incremental-history-name=$(date +%d-%m-%Y) \
+ --history=$(date +%d-%m-%Y) ./ > \
+ $BACKUP_DIR/incremental-$(date +%H)-mysqlbackup-$(date +%d-%m-%Y-%s).qp.xbc.xbs
+}
+
+BACKUP_DIR=/backup/
+cd $BACKUP_DIR
+
+if [ -n $BACKUP_TYPE ]; then
+ case $BACKUP_TYPE in
+ "full")
+ backup_full
+ ;;
+ "incremental")
+ backup_incremental
+ ;;
+ *)
+ echo "Only full or incremental options are supported."
+ exit 1
+ ;;
+ esac
+else
+ echo "You need to specify either full or incremental backup options."
+ exit 1
+fi
+