{"id":378,"date":"2017-04-24T21:10:00","date_gmt":"2017-04-24T21:10:00","guid":{"rendered":"https:\/\/questy.org\/?p=378"},"modified":"2024-09-26T19:02:37","modified_gmt":"2024-09-26T19:02:37","slug":"scaling-puppet-enterprise-part-iv-activemq-hub-and-spokes","status":"publish","type":"post","link":"https:\/\/questy.org\/index.php\/2017\/04\/24\/scaling-puppet-enterprise-part-iv-activemq-hub-and-spokes\/","title":{"rendered":"Scaling Puppet Enterprise &#8211; Part IV &#8211; ActiveMQ Hub and Spokes"},"content":{"rendered":"\n<p><strong><em>As in the previous installment, you need to have already completed a few steps before arriving at this post. You should have already completed a &#8220;split installation&#8221; (Documented <a href=\"http:\/\/questy.org\/blog\/2017\/04\/18\/scaling-puppet-enterprise-part-ii-installation\/\">here<\/a>). Also, your load balancer needs to be configured and running. The procedure for this portion can be found <a href=\"http:\/\/questy.org\/blog\/2017\/04\/21\/scaling-puppet-enterprise-part-iii-additional-compilers-part-1\/\">here<\/a>. Finally, you should have the additional compilers installed and configured along with two example agent nodes as covered <a href=\"http:\/\/questy.org\/blog\/2017\/04\/21\/scaling-puppet-enterprise-part-iiia-additional-compilers\/\">here<\/a> and <a href=\"http:\/\/questy.org\/blog\/2017\/04\/21\/scaling-puppet-enterprise-part-iiib-additional-compilers\/\">here<\/a>.. If you&#8217;ve completed all these portions, you are now ready to configure ActiveMQ for scaling MCollective.<\/em><\/strong><\/p>\n\n\n\n<p>Once the preceding items are performed, you may find it necessary to add ActiveMQ hubs and spokes to increase capacity for MCollective and\/or the Code Sync and Code Manager functions of Puppet Enterprise. This installment documents how to install these additional components and tie them into the existing infrastructure.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Create an ActiveMQ Hub<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to the Puppet Enterprise Console in your browser.<\/li>\n\n\n\n<li>Select <strong>Nodes | Classification<\/strong> and create a new group called <strong>&#8220;PE ActiveMQ Hub&#8221;<\/strong><\/li>\n\n\n\n<li>Stand up two new nodes for the ActiveMQ Hub and Spoke (in our example, <strong>activemq-hub.example.com<\/strong> and <strong>activemq-spoke.example.com<\/strong>) according to the following specifications:<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/ssconsultinggroup.net\/wp-content\/uploads\/2020\/05\/hub_spoke_specs.png?w=900\" alt=\"\" class=\"wp-image-1530\"\/><\/figure>\n\n\n\n<p>Once your nodes have been provisioned, install the Puppet Agent on each node, <strong>making sure to point the installer DIRECTLY at the MoM (<\/strong>master.example.com**) instead of at the compiler VIP.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -k https:\/\/master.example.com:8140\/packages\/current\/install.bash | bash<\/code><\/pre>\n\n\n\n<p>and let the agent install complete in its entirety.<\/p>\n\n\n\n<p>Next, from your browser, retrieve the Puppet Enterprise Console and select the &#8220;<strong>PE ActiveMQ Hub<\/strong>&#8221; group you created earlier. Pin the <strong>activemq-hub.example.com<\/strong> node into the <strong>PE ActiveMQ Hub<\/strong> group.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Select the &#8220;<strong>Classes<\/strong>&#8221; tab and add a new class entitled: &#8220;<strong>puppet_enterprise::profile::amq::hub<\/strong>&#8220;<\/li>\n\n\n\n<li>Click &#8220;<strong>Add Class<\/strong>&#8220;.<\/li>\n\n\n\n<li>Under the Parameters drop-down, select &#8220;<strong>network_collector_spoke_collect_tag<\/strong>&#8221; and set its value to &#8220;<strong>pe-amq-network-connectors-for-activemq-hub.example.com<\/strong>&#8220;<\/li>\n\n\n\n<li>Commit the changes.<\/li>\n\n\n\n<li>SSH to the <strong>activemq-hub.example.com<\/strong> and run <strong>puppet agent -t<\/strong> to make all your changes effective for the Hub node.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Create ActiveMQ Spoke (or &#8220;broker&#8221;)<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>In the Puppet Enterprise Console, Select <strong>Nodes | Classification | PE ActiveMQ Broker<\/strong><\/li>\n\n\n\n<li>Pin your new ActiveMQ broker into the <strong>PE ActiveMQ Broker<\/strong> group.<\/li>\n\n\n\n<li>Select the &#8220;<strong>Classes<\/strong>&#8221; tab.<\/li>\n\n\n\n<li>Under the <strong>puppet_enterprise::profile::amp::broker<\/strong> class, choose the <strong>activemq_hubname<\/strong> parameter and set it to the FQDN of the hub you just created. In our case, <strong>activemq-hub.example.com<\/strong>.<\/li>\n\n\n\n<li>SSH to the new broker (<strong>activemq-spoke.example.com<\/strong>) and run <strong>puppet agent -t<\/strong>.<\/li>\n\n\n\n<li>Finally, unpin <strong>master.example.com<\/strong> from the <strong>PE ActiveMQ Broker<\/strong> group.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Conclusion<\/h3>\n\n\n\n<p>At this point, you should have:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Puppet Master of Masters &#8211; <strong>master.example.com<\/strong><\/li>\n\n\n\n<li>PuppetDB &#8211; <strong>puppetdb.example.com<\/strong><\/li>\n\n\n\n<li>PE Console &#8211; <strong>console.example.com<\/strong><\/li>\n\n\n\n<li>HAProxy Node &#8211; <strong>compiler.example.com<\/strong><\/li>\n\n\n\n<li>2 Catalog compilers &#8211; <strong>compile1.example.com<\/strong> and <strong>compile2.example.com<\/strong><\/li>\n\n\n\n<li>An ActiveMQ Hub &#8211; <strong>activemq-hub.example.com<\/strong><\/li>\n\n\n\n<li>An ActiveMQ Spoke &#8211; <strong>activemq-spoke.example.com<\/strong><\/li>\n\n\n\n<li>Two Agent Nodes &#8211; <strong>agent1.example.com<\/strong> and <strong>agent2.example.com<\/strong><\/li>\n<\/ul>\n\n\n\n<p>with their respective configurations. Your serving infrastructure is complete, and you are now ready to configure it for use.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>As in the previous installment, you need to have already completed a few steps before arriving at this post. You should have already completed a &#8220;split installation&#8221; (Documented here). Also, your load balancer needs to be configured and running. The procedure for this portion can be found here. Finally, you should have the additional compilers [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[2,4],"tags":[],"class_list":["post-378","post","type-post","status-publish","format-standard","hentry","category-puppet-administration","category-puppet-education"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/questy.org\/index.php\/wp-json\/wp\/v2\/posts\/378","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/questy.org\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/questy.org\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/questy.org\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/questy.org\/index.php\/wp-json\/wp\/v2\/comments?post=378"}],"version-history":[{"count":1,"href":"https:\/\/questy.org\/index.php\/wp-json\/wp\/v2\/posts\/378\/revisions"}],"predecessor-version":[{"id":379,"href":"https:\/\/questy.org\/index.php\/wp-json\/wp\/v2\/posts\/378\/revisions\/379"}],"wp:attachment":[{"href":"https:\/\/questy.org\/index.php\/wp-json\/wp\/v2\/media?parent=378"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/questy.org\/index.php\/wp-json\/wp\/v2\/categories?post=378"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/questy.org\/index.php\/wp-json\/wp\/v2\/tags?post=378"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}