From 9b31003fceb3c8a9a8be0040d8ace5be28f76b2e Mon Sep 17 00:00:00 2001 From: Peter Szalatnay Date: Mon, 16 May 2016 12:06:55 +0800 Subject: [PATCH] PXC catalog item (#95) * PXC Template * fix bind issue * version * missed version * variables * proper icon --- templates/pxc/0/README.md | 13 +++++++ templates/pxc/0/docker-compose.yml | 41 ++++++++++++++++++++ templates/pxc/0/rancher-compose.yml | 57 ++++++++++++++++++++++++++++ templates/pxc/catalogIcon-pxc.png | Bin 0 -> 20229 bytes templates/pxc/config.yml | 5 +++ 5 files changed, 116 insertions(+) create mode 100644 templates/pxc/0/README.md create mode 100644 templates/pxc/0/docker-compose.yml create mode 100644 templates/pxc/0/rancher-compose.yml create mode 100644 templates/pxc/catalogIcon-pxc.png create mode 100644 templates/pxc/config.yml diff --git a/templates/pxc/0/README.md b/templates/pxc/0/README.md new file mode 100644 index 0000000..520efe6 --- /dev/null +++ b/templates/pxc/0/README.md @@ -0,0 +1,13 @@ +# Percona XtraDB Cluster + +### Info: + +This template creates a Percona XtraDB Cluster on top of Rancher. + +When deployed from the catalog, a three node cluster is created with a database, root password, database user and password. The cluster is set up for replication between all of the nodes. Health check monitors port 8000 for clustercheck status updates. + +### Usage: + +Once deployed, use a mysql client to connect: + +`mysql -u -p -h` \ No newline at end of file diff --git a/templates/pxc/0/docker-compose.yml b/templates/pxc/0/docker-compose.yml new file mode 100644 index 0000000..80ed6fc --- /dev/null +++ b/templates/pxc/0/docker-compose.yml @@ -0,0 +1,41 @@ +pxc-clustercheck: + image: flowman/percona-xtradb-cluster-clustercheck:v2.0 + net: "container:pxc" + labels: + io.rancher.container.hostname_override: container_name + volumes_from: + - 'pxc-data' +pxc-server: + image: flowman/percona-xtradb-cluster:5.6.28-1 + net: "container:pxc" + environment: + MYSQL_ROOT_PASSWORD: "${mysql_root_password}" + PXC_SST_PASSWORD: "${pxc_sst_password}" + MYSQL_DATABASE: "${mysql_database}" + MYSQL_USER: "${mysql_user}" + MYSQL_PASSWORD: "${mysql_password}" + labels: + io.rancher.container.hostname_override: container_name + volumes_from: + - 'pxc-data' + entrypoint: bash -x /opt/rancher/start_pxc +pxc-data: + image: flowman/percona-xtradb-cluster:5.6.28-1 + net: none + environment: + MYSQL_ALLOW_EMPTY_PASSWORD: "yes" + volumes: + - /var/lib/mysql + - /etc/mysql/conf.d + - /docker-entrypoint-initdb.d + command: /bin/true + labels: + io.rancher.container.start_once: true +pxc: + image: flowman/percona-xtradb-cluster-confd:v0.2.0 + labels: + io.rancher.sidekicks: pxc-clustercheck,pxc-server,pxc-data + io.rancher.container.hostname_override: container_name + io.rancher.scheduler.affinity:container_label_soft_ne: io.rancher.stack_service.name=$${stack_name}/$${service_name} + volumes_from: + - 'pxc-data' diff --git a/templates/pxc/0/rancher-compose.yml b/templates/pxc/0/rancher-compose.yml new file mode 100644 index 0000000..693d638 --- /dev/null +++ b/templates/pxc/0/rancher-compose.yml @@ -0,0 +1,57 @@ +.catalog: + name: "Percona XtraDB Cluster" + version: 5.6.28-rancher1 + description: | + Percona XtraDB Cluster 5.6.28 + questions: + - variable: "mysql_root_password" + type: string + required: true + label: "MySQL Root Password" + description: "Password given to the root mysql user" + default: "password" + - variable: "pxc_sst_password" + type: string + required: true + label: "PXC SST Password" + description: "Password given to the sst mysql user" + default: "password" + - variable: "mysql_database" + type: string + required: false + label: "MySQL Database Name" + description: "MySQL database to create" + - variable: "mysql_user" + type: string + required: false + description: "MySQL user for the created database" + label: "MySQL DB User" + - variable: "mysql_password" + type: string + required: false + label: "MySQL DB Password" + description: "Password for the MySQL user of the created database" +pxc: + scale: 3 + health_check: + port: 8000 + interval: 2000 + unhealthy_threshold: 3 + strategy: none + request_line: GET / HTTP/1.1 + healthy_threshold: 2 + response_timeout: 2000 + metadata: + mysqld: | + innodb_buffer_pool_size=512M + innodb_doublewrite=0 + innodb_flush_log_at_trx_commit=0 + innodb_file_per_table=1 + innodb_log_file_size=128M + innodb_log_buffer_size=64M + innodb_support_xa=0 + query_cache_size=0 + query_cache_type=0 + sync_binlog=0 + max_connections=1000 + wsrep_sst_auth=sstuser:${pxc_sst_password} diff --git a/templates/pxc/catalogIcon-pxc.png b/templates/pxc/catalogIcon-pxc.png new file mode 100644 index 0000000000000000000000000000000000000000..c67d37123654c9e42503c8a67249a35ff1248e0c GIT binary patch literal 20229 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%0D*uSRoF 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