Skip to content

Commit

Permalink
fix bootstrap of XtraDB clusters, closes #118
Browse files Browse the repository at this point in the history
  • Loading branch information
fraenki committed Mar 2, 2020
1 parent 1e075da commit 243e7c3
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 30 deletions.
20 changes: 15 additions & 5 deletions data/RedHat-family.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ galera::codership::default_options:
mysqld:
log-error: '/var/log/mysqld.log'
pid-file: '/var/run/mysqld/mysqld.pid'
mysqld_safe:
log-error: '/var/log/mysqld.log'
galera::codership::libgalera_location: '/usr/lib64/galera-3/libgalera_smm.so'
galera::codership::mysql_service_name: 'mysqld'
galera::codership::want_repos:
Expand Down Expand Up @@ -60,28 +62,32 @@ galera::mariadb::want_repos:
galera::percona::55::arbitrator_package_name: 'Percona-XtraDB-Cluster-garbd-2'
galera::percona::55::client_package_name: 'Percona-XtraDB-Cluster-client-55'
galera::percona::55::galera_package_name: 'Percona-XtraDB-Cluster-galera-2'
galera::percona::55::mysql_package_name: 'Percona-XtraDB-Cluster-server-55'
# Using the meta package avoids conflicts with other versions during installation.
galera::percona::55::mysql_package_name: 'Percona-XtraDB-Cluster-55'
galera::percona::56::arbitrator_package_name: 'Percona-XtraDB-Cluster-garbd-3'
galera::percona::56::bootstrap_command: 'systemctl start mysql@bootstrap.service'
galera::percona::56::client_package_name: 'Percona-XtraDB-Cluster-client-56'
galera::percona::56::galera_package_name: 'Percona-XtraDB-Cluster-galera-3'
galera::percona::56::mysql_package_name: 'Percona-XtraDB-Cluster-server-56'
# Using the meta package avoids conflicts with other versions during installation.
galera::percona::56::mysql_package_name: 'Percona-XtraDB-Cluster-56'
galera::percona::57::additional_packages:
- 'Percona-XtraDB-Cluster-shared-compat-57'
- 'nmap'
galera::percona::57::arbitrator_package_name: 'Percona-XtraDB-Cluster-garbd-57'
galera::percona::57::bootstrap_command: 'systemctl start mysql@bootstrap.service'
galera::percona::57::client_package_name: 'Percona-XtraDB-Cluster-client-57'
galera::percona::57::galera_package_name: 'Percona-XtraDB-Cluster-galera-3'
galera::percona::57::mysql_package_name: 'Percona-XtraDB-Cluster-server-57'
# Using the meta package avoids conflicts with other versions during installation.
galera::percona::57::mysql_package_name: 'Percona-XtraDB-Cluster-57'
galera::percona::arbitrator_config_file: '/etc/sysconfig/garb'
galera::percona::arbitrator_package_name: 'Percona-XtraDB-Cluster-garbd-3'
galera::percona::arbitrator_service_name: 'garb'
galera::percona::bootstrap_command: '/etc/init.d/mysql bootstrap-pxc'
galera::percona::bootstrap_command: 'systemctl start mysql@bootstrap.service'
galera::percona::default_options:
mysqld:
log-error: '/var/log/mysqld.log'
pid-file: '/var/run/mysqld/mysqld.pid'
mysqld_safe:
log-error: '/var/log/mysqld.log'
galera::percona::libgalera_location: '/usr/lib64/libgalera_smm.so'
galera::percona::mysql_service_name: 'mysql'
galera::percona::want_repos:
Expand Down Expand Up @@ -113,6 +119,10 @@ galera::repo::percona::yum:
enabled: 1
gpgcheck: 1
gpgkey: 'https://www.percona.com/downloads/RPM-GPG-KEY-percona https://repo.percona.com/yum/PERCONA-PACKAGING-KEY'
# Avoid conflicts by excluding Percona Server packages.
# Both XtraDB and Percona Server provide the same MySQL dependencies,
# which could break the installation.
exclude: '*Percona-Server*'

galera::sst::mariabackup::mariadb::101::additional_packages:
- 'MariaDB-backup'
Expand Down
3 changes: 0 additions & 3 deletions manifests/init.pp
Original file line number Diff line number Diff line change
Expand Up @@ -462,9 +462,6 @@
# Include workarounds for RedHat-based systems
if ($facts['os']['family'] == 'RedHat') {
include galera::redhat
unless $galera::arbitrator {
Class['galera::redhat'] -> Class['mysql::server::installdb']
}
}

# Evaluate dependencies before performing package installation
Expand Down
29 changes: 24 additions & 5 deletions manifests/redhat.pp
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# @summary Adds workarounds to solve issues specific to RedHat-based systems.
# @api private
class galera::redhat {
if versioncmp($facts['os']['release']['major'], '7') >= 0 {
unless $galera::arbitrator {
# puppetlabs/mysql forces to use /var/run/mariadb and /var/log/mariadb but
# they don't exist so the service won't start.
if $galera::vendor_type == 'mariadb' {
unless $galera::arbitrator {
if $galera::vendor_type == 'mariadb' {
if versioncmp($facts['os']['release']['major'], '7') >= 0 {
# puppetlabs/mysql defaults to /var/run/mariadb and /var/log/mariadb but
# they don't exist so the service won't start.
file { '/var/log/mariadb':
ensure => 'directory',
before => Class['mysql::server::install'],
Expand All @@ -19,6 +19,25 @@
before => Class['mysql::server::installdb'],
}
}
} elsif $galera::vendor_type == 'percona' {
if (versioncmp($galera::vendor_version, '5.6') >= 0) {
# Perona installs two independent systemd services:
# mysql - for normal operation
# mysql@bootstrap - for bootstrapping a new cluster
# However, after performing a bootstrap, only mysql@bootstrap is running.
# The "mysql" service remains in state stopped, which causes errors when
# puppetlabs/mysql tries to start it while the bootstrap service is
# already running.
# To mitigate this, we perform the bootstrap, stop the bootstrap service
# and wait for puppetlabs/mysql to start the normal mysql service. After
# a clean shutdown and with no other node online, this node should be
# able to startup as primary node.
service { 'mysql@bootstrap':
ensure => 'stopped',
require => Exec['bootstrap_galera_cluster'],
before => Service['mysqld'],
}
}
}
}
}
38 changes: 21 additions & 17 deletions spec/acceptance/galera_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,30 @@
describe 'default parameters' do
let(:pp) do
<<-MANIFEST
class { 'galera':
cluster_name => 'testcluster',
deb_sysmaint_password => 'sysmaint',
galera_servers => ['127.0.0.1'],
galera_master => $::fqdn,
root_password => 'root_password',
status_password => 'status_password',
override_options => {
'mysqld' => {
'bind_address' => '0.0.0.0',
}
},
vendor_type => 'percona',
vendor_version => '5.7'
}
# Setup firewall package and service, otherwise adding firewall
# rules will fail.
class { 'firewall': }
class { 'galera':
cluster_name => 'testcluster',
deb_sysmaint_password => 'sysmaint',
galera_servers => ['127.0.0.1'],
galera_master => $::fqdn,
root_password => 'root_password',
status_password => 'status_password',
override_options => {
'mysqld' => {
'bind_address' => '0.0.0.0',
}
},
vendor_type => 'percona',
vendor_version => '5.7'
}
MANIFEST
end

it 'behaves idempotently' do
idempotent_apply(pp)
it 'runs successfully' do
apply_manifest(pp, catch_failures: true)
end

describe port(3306) do
Expand Down

0 comments on commit 243e7c3

Please # to comment.