The MHA module handles installing, configuring, and running MHA for MySQL.
Puppet Ruby Shell HTML

README.md

puppet-mha

Build Status Puppet Forge

Table of Contents

  1. Description
  2. Setup - The basics of getting started with MHA
  3. Usage - Configuration options and additional functionality
  4. Reference - An under-the-hood peek at what the module is doing and how
  5. Limitations - OS compatibility, etc.
  6. Development - Guide for contributing to the module

Description

The MHA module handles installing, configuring, and running MHA for MySQL.

Setup

Setup Requirements

The MHA module requires the following puppet modules:

Beginning with MHA

To install the mha4mysql-manager with default parameters, declare the mha::manager class.

include '::mha::manager'

To install the mha4mysql-node with default parameters, declare the mha::node class.

include '::mha::node'

Usage

Configuring mha::manager

class { '::mha::manager':
  version       => '0.57-0',
  node_version  => '0.57-0',
  script_ensure => present,
}

Configuring mha::node

class { '::mha::node':
  user            => 'mha',
  password        => 'mysq1m@$terh@',
  repl_user       => 'replicator',
  repl_password   => 'rep1ic@t1r',
  manager         => 'master-ha.example.com',
  nodes           => [
    {
      'hostname'         => 'node001.example.com',
      'candidate_master' => 1,
    },
    {
      'hostname'         => 'node002.example.com',
      'candidate_master' => 1,
    },
    {
      'hostname'         => 'node003.example.com',
    },
  ],
  ssh_private_key => '-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----',
  ssh_key_type    => 'ssh-rsa',
  ssh_public_key  => 'AAAAB3NzaC1yc2EAAAADAQABAAABAQCtnFFI/ICCBmr4LY0gIgyF3Jex20KwTFT67aoNGxAvjRSsg9d+c0/sxq0oBZSdgLoRrlnSu226mvv89E6dnc61JFbJpWN6et8qTW75e2/cU/DIe2vS3nTBcBvgj23oF2c5Wv7Vy2FacdDXaLa7tKmAnetI7FT+0IwmR7FMCvREmOqn4eCTkoUNXdLHqkQ0f2SSYBUUyno68nUM1bXgc63bQU8T1tr8kZ2t3NHpAa8YEYraKbCltsBkyqr7FExe5o23RyML4NuKfa1UllJhZO3IrQgbiAXsIFZpEqbcL8tObQ55nQIrNzZEvHoDN7K7jZP4WdjfTF26xSqJ+LrlGsRV',
}

Configuring modules from Hiera

---
mha::manager::version: '0.57-0'
mha::manager::node_version: '0.57-0'

mha::node::user: 'mha'
mha::node::password: 'mysq1m@$terh@'
mha::node::repl_user: 'replicator'
mha::node::repl_password: 'rep1ic@t0r'
mha::node::manager: 'master-ha.example.com'
mha::node::nodes:
  - hostname: 'node001.example.com'
    candidate_master: 1
  - hostname: 'node002.example.com'
    candidate_master: 1
  - hostname: 'node003.example.com'
mha::node::ssh_key_type: 'ssh-rsa'
mha::node::ssh_public_key: 'AAAAB3NzaC1yc2EAAAADAQABAAABAQCtnFFI/ICCBmr4LY0gIgyF3Jex20KwTFT67aoNGxAvjRSsg9d+c0/sxq0oBZSdgLoRrlnSu226mvv89E6dnc61JFbJpWN6et8qTW75e2/cU/DIe2vS3nTBcBvgj23oF2c5Wv7Vy2FacdDXaLa7tKmAnetI7FT+0IwmR7FMCvREmOqn4eCTkoUNXdLHqkQ0f2SSYBUUyno68nUM1bXgc63bQU8T1tr8kZ2t3NHpAa8YEYraKbCltsBkyqr7FExe5o23RyML4NuKfa1UllJhZO3IrQgbiAXsIFZpEqbcL8tObQ55nQIrNzZEvHoDN7K7jZP4WdjfTF26xSqJ+LrlGsRV'
mha::node::ssh_private_key: |
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----

Reference

Public Classes

mha::manager

Install and configure mha4mysql-manager, and install the mysql_online_switch script.

  • version: Specify a mha4mysql-manager version. Valid values is 'x.y-z' like '0.57-0'.
  • node_version: Specify a mha4mysql-node version. Valid values is 'x.y-z' like '0.57-0'.
  • script_ensure: Whether the mysql_online_switch script should exist. Default to present.

mha::node

Install and configure mha4mysql-node, create grant permissions to access MySQL for administrator and replicator, configure the cron job to run purge_relay_logs script, and install a ssh key-pair.

  • manager: Specify the host for mha4mysql-manager. Default to undef.
  • version: Specify the mha4mysql-node version. Valid values is 'x.y-z' like '0.57-0'.
  • nodes: Specify The array of the target MySQL servers that include hostname or IP address, or candidate_master. Default to [].
  • user: The MySQL administrative database username (ref). Default: 'root'.
  • password: The MySQL password of the "$user" user (ref). Default to '' (empty).
  • repl_user: The MySQL replication username (ref). Default to 'repl'.
  • repl_password: The MySQL password of the repl user (ref). Default: '' (empty).
  • ssh_key_type: The encryption type used (ref).
  • ssh_public_key: The public key itself as the same as Ssh_authorized_key key attributes.
  • ssh_key_path: The path to the private key to manage. Default to '/root/.ssh/id_mha'.
  • ssh_private_key: The private key itself. See also ./manifests/params.pp.
  • cron_ensure: Whether the cron job should be in. Default to present.
  • cron_user: The user who owns the cron job. This user must be allowed to run this job. Default to 'root'.
  • cron_minute: The minute at which to run the cron job. Default to '10'.
  • cron_hour: The hour at which to run the cron job. Default to '2-23/6'.

Private Classes

  • mha::manager::install: Install mha4mysql-manager package.
  • mha::manager::script: Install mysql_online_switch.
  • mha::node::grants: Create grant permissions to access MySQL for administrator and replicator.
  • mha::node::install: Install mha4mysql-node package.
  • mha::node::purge_relay_logs: Configure the cron job to run purge_relay_logs script.

Defined Types

mha::manager::app

Set up an application configuration file and configure mha4mysql-manager.

mha::node::grants::admin

Create grant permissions to access MySQL for administrator.

  • user: The MySQL administrative database username. Default: undef.
  • password: The MySQL password of the "$user" user. Default: undef.
  • host: The host to use as part of user@host for grants. Default is a resource name ($name).

mha::node::grants::repl

Create grant permissions to access MySQL for replicator.

  • user: The MySQL replication username. Default: undef.
  • password: The MySQL password of the repl user. Default: undef.
  • host: The host to use as part of user@host for grants. Default is a resource name ($name).

Limitations

This module has been tested on:

  • RedHat Enterprise Linux 5, 6, 7
  • CentOS 5, 6, 7
  • Scientific Linux 5, 6, 7

Development

Running tests

The MHA puppet module contains tests for both rspec-puppet (unit tests) and beaker-rspec (acceptance tests) to verify functionality. For detailed information on using these tools, please see their respective documentation.

Testing quickstart

  • Unit tests:
$ bundle install
$ bundle exec rake
  • Acceptance tests:
# Set your DOCKER_HOST variable
$ eval "$(docker-machine env default)"

# List available beaker nodesets
$ bundle exec rake beaker_nodes
centos6
centos7

# Run beaker acceptance tests
$ BEAKER_set=centos7 bundle exec rake beaker

Smoke tests

You can run smoke tests using Vagrant:

$ vagrant up <vm> --provision

Authors