Marostegui has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/364150 )
Change subject: mariadb: Create sanitarium3 role ...................................................................... mariadb: Create sanitarium3 role As we spoke last week, it might be easier to create a sanitarium3 role to support the new case of MariaDB 10.1 + multi-instance + sanitarium features. This might not be the best way of doing this as probably a more deep refactor is needed, but it is a quick way of advancing on leaving db1102 as set up as sanitarium3 with the pending shards replicating to the new labs infra. This host differs from db1069 as it has 10.1 and replicates to 10.1, so we need the rbr triggers. sanitarium role cannot be used here for db1102 as db1069 does not have 10.1 and will be hard to upgrade to 10.1 as the old labs hosts replicate 10.0. sanitarium2 role doesn't apply here as well because it doesn't run multi instance, it runs multi-source. Change-Id: I7eca200ec1f90712eec65ee592ac070fa78c7168 --- M manifests/site.pp A modules/role/manifests/mariadb/sanitarium3.pp A modules/role/templates/mariadb/mysqld_config/sanitarium3.my.cnf.erb A modules/role/templates/mariadb/sanitarium3.sysvinit.erb 4 files changed, 319 insertions(+), 1 deletion(-) git pull ssh://gerrit.wikimedia.org:29418/operations/puppet refs/changes/50/364150/1 diff --git a/manifests/site.pp b/manifests/site.pp index 93fe113..5c78b5f 100644 --- a/manifests/site.pp +++ b/manifests/site.pp @@ -633,7 +633,7 @@ } node 'db1102.eqiad.wmnet' { - role(mariadb::sanitarium) + role(mariadb::sanitarium3) include ::base::firewall } diff --git a/modules/role/manifests/mariadb/sanitarium3.pp b/modules/role/manifests/mariadb/sanitarium3.pp new file mode 100644 index 0000000..22f86b4 --- /dev/null +++ b/modules/role/manifests/mariadb/sanitarium3.pp @@ -0,0 +1,105 @@ +# sanitarium 3 role: it replicates from all core shards (except x1), and +# sanitizes most data on production on 7 shards, before the data arrives to +# labs +# This role installs a 10.1 version which is needed for rbr triggers for +# the new sanitarium3 server, which runs multi-instance and mariadb 10.1 + +class role::mariadb::sanitarium3 { + + system::role { 'mariadb::sanitarium': + description => 'Sanitarium DB Server', + } + + include ::standard + include passwords::misc::scripts + class { 'role::mariadb::groups': + mysql_group => 'labs', + mysql_role => 'slave', + socket => '/tmp/mysql.s1.sock', + } + + + class {'mariadb::packages_wmf': + package => 'wmf-mariadb101', + } + + class { 'mariadb::config': + basedir => '/opt/wmf-mariadb101', + socket => '/tmp/mysql.sock', + config => 'role/mariadb/mysqld_config/sanitarium3.my.cnf.erb', + ssl => 'puppet-cert', + } + + class {'mariadb::service': + package => 'wmf-mariadb101', + } + + include role::labs::db::common + include role::labs::db::check_private_data + + ferm::service { 'mysqld_sanitarium': + proto => 'tcp', + port => '3311:3317', + srange => '$PRODUCTION_NETWORKS', + } + + ferm::service { 'gmond_udp': + proto => 'udp', + port => '8649', + srange => '$PRODUCTION_NETWORKS', + } + + ferm::service { 'gmond_tcp': + proto => 'tcp', + port => '8649', + srange => '$PRODUCTION_NETWORKS', + } + + # One instance per shard using mysqld_multi. + # This allows us to send separate replication channels downstream. + $folders = [ + '/srv/sqldata.s1', + '/srv/sqldata.s2', + '/srv/sqldata.s3', + '/srv/sqldata.s4', + '/srv/sqldata.s5', + '/srv/sqldata.s6', + '/srv/sqldata.s7', + '/srv/tmp.s1', + '/srv/tmp.s2', + '/srv/tmp.s3', + '/srv/tmp.s4', + '/srv/tmp.s5', + '/srv/tmp.s6', + '/srv/tmp.s7', + ] + + file { $folders: + ensure => directory, + owner => 'mysql', + group => 'mysql', + mode => '0755', + } + + # mysqld_multi wrapper + file { '/etc/init.d/mariadb': + owner => 'root', + group => 'root', + mode => '0755', + content => template('role/mariadb/sanitarium3.sysvinit.erb'), + } + file { '/etc/init.d/mysql': + ensure => link, + target => '/etc/init.d/mariadb', + } + + class { 'mariadb::monitor_disk': + contact_group => 'admins', + } + + class { 'mariadb::monitor_process': + process_count => 7, + contact_group => 'admins', + } +} + diff --git a/modules/role/templates/mariadb/mysqld_config/sanitarium3.my.cnf.erb b/modules/role/templates/mariadb/mysqld_config/sanitarium3.my.cnf.erb new file mode 100644 index 0000000..a11de1a --- /dev/null +++ b/modules/role/templates/mariadb/mysqld_config/sanitarium3.my.cnf.erb @@ -0,0 +1,188 @@ +# Sanitarium -- multiple instances! + +[client] +port = 3311 +socket = /tmp/mysql.s1.sock + +[mysqld] + +user = mysql +read_only = 1 + +# enable socket authentication +plugin-load = unix_socket=auth_socket.so + +skip-external-locking +skip-name-resolve +skip-slave-start +log-slave-updates +temp-pool + +secure_file_priv = /dev/null +max_connections = 100 +max_connect_errors = 1000000000 +max_allowed_packet = 32M +connect_timeout = 3 +query_cache_size = 0 +query_cache_type = 0 +event_scheduler = 1 +userstat = 0 +log-warnings = 0 +thread_stack = 192K +thread_cache_size = 300 +interactive_timeout = 28800 +wait_timeout = 3600 +plugin-load = ha_tokudb +transaction-isolation = REPEATABLE-READ +slave_transaction_retries = 4294967295 +slave_parallel_threads = 2 +slave_parallel_max_queued = 16M +binlog-format = ROW +expire_logs_days = 7 +sql-mode = IGNORE_BAD_TABLE_OPTIONS + +# Needed when using ROW based replication and altering the width of a column, if not set, the ALTER will fail +# https://dev.mysql.com/doc/mysql-replication-excerpt/5.7/en/replication-features-different-data-types.html +# T73563#3117924 +slave_type_conversions = ALL_NON_LOSSY + +table_open_cache = 10000 +table_definition_cache = 50000 +open-files-limit = 400000 +character_set_server = binary +character_set_filesystem = binary +collation_server = binary + +default-storage-engine = InnoDB +innodb_file_per_table = 1 +innodb_buffer_pool_size = <%= (Float(@memorysize.split[0]) * 0.05).round %>G +innodb_log_file_size = 2G +innodb_flush_log_at_trx_commit = 1 +innodb_flush_method = O_DIRECT +tokudb_cache_size = <%= (Float(@memorysize.split[0]) * 0.05).round %>G +tokudb_lock_timeout = 50000 +tokudb_empty_scan = disabled +tokudb_read_buf_size = 256K +tokudb_pk_insert_mode = 2 +join_cache_level = 8 + +# dump and load innodb buffer at start and stop +innodb_buffer_pool_load_at_startup = 1 +innodb_buffer_pool_dump_at_shutdown = 1 + +<% if @kernelversion < "3.19" %> +# Until kernel 3.16 http://www.spinics.net/lists/stable/msg61873.html +# At least, I think so. For now we need to avoid the an assertion failure on +# Trusty w/ 3.13 +innodb_use_native_aio = 0 +innodb_read_io_threads = 16 +innodb_write_io_threads = 8 +<% end %> + +# index_condition_pushdown=off https://github.com/Tokutek/mariadb-5.5/issues/39 +optimizer_switch = 'mrr=on,mrr_cost_based=on,mrr_sort_keys=on,optimize_join_buffer_size=on,engine_condition_pushdown=on,index_condition_pushdown=off' + +replicate-wild-ignore-table = mysql.% +replicate-wild-ignore-table = oai.% + +<% scope.lookupvar("::private_wikis").each do |name| -%> +replicate-wild-ignore-table = <%= name %>.% +<% end -%> + +<% scope.lookupvar("::private_tables").each do |name| -%> +replicate-wild-ignore-table = %.<%= name %> +<% end -%> + +[mysqld_multi] +log = /var/log/mysqld_multi.log +mysqld = /opt/wmf-mariadb10/bin/mysqld_safe +mysqladmin = /opt/wmf-mariadb10/bin/mysqladmin + +[mysqld1] + +port = 3311 +socket = /tmp/mysql.s1.sock +log-bin = s1-bin +relay-log = s1-rel +datadir = /srv/sqldata.s1 +pid-file = /srv/sqldata.s1/pid +tmpdir = /srv/tmp.s1 +server_id = <%= @server_id %>3311 +gtid_domain_id = <%= @gtid_domain_id %> + +[mysqld2] + +port = 3312 +socket = /tmp/mysql.s2.sock +log-bin = s2-bin +relay-log = s2-rel +datadir = /srv/sqldata.s2 +pid-file = /srv/sqldata.s2/pid +tmpdir = /srv/tmp.s2 +server_id = <%= @server_id %>3312 +gtid_domain_id = <%= @gtid_domain_id %> + +[mysqld3] + +port = 3313 +socket = /tmp/mysql.s3.sock +log-bin = s3-bin +relay-log = s3-rel +datadir = /srv/sqldata.s3 +pid-file = /srv/sqldata.s3/pid +tmpdir = /srv/tmp.s3 +server_id = <%= @server_id %>3313 +gtid_domain_id = <%= @gtid_domain_id %> + +[mysqld4] + +port = 3314 +socket = /tmp/mysql.s4.sock +log-bin = s4-bin +relay-log = s4-rel +datadir = /srv/sqldata.s4 +pid-file = /srv/sqldata.s4/pid +tmpdir = /srv/tmp.s4 +server_id = <%= @server_id %>3314 +gtid_domain_id = <%= @gtid_domain_id %> + +[mysqld5] + +port = 3315 +socket = /tmp/mysql.s5.sock +log-bin = s5-bin +relay-log = s5-rel +datadir = /srv/sqldata.s5 +pid-file = /srv/sqldata.s5/pid +tmpdir = /srv/tmp.s5 +server_id = <%= @server_id %>3315 +gtid_domain_id = <%= @gtid_domain_id %> + +[mysqld6] + +port = 3316 +socket = /tmp/mysql.s6.sock +log-bin = s6-bin +relay-log = s6-rel +datadir = /srv/sqldata.s6 +pid-file = /srv/sqldata.s6/pid +tmpdir = /srv/tmp.s6 +server_id = <%= @server_id %>3316 +gtid_domain_id = <%= @gtid_domain_id %> + +[mysqld7] + +port = 3317 +socket = /tmp/mysql.s7.sock +log-bin = s7-bin +relay-log = s7-rel +datadir = /srv/sqldata.s7 +pid-file = /srv/sqldata.s7/pid +tmpdir = /srv/tmp.s7 +server_id = <%= @server_id %>3317 +gtid_domain_id = <%= @gtid_domain_id %> + +[mysqldump] + +quick +max_allowed_packet = 32M diff --git a/modules/role/templates/mariadb/sanitarium3.sysvinit.erb b/modules/role/templates/mariadb/sanitarium3.sysvinit.erb new file mode 100644 index 0000000..dc42cb4 --- /dev/null +++ b/modules/role/templates/mariadb/sanitarium3.sysvinit.erb @@ -0,0 +1,25 @@ +#!/bin/bash + +INSTALL_DIR=/opt/wmf-mariadb101 + +case "$1" in + start) + pushd $INSTALL_DIR + $INSTALL_DIR/bin/mysqld_multi start 1-7 + popd + ;; + stop) + pushd $INSTALL_DIR + $INSTALL_DIR/bin/mysqld_multi stop 1-7 + popd + ;; + status) + pushd $INSTALL_DIR + $INSTALL_DIR/bin/mysqld_multi report + popd + ;; + *) + echo $"Usage: $0 {start|stop|status}" + exit 1 +esac +exit 0 -- To view, visit https://gerrit.wikimedia.org/r/364150 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I7eca200ec1f90712eec65ee592ac070fa78c7168 Gerrit-PatchSet: 1 Gerrit-Project: operations/puppet Gerrit-Branch: production Gerrit-Owner: Marostegui <maroste...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits