summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStanislaw Kardach <kda@semihalf.com>2016-04-20 15:49:06 -0700
committerStanislaw Kardach <kda@semihalf.com>2016-04-20 15:49:06 -0700
commitf96f651a653d5e5b32515f177400bc0456d5ab7c (patch)
tree3e532d62776b34a8c9ab94f2338808cd9b3dee11
parentbe5864d1622dc080718422b313cf9954b123c3b0 (diff)
Allow configuring MySQL WSREP SST provider
On some arm64 platforms xtrabackup is broken due to an outdated MySQL/InnoDB code that it uses which is missing. To work around that this patch allows choosing which WSREP SST provider to use. Aside of already supported `xtrabackup-v2` and `mysqldump`, the `rsync` method has been added as it is comparable to xtrabackup in terms of speed (or is faster), has been validated to work on arm64 platforms where xtrabackup is broken and it doesn't rely on db mechanisms to perform the state transfer. This patch is tied to a patch in fuel-web that introduces configuration options for WSREP SST provider and in case nothing is specified, it will choose `xtrabackup-v2`. Signed-off-by: Stanislaw Kardach <stanislaw.kardach@caviumnetworks.com>
-rw-r--r--patches/fuel-library/0014-Allow-configuring-MySQL-WSREP-SST-provider.patch129
-rw-r--r--patches/fuel-web/0006-Add-configuration-item-for-WSREP-SST-provider.patch45
2 files changed, 174 insertions, 0 deletions
diff --git a/patches/fuel-library/0014-Allow-configuring-MySQL-WSREP-SST-provider.patch b/patches/fuel-library/0014-Allow-configuring-MySQL-WSREP-SST-provider.patch
new file mode 100644
index 00000000..c7000ae8
--- /dev/null
+++ b/patches/fuel-library/0014-Allow-configuring-MySQL-WSREP-SST-provider.patch
@@ -0,0 +1,129 @@
+From: Stanislaw Kardach <stanislaw.kardach@caviumnetworks.com>
+Date: Wed, 20 Apr 2016 14:54:42 -0700
+Subject: [PATCH] Allow configuring MySQL WSREP SST provider
+
+On some arm64 platforms xtrabackup is broken due to an outdated
+MySQL/InnoDB code that it uses which is missing. To work around that
+this patch allows choosing which WSREP SST provider to use. Aside of
+already supported `xtrabackup-v2` and `mysqldump`, the `rsync` method
+has been added as it is comparable to xtrabackup in terms of speed (or
+is faster), has been validated to work on arm64 platforms where
+xtrabackup is broken and it doesn't rely on db mechanisms to perform the
+state transfer.
+
+This patch is tied to a patch in fuel-web that introduces configuration
+options for WSREP SST provider and in case nothing is specified, it
+will choose `xtrabackup-v2`.
+
+Signed-off-by: Stanislaw Kardach <stanislaw.kardach@caviumnetworks.com>
+---
+ deployment/puppet/galera/manifests/init.pp | 15 ++++++++++++++-
+ deployment/puppet/mysql/manifests/server.pp | 4 ++++
+ .../puppet/osnailyfacter/modular/database/database.pp | 7 +++++++
+ 3 files changed, 25 insertions(+), 1 deletion(-)
+
+diff --git a/deployment/puppet/galera/manifests/init.pp b/deployment/puppet/galera/manifests/init.pp
+index 7f25ab3..12ad387 100644
+--- a/deployment/puppet/galera/manifests/init.pp
++++ b/deployment/puppet/galera/manifests/init.pp
+@@ -51,7 +51,7 @@
+ # [*wsrep_sst_method*]
+ # (optional) The method for state snapshot transfer between nodes
+ # Defaults to xtrabackup-v2
+-# xtrabackup, xtrabackup-v2, mysqldump are supported
++# xtrabackup, xtrabackup-v2, mysqldump and rsync are supported
+ #
+ # [*use_percona*]
+ # Boolean. Set this value to true if you want to use percona instead of
+@@ -199,6 +199,19 @@ class galera (
+ elsif $wsrep_sst_method == 'mysqldump' {
+ $wsrep_sst_auth = true
+ }
++ elsif $wsrep_sst_method == 'rsync' {
++ firewall {'101 mysql-rsync':
++ port => 4444,
++ proto => 'tcp',
++ action => 'accept',
++ before => Package['MySQL-server'],
++ }
++ package { 'rsync':
++ ensure => present,
++ before => Package['MySQL-server'],
++ }
++ $wsrep_sst_auth = undef
++ }
+ else {
+ $wsrep_sst_auth = undef
+ warning("Unrecognized wsrep_sst method: ${wsrep_sst_auth}")
+diff --git a/deployment/puppet/mysql/manifests/server.pp b/deployment/puppet/mysql/manifests/server.pp
+index 4cce092..631ed69 100644
+--- a/deployment/puppet/mysql/manifests/server.pp
++++ b/deployment/puppet/mysql/manifests/server.pp
+@@ -42,6 +42,7 @@ class mysql::server (
+ $use_syslog = true,
+ $wait_timeout = $mysql::params::wait_timeout,
+ $ignore_db_dirs = $mysql::params::ignore_db_dirs,
++ $wsrep_sst_method = 'xtrabackup-v2',
+ ) inherits mysql::params {
+
+ if ($config_hash['config_file']) {
+@@ -226,6 +227,7 @@ class mysql::server (
+ gcache_factor => $galera_gcache_factor,
+ skip_name_resolve => $mysql_skip_name_resolve,
+ use_syslog => $use_syslog,
++ wsrep_sst_method => $wsrep_sst_method,
+ wsrep_sst_password => $root_password,
+ }
+
+@@ -240,6 +242,7 @@ class mysql::server (
+ gcache_factor => $galera_gcache_factor,
+ skip_name_resolve => $mysql_skip_name_resolve,
+ use_syslog => $use_syslog,
++ wsrep_sst_method => $wsrep_sst_method,
+ wsrep_sst_password => $root_password,
+ use_percona => true,
+ }
+@@ -253,6 +256,7 @@ class mysql::server (
+ gcache_factor => $galera_gcache_factor,
+ skip_name_resolve => $mysql_skip_name_resolve,
+ use_syslog => $use_syslog,
++ wsrep_sst_method => $wsrep_sst_method,
+ wsrep_sst_password => $root_password,
+ use_percona => true,
+ use_percona_packages => true
+diff --git a/deployment/puppet/osnailyfacter/modular/database/database.pp b/deployment/puppet/osnailyfacter/modular/database/database.pp
+index d3fb736..d7ca319 100644
+--- a/deployment/puppet/osnailyfacter/modular/database/database.pp
++++ b/deployment/puppet/osnailyfacter/modular/database/database.pp
+@@ -1,10 +1,15 @@
+ notice('MODULAR: database.pp')
+
++$default_wsrep_hash = {
++ 'wsrep_method' => 'xtrabackup-x2',
++}
++
+ $network_scheme = hiera_hash('network_scheme', {})
+ prepare_network_config($network_scheme)
+ $use_syslog = hiera('use_syslog', true)
+ $primary_controller = hiera('primary_controller')
+ $mysql_hash = hiera_hash('mysql', {})
++$wsrep_hash = hiera_hash('mysql_wsrep', $default_wsrep_hash)
+ $management_vip = hiera('management_vip')
+ $database_vip = hiera('database_vip', $management_vip)
+
+@@ -17,6 +22,7 @@ $haproxy_stats_url = "http://${database_vip}:${haproxy_stats_port}/;csv"
+
+ $mysql_database_password = $mysql_hash['root_password']
+ $enabled = pick($mysql_hash['enabled'], true)
++$wsrep_sst_method = $wsrep_hash['wsrep_method']
+
+ $galera_node_address = get_network_role_property('mgmt/database', 'ipaddr')
+ $galera_nodes = values(get_node_to_ipaddr_map_by_network_role(hiera_hash('database_nodes'), 'mgmt/database'))
+@@ -78,6 +84,7 @@ if $enabled {
+ use_syslog => $use_syslog,
+ config_hash => $config_hash_real,
+ ignore_db_dirs => $ignore_db_dirs,
++ wsrep_sst_method => $wsrep_sst_method,
+ }
+
+ class { 'osnailyfacter::mysql_user':
diff --git a/patches/fuel-web/0006-Add-configuration-item-for-WSREP-SST-provider.patch b/patches/fuel-web/0006-Add-configuration-item-for-WSREP-SST-provider.patch
new file mode 100644
index 00000000..dacb26de
--- /dev/null
+++ b/patches/fuel-web/0006-Add-configuration-item-for-WSREP-SST-provider.patch
@@ -0,0 +1,45 @@
+From: Stanislaw Kardach <stanislaw.kardach@caviumnetworks.com>
+Date: Wed, 20 Apr 2016 15:05:15 -0700
+Subject: [PATCH] Add configuration item for WSREP SST provider
+
+This patch adds a radio button in "OpenStack Services" tab of the
+environment settings to configure which WSREP SST provider to use for
+MySQL.
+
+Signed-off-by: Stanislaw Kardach <stanislaw.kardach@caviumnetworks.com>
+---
+ nailgun/nailgun/fixtures/openstack.yaml | 21 +++++++++++++++++++++
+ 1 file changed, 21 insertions(+)
+
+diff --git a/nailgun/nailgun/fixtures/openstack.yaml b/nailgun/nailgun/fixtures/openstack.yaml
+index 037ceba..598cf77 100644
+--- a/nailgun/nailgun/fixtures/openstack.yaml
++++ b/nailgun/nailgun/fixtures/openstack.yaml
+@@ -856,6 +856,27 @@
+ type: "text"
+ restrictions:
+ - "settings:neutron_mellanox.plugin.value != 'ethernet'"
++ mysql_wsrep:
++ metadata:
++ label: "Database configuration"
++ weight: 15
++ group: "openstack_services"
++ wsrep_method:
++ value: "xtrabackup-v2"
++ label: "WSREP SST provider"
++ description: "This setting changes the wsrep_sst_method switch in the MySQL Galera cluster configuration."
++ weight: 10
++ type: "radio"
++ values:
++ - data: "xtrabackup-v2"
++ label: "xtrabackup-v2"
++ description: "Use Percona xtrabackup v2 provider. This is broken on some ARM64 platforms due to outdated MySQL/InnoDB code used by xtrabackup."
++ - data: "rsync"
++ label: "rsync"
++ description: "Use rsync provider. Use if xtrabackup is broken on your platform."
++ - data: "mysqldump"
++ label: "mysqldump"
++ description: "Use mysqldump provider (untested)."
+ additional_components:
+ metadata:
+ label: "Additional Components"