Initial commit
This commit is contained in:
commit
dfd4eb224a
35
deployment/puppet/galera/README
Normal file
35
deployment/puppet/galera/README
Normal file
@ -0,0 +1,35 @@
|
||||
This is a good start to play around with the galera multi-master mysql synchronous replication (http://www.codership.com/products/mysql_galera)
|
||||
|
||||
HOWTO:
|
||||
|
||||
* play around (add a database and data, chaos-monkey nodes etc.)
|
||||
|
||||
|
||||
WARNING
|
||||
|
||||
Change the mysql root password in production and limit access to galera cluster members!
|
||||
|
||||
TODO
|
||||
|
||||
* naming: master -> donor
|
||||
* put a load balancer in front of the cluster
|
||||
* make cluster "masterless"
|
||||
|
||||
nodes.pp
|
||||
|
||||
# nodes
|
||||
$cluster_name = 'wsrep_galera_cluster'
|
||||
|
||||
node /mysql-db-01/ {
|
||||
class { 'galera' :
|
||||
cluster_name => $cluster_name
|
||||
}
|
||||
}
|
||||
|
||||
node /mysql-db-0([2-9])/ {
|
||||
$master_ip = '172.18.67.254'
|
||||
class { 'galera' :
|
||||
cluster_name => $cluster_name,
|
||||
master_ip => $master_ip
|
||||
}
|
||||
}
|
BIN
deployment/puppet/galera/files/galera-23.2.1-amd64.deb
Normal file
BIN
deployment/puppet/galera/files/galera-23.2.1-amd64.deb
Normal file
Binary file not shown.
Binary file not shown.
68
deployment/puppet/galera/manifests/init.pp
Normal file
68
deployment/puppet/galera/manifests/init.pp
Normal file
@ -0,0 +1,68 @@
|
||||
#
|
||||
# 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) {
|
||||
|
||||
$mysql_user = "wsrep_sst"
|
||||
$mysql_password = "password"
|
||||
|
||||
service { "mysql-galera" :
|
||||
name => "mysql",
|
||||
ensure => "running",
|
||||
require => [Package["mysql-server-wsrep", "galera"], File["/etc/mysql/conf.d/wsrep.cnf"]],
|
||||
hasrestart => true,
|
||||
# hasstatus => true, // http://projects.puppetlabs.com/issues/5610
|
||||
}
|
||||
|
||||
package { ["mysql-client", "libssl0.9.8", "libaio1"] :
|
||||
ensure => present,
|
||||
}
|
||||
|
||||
package { ["mysql-server-5.5", "mysql-server-core-5.5"] :
|
||||
ensure => purged,
|
||||
}
|
||||
|
||||
package { "mysql-server-wsrep" :
|
||||
ensure => present,
|
||||
provider => "dpkg",
|
||||
source => "/tmp/mysql-server-wsrep.deb",
|
||||
require => [Package["mysql-server-5.5"], Package["mysql-server-core-5.5"], Package["libaio1"], File["/tmp/mysql-server-wsrep.deb"], Package["mysql-client"]],
|
||||
}
|
||||
|
||||
file { "/tmp/mysql-server-wsrep.deb" :
|
||||
source => "puppet:///modules/galera/mysql-server-wsrep-5.5.23-23.6-amd64.deb"
|
||||
}
|
||||
|
||||
package { "galera" :
|
||||
ensure => present,
|
||||
provider => "dpkg",
|
||||
source => "/tmp/galera.deb",
|
||||
require => [File["/tmp/galera.deb"], Package["libssl0.9.8"]],
|
||||
}
|
||||
|
||||
file { "/tmp/galera.deb" :
|
||||
source => "puppet:///modules/galera/galera-23.2.1-amd64.deb"
|
||||
}
|
||||
|
||||
file { "/etc/mysql/conf.d/wsrep.cnf" :
|
||||
ensure => present,
|
||||
content => template("galera/wsrep.cnf.erb"),
|
||||
require => Package["mysql-server-wsrep", "galera"],
|
||||
}
|
||||
|
||||
exec { "set-mysql-password" :
|
||||
unless => "/usr/bin/mysql -u${mysql_user} -p${mysql_password}",
|
||||
command => "/usr/bin/mysql -uroot -e \"set wsrep_on='off'; delete from mysql.user where user=''; grant all on *.* to '${mysql_user}'@'%' identified by '${mysql_password}';flush privileges;\"",
|
||||
require => Service["mysql-galera"],
|
||||
subscribe => Service["mysql-galera"],
|
||||
refreshonly => true,
|
||||
}
|
||||
|
||||
}
|
129
deployment/puppet/galera/templates/wsrep.cnf.erb
Normal file
129
deployment/puppet/galera/templates/wsrep.cnf.erb
Normal file
@ -0,0 +1,129 @@
|
||||
# This file contains wsrep-related mysqld options. It should be included
|
||||
# in the main MySQL configuration file.
|
||||
#
|
||||
# Options that need to be customized:
|
||||
# - wsrep_provider
|
||||
# - wsrep_cluster_address
|
||||
# - wsrep_sst_auth
|
||||
# The rest of defaults should work out of the box.
|
||||
|
||||
##
|
||||
## mysqld options _MANDATORY_ for correct opration of the cluster
|
||||
##
|
||||
[mysqld]
|
||||
|
||||
# (This must be substituted by wsrep_format)
|
||||
binlog_format=ROW
|
||||
|
||||
# Currently only InnoDB storage engine is supported
|
||||
default-storage-engine=innodb
|
||||
|
||||
# to avoid issues with 'bulk mode inserts' using autoinc
|
||||
innodb_autoinc_lock_mode=2
|
||||
|
||||
# This is a must for paralell applying
|
||||
innodb_locks_unsafe_for_binlog=1
|
||||
|
||||
# Query Cache is not supported with wsrep
|
||||
query_cache_size=0
|
||||
query_cache_type=0
|
||||
|
||||
# Override bind-address
|
||||
# In some systems bind-address defaults to 127.0.0.1, and with mysqldump SST
|
||||
# it will have (most likely) disastrous consequences on donor node
|
||||
bind-address=0.0.0.0
|
||||
|
||||
##
|
||||
## WSREP options
|
||||
##
|
||||
|
||||
# Full path to wsrep provider library or 'none'
|
||||
wsrep_provider=/usr/lib/galera/libgalera_smm.so
|
||||
|
||||
# Provider specific configuration options
|
||||
#wsrep_provider_options=
|
||||
|
||||
# Logical cluster name. Should be the same for all nodes.
|
||||
wsrep_cluster_name="<%= cluster_name -%>"
|
||||
|
||||
# Group communication system handle
|
||||
<% if master_ip -%>
|
||||
wsrep_cluster_address="gcomm://<%= master_ip %>:4567"
|
||||
<% else -%>
|
||||
wsrep_cluster_address="gcomm://"
|
||||
<% end -%>
|
||||
|
||||
# Human-readable node name (non-unique). Hostname by default.
|
||||
#wsrep_node_name=
|
||||
|
||||
# Base replication <address|hostname>[:port] of the node.
|
||||
# The values supplied will be used as defaults for state transfer receiving,
|
||||
# listening ports and so on. Default: address of the first network interface.
|
||||
#wsrep_node_address=
|
||||
|
||||
# Address for incoming client connections. Autodetect by default.
|
||||
#wsrep_node_incoming_address=
|
||||
|
||||
# How many threads will process writesets from other nodes
|
||||
wsrep_slave_threads=1
|
||||
|
||||
# DBUG options for wsrep provider
|
||||
#wsrep_dbug_option
|
||||
|
||||
# Generate fake primary keys for non-PK tables (required for multi-master
|
||||
# and parallel applying operation)
|
||||
wsrep_certify_nonPK=1
|
||||
|
||||
# Maximum number of rows in write set
|
||||
wsrep_max_ws_rows=131072
|
||||
|
||||
# Maximum size of write set
|
||||
wsrep_max_ws_size=1073741824
|
||||
|
||||
# to enable debug level logging, set this to 1
|
||||
wsrep_debug=0
|
||||
|
||||
# convert locking sessions into transactions
|
||||
wsrep_convert_LOCK_to_trx=0
|
||||
|
||||
# how many times to retry deadlocked autocommits
|
||||
wsrep_retry_autocommit=1
|
||||
|
||||
# change auto_increment_increment and auto_increment_offset automatically
|
||||
wsrep_auto_increment_control=1
|
||||
|
||||
# retry autoinc insert, which failed for duplicate key error
|
||||
wsrep_drupal_282555_workaround=0
|
||||
|
||||
# enable "strictly synchronous" semantics for read operations
|
||||
wsrep_causal_reads=0
|
||||
|
||||
# Command to call when node status or cluster membership changes.
|
||||
# Will be passed all or some of the following options:
|
||||
# --status - new status of this node
|
||||
# --uuid - UUID of the cluster
|
||||
# --primary - whether the component is primary or not ("yes"/"no")
|
||||
# --members - comma-separated list of members
|
||||
# --index - index of this node in the list
|
||||
wsrep_notify_cmd=
|
||||
|
||||
##
|
||||
## WSREP State Transfer options
|
||||
##
|
||||
|
||||
# State Snapshot Transfer method
|
||||
wsrep_sst_method=mysqldump
|
||||
|
||||
# Address on THIS node to receive SST at. DON'T SET IT TO DONOR ADDRESS!!!
|
||||
# (SST method dependent. Defaults to the first IP of the first interface)
|
||||
#wsrep_sst_receive_address=<%= ipaddress_eth1 %>:3306
|
||||
|
||||
# SST authentication string. This will be used to send SST to joining nodes.
|
||||
# Depends on SST method. For mysqldump method it is root:<root password>
|
||||
wsrep_sst_auth=<%= mysql_user %>:<%= mysql_password %>
|
||||
|
||||
# Desired SST donor name.
|
||||
#wsrep_sst_donor=
|
||||
|
||||
# Protocol version to use
|
||||
# wsrep_protocol_version=
|
Loading…
Reference in New Issue
Block a user