summaryrefslogtreecommitdiffstats
path: root/patches/fuel-library/0014-Allow-configuring-MySQL-WSREP-SST-provider.patch
blob: c7000ae88d0459408cd29404d370ac877b34b8ba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
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':