- Description
- Setup - The basics of getting started with MHA
- Usage - Configuration options and additional functionality
- Reference - An under-the-hood peek at what the module is doing and how
- Limitations - OS compatibility, etc.
- Development - Guide for contributing to the module
The MHA module handles installing, configuring, and running MHA for MySQL.
The MHA module requires the following puppet modules:
- puppetlabs-stdlib: version 3.0.0 or newer.
- puppetlabs-mysql: version 3.5.0 or newer.
- proletaryo-supervisor: version 0.5.0 - 0.6.0.
- stahnma-epel: version 1.0.0 or newer.
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'
class { '::mha::manager':
version => '0.57-0',
node_version => '0.57-0',
script_ensure => present,
}
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',
}
---
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-----
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.
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'.
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.
Set up an application configuration file and configure mha4mysql-manager.
nodes
: The array of the target MySQL servers that include hostname or IP address, or candidate_master. Default to [].user
: The MySQL administrative database username. See https://code.google.com/p/mysql-master-ha/wiki/Parameters#user. Default: 'root'.password
: The MySQL password of the "$user" user. See https://code.google.com/p/mysql-master-ha/wiki/Parameters#password. Default to '' (empty).repl_user
: The MySQL replication username. See https://code.google.com/p/mysql-master-ha/wiki/Parameters#repl_user. Default to 'repl'.repl_password
: The MySQL password of the repl user. See https://code.google.com/p/mysql-master-ha/wiki/Parameters#repl_password. Default: '' (empty).ping_interval
: See https://code.google.com/p/mysql-master-ha/wiki/Parameters#ping_interval. Default to '3'.ping_type
: See https://code.google.com/p/mysql-master-ha/wiki/Parameters#ping_type. Default to 'SELECT'.ssh_user
: See https://code.google.com/p/mysql-master-ha/wiki/Parameters#ssh_user. Default to 'root'.ssh_port
: See https://code.google.com/p/mysql-master-ha/wiki/Parameters#ssh_port. Default to '22'.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.default
: Other parameters for [server default] block. Default to {}.manage_daemon
: Whether the masterha_manager program should be managed by suporvisord. Default to false.
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
).
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
).
This module has been tested on:
- RedHat Enterprise Linux 5, 6, 7
- CentOS 5, 6, 7
- Scientific Linux 5, 6, 7
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.
- 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
You can run smoke tests using Vagrant:
$ vagrant up <vm> --provision