Giuseppe Lavagetto has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/344479 )

Change subject: profile::redis::multidc: generic profile for redis cross-dc 
replica
......................................................................

profile::redis::multidc: generic profile for redis cross-dc replica

This allows to manage the cross-dc replica depending on etcd discovery,
and should be general enough to accomodate both clusters we have
currently, and any other we might want to set up in the future.

Also, add a global data structure for redis shards of all kinds, much
like lvs::configuration is, in order to be used by other parts of the
code too.

Change-Id: Ibe461edbd43bf5a182c1125c68eb08f5e98edf59
---
A hieradata/common/redis.yaml
M hieradata/role/common/jobqueue_redis.yaml
M hieradata/role/common/jobqueue_redis/master.yaml
D modules/profile/manifests/jobqueue_redis/master.pp
A modules/profile/manifests/redis/multidc.pp
R modules/profile/manifests/redis/multidc_instance.pp
M modules/role/manifests/jobqueue_redis/master.pp
7 files changed, 288 insertions(+), 270 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/operations/puppet 
refs/changes/79/344479/1

diff --git a/hieradata/common/redis.yaml b/hieradata/common/redis.yaml
new file mode 100644
index 0000000..470ddcf
--- /dev/null
+++ b/hieradata/common/redis.yaml
@@ -0,0 +1,211 @@
+redis::shards:
+  jobqueue:
+    eqiad:
+      rdb1-aggr: #rdb1001
+        host: 10.64.32.76
+        port: 6378
+      rdb1-6379:
+        host: 10.64.32.76
+        port: 6379
+      rdb1-6380:
+        host: 10.64.32.76
+        port: 6380
+      rdb1-6381:
+        host: 10.64.32.76
+        port: 6381
+      rdb2-aggr: # rdb1003
+        host: 10.64.0.201
+        port: 6378
+      rdb2-6379:
+        host: 10.64.0.201
+        port: 6379
+      rdb2-6380:
+        host: 10.64.0.201
+        port: 6380
+      rdb2-6381:
+        host: 10.64.0.201
+        port: 6381
+      rdb3-aggr: # rdb1005
+        host: 10.64.0.24
+        port: 6378
+      rdb3-6379:
+        host: 10.64.0.24
+        port: 6379
+      rdb3-6380:
+        host: 10.64.0.24
+        port: 6380
+      rdb3-6381:
+        host: 10.64.0.24
+        port: 6381
+      rdb4-aggr: # rdb1007
+        host: 10.64.32.18
+        port: 6378
+      rdb4-6379:
+        host: 10.64.32.18
+        port: 6379
+      rdb4-6380:
+        host: 10.64.32.18
+        port: 6380
+      rdb4-6381:
+        host: 10.64.32.18
+        port: 6381
+    codfw:
+      rdb1-aggr: #rdb2001
+        host: 10.192.0.119
+        port: 6378
+      rdb1-6379:
+        host: 10.192.0.119
+        port: 6379
+      rdb1-6380:
+        host: 10.192.0.119
+        port: 6380
+      rdb1-6381:
+        host: 10.192.0.119
+        port: 6381
+      rdb2-aggr: # rdb2003
+        host: 10.192.16.122
+        port: 6378
+      rdb2-6379:
+        host: 10.192.16.122
+        port: 6379
+      rdb2-6380:
+        host: 10.192.16.122
+        port: 6380
+      rdb2-6381:
+        host: 10.192.16.122
+        port: 6381
+      rdb3-aggr: # rdb2005
+        host: 10.192.32.133
+        port: 6378
+      rdb3-6379:
+        host: 10.192.32.133
+        port: 6379
+      rdb3-6380:
+        host: 10.192.32.133
+        port: 6380
+      rdb3-6381:
+        host: 10.192.32.133
+        port: 6381
+      rdb4-aggr: # rdb2005 - higher ports
+        host: 10.192.32.133
+        port: 6478
+      rdb4-6379:
+        host: 10.192.32.133
+        port: 6479
+      rdb4-6380:
+        host: 10.192.32.133
+        port: 6480
+      rdb4-6381:
+        host: 10.192.32.133
+        port: 6481
+  sessions:
+    eqiad:
+      shard01:
+        host: 10.64.0.180
+        port: 6379
+      shard02:
+        host: 10.64.0.181
+        port: 6379
+      shard03:
+        host: 10.64.0.182
+        port: 6379
+      shard04:
+        host: 10.64.0.183
+        port: 6379
+      shard05:
+        host: 10.64.0.184
+        port: 6379
+      shard06:
+        host: 10.64.0.185
+        port: 6379
+      shard07:
+        host: 10.64.32.161
+        port: 6379
+      shard08:
+        host: 10.64.32.162
+        port: 6379
+      shard09:
+        host: 10.64.32.163
+        port: 6379
+      shard10:
+        host: 10.64.32.164
+        port: 6379
+      shard11:
+        host: 10.64.32.165
+        port: 6379
+      shard12:
+        host: 10.64.32.166
+        port: 6379
+      shard13:
+        host: 10.64.48.101
+        port: 6379
+      shard14:
+        host: 10.64.48.102
+        port: 6379
+      shard15:
+        host: 10.64.48.103
+        port: 6379
+      shard16:
+        host: 10.64.48.104
+        port: 6379
+      shard17:
+        host: 10.64.48.95
+        port: 6379
+      shard18:
+        host: 10.64.48.96
+        port: 6379
+    codfw:
+      shard01:
+        host: 10.192.0.83
+        port: 6379
+      shard02:
+        host: 10.192.0.84
+        port: 6379
+      shard03:
+        host: 10.192.0.85
+        port: 6379
+      shard04:
+        host: 10.192.0.86
+        port: 6379
+      shard05:
+        host: 10.192.16.60
+        port: 6379
+      shard06:
+        host: 10.192.16.61
+        port: 6379
+      shard07:
+        host: 10.192.16.62
+        port: 6379
+      shard08:
+        host: 10.192.16.194
+        port: 6379
+      shard09:
+        host: 10.192.32.159
+        port: 6379
+      shard10:
+        host: 10.192.32.160
+        port: 6379
+      shard11:
+        host: 10.192.32.161
+        port: 6379
+      shard12:
+        host: 10.192.32.162
+        port: 6379
+      shard13:
+        host: 10.192.32.163
+        port: 6379
+      shard14:
+        host: 10.192.48.76
+        port: 6379
+      shard15:
+        host: 10.192.48.77
+        port: 6379
+      shard16:
+        host: 10.192.48.78
+        port: 6379
+      shard17:
+        host: 10.192.48.79
+        port: 6379
+      shard18:
+        host: 10.192.48.80
+        port: 6379
diff --git a/hieradata/role/common/jobqueue_redis.yaml 
b/hieradata/role/common/jobqueue_redis.yaml
index 27f7e30..1136271 100644
--- a/hieradata/role/common/jobqueue_redis.yaml
+++ b/hieradata/role/common/jobqueue_redis.yaml
@@ -1,101 +1 @@
 cluster: redis
-redis::shards:
-  eqiad:
-    rdb1-aggr: #rdb1001
-      host: 10.64.32.76
-      port: 6378
-    rdb1-6379:
-      host: 10.64.32.76
-      port: 6379
-    rdb1-6380:
-      host: 10.64.32.76
-      port: 6380
-    rdb1-6381:
-      host: 10.64.32.76
-      port: 6381
-    rdb2-aggr: # rdb1003
-      host: 10.64.0.201
-      port: 6378
-    rdb2-6379:
-      host: 10.64.0.201
-      port: 6379
-    rdb2-6380:
-      host: 10.64.0.201
-      port: 6380
-    rdb2-6381:
-      host: 10.64.0.201
-      port: 6381
-    rdb3-aggr: # rdb1005
-      host: 10.64.0.24
-      port: 6378
-    rdb3-6379:
-      host: 10.64.0.24
-      port: 6379
-    rdb3-6380:
-      host: 10.64.0.24
-      port: 6380
-    rdb3-6381:
-      host: 10.64.0.24
-      port: 6381
-    rdb4-aggr: # rdb1007
-      host: 10.64.32.18
-      port: 6378
-    rdb4-6379:
-      host: 10.64.32.18
-      port: 6379
-    rdb4-6380:
-      host: 10.64.32.18
-      port: 6380
-    rdb4-6381:
-      host: 10.64.32.18
-      port: 6381
-  codfw:
-    rdb1-aggr: #rdb2001
-      host: 10.192.0.119
-      port: 6378
-    rdb1-6379:
-      host: 10.192.0.119
-      port: 6379
-    rdb1-6380:
-      host: 10.192.0.119
-      port: 6380
-    rdb1-6381:
-      host: 10.192.0.119
-      port: 6381
-    rdb2-aggr: # rdb2003
-      host: 10.192.16.122
-      port: 6378
-    rdb2-6379:
-      host: 10.192.16.122
-      port: 6379
-    rdb2-6380:
-      host: 10.192.16.122
-      port: 6380
-    rdb2-6381:
-      host: 10.192.16.122
-      port: 6381
-    rdb3-aggr: # rdb2005
-      host: 10.192.32.133
-      port: 6378
-    rdb3-6379:
-      host: 10.192.32.133
-      port: 6379
-    rdb3-6380:
-      host: 10.192.32.133
-      port: 6380
-    rdb3-6381:
-      host: 10.192.32.133
-      port: 6381
-    rdb4-aggr: # rdb2005 - higher ports
-      host: 10.192.32.133
-      port: 6478
-    rdb4-6379:
-      host: 10.192.32.133
-      port: 6479
-    rdb4-6380:
-      host: 10.192.32.133
-      port: 6480
-    rdb4-6381:
-      host: 10.192.32.133
-      port: 6481
-    
diff --git a/hieradata/role/common/jobqueue_redis/master.yaml 
b/hieradata/role/common/jobqueue_redis/master.yaml
index 58d39d5..ebff9a5 100644
--- a/hieradata/role/common/jobqueue_redis/master.yaml
+++ b/hieradata/role/common/jobqueue_redis/master.yaml
@@ -1,100 +1,17 @@
 cluster: redis
-redis_shards:
-  eqiad:
-    rdb1-aggr: #rdb1001
-      host: 10.64.32.76
-      port: 6378
-    rdb1-6379:
-      host: 10.64.32.76
-      port: 6379
-    rdb1-6380:
-      host: 10.64.32.76
-      port: 6380
-    rdb1-6381:
-      host: 10.64.32.76
-      port: 6381
-    rdb2-aggr: # rdb1003
-      host: 10.64.0.201
-      port: 6378
-    rdb2-6379:
-      host: 10.64.0.201
-      port: 6379
-    rdb2-6380:
-      host: 10.64.0.201
-      port: 6380
-    rdb2-6381:
-      host: 10.64.0.201
-      port: 6381
-    rdb3-aggr: # rdb1005
-      host: 10.64.0.24
-      port: 6378
-    rdb3-6379:
-      host: 10.64.0.24
-      port: 6379
-    rdb3-6380:
-      host: 10.64.0.24
-      port: 6380
-    rdb3-6381:
-      host: 10.64.0.24
-      port: 6381
-    rdb4-aggr: # rdb1007
-      host: 10.64.32.18
-      port: 6378
-    rdb4-6379:
-      host: 10.64.32.18
-      port: 6379
-    rdb4-6380:
-      host: 10.64.32.18
-      port: 6380
-    rdb4-6381:
-      host: 10.64.32.18
-      port: 6381
-  codfw:
-    rdb1-aggr: #rdb2001
-      host: 10.192.0.119
-      port: 6378
-    rdb1-6379:
-      host: 10.192.0.119
-      port: 6379
-    rdb1-6380:
-      host: 10.192.0.119
-      port: 6380
-    rdb1-6381:
-      host: 10.192.0.119
-      port: 6381
-    rdb2-aggr: # rdb2003
-      host: 10.192.16.122
-      port: 6378
-    rdb2-6379:
-      host: 10.192.16.122
-      port: 6379
-    rdb2-6380:
-      host: 10.192.16.122
-      port: 6380
-    rdb2-6381:
-      host: 10.192.16.122
-      port: 6381
-    rdb3-aggr: # rdb2005
-      host: 10.192.32.133
-      port: 6378
-    rdb3-6379:
-      host: 10.192.32.133
-      port: 6379
-    rdb3-6380:
-      host: 10.192.32.133
-      port: 6380
-    rdb3-6381:
-      host: 10.192.32.133
-      port: 6381
-    rdb4-aggr: # rdb2005 - higher ports
-      host: 10.192.32.133
-      port: 6478
-    rdb4-6379:
-      host: 10.192.32.133
-      port: 6479
-    rdb4-6380:
-      host: 10.192.32.133
-      port: 6480
-    rdb4-6381:
-      host: 10.192.32.133
-      port: 6481
+profile::redis::multidc::category: jobqueue
+profile::redis::multidc::discovery: "appservers-rw"
+profile::redis::multidc::settings:
+  bind: '0.0.0.0'
+  appendonly: true
+  auto_aof_rewrite_min_size: '512mb'
+  client_output_buffer_limit: 'slave 2048mb 512mb 60'
+  dir: '/srv/redis'
+  masterauth: "%{::passwords::redis::main_password}"
+  maxmemory: '8Gb'
+  no_appendfsync_on_rewrite: true
+  requirepass: "%{::passwords::redis::main_password}"
+  save: '""'
+  stop_writes_on_bgsave_error: false
+  slave_read_only: false
+profile::redis::multidc::aof: false
diff --git a/modules/profile/manifests/jobqueue_redis/master.pp 
b/modules/profile/manifests/jobqueue_redis/master.pp
deleted file mode 100644
index 76cb5c9..0000000
--- a/modules/profile/manifests/jobqueue_redis/master.pp
+++ /dev/null
@@ -1,68 +0,0 @@
-class profile::jobqueue_redis::master(
-    $shards = hiera('redis_shards'),
-    $conftool_prefix = hiera('conftool_prefix'),
-) {
-    include ::passwords::redis
-    $ip = $facts['ipaddress_primary']
-    $instances = redis_get_instances($ip, $shards)
-    $password = $passwords::redis::main_password
-    $uris = apply_format("localhost:%s/${password}", $instances)
-    $redis_ports = join($instances, ' ')
-
-    system::role { 'role::jobqueue_redis::master': }
-
-    # Set up ipsec
-    class { 'redis::multidc::ipsec':
-        shards => $shards
-    }
-
-    class { '::ferm::ipsec_allow': }
-
-    file { '/etc/redis/replica/':
-        ensure => directory,
-        owner  => 'root',
-        group  => 'root',
-        mode   => '0444',
-    }
-
-    # Now the redis instances. We watch etcd every 5 minutes to fix config
-    # based on the mediawiki master datacenter
-    class { 'confd':
-        interval => 300,
-        prefix   => $conftool_prefix,
-    }
-
-    profile::multidc_redis::instances{ $instances:
-        ip        => $ip,
-        shards    => $shards,
-        discovery => 'appservers-rw',
-        aof       => true,
-        settings  => {
-            bind                        => '0.0.0.0',
-            appendonly                  => true,
-            auto_aof_rewrite_min_size   => '512mb',
-            client_output_buffer_limit  => 'slave 2048mb 512mb 60',
-            dir                         => '/srv/redis',
-            masterauth                  => $passwords::redis::main_password,
-            maxmemory                   => '8Gb',
-            no_appendfsync_on_rewrite   => true,
-            requirepass                 => $passwords::redis::main_password,
-            save                        => '""',
-            stop_writes_on_bgsave_error => false,
-            slave_read_only             => false,
-        },
-    }
-
-    # Add monitoring, using nrpe and not remote checks anymore
-    redis::monitoring::nrpe_instance { $instances: }
-
-    diamond::collector { 'Redis':
-        settings => { instances => join($uris, ', ') }
-    }
-
-    ferm::service { 'redis_jobqueue_role':
-        proto   => 'tcp',
-        notrack => true,
-        port    => inline_template('(<%= @redis_ports %>)'),
-    }
-}
diff --git a/modules/profile/manifests/redis/multidc.pp 
b/modules/profile/manifests/redis/multidc.pp
new file mode 100644
index 0000000..b40c1d5
--- /dev/null
+++ b/modules/profile/manifests/redis/multidc.pp
@@ -0,0 +1,58 @@
+class profile::redis::multidc(
+    $category = hiera('profile::redis::multidc::category'),
+    $all_shards = hiera('redis::shards'),
+    $conftool_prefix = hiera('conftool_prefix'),
+    $settings = hiera('profile::redis::multidc::settings'),
+    $discovery = hiera('profile::redis::multidc::discovery'),
+    $aof = hiera('profile::redis::multidc::aof', false)
+) {
+    include ::passwords::redis
+    $shards = $all_shards[$category]
+    $ip = $facts['ipaddress_primary']
+    $instances = redis_get_instances($ip, $shards)
+    $password = $passwords::redis::main_password
+    $uris = apply_format("localhost:%s/${password}", $instances)
+    $redis_ports = join($instances, ' ')
+
+    # Set up ipsec
+    class { 'redis::multidc::ipsec':
+        shards => $shards
+    }
+
+    class { '::ferm::ipsec_allow': }
+
+    file { '/etc/redis/replica/':
+        ensure => directory,
+        owner  => 'root',
+        group  => 'root',
+        mode   => '0444',
+    }
+
+    # Now the redis instances. We watch etcd every 5 minutes to fix config
+    # based on the active datacenter for the chosen discovery label
+    class { 'confd':
+        interval => 300,
+        prefix   => $conftool_prefix,
+    }
+
+    profile::redis::multidc_instance{ $instances:
+        ip        => $ip,
+        shards    => $shards,
+        discovery => $discovery,
+        aof       => $aof,
+        settings  => $settings
+    }
+
+    # Add monitoring, using nrpe and not remote checks anymore
+    redis::monitoring::nrpe_instance { $instances: }
+
+    diamond::collector { 'Redis':
+        settings => { instances => join($uris, ', ') }
+    }
+
+    ferm::service { 'redis_role':
+        proto   => 'tcp',
+        notrack => true,
+        port    => inline_template('(<%= @redis_ports %>)'),
+    }
+}
diff --git a/modules/profile/manifests/multidc_redis/instances.pp 
b/modules/profile/manifests/redis/multidc_instance.pp
similarity index 95%
rename from modules/profile/manifests/multidc_redis/instances.pp
rename to modules/profile/manifests/redis/multidc_instance.pp
index 9020ead..f9def03 100644
--- a/modules/profile/manifests/multidc_redis/instances.pp
+++ b/modules/profile/manifests/redis/multidc_instance.pp
@@ -1,7 +1,7 @@
-define profile::multidc_redis::instances(
+define profile::redis::multidc_instance(
     $ip,
+    $shards,
     $settings = {},
-    $shards = {},
     $discovery = undef,
     $aof = false,
 ) {
diff --git a/modules/role/manifests/jobqueue_redis/master.pp 
b/modules/role/manifests/jobqueue_redis/master.pp
index cb483c9..aa0dfd8 100644
--- a/modules/role/manifests/jobqueue_redis/master.pp
+++ b/modules/role/manifests/jobqueue_redis/master.pp
@@ -1,5 +1,5 @@
 class role::jobqueue_redis::master {
     include ::standard
     include ::base::firewall
-    include ::profile::jobqueue_redis::master
+    include ::profile::redis::multidc
 }

-- 
To view, visit https://gerrit.wikimedia.org/r/344479
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibe461edbd43bf5a182c1125c68eb08f5e98edf59
Gerrit-PatchSet: 1
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Giuseppe Lavagetto <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to