Yuvipanda has uploaded a new change for review.
https://gerrit.wikimedia.org/r/208849
Change subject: zookeeper: Refactor roles to be more generic
......................................................................
zookeeper: Refactor roles to be more generic
People outside of analytics might want to use zookeeper, so
this refactors the zookeeper roles to be not specific to
analytics.
- Rename from role::analytics::* to role::*
- Use hiera for keeping list of zookeeper hosts, rather than
realm branching
- Kill the ::config class
- Use includes rather than inheritance
- Use has_ganglia flag to enable / disable reporting to ganglia
This enables it for prod and disables it on labs, which has
no ganglia
Change-Id: I3bb793beb422c5d93f86a99bd703d4e4b3ff7147
---
M hieradata/eqiad.yaml
M manifests/role/analytics/hive.pp
M manifests/role/analytics/kafka.pp
D manifests/role/analytics/zookeeper.pp
A manifests/role/zookeeper.pp
M manifests/site.pp
6 files changed, 94 insertions(+), 119 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/operations/puppet
refs/changes/49/208849/1
diff --git a/hieradata/eqiad.yaml b/hieradata/eqiad.yaml
index 39fe083..b66c0a1 100644
--- a/hieradata/eqiad.yaml
+++ b/hieradata/eqiad.yaml
@@ -18,3 +18,7 @@
- '10.64.48.95:11211:1 "shard17"'
- '10.64.48.96:11211:1 "shard18"'
ganglia_class: "old"
+zookeeper_hosts:
+ analytics1023.eqiad.wmnet => '1023'
+ analytics1024.eqiad.wmnet => '1024'
+ analytics1025.eqiad.wmnet => '1025'
diff --git a/manifests/role/analytics/hive.pp b/manifests/role/analytics/hive.pp
index 750b1b4..0a66320 100644
--- a/manifests/role/analytics/hive.pp
+++ b/manifests/role/analytics/hive.pp
@@ -17,7 +17,6 @@
#
class role::analytics::hive::config {
# require zookeeper config to get zookeeper hosts array.
- include role::analytics::zookeeper::config
include role::analytics::hadoop::config
# Set this pretty high, to avoid limiting the number
@@ -38,7 +37,7 @@
}
# Hive uses Zookeeper for table locking.
- $zookeeper_hosts = $role::analytics::zookeeper::config::hosts_array
+ $zookeeper_hosts = keys(hiera('zookeeper_hosts'))
# We set support concurrency to false by default.
# if someone needs to use it in their hive job, they
diff --git a/manifests/role/analytics/kafka.pp
b/manifests/role/analytics/kafka.pp
index d63cb02..24c157f 100644
--- a/manifests/role/analytics/kafka.pp
+++ b/manifests/role/analytics/kafka.pp
@@ -15,8 +15,6 @@
# include role::analytics::kafka::server
#
class role::analytics::kafka::config {
- require role::analytics::zookeeper::config
-
if ($::realm == 'labs') {
# In labs, this can be set via hiera, or default to $::instanceproject
$kafka_cluster_name =
hiera('role::analytics::kafka::config::kafka_cluster_name', $::instanceproject)
@@ -108,7 +106,7 @@
} else {
$brokers_array = []
}
- $zookeeper_hosts = $role::analytics::zookeeper::config::hosts_array
+ $zookeeper_hosts = keys(hiera('zookeeper_hosts'))
$zookeeper_chroot = "/kafka/${kafka_cluster_name}"
$zookeeper_url = inline_template("<%= zookeeper_hosts.sort.join(',')
%><%= zookeeper_chroot %>")
}
diff --git a/manifests/role/analytics/zookeeper.pp
b/manifests/role/analytics/zookeeper.pp
deleted file mode 100644
index 4776a76..0000000
--- a/manifests/role/analytics/zookeeper.pp
+++ /dev/null
@@ -1,113 +0,0 @@
-# role/analytics/zookeeper.pp
-#
-# Role classes for Analytics Zookeeper nodes.
-# These role classes will configure Zookeeper properly in either
-# the Analytics labs or Analytics production environments.
-#
-# Usage:
-#
-# If you only need Zookeeper client configs to talk to Zookeeper servers:
-# include role::analytics::zookeeper::client
-#
-# If you want to set up a Zookeeper server:
-# include role::analytics::zookeeper::server
-#
-
-# == Class role::analytics::zookeeper::config
-# Bare config role class for client and server classes.
-# You may include this class manually if you need to know use the
-# $role::analytics::zookeeper::hosts or
-# $role::analytics::zookeeper::hosts_array variables.
-#
-class role::analytics::zookeeper::config {
-
- # Lookup labs zookeeper hosts from hiera.
- if $::realm == 'labs' {
- $hosts = hiera('role::analytics::zookeeper::config::hosts', {
"${::fqdn}" => '1' } )
- }
- # else production
- else {
- $hosts = {
- 'analytics1023.eqiad.wmnet' => '1023',
- 'analytics1024.eqiad.wmnet' => '1024',
- 'analytics1025.eqiad.wmnet' => '1025',
- }
- }
-
- # maintain a $hosts_array variable here for
- # cases where you need a list of zookeeper hosts,
- # rather than a hash with ZK IDs. (This is used
- # in role/analytics/hive.pp, for example.)
- $hosts_array = keys($hosts)
-}
-
-
-# == Class role::analytics::zookeeper::client
-#
-class role::analytics::zookeeper::client {
- require role::analytics::zookeeper::config
-
- $version = $::lsbdistcodename ? {
- 'trusty' => '3.4.5+dfsg-1',
- 'precise' => '3.3.5+dfsg1-1ubuntu1',
- }
-
- class { '::zookeeper':
- hosts => $role::analytics::zookeeper::config::hosts,
- version => $version,
- # Default tick_time is 2000ms, this should allow a max
- # of 16 seconds of latency for Zookeeper client sessions.
- # See comments in role::analytics::kafka::server for more info.
- sync_limit => 8,
- }
-}
-
-# == Class role::analytics::zookeeper::server
-#
-class role::analytics::zookeeper::server inherits
role::analytics::zookeeper::client {
- system::role { 'role::analytics::zookeeper::server':
- description => 'Analytics Cluster Zookeeper Server'
- }
-
- class { '::zookeeper::server': }
-
- if ($::realm == 'labs') {
- $ganglia_host = 'aggregator.eqiad.wmflabs'
- $ganglia_port = 50090
- }
- else {
- # TODO: use variables from new ganglia module once it is finished.
- $ganglia_host = '239.192.1.32'
- $ganglia_port = 8649
-
- # Only allow hosts in the Analytics Cluster to
- # connect to the Zookeeper admin client port.
- #
- # We don't include base::firewall yet, but do
- # want to restrict access to administrative
- # services. We need defs.erb to be rendered
- # so we can reference defined networks in rules.
- # NOTE: This should be removed if we get a useable
- # base::firewall class.
- include ferm
- include network::constants
- ferm::conf { 'defs':
- # defs can always be present.
- # They don't actually do firewalling.
- ensure => 'present',
- prio => '00',
- content => template('base/firewall/defs.erb')
- }
-
- ferm::service { 'zookeeper':
- proto => 'tcp',
- # Zookeeper client, protocol, and jmx listen ports.
- port => "(2181 2182 2183 ${$::zookeeper::server::jmx_port})",
- srange => '($ANALYTICS_NETWORKS)',
- }
- # Use jmxtrans for sending metrics to ganglia
- class { 'zookeeper::jmxtrans':
- ganglia => "${ganglia_host}:${ganglia_port}",
- }
- }
-}
diff --git a/manifests/role/zookeeper.pp b/manifests/role/zookeeper.pp
new file mode 100644
index 0000000..8a67c0b
--- /dev/null
+++ b/manifests/role/zookeeper.pp
@@ -0,0 +1,87 @@
+# role/zookeeper.pp
+#
+# Classes for Zookeeper nodes.
+# These role classes will configure Zookeeper properly in either
+# the labs or production environments.
+#
+# Usage:
+#
+# If you only need Zookeeper client configs to talk to Zookeeper servers:
+# include role::zookeeper::client
+#
+# If you want to set up a Zookeeper server:
+# include role::zookeeper::server
+#
+#
+# You need to include the hiera variable 'zookeeper_hosts' as a
+# assoc array with key being name of node and value being zookeeper id
+# for the client / server roles to work.
+
+# == Class role::zookeeper::client
+#
+class role::zookeeper::client {
+
+ $version = $::lsbdistcodename ? {
+ 'trusty' => '3.4.5+dfsg-1',
+ 'precise' => '3.3.5+dfsg1-1ubuntu1',
+ }
+
+ $hosts = hiera('zookeeper_hosts')
+
+ class { '::zookeeper':
+ hosts => $hosts,
+ version => $version,
+ # Default tick_time is 2000ms, this should allow a max
+ # of 16 seconds of latency for Zookeeper client sessions.
+ # See comments in role::analytics::kafka::server for more info.
+ sync_limit => 8,
+ }
+}
+
+# == Class role::zookeeper::server
+#
+class role::zookeeper::server {
+ system::role { 'role::zookeeper::server':
+ description => 'Analytics Cluster Zookeeper Server'
+ }
+
+ include role::zookeeper::client
+
+ class { '::zookeeper::server': }
+
+ if hiera('has_ganglia', true) {
+ # TODO: use variables from new ganglia module once it is finished.
+ $ganglia_host = '239.192.1.32'
+ $ganglia_port = 8649
+
+ # Only allow hosts in the Analytics Cluster to
+ # connect to the Zookeeper admin client port.
+ #
+ # We don't include base::firewall yet, but do
+ # want to restrict access to administrative
+ # services. We need defs.erb to be rendered
+ # so we can reference defined networks in rules.
+ # NOTE: This should be removed if we get a useable
+ # base::firewall class.
+ include ferm
+ include network::constants
+ ferm::conf { 'defs':
+ # defs can always be present.
+ # They don't actually do firewalling.
+ ensure => 'present',
+ prio => '00',
+ content => template('base/firewall/defs.erb')
+ }
+
+ ferm::service { 'zookeeper':
+ proto => 'tcp',
+ # Zookeeper client, protocol, and jmx listen ports.
+ port => "(2181 2182 2183 ${$::zookeeper::server::jmx_port})",
+ srange => '($ANALYTICS_NETWORKS)',
+ }
+ # Use jmxtrans for sending metrics to ganglia
+ class { 'zookeeper::jmxtrans':
+ ganglia => "${ganglia_host}:${ganglia_port}",
+ }
+ }
+}
diff --git a/manifests/site.pp b/manifests/site.pp
index 02363d9..f684157 100644
--- a/manifests/site.pp
+++ b/manifests/site.pp
@@ -142,7 +142,7 @@
node /analytics102[345].eqiad.wmnet/ {
role analytics
include standard
- include role::analytics::zookeeper::server
+ include role::zookeeper::server
}
# Analytics1026 is the Impala master
--
To view, visit https://gerrit.wikimedia.org/r/208849
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I3bb793beb422c5d93f86a99bd703d4e4b3ff7147
Gerrit-PatchSet: 1
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Yuvipanda <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits