Browse Source

added ability to create galera cluster based on mariadb

master
Tomas Pipota 6 years ago
parent
commit
383c566e99
5 changed files with 179 additions and 10 deletions
  1. +5
    -0
      galera/files/my.cnf
  2. +9
    -1
      galera/init.sls
  3. +20
    -9
      galera/map.jinja
  4. +79
    -0
      galera/master_mariadb.sls
  5. +66
    -0
      galera/slave_mariadb.sls

+ 5
- 0
galera/files/my.cnf View File

{% set engine = pillar.galera.get('engine', 'mysql') %}

# All files in this package is subject to the GPL v2 license # 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. # More information is in the COPYING file in the top directory of this package.
# Copyright (C) 2011 severalnines.com # Copyright (C) 2011 severalnines.com
innodb_doublewrite=0 innodb_doublewrite=0
innodb_autoinc_lock_mode=2 innodb_autoinc_lock_mode=2
innodb_locks_unsafe_for_binlog=1 innodb_locks_unsafe_for_binlog=1
wsrep_on=ON
{%- if service.members|length > 1 %} {%- if service.members|length > 1 %}
wsrep_cluster_address="gcomm://{% for member in service.members %}{{ member.host}}:4567{% if not loop.last %},{% endif %}{% endfor %}/?pc.wait_prim=no" wsrep_cluster_address="gcomm://{% for member in service.members %}{{ member.host}}:4567{% if not loop.last %},{% endif %}{% endfor %}/?pc.wait_prim=no"
{%- else %} {%- else %}
wsrep_cluster_name="openstack" wsrep_cluster_name="openstack"


wsrep_slave_threads={{ service.get('wsrep_slave_threads', 8) }} wsrep_slave_threads={{ service.get('wsrep_slave_threads', 8) }}
{%- if engine == 'mysql' %}
wsrep_sst_method=xtrabackup-v2 wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth={{ service.admin.user }}:{{ service.admin.password }} wsrep_sst_auth={{ service.admin.user }}:{{ service.admin.password }}
{%- endif %}
wsrep_node_address={{ service.bind.address }} wsrep_node_address={{ service.bind.address }}
wsrep_provider_options="gcache.size = 256M" wsrep_provider_options="gcache.size = 256M"
wsrep_provider_options="gmcast.listen_addr = tcp://{{ service.bind.address }}:4567" wsrep_provider_options="gmcast.listen_addr = tcp://{{ service.bind.address }}:4567"

+ 9
- 1
galera/init.sls View File

{% set engine = pillar.galera.get('engine', 'mysql') %}
{%- if pillar.galera is defined %} {%- if pillar.galera is defined %}
include: include:
{%- if pillar.galera.master is defined %} {%- if pillar.galera.master is defined %}
{%- if engine == 'mysql' %}
- galera.master - galera.master
{%- else %}
- galera.master_mariadb
{%- endif %}
{%- endif %} {%- endif %}
{%- if pillar.galera.slave is defined %} {%- if pillar.galera.slave is defined %}
{%- if engine == 'mysql' %}
- galera.slave - galera.slave
{%- else %}
- galera.slave_mariadb
{%- endif %}
{%- endif %} {%- endif %}
{%- if pillar.galera.clustercheck is defined %} {%- if pillar.galera.clustercheck is defined %}
- galera.clustercheck - galera.clustercheck

+ 20
- 9
galera/map.jinja View File

{% set mysql_version = pillar.galera.get('version', {}).get('mysql', '5.6') %} {% set mysql_version = pillar.galera.get('version', {}).get('mysql', '5.6') %}
{% set galera_version = pillar.galera.get('version', {}).get('galera', '3') %} {% set galera_version = pillar.galera.get('version', {}).get('galera', '3') %}
{% set engine = pillar.galera.get('engine', 'mysql') %}


{%- load_yaml as master %} {%- load_yaml as master %}
default: default:
innodb_buffer_pool_size: '3138M' innodb_buffer_pool_size: '3138M'
Debian: Debian:
pkgs: pkgs:
{%- if engine == 'mysql' %}
- mysql-wsrep-{{ mysql_version }} - mysql-wsrep-{{ mysql_version }}
- python-mysqldb
- libdbd-mysql
- percona-xtrabackup
{%- else %}
- mariadb-server
- mariadb-client
{%- endif %}
- galera-{{ galera_version }} - galera-{{ galera_version }}
- rsync - rsync
- python-mysqldb
- psmisc - psmisc
- netcat - netcat
- percona-xtrabackup
- socat - socat
- libdbd-mysql
- python-pymysql - python-pymysql
service: mysql
service: {{ engine }}
wsrep_provider: /usr/lib/galera/libgalera_smm.so wsrep_provider: /usr/lib/galera/libgalera_smm.so
log_file: /var/log/mysql.log log_file: /var/log/mysql.log
socket: /var/run/mysqld/mysqld.sock socket: /var/run/mysqld/mysqld.sock
innodb_buffer_pool_size: '3138M' innodb_buffer_pool_size: '3138M'
Debian: Debian:
pkgs: pkgs:
{%- if engine == 'mysql' %}
- mysql-wsrep-{{ mysql_version }} - mysql-wsrep-{{ mysql_version }}
- galera-{{ galera_version }}
- rsync
- python-mysqldb - python-mysqldb
- libdbd-mysql
- libmysqlclient18 - libmysqlclient18
- percona-xtrabackup
{%- else %}
- mariadb-server
- mariadb-client
{%- endif %}
- galera-{{ galera_version }}
- rsync
- psmisc - psmisc
- netcat - netcat
- percona-xtrabackup
- socat - socat
- libdbd-mysql
- python-pymysql - python-pymysql
service: mysql
service: {{ engine }}
wsrep_provider: /usr/lib/galera/libgalera_smm.so wsrep_provider: /usr/lib/galera/libgalera_smm.so
log_file: /var/log/mysql.log log_file: /var/log/mysql.log
socket: /var/run/mysqld/mysqld.sock socket: /var/run/mysqld/mysqld.sock

+ 79
- 0
galera/master_mariadb.sls View File

{%- from "galera/map.jinja" import master with context %}
{%- if master.get('enabled', False) %}

{%- if master.get('ssl', {}).get('enabled', False) %}
include:
- galera._ssl
{%- endif %}

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

galera_run_dir:
file.directory:
- name: /var/run/mysqld
- makedirs: true
- mode: 755
- user: mysql
- group: root
- require:
- galera_packages

{%- if salt['cmd.shell']('test -e /etc/salt/.galera_bootstrap; echo $?') != '0' %}

galera_mariadb_stop_service:
service.dead:
- name: {{ master.service }}

galera_mariadb_new_cluster:
cmd.run:
- name: /usr/bin/galera_new_cluster
- require:
- galera_packages
- galera_config

galera_set_root_password:
cmd.run:
- name: mysqladmin password "{{ master.admin.password }}"
{%- if grains.get('noservices') %}
- onlyif: /bin/false
{%- endif %}
- require:
- galera_mariadb_new_cluster

mariadb_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 }}';"
{%- if grains.get('noservices') %}
- onlyif: /bin/false
{%- endif %}
- require:
- galera_mariadb_new_cluster

galera_mariadb_finish_flag:
file.touch:
- name: /etc/salt/.galera_bootstrap
- require:
- galera_mariadb_new_cluster

{%- endif %}

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

mariadb_service_enable:
service.running:
- name: {{ master.service }}
- enable: true
- require:
- galera_packages
- galera_config

{%- endif %}

+ 66
- 0
galera/slave_mariadb.sls View File

{%- from "galera/map.jinja" import slave with context %}
{%- if slave.get('enabled', False) %}

{%- if slave.get('ssl', {}).get('enabled', False) %}
include:
- galera._ssl
{%- endif %}

galera_packages:
pkg.installed:
- names: {{ slave.pkgs }}
- refresh: true
- force_yes: True

galera_run_dir:
file.directory:
- name: /var/run/mysqld
- makedirs: true
- mode: 755
- user: mysql
- group: root
- require:
- galera_packages

{%- if salt['cmd.shell']('test -e /etc/salt/.galera_bootstrap; echo $?') != '0' %}

galera_set_root_password:
cmd.run:
- name: mysqladmin password "{{ slave.admin.password }}"
{%- if grains.get('noservices') %}
- onlyif: /bin/false
{%- endif %}

mariadb_update_maint_password:
cmd.run:
- name: mysql -u root -p{{ slave.admin.password }} -e "GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY '{{ slave.maintenance_password }}';"
{%- if grains.get('noservices') %}
- onlyif: /bin/false
{%- endif %}

mariadb_service_dead:
service.dead:
- name: {{ slave.service }}

galera_mariadb_finish_flag:
file.touch:
- name: /etc/salt/.galera_bootstrap

{%- endif %}

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

mariadb_service_enable:
service.running:
- name: {{ slave.service }}
- enable: true
- require:
- galera_packages
- galera_config

{%- endif %}

Loading…
Cancel
Save