cleaning up galera manifests: docs and obsolete code

This commit is contained in:
Vladimir Kuklin 2013-06-28 18:15:40 +04:00
parent af69172283
commit 23fffaf732
7 changed files with 135 additions and 101 deletions

View File

@ -6,6 +6,11 @@
<project>selinux</project> <project>selinux</project>
</projects> </projects>
<buildSpec> <buildSpec>
<buildCommand>
<name>com.aptana.ide.core.unifiedBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand> <buildCommand>
<name>org.cloudsmith.geppetto.pp.dsl.ui.modulefileBuilder</name> <name>org.cloudsmith.geppetto.pp.dsl.ui.modulefileBuilder</name>
<arguments> <arguments>
@ -19,6 +24,7 @@
</buildSpec> </buildSpec>
<natures> <natures>
<nature>org.cloudsmith.geppetto.pp.dsl.ui.puppetNature</nature> <nature>org.cloudsmith.geppetto.pp.dsl.ui.puppetNature</nature>
<nature>com.aptana.ruby.core.rubynature</nature>
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature> <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
</natures> </natures>
</projectDescription> </projectDescription>

View File

@ -1,6 +1,21 @@
# galera_gcomm.rb # Fact: galera_gcomm_empty
#
# Purpose: Return 'true' if gcomm:// cluster address is empty for Galera MySQL master-master replication engine
#
# Resolution:
# Greps mysql config files for wsrep_cluster_address option
#
# Caveats:
#
## Cfkey.rb
## Facts related to cfengine
##
result = "true" result = "true"
#FIXME: do not hardcode wsrep config file location. We need to start from
#FIXME: mysql config file and go through all the include directives
if File.exists?("/etc/mysql/conf.d/wsrep.cnf") if File.exists?("/etc/mysql/conf.d/wsrep.cnf")
if open("/etc/mysql/conf.d/wsrep.cnf").read.split("\n").grep(/^\s*wsrep_cluster_address=[\"\']gcomm:\/\/\s*[\"\']\s*/).any? if open("/etc/mysql/conf.d/wsrep.cnf").read.split("\n").grep(/^\s*wsrep_cluster_address=[\"\']gcomm:\/\/\s*[\"\']\s*/).any?
result="true" result="true"

View File

@ -1,13 +0,0 @@
# At this point, it's an exact copy of the Blastwave stuff.
Puppet::Type.type(:package).provide :rpmforce, :parent => :rpm, :source => :rpm do
desc "Package management using rpm --force option"
commands :rpm => "rpm"
def install
super
rescue Puppet::ExecutionFailure
rpm "-U", "--force", @resource[:source]
end
end

View File

@ -1,13 +1,36 @@
class galera::galera_master_final_config($primary_controller, $node_addresses, $node_address) { # == Define: galera_master_final_config
# This class changes config file on first Galera node to allow safe restart of this node without leaving cluster. #
# Class for final configuring of galera master node.
#
# === Parameters
#
# [*primary_controller*]
# Set to true if the node is primary controller/master of galera cluster.
# [*node_addresses*]
# Array of galera cluster node members IPs/hostnames.
#
# [*node_address*]
# Name of the node used in galera cluster config. Can be IP/hostname.
#
# === Authors
#
# Mirantis Inc. <product@mirantis.com>
#
# === Copyright
#
# FIXME: Insert copyrights and licenses
#
class galera::galera_master_final_config ($primary_controller, $node_addresses, $node_address) {
if $primary_controller { if $primary_controller {
$galera_gcomm_string = inline_template("<%= @node_addresses.reject{|ip| ip == hostname || ip == @node_address || ip == l3_fqdn_hostname }.collect {|ip| ip + ':' + 4567.to_s }.join ',' %>") $galera_gcomm_string = inline_template("<%= @node_addresses.reject{|ip| ip == hostname || ip == @node_address || ip == l3_fqdn_hostname }.collect {|ip| ip + ':' + 4567.to_s }.join ',' %>"
)
$check_galera = "show status like 'wsrep_cluster_size';" $check_galera = "show status like 'wsrep_cluster_size';"
$mysql_user = $::galera::params::mysql_user $mysql_user = $::galera::params::mysql_user
$mysql_password = $::galera::params::mysql_password $mysql_password = $::galera::params::mysql_password
exec {"first-galera-node-final-config": exec { "first-galera-node-final-config":
path => "/usr/bin:/usr/sbin:/bin:/sbin", path => "/usr/bin:/usr/sbin:/bin:/sbin",
command => "sed -i 's/wsrep_cluster_address=\"gcomm:\\/\\/\"\$/wsrep_cluster_address=\"gcomm:\\/\\/${galera_gcomm_string}\"/' /etc/mysql/conf.d/wsrep.cnf; sleep 15", command => "sed -i 's/wsrep_cluster_address=\"gcomm:\\/\\/\"\$/wsrep_cluster_address=\"gcomm:\\/\\/${galera_gcomm_string}\"/' /etc/mysql/conf.d/wsrep.cnf; sleep 15",
onlyif => "sleep 15; mysql -u${mysql_user} -p${mysql_password} -e \"${check_galera}\" && (mysql -u${mysql_user} -p${mysql_password} -e \"${check_galera}\" | awk '\$1 == \"wsrep_cluster_size\" {print \$2}' | awk '{if (\$0 > 1) exit 0; else exit 1}')", onlyif => "sleep 15; mysql -u${mysql_user} -p${mysql_password} -e \"${check_galera}\" && (mysql -u${mysql_user} -p${mysql_password} -e \"${check_galera}\" | awk '\$1 == \"wsrep_cluster_size\" {print \$2}' | awk '{if (\$0 > 1) exit 0; else exit 1}')",
@ -16,4 +39,3 @@ class galera::galera_master_final_config($primary_controller, $node_addresses, $
} }
} }

View File

@ -1,13 +1,44 @@
# == Define: galera
# #
# wget https://launchpad.net/codership-mysql/5.5/5.5.23-23.6/+download/mysql-server-wsrep-5.5.23-23.6-amd64.deb # Class for installation and configuration of galer Master/Master cluster.
# 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
# #
# === Parameters
#
# [*cluster_name*]
# Cluster name for `wsrep_cluster_name` variable.
#
# [*primary_controller*]
# Set to true if current node is the initial master/primary
# controller.
#
# [*node_address*]
# Which value to use as node address for filtering in gcomm address.
# This is done due to some bugs in galera configuration. Thus we are
# filtering this address from `wsrep_cluster_address` to avoid these
# problems.
#
# [*setup_multiple_gcomm*]
# Should gcomm address contain multiple nodes or not.
#
# [*skip_name_resolve*]
# By default, MySQL tries to do reverse name mapping IP->hostname. In this
# case MySQL requests can be timed out by clients in case of broken name
# resolving system. If you are not sure that your DNS/NIS/whatever are configured
# correctly, set this value to true.
#
# [*node_addresses*]
# Array with IPs/hostnames of cluster members.
#
# === Authors
#
# Mirantis Inc. <product@mirantis.com>
#
# === Copyright
#
# FIXME: Insert copyrights and licenses
#
class galera ( class galera (
$cluster_name, $cluster_name,
$primary_controller = false, $primary_controller = false,
@ -141,11 +172,6 @@ class galera (
# logoutput => true, # logoutput => true,
# } # }
# 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, } file { ["/etc/mysql", "/etc/mysql/conf.d"]: ensure => directory, }
if $::galera_gcomm_empty == "true" { if $::galera_gcomm_empty == "true" {
@ -161,17 +187,25 @@ class galera (
File["/etc/mysql/conf.d/wsrep.cnf"] -> Package['MySQL-server'] File["/etc/mysql/conf.d/wsrep.cnf"] -> Package['MySQL-server']
} }
#TODO: find another way of mysql initial replication users creation
# This file contains initial sql requests for creating replication users.
file { "/tmp/wsrep-init-file": file { "/tmp/wsrep-init-file":
ensure => present, ensure => present,
content => template("galera/wsrep-init-file.erb"), content => template("galera/wsrep-init-file.erb"),
} }
# This exec calls mysqld_safe with aforementioned file as --init-file argument, thus creating replication user.
exec { "set-mysql-password": exec { "set-mysql-password":
unless => "/usr/bin/mysql -u${mysql_user} -p${mysql_password}", unless => "/usr/bin/mysql -u${mysql_user} -p${mysql_password}",
command => "/usr/bin/mysqld_safe --init-file=/tmp/wsrep-init-file --port=3307 &", command => "/usr/bin/mysqld_safe --init-file=/tmp/wsrep-init-file --port=3307 &",
refreshonly => true, refreshonly => true,
} }
# This exec waits for initial sync of galera cluster after mysql replication user creation.
exec { "wait-initial-sync": exec { "wait-initial-sync":
logoutput => true, logoutput => true,
command => "/usr/bin/mysql -Nbe \"show status like 'wsrep_local_state_comment'\" | /bin/grep -q -e Synced -e Initialized && sleep 10", command => "/usr/bin/mysql -Nbe \"show status like 'wsrep_local_state_comment'\" | /bin/grep -q -e Synced -e Initialized && sleep 10",
@ -180,6 +214,8 @@ class galera (
refreshonly => true, refreshonly => true,
} }
# This exec kills initialized mysql to allow its management with generic service providers (init/upstart/pacemaker/etc.)
exec { "kill-initial-mysql": exec { "kill-initial-mysql":
path => "/usr/bin:/usr/sbin:/bin:/sbin", path => "/usr/bin:/usr/sbin:/bin:/sbin",
command => "killall -w mysqld && ( killall -w -9 mysqld_safe || : ) && sleep 10", command => "killall -w mysqld && ( killall -w -9 mysqld_safe || : ) && sleep 10",
@ -206,6 +242,8 @@ class galera (
Exec["kill-initial-mysql"] -> Exec["rm-init-file"] Exec["kill-initial-mysql"] -> Exec["rm-init-file"]
Package["MySQL-server"] ~> Exec["set-mysql-password"] ~> Exec ["wait-initial-sync"] ~> Exec["kill-initial-mysql"] Package["MySQL-server"] ~> Exec["set-mysql-password"] ~> Exec ["wait-initial-sync"] ~> Exec["kill-initial-mysql"]
# FIXME: This class is deprecated and should be removed in future releases.
class { 'galera::galera_master_final_config': class { 'galera::galera_master_final_config':
require => Exec["wait-for-haproxy-mysql-backend"], require => Exec["wait-for-haproxy-mysql-backend"],
primary_controller => $primary_controller, primary_controller => $primary_controller,

View File

@ -8,28 +8,19 @@ class galera::params {
case $::osfamily { case $::osfamily {
'RedHat': { 'RedHat': {
$pkg_provider = 'yum' $pkg_provider = 'yum'
#$pkg_provider = 'rpmforce'
$libssl_package = 'openssl098e' $libssl_package = 'openssl098e'
$libaio_package = 'libaio' $libaio_package = 'libaio'
# $mysql_client_package = 'mysql'
$mysql_version = '5.5.28_wsrep_23.7-12' $mysql_version = '5.5.28_wsrep_23.7-12'
# $mysql_server_package = 'MySQL-server-wsrep-5.5.28_wsrep_23.7-11.x86_64.rpm'
$mysql_server_name = 'MySQL-server-wsrep' $mysql_server_name = 'MySQL-server-wsrep'
# $galera_package = 'galera-23.2.2-1.rhel5.x86_64.rpm'
$galera_version = '23.2.2-1.rhel5' $galera_version = '23.2.2-1.rhel5'
$libgalera_prefix = '/usr/lib64' $libgalera_prefix = '/usr/lib64'
} }
'Debian': { 'Debian': {
$pkg_provider = 'apt' $pkg_provider = 'apt'
#$pkg_provider = 'dpkg'
$libssl_package = 'libssl0.9.8' $libssl_package = 'libssl0.9.8'
$libaio_package = 'libaio1' $libaio_package = 'libaio1'
# $mysql_client_package = 'mysql-client'
# $mysql_version = '5.5.28-23.7'
# $mysql_server_package = 'mysql-server-wsrep-5.5.28-23.7-amd64.deb'
$mysql_server_name = 'mysql-server-wsrep' $mysql_server_name = 'mysql-server-wsrep'
$galera_version = '23.2.2' $galera_version = '23.2.2'
# $galera_package = 'galera-23.2.2-amd64.deb'
$libgalera_prefix = '/usr/lib' $libgalera_prefix = '/usr/lib'
} }
default: { default: {

View File

@ -1,25 +0,0 @@
define galera::pkg_add(
$pkg_version,
$pkg_prefix = '/tmp'
) {
include galera::params
case $::osfamily {
'RedHat': {
package { $title :
ensure => present,
provider => $::galera::params::pkg_provider,
source => "${pkg_prefix}/${title}-${pkg_version}.rpm",
}
}
'Debian': {
package { $title :
ensure => present,
provider => $::galera::params::pkg_provider,
source => "${pkg_prefix}/${title}-${pkg_version}.deb",
}
}
}
}