Sfoglia il codice sorgente

created branch to handle complete mariadb 10.1 galera cluster

pull/1/head
Max Hollingdale 8 anni fa
parent
commit
657caa9467
12 ha cambiato i file con 890 aggiunte e 756 eliminazioni
  1. +0
    -18
      galera/files/bootstrap.sh
  2. +4
    -3
      galera/files/debian.cnf
  3. +13
    -0
      galera/files/debian.cnf_slave
  4. +340
    -0
      galera/files/mariadb.key
  5. +1
    -0
      galera/files/mariadb.list
  6. +199
    -172
      galera/files/my.cnf
  7. +189
    -83
      galera/files/my.cnf.bootstrap
  8. +1
    -87
      galera/files/my.cnf.bootstrap-bak
  9. +0
    -206
      galera/files/mysql
  10. +2
    -2
      galera/map.jinja
  11. +77
    -88
      galera/master.sls
  12. +64
    -97
      galera/slave.sls

+ 0
- 18
galera/files/bootstrap.sh Vedi File

@@ -1,18 +0,0 @@
{%- from "galera/map.jinja" import slave with context -%}
#!/bin/bash

service {{ slave.service }} start

counter=70

while [ $counter -gt 0 ]
do
service {{ slave.service }} status
if [[ $? -eq 0 ]]; then
exit 0
fi
counter=$(( $counter - 1 ))
sleep 2
done

exit 1

+ 4
- 3
galera/files/debian.cnf Vedi File

@@ -1,12 +1,13 @@
{%- from "galera/map.jinja" import master with context %}
[client]
host = localhost
user = debian-sys-maint
password = {{ pillar['mysql_config']['maintenance_password'] }}
password = {{ master.maintenance_password }}
socket = /var/run/mysqld/mysqld.sock

[mysql_upgrade]
host = localhost
user = debian-sys-maint
password = {{ pillar['mysql_config']['maintenance_password'] }}
password = {{ master.maintenance_password }}
socket = /var/run/mysqld/mysqld.sock
basedir = /usr
basedir = /usr

+ 13
- 0
galera/files/debian.cnf_slave Vedi File

@@ -0,0 +1,13 @@
{%- from "galera/map.jinja" import slave with context %}
[client]
host = localhost
user = debian-sys-maint
password = {{ slave.maintenance_password }}
socket = /var/run/mysqld/mysqld.sock

[mysql_upgrade]
host = localhost
user = debian-sys-maint
password = {{ slave.maintenance_password }}
socket = /var/run/mysqld/mysqld.sock
basedir = /usr

+ 340
- 0
galera/files/mariadb.key Vedi File

@@ -0,0 +1,340 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1

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
=6f6Z
-----END PGP PUBLIC KEY BLOCK-----

+ 1
- 0
galera/files/mariadb.list Vedi File

@@ -0,0 +1 @@
deb http://ftp.osuosl.org/pub/mariadb/repo/10.1/ubuntu trusty main

+ 199
- 172
galera/files/my.cnf Vedi File

@@ -9,181 +9,208 @@
{%- from "galera/map.jinja" import slave with context %}
{%- set service = slave %}
{%- endif %}
[MYSQLD]
user=mysql
basedir=/usr/
datadir=/var/lib/mysql
socket={{ service.socket }}
pid_file=mysqld.pid
port=3306
log_error={{ service.log_file }}
log_warnings=2
#log_output=FILE
### INNODB OPTIONS
innodb_buffer_pool_size=9211M
innodb_flush_log_at_trx_commit=2
innodb_file_per_table=1
innodb_data_file_path = ibdata1:100M:autoextend
## You may want to tune the below depending on number of cores and disk sub
innodb_read_io_threads=4
innodb_write_io_threads=4
innodb_io_capacity=200
innodb_doublewrite=1
innodb_log_file_size=1024M
innodb_log_buffer_size=96M
innodb_buffer_pool_instances=8
innodb_log_files_in_group=2
innodb_thread_concurrency=64
#innodb_file_format=barracuda
innodb_flush_method = O_DIRECT
innodb_autoinc_lock_mode=2
## avoid statistics update when doing e.g show tables
innodb_stats_on_metadata=0
default_storage_engine=innodb

bind-address={{ service.bind.address }}

# CHARACTER SET
#collation_server = utf8_unicode_ci
#init_connect='SET NAMES utf8'
#{% set host1 = salt['pillar.get']('galera:master:members:host1') -%}
# MariaDB database server configuration file.
#
# You can copy this file to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

# This will be passed to all mysql clients
# It has been reported that passwords should be enclosed with ticks/quotes
# escpecially if they contain "#" chars...
# Remember to edit /etc/mysql/debian.cnf when changing the socket location.
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
#character_set_server = utf8

# Here is entries for some specific programs
# The following values assume you have at least 32M ram

# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0

[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc_messages_dir = /usr/share/mysql
lc_messages = en_US
skip-external-locking
character_set_server = utf8

# REPLICATION SPECIFIC
#server_id must be unique across all mysql servers participating in replication.
#server_id=SERVERID
skip-host-cache
skip-name-resolve

#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#
# * Fine Tuning
#
max_connections = 2000
connect_timeout = 5
wait_timeout = 600
max_allowed_packet = 16M
thread_cache_size = 128
sort_buffer_size = 4M
bulk_insert_buffer_size = 16M
tmp_table_size = 320M
max_heap_table_size = 320M
#
# * MyISAM
#
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched. On error, make copy and try a repair.
myisam_recover = BACKUP
key_buffer_size = 64K
#open-files-limit = 2000
table_open_cache = 400
myisam_sort_buffer_size = 512M
concurrent_insert = 2
read_buffer_size = 2M
read_rnd_buffer_size = 1M
#
# * Query Cache Configuration
#
# Cache only tiny result sets, so we can fit more in the query cache.
query_cache_limit = 128K
query_cache_size = 0
# for more write intensive setups, set to DEMAND or OFF
#query_cache_type = DEMAND
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# As of 5.1 you can enable the log at runtime!
#general_log_file = /var/log/mysql/mysql.log
#general_log = 1
#
# Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf.
#
# we do want to know about network errors and such
log_warnings = 2
#
# Enable the slow query log to see queries with especially long duration
slow_query_log=1
slow_query_log_file = /var/log/mysql/mariadb-slow.log
long_query_time = 5
#log_slow_rate_limit = 1000
log_slow_verbosity = query_plan

#log-queries-not-using-indexes
#log_slow_admin_statements
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
# other settings you may need to change.
#server-id = 1
#report_host = master1
#auto_increment_increment = 2
#auto_increment_offset = 1
log_bin = /var/log/mysql/mariadb-bin
log_bin_index = /var/log/mysql/mariadb-bin.index
# not fab for performance, but safer
#sync_binlog = 1
expire_logs_days = 10
max_binlog_size = 100M
# slaves
#relay_log = /var/log/mysql/relay-bin
#relay_log_index = /var/log/mysql/relay-bin.index
#relay_log_info_file = /var/log/mysql/relay-bin.info
#log_slave_updates
#read_only
#
# If applications support it, this stricter sql_mode prevents some
# mistakes like inserting invalid dates etc.
#sql_mode = NO_ENGINE_SUBSTITUTION,TRADITIONAL
#
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
default_storage_engine = InnoDB
# you can't just change log file size, requires special procedure
#innodb_log_file_size = 50M
innodb_buffer_pool_size = 12G
innodb_log_buffer_size = 8M
innodb_file_per_table = 1
innodb_open_files = 400
innodb_io_capacity = 4000
innodb_flush_method = O_DIRECT
#
# * Security Features
#
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
#
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
#
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem

#
# * Galera-related settings
#
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
binlog_format=ROW
#log_slave_updates=1
#log_bin=binlog
#relay_log=relay-bin
#expire_logs_days=7
#gtid_mode=ON
#enforce_gtid_consistency=1
# OTHER THINGS, BUFFERS ETC
key_buffer_size = 24M
tmp_table_size = 64M
max_heap_table_size = 64M
max_allowed_packet = 512M
#sort_buffer_size = 256K
#read_buffer_size = 256K
#read_rnd_buffer_size = 512K
#myisam_sort_buffer_size = 8M
skip_name_resolve
memlock=0
sysdate_is_now=1
max_connections={{ service.get('max_connections', 20000) }}
thread_cache_size=512
query_cache_type = 0
query_cache_size = 0
table_open_cache=1024
lower_case_table_names=0
# 5.6 backwards compatibility
#explicit_defaults_for_timestamp=1
##
## WSREP options
##

# Full path to wsrep provider library or 'none'
wsrep_provider={{ service.wsrep_provider }}

wsrep_node_address={{ service.bind.address }}
# Provider specific configuration options
default_storage_engine=InnoDB
innodb_autoinc_lock_mode={{ service.get('innodb_autoinc_lock_mode', 2) }}
innodb_doublewrite=1
query_cache_size=0
bind-address={{ service.bind.address }}
#wsrep_cluster_address=gcomm://
wsrep_cluster_address=gcomm://{% for member in service.members %}{{ member.host}}{% if not loop.last %},{% endif %}{% endfor %}?pc.wait_prim=no
wsrep_provider_options="gcache.size=8192M"
#wsrep_provider_options="pc.bootstrap=true"
# Mandatory settings
#wsrep_provider=
#wsrep_cluster_address=
#binlog_format=row
#default_storage_engine=InnoDB
#innodb_autoinc_lock_mode=2
#bind-address=0.0.0.0
#
# Optional setting
#wsrep_slave_threads=1
innodb_flush_log_at_trx_commit={{ service.get('innodb_flush_log_at_trx_commit', 2) }}
# Note Warning: Setting innodb_flush_log_at_trx_commit to 2 improves performance, it also introduces certain dangers.
# Operating system crashes or power outages can erase the last second of transaction. Although normally you can recover this data from another node,
# it can still be lost entirely in the event that the cluster goes down at the same time, (e.g. a data center power outage).
character_set_server = utf8
[mysqldump]
quick
quote-names
max_allowed_packet = 16M

# Logical cluster name. Should be the same for all nodes.
wsrep_cluster_name="my_wsrep_cluster"

# Group communication system handle
#wsrep_cluster_address=gcomm://10.0.0.3:4567,10.0.0.4:4567,10.0.0.2:4567
wsrep_cluster_address=gcomm://{% for member in service.members %}{{ member.host}}{% if not loop.last %},{% endif %}{% endfor %}

# Human_readable node name (non-unique). Hostname by default.
wsrep_node_name={{ service.bind.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=8

# 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

# Location of the directory with data files. Needed for non-mysqldump
# state snapshot transfers. Defaults to mysql_real_data_home.
#wsrep_data_home_dir=

# 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

# replicate myisam
wsrep_replicate_myisam=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
# ClusterControl currently DOES NOT support wsrep_sst_method=mysqldump
wsrep_sst_method=xtrabackup

# 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=

# 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={{ service.admin.user }}:{{ service.admin.password }}
[mysql]
#no-auto-rehash # faster start of mysql but no tab completition

# Desired SST donor name.
#wsrep_sst_donor=
[isamchk]
key_buffer = 16M

# Protocol version to use
# wsrep_protocol_version=
[MYSQL]
socket={{ service.socket }}
#default_character_set=utf8
[client]
socket={{ service.socket }}
default_character_set=utf8
[mysqldump]
max_allowed_packet = 512M
socket={{ service.socket }}
default_character_set=utf8
[MYSQLD_SAFE]
pid_file=mysqld.pid
log_error={{ service.log_file }}
basedir=/usr/
datadir=/var/lib/mysql
#
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/

+ 189
- 83
galera/files/my.cnf.bootstrap Vedi File

@@ -9,94 +9,200 @@
{%- from "galera/map.jinja" import slave with context %}
{%- set service = slave %}
{%- endif %}
[MYSQLD]
user=mysql
basedir=/usr/
datadir=/var/lib/mysql
socket={{ service.socket }}
pid_file=mysqld.pid
port=3306
log_error={{ service.log_file }}
log_warnings=2
#log_output=FILE
### INNODB OPTIONS
innodb_buffer_pool_size=9211M
innodb_flush_log_at_trx_commit=2
innodb_file_per_table=1
innodb_data_file_path = ibdata1:100M:autoextend
## You may want to tune the below depending on number of cores and disk sub
innodb_read_io_threads=4
innodb_write_io_threads=4
innodb_io_capacity=200
innodb_doublewrite=1
innodb_log_file_size=1024M
innodb_log_buffer_size=96M
innodb_buffer_pool_instances=8
innodb_log_files_in_group=2
innodb_thread_concurrency=64
#innodb_file_format=barracuda
innodb_flush_method = O_DIRECT
innodb_autoinc_lock_mode=2
## avoid statistics update when doing e.g show tables
innodb_stats_on_metadata=0
default_storage_engine=innodb
# MariaDB database server configuration file.
#
# You can copy this file to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

bind-address={{ service.bind.address }}
# This will be passed to all mysql clients
# It has been reported that passwords should be enclosed with ticks/quotes
# escpecially if they contain "#" chars...
# Remember to edit /etc/mysql/debian.cnf when changing the socket location.
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
#character_set_server = utf8

# CHARACTER SET
#collation_server = utf8_unicode_ci
#init_connect='SET NAMES utf8'
# Here is entries for some specific programs
# The following values assume you have at least 32M ram

# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0

[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc_messages_dir = /usr/share/mysql
lc_messages = en_US
skip-external-locking
character_set_server = utf8
skip-host-cache
skip-name-resolve
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#
# * Fine Tuning
#
max_connections = {{ service.get('max_connections', 20000) }}
connect_timeout = 5
wait_timeout = 600
max_allowed_packet = 16M
thread_cache_size = 128
sort_buffer_size = 4M
bulk_insert_buffer_size = 16M
tmp_table_size = 320M
max_heap_table_size = 320M
#
# * MyISAM
#
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched. On error, make copy and try a repair.
myisam_recover = BACKUP
key_buffer_size = 64K
#open-files-limit = 2000
table_open_cache = 400
myisam_sort_buffer_size = 512M
concurrent_insert = 2
read_buffer_size = 2M
read_rnd_buffer_size = 1M
#
# * Query Cache Configuration
#
# Cache only tiny result sets, so we can fit more in the query cache.
query_cache_limit = 128K
query_cache_size = 0
# for more write intensive setups, set to DEMAND or OFF
#query_cache_type = DEMAND
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# As of 5.1 you can enable the log at runtime!
#general_log_file = /var/log/mysql/mysql.log
#general_log = 1
#
# Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf.
#
# we do want to know about network errors and such
log_warnings = 2
#
# Enable the slow query log to see queries with especially long duration
slow_query_log=1
slow_query_log_file = /var/log/mysql/mariadb-slow.log
long_query_time = 5
#log_slow_rate_limit = 1000
log_slow_verbosity = query_plan

# REPLICATION SPECIFIC
#server_id must be unique across all mysql servers participating in replication.
#server_id=SERVERID
binlog_format=ROW
#log_slave_updates=1
#log_bin=binlog
#relay_log=relay-bin
#expire_logs_days=7
#gtid_mode=ON
#enforce_gtid_consistency=1
# OTHER THINGS, BUFFERS ETC
key_buffer_size = 24M
tmp_table_size = 64M
max_heap_table_size = 64M
max_allowed_packet = 512M
#sort_buffer_size = 256K
#read_buffer_size = 256K
#read_rnd_buffer_size = 512K
#myisam_sort_buffer_size = 8M
skip_name_resolve
memlock=0
sysdate_is_now=1
max_connections={{ service.get('max_connections', 20000) }}
thread_cache_size=512
query_cache_type = 0
query_cache_size = 0
table_open_cache=1024
lower_case_table_names=0
# 5.6 backwards compatibility
#explicit_defaults_for_timestamp=1
#log-queries-not-using-indexes
#log_slow_admin_statements
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
# other settings you may need to change.
#server-id = 1
#report_host = master1
#auto_increment_increment = 2
#auto_increment_offset = 1
log_bin = /var/log/mysql/mariadb-bin
log_bin_index = /var/log/mysql/mariadb-bin.index
# not fab for performance, but safer
#sync_binlog = 1
expire_logs_days = 10
max_binlog_size = 100M
# slaves
#relay_log = /var/log/mysql/relay-bin
#relay_log_index = /var/log/mysql/relay-bin.index
#relay_log_info_file = /var/log/mysql/relay-bin.info
#log_slave_updates
#read_only
#
# If applications support it, this stricter sql_mode prevents some
# mistakes like inserting invalid dates etc.
#sql_mode = NO_ENGINE_SUBSTITUTION,TRADITIONAL
#
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
default_storage_engine = InnoDB
# you can't just change log file size, requires special procedure
#innodb_log_file_size = 50M
innodb_buffer_pool_size = 12G
innodb_log_buffer_size = 8M
innodb_file_per_table = 1
innodb_open_files = 4000
innodb_io_capacity = 400
innodb_flush_method = O_DIRECT
#
# * Security Features
#
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
#
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
#
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem

# Desired SST donor name.
#wsrep_sst_donor=
#
# * Galera-related settings
#
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode={{ service.get('innodb_autoinc_lock_mode', 2) }}
innodb_doublewrite=1
query_cache_size=0
bind-address={{ service.bind.address }}
wsrep_cluster_address=gcomm://
wsrep_provider_options="gcache.size=8192M"
#wsrep_provider_options="pc.bootstrap=true"
#
# Optional setting
#wsrep_slave_threads=1
innodb_flush_log_at_trx_commit={{ service.get('innodb_flush_log_at_trx_commit', 2) }}
# Note Warning: Setting innodb_flush_log_at_trx_commit to 2 improves performance, it also introduces certain dangers.
# Operating system crashes or power outages can erase the last second of transaction. Although normally you can recover this data from another node,
# it can still be lost entirely in the event that the cluster goes down at the same time, (e.g. a data center power outage).
character_set_server = utf8

# Protocol version to use
# wsrep_protocol_version=
[MYSQL]
socket={{ service.socket }}
#default_character_set=utf8
[client]
socket={{ service.socket }}
default_character_set=utf8
[mysqldump]
max_allowed_packet = 512M
socket={{ service.socket }}
default_character_set=utf8
[MYSQLD_SAFE]
pid_file=mysqld.pid
log_error={{ service.log_file }}
basedir=/usr/
datadir=/var/lib/mysql
quick
quote-names
max_allowed_packet = 16M

[mysql]
#no-auto-rehash # faster start of mysql but no tab completition

[isamchk]
key_buffer = 16M

#
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/


galera/files/my.cnf.init → galera/files/my.cnf.bootstrap-bak Vedi File

@@ -78,93 +78,7 @@ table_open_cache=1024
lower_case_table_names=0
# 5.6 backwards compatibility
#explicit_defaults_for_timestamp=1
##
## WSREP options
##

# Full path to wsrep provider library or 'none'
wsrep_provider={{ service.wsrep_provider }}

wsrep_node_address={{ service.bind.address }}
# Provider specific configuration options
wsrep_provider_options="gcache.size=8192M"

# Logical cluster name. Should be the same for all nodes.
wsrep_cluster_name="my_wsrep_cluster"

# Group communication system handle
wsrep_cluster_address=gcomm://

# Human_readable node name (non-unique). Hostname by default.
wsrep_node_name={{ service.bind.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=8

# 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

# Location of the directory with data files. Needed for non-mysqldump
# state snapshot transfers. Defaults to mysql_real_data_home.
#wsrep_data_home_dir=

# 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

# replicate myisam
wsrep_replicate_myisam=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
# ClusterControl currently DOES NOT support wsrep_sst_method=mysqldump
wsrep_sst_method=xtrabackup

# 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=

# 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={{ service.admin.user }}:{{ service.admin.password }}
#

# Desired SST donor name.
#wsrep_sst_donor=

+ 0
- 206
galera/files/mysql Vedi File

@@ -1,206 +0,0 @@
#!/bin/bash
#
### BEGIN INIT INFO
# Provides: mysql
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Should-Start: $network $named $time
# Should-Stop: $network $named $time
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start and stop the mysql database server daemon
# Description: Controls the main MySQL database server daemon "mysqld"
# and its wrapper script "mysqld_safe".
### END INIT INFO
#
set -e
set -u
${DEBIAN_SCRIPT_DEBUG:+ set -v -x}

test -x /usr/sbin/mysqld || exit 0

. /lib/lsb/init-functions

SELF=$(cd $(dirname $0); pwd -P)/$(basename $0)
CONF=/etc/mysql/my.cnf
# MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"

# priority can be overriden and "-s" adds output to stderr
ERR_LOGGER="logger -p daemon.err -t /etc/init.d/mysql -i"

# Safeguard (relative paths, core dumps..)
cd /
umask 077

# mysqladmin likes to read /root/.my.cnf. This is usually not what I want
# as many admins e.g. only store a password without a username there and
# so break my scripts.
export HOME=/etc/mysql/

## Fetch a particular option from mysql's invocation.
#
# Usage: void mysqld_get_param option
mysqld_get_param() {
/usr/sbin/mysqld --print-defaults \
| tr " " "\n" \
| grep -- "--$1" \
| tail -n 1 \
| cut -d= -f2
}

# Determine parameters once per script invocation
datadir=`mysqld_get_param datadir`
[ -z "$datadir" ] && datadir="/var/lib/mysql"
pidfile=`mysqld_get_param pid_file`
#[ -z "$pidfile" ] && pidfile="$datadir/$(hostname).pid"

#JPavlik tcp cloud fix for init script
pidfile="/var/lib/mysql/mysqld.pid"
## Do some sanity checks before even trying to start mysqld.
sanity_checks() {
# check for config file
if [ ! -r /etc/mysql/my.cnf ]; then
log_warning_msg "$0: WARNING: /etc/mysql/my.cnf cannot be read. See README.Debian.gz"
echo "WARNING: /etc/mysql/my.cnf cannot be read. See README.Debian.gz" | $ERR_LOGGER
fi

# check for diskspace shortage
if LC_ALL=C BLOCKSIZE= df --portability $datadir/. | tail -n 1 | awk '{ exit ($4>4096) }'; then
log_failure_msg "$0: ERROR: The partition with $datadir is too full!"
echo "ERROR: The partition with $datadir is too full!" | $ERR_LOGGER
exit 1
fi
}

## Checks if there is a server running and if so if it is accessible.
#
# check_alive insists on a pingable server
# check_dead also fails if there is a lost mysqld in the process list
#
# Usage: boolean mysqld_status [check_alive|check_dead] [warn|nowarn]
mysqld_status() {
# ping_output=`$MYADMIN ping 2>&1`; ping_alive=$(( ! $? ))

ps_alive=0
if [ -f "$pidfile" ] && ps `cat $pidfile` >/dev/null 2>&1; then ps_alive=1; fi
if [ "$1" = "check_alive" -a $ps_alive = 1 ] ||
[ "$1" = "check_dead" -a $ps_alive = 0 ]; then
return 0 # EXIT_SUCCESS
else
if [ "$2" = "warn" ]; then
# echo -e "$ps_alive processes alive and '$MYADMIN ping' resulted in\n$ping_output\n" | $ERR_LOGGER -p daemon.debug
echo -e "$ps_alive processes alive\n" | $ERR_LOGGER -p daemon.debug
fi
return 1 # EXIT_FAILURE
fi
}


#
# main()
#

cmd=${1:-''}
[ $# -ge 1 ] && shift
other_args="$*"

case "$cmd" in
'start')
sanity_checks;
# Start daemon
log_daemon_msg "Starting MySQL database server" "mysqld"
if mysqld_status check_alive nowarn; then
log_progress_msg "already running"
log_end_msg 0
else
# Could be removed during boot
test -e /var/run/mysqld || install -m 755 -o mysql -g root -d /var/run/mysqld

# Check for additional wsrep options
WSREP_OPTS=${WSREP_OPTS:-""}
WSREP_PROVIDER=${WSREP_PROVIDER:-""}
WSREP_CLUSTER_ADDRESS=${WSREP_CLUSTER_ADDRESS:-""}
test -n "$WSREP_PROVIDER" && \
WSREP_OPTS="$WSREP_OPTS --wsrep_provider=$WSREP_PROVIDER"
test -n "$WSREP_CLUSTER_ADDRESS" && \
WSREP_OPTS="$WSREP_OPTS --wsrep_cluster_address=$WSREP_CLUSTER_ADDRESS"

# Start MySQL!.
/usr/bin/mysqld_safe $WSREP_OPTS $other_args > /dev/null 2>&1 &

# 6s was reported in #352070 to be too few when using ndbcluster
for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14; do
sleep 1
if mysqld_status check_alive nowarn ; then break; fi
log_progress_msg "."
done
if mysqld_status check_alive warn; then
log_end_msg 0
# Now start mysqlcheck or whatever the admin wants.
# output=$(/etc/mysql/debian-start)
# [ -n "$output" ] && log_action_msg "$output"
else
log_end_msg 1
log_failure_msg "Please take a look at the syslog"
fi
fi
;;

'stop')
# * As a passwordless mysqladmin (e.g. via ~/.my.cnf) must be possible
# at least for cron, we can rely on it here, too. (although we have
# to specify it explicit as e.g. sudo environments points to the normal
# users home and not /root)
log_daemon_msg "Stopping MySQL database server" "mysqld"
if ! mysqld_status check_dead nowarn; then
log_daemon_msg "Killing MySQL database server by signal" "mysqld"
pid=$(cat $pidfile || echo 0)
if [ $pid -eq 0 ]; then
log_failure_msg "Failed to get MySQL server pid"
exit 1
fi
kill -15 $pid
server_down=
for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do
log_progress_msg "."
sleep 1
if mysqld_status check_dead nowarn; then server_down=1; break; fi
done
fi

if ! mysqld_status check_dead warn; then
log_end_msg 1
log_failure_msg "Please stop MySQL manually and read /usr/share/doc/mysql-server-5.1/README.Debian.gz!"
exit -1
else
log_end_msg 0
fi
;;

'restart')
set +e; $SELF stop; set -e
$SELF start $other_args
;;

'reload'|'force-reload')
log_daemon_msg "Reloading MySQL database server" "mysqld"
$MYADMIN reload
log_end_msg 0
;;

'status')
if mysqld_status check_alive nowarn; then
# log_action_msg "$($MYADMIN version)"
log_action_msg "MySQL is running (PID: $(cat $pidfile))"
else
log_action_msg "MySQL is stopped."
exit 3
fi
;;

*)
echo "Usage: $SELF start|stop|restart|reload|force-reload|status"
exit 1
;;
esac


+ 2
- 2
galera/map.jinja Vedi File

@@ -1,7 +1,7 @@

{%- set master = salt['grains.filter_by']({
'Debian': {
'pkgs': ['mysql-server-wsrep', 'galera', 'rsync', 'python-mysqldb', 'libmysqlclient18', 'psmisc', 'netcat', 'percona-xtrabackup-21', 'socat'],
'pkgs': ['mariadb-server-10.1', 'galera-3', 'libmariadbclient18', 'libmysqlclient18', 'mariadb-client-10.1', 'mariadb-client-core-10.1', 'mariadb-common', 'mariadb-server-core-10.1', 'mysql-common', 'python-mysqldb'],
'service': 'mysql',
'wsrep_provider': '/usr/lib/galera/libgalera_smm.so',
'log_file': '/var/log/mysql.log',
@@ -21,7 +21,7 @@

{%- set slave = salt['grains.filter_by']({
'Debian': {
'pkgs': ['mysql-server-wsrep', 'galera', 'rsync', 'python-mysqldb', 'libmysqlclient18', 'psmisc', 'netcat', 'percona-xtrabackup-21', 'socat'],
'pkgs': ['mariadb-server-10.1', 'galera-3', 'libmariadbclient18', 'libmysqlclient18', 'mariadb-client-10.1', 'mariadb-client-core-10.1', 'mariadb-common', 'mariadb-server-core-10.1', 'mysql-common', 'python-mysqldb'],
'service': 'mysql',
'wsrep_provider': '/usr/lib/galera/libgalera_smm.so',
'log_file': '/var/log/mysql.log',

+ 77
- 88
galera/master.sls Vedi File

@@ -21,71 +21,90 @@ xtrabackup_repo_fix:
- pkg: galera_packages
{%- endif %}

galera_packages:
pkg.installed:
- names: {{ master.pkgs }}
- refresh: true

galera_log_dir:
file.directory:
- name: /var/log/mysql
- makedirs: true
- mode: 755
- require:
- pkg: galera_packages

{%- if grains.os_family == 'Debian' %}
galera_run_dir:
file.directory:
- name: /var/run/mysqld
- makedirs: true
- mode: 755
- user: mysql
- group: root
- require:
- pkg: galera_packages
{%- endif %}

galera_init_script:
mariadb_repo:
file.managed:
- name: /etc/init.d/mysql
- source: salt://galera/files/mysql
- mode: 755
- require:
- pkg: galera_packages
- name: /etc/apt/sources.list.d/mariadb_10-1.list
- source: salt://galera/files/mariadb.list

galera_bootstrap_script:
mariadb_key:
file.managed:
- name: /usr/local/sbin/galera_bootstrap.sh
- mode: 755
- source: salt://galera/files/bootstrap.sh
- template: jinja
- name: /root/mariadb.key
- source: salt://galera/files/mariadb.key
- mode: 660
- unless: 'apt-key list | grep mariadb'

{%- if salt['cmd.run']('test -e /var/lib/mysql/.galera_bootstrap; echo $?') != '0' %}
install_mariadb_key:
cmd.run:
- name: 'cat /root/mariadb.key | apt-key add -'
- require:
- file: mariadb_key
- file: mariadb_repo

{%- endif %}

galera_bootstrap_temp_config:
mariadb_etc_dir:
file.directory:
- name: /etc/mysql
- makedirs: true
- mode: 755

mariadb-common-pkgs:
pkg.installed:
- names:
- mariadb-common

galera_bootstrap_config:
file.managed:
- name: {{ master.config }}
- source: salt://galera/files/my.cnf.bootstrap
- mode: 644
- template: jinja
- require:
- require:
- pkg: mariadb-common-pkgs
- file: mariadb_etc_dir
- unless: 'mysql --user="root" --password="{{ salt['pillar.get']('galera:master:admin:password') }}" --database="mysql" --execute="show status" | grep wsrep_cluster_size | grep -E "2|3"'

galera_debian_config:
file.managed:
- name: /etc/mysql/debian.cnf
- source: salt://galera/files/debian.cnf
- mode: 644
- template: jinja
- require:
- pkg: mariadb-common-pkgs

galera_packages:
pkg.installed:
- names: {{ master.pkgs }}
- refresh: true
- require:
- cmd: install_mariadb_key
- file: galera_bootstrap_config
- file: galera_debian_config

galera_log_dir:
file.directory:
- name: /var/log/mysql
- makedirs: true
- mode: 755
- require:
- pkg: galera_packages
- file: galera_init_script

galera_bootstrap_start_service:
cmd.run:
- name: /usr/local/sbin/galera_bootstrap.sh
service.running:
- name: mysql
- enable: True
- require:
- file: galera_bootstrap_temp_config
- file: galera_run_dir
- file: galera_bootstrap_script
- file: galera_bootstrap_config

galera_bootstrap_set_root_password:
cmd.run:
- name: mysqladmin password "{{ master.admin.password }}"
- require:
- cmd: galera_bootstrap_start_service
- service: galera_bootstrap_start_service
- unless: 'mysql --user="root" --password="{{ salt['pillar.get']('galera:master:admin:password') }}" --database="mysql" --execute="show tables"'

mysql_bootstrap_update_maint_password:
cmd.run:
@@ -93,51 +112,21 @@ mysql_bootstrap_update_maint_password:
- require:
- cmd: galera_bootstrap_set_root_password

galera_bootstrap_stop_service:
service.dead:
- name: {{ master.service }}
- require:
- cmd: mysql_bootstrap_update_maint_password

galera_bootstrap_init_config:
file.managed:
- name: {{ master.config }}
- source: salt://galera/files/my.cnf.init
- mode: 644
- template: jinja
- require:
- service: galera_bootstrap_stop_service

galera_bootstrap_start_service_final:
cmd.run:
- name: /usr/local/sbin/galera_bootstrap.sh
- require:
- file: galera_bootstrap_init_config
- file: galera_bootstrap_script

galera_bootstrap_finish_flag:
file.touch:
- name: /var/lib/mysql/.galera_bootstrap
- require:
- cmd: galera_bootstrap_start_service_final
- watch_in:
- file: galera_config

{%- endif %}
galera_restart_bootstrap:
service.running:
- name: mysql
- enable: True
- watch:
- file: galera_normal_config

galera_config:
galera_normal_config:
file.managed:
- name: {{ master.config }}
- source: salt://galera/files/my.cnf
- mode: 644
- template: jinja
- require_in:
- service: galera_service

galera_service:
service.running:
- name: {{ master.service }}
- enable: true
- reload: true
- name: /etc/mysql/my.cnf
- source: salt://galera/files/my.cnf
- mode: 644
- template: jinja
- require:
- pkg: galera_packages
- onlyif: 'mysql --user="root" --password="{{ salt['pillar.get']('galera:master:admin:password') }}" --database="mysql" --execute="show status" | grep wsrep_cluster_size | grep -E "2|3"'

{%- endif %}

+ 64
- 97
galera/slave.sls Vedi File

@@ -21,71 +21,85 @@ xtrabackup_repo_fix:
- pkg: galera_packages
{%- endif %}

galera_packages:
pkg.installed:
- names: {{ slave.pkgs }}
- refresh: true
{%- if grains.os_family == 'Debian' %}
mariadb_repo:
file.managed:
- name: /etc/apt/sources.list.d/mariadb_10-1.list
- source: salt://galera/files/mariadb.list

galera_log_dir:
file.directory:
- name: /var/log/mysql
- makedirs: true
- mode: 755
- require:
- pkg: galera_packages
mariadb_key:
file.managed:
- name: /root/mariadb.key
- source: salt://galera/files/mariadb.key
- mode: 660

{%- if grains.os_family == 'Debian' %}
galera_run_dir:
file.directory:
- name: /var/run/mysqld
- makedirs: true
- mode: 755
- user: mysql
- group: root
install_mariadb_key:
cmd.run:
- name: 'cat /root/mariadb.key | apt-key add -'
- require:
- pkg: galera_packages
- file: mariadb_key
- file: mariadb_repo
{%- endif %}

galera_init_script:
file.managed:
- name: /etc/init.d/mysql
- source: salt://galera/files/mysql
- mode: 755
- require:
- pkg: galera_packages
mariadb_etc_dir:
file.directory:
- name: /etc/mysql
- makedirs: true
- mode: 755

galera_bootstrap_script:
mariadb-common-pkgs:
pkg.installed:
- names:
- mariadb-common

galera_config:
file.managed:
- name: /usr/local/sbin/galera_bootstrap.sh
- mode: 755
- source: salt://galera/files/bootstrap.sh
- template: jinja
- name: /etc/mysql/my.cnf
- source: salt://galera/files/my.cnf
- mode: 644
- template: jinja
- require:
- pkg: mariadb-common-pkgs

galera_debian_config:
file.managed:
- name: /etc/mysql/debian.cnf
- source: salt://galera/files/debian.cnf_slave
- mode: 644
- template: jinja
- require:
- pkg: mariadb-common-pkgs

{%- if salt['cmd.run']('test -e /var/lib/mysql/.galera_bootstrap; echo $?') != '0' %}
galera_packages:
pkg.installed:
- names: {{ slave.pkgs }}
- refresh: true
- require:
- cmd: install_mariadb_key
- file: galera_config
- file: galera_debian_config

galera_bootstrap_temp_config:
file.managed:
- name: {{ slave.config }}
- source: salt://galera/files/my.cnf.bootstrap
- mode: 644
- template: jinja
- require:
- pkg: galera_packages
- file: galera_init_script
galera_log_dir:
file.directory:
- name: /var/log/mysql
- makedirs: true
- mode: 755
- require:
- pkg: galera_packages

galera_bootstrap_start_service:
cmd.run:
- name: /usr/local/sbin/galera_bootstrap.sh
- require:
- file: galera_bootstrap_temp_config
- file: galera_run_dir
- file: galera_bootstrap_script
galera_start_service:
service.running:
- name: mysql
- enable: True
- require:
- file: galera_config

galera_bootstrap_set_root_password:
cmd.run:
- name: mysqladmin password "{{ slave.admin.password }}"
- require:
- cmd: galera_bootstrap_start_service
- service: galera_start_service
- unless: 'mysql --user="root" --password="{{ salt['pillar.get']('galera:slave:admin:password') }}" --database="mysql" --execute="show tables"'

mysql_bootstrap_update_maint_password:
cmd.run:
@@ -93,51 +107,4 @@ mysql_bootstrap_update_maint_password:
- require:
- cmd: galera_bootstrap_set_root_password

galera_bootstrap_stop_service:
service.dead:
- name: {{ slave.service }}
- require:
- cmd: mysql_bootstrap_update_maint_password

galera_bootstrap_init_config:
file.managed:
- name: {{ slave.config }}
- source: salt://galera/files/my.cnf
- mode: 644
- template: jinja
- require:
- service: galera_bootstrap_stop_service

galera_bootstrap_start_service_final:
cmd.run:
- name: /usr/local/sbin/galera_bootstrap.sh
- require:
- file: galera_bootstrap_init_config
- file: galera_bootstrap_script

galera_bootstrap_finish_flag:
file.touch:
- name: /var/lib/mysql/.galera_bootstrap
- require:
- cmd: galera_bootstrap_start_service_final
- watch_in:
- file: galera_config

{%- endif %}

galera_config:
file.managed:
- name: {{ slave.config }}
- source: salt://galera/files/my.cnf
- mode: 644
- template: jinja
- require_in:
- service: galera_service

galera_service:
service.running:
- name: {{ slave.service }}
- enable: true
- reload: true

{%- endif %}

Loading…
Annulla
Salva