fuel-library/deployment/puppet/galera/manifests/init.pp

244 lines
7.6 KiB
Puppet

#
# wget https://launchpad.net/codership-mysql/5.5/5.5.23-23.6/+download/mysql-server-wsrep-5.5.23-23.6-amd64.deb
# wget https://launchpad.net/galera/2.x/23.2.1/+download/galera-23.2.1-amd64.deb
# aptitude install mysql-client libdbd-mysql-perl libdbi-perl
# aptitude install libssl0.9.8
# dpkg -i mysql-server-wsrep-5.5.23-23.6-amd64.deb
# dpkg -i galera-23.2.1-amd64.deb
# vi /etc/mysql/conf.d/wsrep.cnf
# /etc/init.d/mysql start
#
class galera($cluster_name, $master_ip = false, $node_address = $ipaddress_eth0, $setup_multiple_gcomm = false, $node_addresses=[$ipaddress_eth0]) {
include galera::params
$mysql_user = $::galera::params::mysql_user
$mysql_password = $::galera::params::mysql_password
$libgalera_prefix = $::galera::params::libgalera_prefix
# $mysql_wsrep_prefix = 'https://launchpad.net/codership-mysql/5.5/5.5.23-23.6/+download'
# $galera_prefix = 'https://launchpad.net/galera/2.x/23.2.1/+download'
#$mysql_wsrep_prefix = 'http://download.mirantis.com/epel-fuel/x86_64'
#$galera_prefix = $mysql_wsrep_prefix
case $::osfamily {
'RedHat': {
$mysql_wsrep_prefix = 'http://download.mirantis.com/epel-fuel/x86_64'
$galera_prefix = $mysql_wsrep_prefix
$pkg_prefix = $mysql_wsrep_prefix #Yeah, looks funny. So was inherited.
$pkg_version = '5.5.27-1.el6.x86_64'
if (!$::selinux=='false') and !defined(Class['selinux']) {
class { 'selinux' :
mode => 'disabled',
before => Package['MySQL-server']
}
}
# install dependencies
Galera::Pkg_add {
pkg_prefix => $pkg_prefix,
pkg_version => $pkg_version,
before => Package['MySQL-server']
}
galera::pkg_add { 'MySQL-client': }
galera::pkg_add { 'MySQL-shared': }
file { '/etc/init.d/mysql' :
ensure => present,
mode => 755,
source => 'puppet:///modules/galera/mysql.init',
require => Package['MySQL-server'],
before => Service['mysql-galera']
}
file { '/etc/my.cnf' :
ensure => present,
source => 'puppet:///modules/galera/my.cnf',
before => Service['mysql-galera']
}
package { 'wget' :
ensure => present,
before => Exec['download-wsrep', 'download-galera']
}
package { 'perl' :
ensure => present,
before => Galera::Pkg_add['MySQL-client']
}
}
'Debian': {
$mysql_wsrep_prefix = 'http://download.mirantis.com/epel-fuel/x86_64'
$galera_prefix = $mysql_wsrep_prefix
$pkg_prefix = $mysql_wsrep_prefix #Yeah, looks funny. So was inherited.
$pkg_version = 'wsrep-5.5.23-23.6-amd64'
if (!$::selinux=='false') and !defined(Class['selinux']) {
class { 'selinux' :
mode => 'disabled',
before => Package['MySQL-server']
}
}
# install dependencies
Galera::Pkg_add {
pkg_prefix => $pkg_prefix,
pkg_version => $pkg_version,
before => Package['MySQL-server']
}
# galera::pkg_add { 'MySQL-client': }
# galera::pkg_add { 'MySQL-shared': }
file { '/etc/init.d/mysql' :
ensure => present,
mode => 755,
source => 'puppet:///modules/galera/mysql.init',
require => Package['MySQL-server'],
before => Service['mysql-galera']
}
file { '/etc/my.cnf' :
ensure => present,
source => 'puppet:///modules/galera/my.cnf',
before => Service['mysql-galera']
}
package { 'wget' :
ensure => present,
before => Exec['download-wsrep', 'download-galera']
}
package { 'perl' :
ensure => present,
before => Package['mysql-client']
}
package { 'mysql-client' :
ensure => present,
before => Package['MySQL-server']
}
package { 'mysql-common' :
ensure => present,
before => Package['MySQL-server']
}
}
}
service { "mysql-galera" :
name => "mysql",
enable => true,
ensure => "running",
require => [Package["MySQL-server", "galera"], File["/etc/mysql/conf.d/wsrep.cnf"]],
subscribe => File["/etc/mysql/conf.d/wsrep.cnf"],
hasrestart => true,
hasstatus => true,
}
package { [$::galera::params::libssl_package, $::galera::params::libaio_package] :
ensure => present,
before => Package["galera", "MySQL-server"]
}
package { "MySQL-server" :
ensure => present,
name => $::galera::params::mysql_server_name,
provider => $::galera::params::pkg_provider,
source => "/tmp/${::galera::params::mysql_server_package}",
require => [Exec["download-wsrep"], File["/etc/mysql/conf.d/wsrep.cnf"]]
}
exec { "download-wsrep" :
command => "/usr/bin/wget -P/tmp ${mysql_wsrep_prefix}/${::galera::params::mysql_server_package}",
creates => "/tmp/${::galera::params::mysql_server_package}"
}
package { "galera" :
ensure => present,
provider => $::galera::params::pkg_provider,
source => "/tmp/${::galera::params::galera_package}",
require => Exec["download-galera"],
}
exec { "download-galera" :
command => "/usr/bin/wget -P/tmp ${galera_prefix}/${::galera::params::galera_package}",
creates => "/tmp/${::galera::params::galera_package}",
}
file { ["/etc/mysql", "/etc/mysql/conf.d" ] :
ensure => directory,
before => File["/etc/mysql/conf.d/wsrep.cnf"]
}
file { "/etc/mysql/conf.d/wsrep.cnf" :
ensure => present,
content => template("galera/wsrep.cnf.erb"),
## require => Package["galera"],
}
file { "/tmp/wsrep-init-file" :
ensure => present,
content => template("galera/wsrep-init-file.erb"),
## require => Package["galera"],
}
exec { "set-mysql-password" :
unless => "/usr/bin/mysql -u${mysql_user} -p${mysql_password}",
command => "/usr/bin/mysqld_safe --init-file=/tmp/wsrep-init-file &",
require => [Package["MySQL-server"],File['/tmp/wsrep-init-file']],
subscribe => Package["MySQL-server"],
refreshonly => true,
}
exec { "wait-initial-sync" :
require => Exec["set-mysql-password"],
subscribe => Exec["set-mysql-password"],
before => Exec["kill-initial-mysql"],
logoutput => true,
command => "/usr/bin/mysql -Nbe \"show status like 'wsrep_local_state_comment'\" | /bin/grep -q Synced",
try_sleep => 5,
tries => 6,
refreshonly => true,
}
exec {"kill-initial-mysql":
path => "/usr/bin:/usr/sbin:/bin:/sbin",
command => "killall -w mysqld",
# onlyif => "pidof mysqld",
# try_sleep => 5,
# tries => 6,
before => Service["mysql-galera"],
require => Exec["set-mysql-password"],
subscribe => Exec["wait-initial-sync"],
refreshonly => true,
}
exec {"rm-init-file":
command =>"/bin/rm /tmp/wsrep-init-file",
require => Exec["kill-initial-mysql"],
}
exec { "wait-for-synced-state" :
require => [Exec["kill-initial-mysql"],Service['mysql-galera']],
logoutput => true,
command => "/usr/bin/mysql -Nbe \"show status like 'wsrep_local_state_comment'\" | /bin/grep -q Synced",
try_sleep => 5,
tries => 6,
}
if ! $master_ip
{
exec { "bootstrap-galera" :
require => [Service['mysql-galera']],
subscribe => [Service['mysql-galera']],
before => [Exec['wait-for-synced-state']],
logoutput => true,
command => "/usr/bin/mysql -Nbe \"SET GLOBAL wsrep_provider_options='pc.bootstrap=1'\"",
}
}
}