Puppet Class: profile::mariadb::misc::analytics::multiinstance

Defined in:
modules/profile/manifests/mariadb/misc/analytics/multiinstance.pp

Overview

Class profile::mariadb::misc::analytics::multiinstance

The Analytics team manages multiple small databases related to their tools (Superset, Druid, Matomo, etc..) and this profile implements a mariadb multi-instance environment that can be used as replica.

This class is used to do MariaDB logical backups via profile::dbbackups::mydumper. (As of 2021-11, dbprov1002 is taking remote backups.) See: wikitech.wikimedia.org/wiki/MariaDB/Backups#Logical_backups

Parameters:

  • instances (Hash[String, Hash]) (defaults to: lookup('profile::mariadb::misc::analytics::multiinstance::instances'))
  • section_ports (Hash[String, Stdlib::Port]) (defaults to: lookup('profile::mariadb::section_ports'))


11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'modules/profile/manifests/mariadb/misc/analytics/multiinstance.pp', line 11

class profile::mariadb::misc::analytics::multiinstance (
    Hash[String, Hash] $instances = lookup('profile::mariadb::misc::analytics::multiinstance::instances'),
    Hash[String, Stdlib::Port] $section_ports = lookup('profile::mariadb::section_ports'),
) {
    require profile::mariadb::packages_wmf
    class { 'mariadb::service':
        override => "[Service]\nExecStartPre=/bin/sh -c \"echo 'mariadb main service is \
disabled, use mariadb@<instance_name> instead'; exit 1\"",
    }

    include ::profile::mariadb::mysql_role
    include profile::mariadb::wmfmariadbpy

    class { 'mariadb::config':
        basedir            => $profile::mariadb::packages_wmf::basedir,
        config             => 'profile/mariadb/mysqld_config/analytics_multiinstance.my.cnf.erb',
        p_s                => 'on',
        ssl                => 'puppet-cert',
        # MUST use ROW, hive metastore database is not compatible with other kinds.
        binlog_format      => 'ROW',
        max_allowed_packet => '32M',
        read_only          => 1,
    }

    file { '/etc/mysql/mysqld.conf.d':
        ensure => directory,
        owner  => root,
        group  => root,
        mode   => '0755',
    }

    $instances.each |$section, $instance_params| {
        $port = $section_ports[$section]
        if (!$port) {
            fail("'${section}' is not a valid section.")
        }
        $prom_port = Integer("1${port}")

        # $section port will always override anything in $instance_params.
        $mariadb_instance_params = deep_merge(
            $instance_params,
            { 'port' => $port },
        )

        # Declare a mariadb::instance named $section with $mariadb_instance_params.
        create_resources('mariadb::instance', { $section => $mariadb_instance_params })
        profile::mariadb::section { $section: mention_alias => true }
        profile::mariadb::ferm { $section: port => $port }
        profile::prometheus::mysqld_exporter_instance { $section: port => $prom_port }
    }

    class { 'mariadb::monitor_disk':
        is_critical   => false,
        contact_group => 'admins,team-data-platform',
    }

    class { 'mariadb::monitor_process':
        process_count => length($instances),
        is_critical   => false,
        contact_group => 'admins,team-data-platform',
    }

    class { 'mariadb::monitor_memory': }
}