@@ -0,0 +1,147 @@ | |||
====== | |||
Galera | |||
====== | |||
Galera Cluster for MySQL is a true Multimaster Cluster based on synchronous replication. Galera Cluster is an easy-to-use, high-availability solution, which provides high system uptime, no data loss and scalability for future growth. | |||
Sample pillars | |||
============== | |||
Galera cluster master node | |||
.. code-block:: yaml | |||
galera: | |||
master: | |||
enabled: true | |||
name: openstack | |||
bind: | |||
address: 192.168.0.1 | |||
port: 3306 | |||
members: | |||
- host: 192.168.0.1 | |||
port: 4567 | |||
- host: 192.168.0.2 | |||
port: 4567 | |||
admin: | |||
user: root | |||
password: pass | |||
database: | |||
name: | |||
encoding: 'utf8' | |||
users: | |||
- name: 'username' | |||
password: 'password' | |||
host: 'localhost' | |||
rights: 'all privileges' | |||
Galera cluster slave node | |||
.. code-block:: yaml | |||
galera: | |||
slave: | |||
enabled: true | |||
name: openstack | |||
bind: | |||
address: 192.168.0.2 | |||
port: 3306 | |||
members: | |||
- host: 192.168.0.1 | |||
port: 4567 | |||
- host: 192.168.0.2 | |||
port: 4567 | |||
admin: | |||
user: root | |||
password: pass | |||
Usage | |||
===== | |||
MySQL Galera check sripts | |||
.. code-block:: bash | |||
mysql> SHOW STATUS LIKE 'wsrep%'; | |||
mysql> SHOW STATUS LIKE 'wsrep_cluster_size' ;" | |||
Galera monitoring command, performed from extra server | |||
.. code-block:: bash | |||
garbd -a gcomm://ipaddrofone:4567 -g my_wsrep_cluster -l /tmp/1.out -d | |||
1. salt-call state.sls mysql | |||
2. Comment everything starting wsrep* (wsrep_provider, wsrep_cluster, wsrep_sst) | |||
3. service mysql start | |||
4. run on each node mysql_secure_install and filling root password. | |||
.. code-block:: bash | |||
Enter current password for root (enter for none): | |||
OK, successfully used password, moving on... | |||
Setting the root password ensures that nobody can log into the MySQL | |||
root user without the proper authorisation. | |||
Set root password? [Y/n] y | |||
New password: | |||
Re-enter new password: | |||
Password updated successfully! | |||
Reloading privilege tables.. | |||
... Success! | |||
By default, a MySQL installation has an anonymous user, allowing anyone | |||
to log into MySQL without having to have a user account created for | |||
them. This is intended only for testing, and to make the installation | |||
go a bit smoother. You should remove them before moving into a | |||
production environment. | |||
Remove anonymous users? [Y/n] y | |||
... Success! | |||
Normally, root should only be allowed to connect from 'localhost'. This | |||
ensures that someone cannot guess at the root password from the network. | |||
Disallow root login remotely? [Y/n] n | |||
... skipping. | |||
By default, MySQL comes with a database named 'test' that anyone can | |||
access. This is also intended only for testing, and should be removed | |||
before moving into a production environment. | |||
Remove test database and access to it? [Y/n] y | |||
- Dropping test database... | |||
... Success! | |||
- Removing privileges on test database... | |||
... Success! | |||
Reloading the privilege tables will ensure that all changes made so far | |||
will take effect immediately. | |||
Reload privilege tables now? [Y/n] y | |||
... Success! | |||
Cleaning up... | |||
5. service mysql stop | |||
6. uncomment all wsrep* lines except first server, where leave only in my.cnf wsrep_cluster_address='gcomm://'; | |||
7. start first node | |||
8. Start third node which is connected to first one | |||
9. Start second node which is connected to third one | |||
10. After starting cluster, it must be change cluster address at first starting node without restart database and change config my.cnf. | |||
.. code-block:: bash | |||
mysql> SET GLOBAL wsrep_cluster_address='gcomm://10.0.0.2'; | |||
Read more | |||
========= | |||
* https://github.com/CaptTofu/ansible-galera | |||
* http://www.sebastien-han.fr/blog/2012/04/15/active-passive-failover-cluster-on-a-mysql-galera-cluster-with-haproxy-lsb-agent/ | |||
* http://opentodo.net/2012/12/mysql-multi-master-replication-with-galera/ | |||
* http://www.codership.com/wiki/doku.php | |||
* Best one: - http://www.sebastien-han.fr/blog/2012/04/01/mysql-multi-master-replication-with-galera/ |
@@ -0,0 +1,12 @@ | |||
[client] | |||
host = localhost | |||
user = debian-sys-maint | |||
password = {{ pillar['mysql_config']['maintenance_password'] }} | |||
socket = /var/run/mysqld/mysqld.sock | |||
[mysql_upgrade] | |||
host = localhost | |||
user = debian-sys-maint | |||
password = {{ pillar['mysql_config']['maintenance_password'] }} | |||
socket = /var/run/mysqld/mysqld.sock | |||
basedir = /usr |
@@ -0,0 +1,189 @@ | |||
# All files in this package is subject to the GPL v2 license | |||
# More information is in the COPYING file in the top directory of this package. | |||
# Copyright (C) 2011 severalnines.com | |||
{%- if pillar.galera.master is defined %} | |||
{%- from "galera/map.jinja" import master with context %} | |||
{%- set service = master %} | |||
{%- endif %} | |||
{%- if pillar.galera.slave is defined %} | |||
{%- from "galera/map.jinja" import slave with context %} | |||
{%- set service = slave %} | |||
{%- endif %} | |||
[MYSQLD] | |||
user=mysql | |||
basedir=/usr/ | |||
datadir=/var/lib/mysql | |||
socket=/var/run/mysqld/mysqld.sock | |||
pid_file=mysqld.pid | |||
port=3306 | |||
log_error=/var/log/mysql.log | |||
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' | |||
character_set_server = utf8 | |||
# 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=2000 | |||
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=/usr/lib/galera/libgalera_smm.so | |||
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://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 }} | |||
# Desired SST donor name. | |||
#wsrep_sst_donor= | |||
# Protocol version to use | |||
# wsrep_protocol_version= | |||
[MYSQL] | |||
socket=/var/run/mysqld/mysqld.sock | |||
#default_character_set=utf8 | |||
[client] | |||
socket=/var/run/mysqld/mysqld.sock | |||
default_character_set=utf8 | |||
[mysqldump] | |||
max_allowed_packet = 512M | |||
socket=/var/run/mysqld/mysqld.sock | |||
default_character_set=utf8 | |||
[MYSQLD_SAFE] | |||
pid_file=mysqld.pid | |||
log_error=/var/log/mysql.log | |||
basedir=/usr/ | |||
datadir=/var/lib/mysql |
@@ -0,0 +1,102 @@ | |||
# All files in this package is subject to the GPL v2 license | |||
# More information is in the COPYING file in the top directory of this package. | |||
# Copyright (C) 2011 severalnines.com | |||
{%- if pillar.galera.master is defined %} | |||
{%- from "galera/map.jinja" import master with context %} | |||
{%- set service = master %} | |||
{%- endif %} | |||
{%- if pillar.galera.slave is defined %} | |||
{%- from "galera/map.jinja" import slave with context %} | |||
{%- set service = slave %} | |||
{%- endif %} | |||
[MYSQLD] | |||
user=mysql | |||
basedir=/usr/ | |||
datadir=/var/lib/mysql | |||
socket=/var/run/mysqld/mysqld.sock | |||
pid_file=mysqld.pid | |||
port=3306 | |||
log_error=/var/log/mysql.log | |||
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' | |||
character_set_server = utf8 | |||
# 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=2000 | |||
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 | |||
# | |||
# Desired SST donor name. | |||
#wsrep_sst_donor= | |||
# Protocol version to use | |||
# wsrep_protocol_version= | |||
[MYSQL] | |||
socket=/var/run/mysqld/mysqld.sock | |||
#default_character_set=utf8 | |||
[client] | |||
socket=/var/run/mysqld/mysqld.sock | |||
default_character_set=utf8 | |||
[mysqldump] | |||
max_allowed_packet = 512M | |||
socket=/var/run/mysqld/mysqld.sock | |||
default_character_set=utf8 | |||
[MYSQLD_SAFE] | |||
pid_file=mysqld.pid | |||
log_error=/var/log/mysql.log | |||
basedir=/usr/ | |||
datadir=/var/lib/mysql |
@@ -0,0 +1,188 @@ | |||
# All files in this package is subject to the GPL v2 license | |||
# More information is in the COPYING file in the top directory of this package. | |||
# Copyright (C) 2011 severalnines.com | |||
{%- if pillar.galera.master is defined %} | |||
{%- from "galera/map.jinja" import master with context %} | |||
{%- set service = master %} | |||
{%- endif %} | |||
{%- if pillar.galera.slave is defined %} | |||
{%- from "galera/map.jinja" import slave with context %} | |||
{%- set service = slave %} | |||
{%- endif %} | |||
[MYSQLD] | |||
user=mysql | |||
basedir=/usr/ | |||
datadir=/var/lib/mysql | |||
socket=/var/run/mysqld/mysqld.sock | |||
pid_file=mysqld.pid | |||
port=3306 | |||
log_error=/var/log/mysql.log | |||
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' | |||
character_set_server = utf8 | |||
# 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=2000 | |||
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=/usr/lib/galera/libgalera_smm.so | |||
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= | |||
# Protocol version to use | |||
# wsrep_protocol_version= | |||
[MYSQL] | |||
socket=/var/run/mysqld/mysqld.sock | |||
#default_character_set=utf8 | |||
[client] | |||
socket=/var/run/mysqld/mysqld.sock | |||
default_character_set=utf8 | |||
[mysqldump] | |||
max_allowed_packet = 512M | |||
socket=/var/run/mysqld/mysqld.sock | |||
default_character_set=utf8 | |||
[MYSQLD_SAFE] | |||
pid_file=mysqld.pid | |||
log_error=/var/log/mysql.log | |||
basedir=/usr/ | |||
datadir=/var/lib/mysql |
@@ -0,0 +1,10 @@ | |||
{%- if pillar.galera is defined %} | |||
include: | |||
{%- if pillar.galera.master is defined %} | |||
- galera.master | |||
{%- endif %} | |||
{%- if pillar.galera.slave is defined %} | |||
- galera.slave | |||
{%- endif %} | |||
{%- endif %} |
@@ -0,0 +1,24 @@ | |||
{%- set master = salt['grains.filter_by']({ | |||
'Debian': { | |||
'pkgs': ['mysql-server-wsrep', 'galera', 'rsync', 'python-mysqldb', 'libmysqlclient18', 'psmisc', 'netcat', 'percona-xtrabackup-21', 'socat'], | |||
'service': 'mysql', | |||
'config': '/etc/mysql/conf.d/wsrep.cnf', | |||
}, | |||
'RedHat': { | |||
'pkgs': ['MySQL-server', 'galera', 'MySQL-client', 'MySQL-python', 'rsync'], | |||
'service': 'mysql', | |||
}, | |||
}, merge=salt['pillar.get']('galera:master')) %} | |||
{%- set slave = salt['grains.filter_by']({ | |||
'Debian': { | |||
'pkgs': ['mysql-server-wsrep', 'galera', 'rsync', 'python-mysqldb', 'libmysqlclient18', 'psmisc', 'netcat', 'percona-xtrabackup-21', 'socat'], | |||
'service': 'mysql', | |||
'config': '/etc/mysql/conf.d/wsrep.cnf', | |||
}, | |||
'RedHat': { | |||
'pkgs': ['MySQL-server', 'galera', 'MySQL-client', 'MySQL-python', 'rsync'], | |||
'service': 'mysql', | |||
}, | |||
}, merge=salt['pillar.get']('galera:slave')) %} |
@@ -0,0 +1,88 @@ | |||
{%- from "galera/map.jinja" import master with context %} | |||
{%- if master.enabled %} | |||
{%- if grains.os_family == "Debian2" %} | |||
galera_debconf: | |||
debconf.set: | |||
- name: mariadb-galera-server | |||
- data: | |||
'mysql-server/root_password': {'type':'string','value':'{{ server.admin.password }}'} | |||
'mysql-server/root_password_again': {'type':'string','value':'{{ server.admin.password }}'} | |||
- require_in: | |||
- pkg: galera_packages | |||
{%- endif %} | |||
galera_packages: | |||
pkg.installed: | |||
- names: {{ master.pkgs }} | |||
galera_log_dir: | |||
file.directory: | |||
- name: /var/log/mysql | |||
- makedirs: true | |||
- mode: 755 | |||
- require: | |||
- pkg: galera_packages | |||
{%- if not salt['cmd.run']('test -e /root/.galera_bootstrap') %} | |||
galera_bootstrap_temp_config: | |||
file.managed: | |||
- name: {{ master.config }} | |||
- source: salt://mysql/files/my.cnf.bootstrap | |||
- mode: 644 | |||
- template: jinja | |||
- require: | |||
- pkg: galera_packages | |||
galera_bootstrap_start_service: | |||
service.running: | |||
- name: mysql | |||
- require: | |||
- file: galera_bootstrap_temp_config | |||
galera_bootstrap_set_root_password: | |||
cmd.run: | |||
- name: mysqladmin password "{{ master.admin.password }}" | |||
- require: | |||
- service: galera_bootstrap_start_service | |||
mysql_bootstrap_update_maint_password: | |||
cmd.run: | |||
- name: mysql -u root -p{{ master.admin.password }} -e "GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY '{{ master.maintenance_password }}';" | |||
- require: | |||
- cmd: galera_bootstrap_set_root_password | |||
galera_packages_bootstrap_stop_service: | |||
service.dead: | |||
- name: mysql | |||
- require: | |||
- cmd: mysql_bootstrap_update_maint_password | |||
galera_bootstrap_init_config: | |||
file.managed: | |||
- name: {{ master.config }} | |||
- source: salt://mysql/conf/my.cnf | |||
- mode: 644 | |||
- template: jinja | |||
- require: | |||
- service: galera_bootstrap_stop_service | |||
galera_bootstrap_temp_config: | |||
file.touch: | |||
- require: | |||
- file: galera_bootstrap_init_config | |||
- watch_in: | |||
- service: galera_service | |||
{%- endif %} | |||
galera_service: | |||
service.running: | |||
- name: {{ master.service }} | |||
- enable: true | |||
- reload: true | |||
{%- endif %} |
@@ -0,0 +1,19 @@ | |||
applications: | |||
- galera | |||
parameters: | |||
_param: | |||
galera_server_cluster_name: galeracluster | |||
galera_server_bind_address: 0.0.0.0 | |||
galera_server_bind_port: 0.0.0.0 | |||
galera_server_admin_user: root | |||
galera_server_admin_password: root | |||
galera: | |||
master: | |||
enabled: true | |||
name: ${_param:galera_server_cluster_name} | |||
bind: | |||
address: ${_param:galera_server_bind_address} | |||
port: ${_param:galera_server_bind_port} | |||
admin: | |||
user: ${_param:galera_server_admin_user} | |||
password: ${_param:galera_server_admin_password} |
@@ -0,0 +1,19 @@ | |||
applications: | |||
- galera | |||
parameters: | |||
_param: | |||
galera_server_cluster_name: galeracluster | |||
galera_server_bind_address: 0.0.0.0 | |||
galera_server_bind_port: 0.0.0.0 | |||
galera_server_admin_user: root | |||
galera_server_admin_password: root | |||
galera: | |||
slave: | |||
enabled: true | |||
name: ${_param:galera_server_cluster_name} | |||
bind: | |||
address: ${_param:galera_server_bind_address} | |||
port: ${_param:galera_server_bind_port} | |||
admin: | |||
user: ${_param:galera_server_admin_user} | |||
password: ${_param:galera_server_admin_password} |