Forge Home

mha

Install and Configure MHA for MySQL

24,592 downloads

5,348 latest version

5.0 quality score

We run a couple of automated
scans to help you access a
module's quality. Each module is
given a score based on how well
the author has formatted their
code and documentation and
modules are also checked for
malware using VirusTotal.

Please note, the information below
is for guidance only and neither of
these methods should be considered
an endorsement by Puppet.

Version information

  • 2.2.0 (latest)
  • 2.1.0
  • 2.0.0
  • 1.1.1
  • 1.1.0
  • 1.0.0
  • 0.3.0
  • 0.2.1
  • 0.2.0 (deleted)
  • 0.1.1
  • 0.1.0 (deleted)
  • 0.0.13
  • 0.0.12
  • 0.0.11
  • 0.0.10
  • 0.0.9
  • 0.0.8
  • 0.0.7
  • 0.0.6
  • 0.0.5
  • 0.0.4
  • 0.0.3
  • 0.0.2
released Nov 14th 2018
This version is compatible with:
  • Puppet Enterprise 2018.1.x, 2017.3.x, 2017.2.x, 2017.1.x, 2016.4.x
  • Puppet >=4.9.0 < 6.0.0
  • , ,

Start using this module

  • r10k or Code Manager
  • Bolt
  • Manual installation
  • Direct download

Add this module to your Puppetfile:

mod 'hfm-mha', '2.2.0'
Learn more about managing modules with a Puppetfile

Add this module to your Bolt project:

bolt module add hfm-mha
Learn more about using this module with an existing project

Manually install this module globally with Puppet module tool:

puppet module install hfm-mha --version 2.2.0

Direct download is not typically how you would use a Puppet module to manage your infrastructure, but you may want to download the module in order to inspect the code.

Download
Tags: mysql, database, mha

Documentation

hfm/mha — version 2.2.0 Nov 14th 2018

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_user: The user connecting to mha-node with ssh. Default to 'root'
  • 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::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