From 233119ebb240e533667f6ec40bd7af54a2a862ec Mon Sep 17 00:00:00 2001 From: Emilien Macchi Date: Fri, 3 Oct 2014 14:41:47 -0400 Subject: [PATCH 1/2] loadbalancer: implement rabbitmq binding Implement RabbitMQ binding with these options: - disabled by default for backward compatibility - '5672' is the port by default - mode TCP with roundrobin balance --- manifests/loadbalancer.pp | 20 ++++++++++++++++++++ spec/classes/cloud_loadbalancer_spec.rb | 14 ++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/manifests/loadbalancer.pp b/manifests/loadbalancer.pp index f1f4592e..450c54e9 100644 --- a/manifests/loadbalancer.pp +++ b/manifests/loadbalancer.pp @@ -150,6 +150,13 @@ # If set to false, no binding will be configure # Defaults to true # +# [*rabbitmq*] +# (optional) Enable or not RabbitMQ binding. +# If true, both public and internal will attempt to be created except if vip_internal_ip is set to false (backward compatibility). +# If set to ['10.0.0.1'], only IP in the array (or in the string) will be configured in the pool. They must be part of keepalived_ip options. +# If set to false, no binding will be configure (default for backward compatibility) +# Defaults to false +# # [*keystone_api_admin*] # (optional) Enable or not Keystone admin binding. # If true, both public and internal will attempt to be created except if vip_internal_ip is set to false (backward compatibility). @@ -184,6 +191,7 @@ class cloud::loadbalancer( $trove_api = true, $horizon = true, $horizon_ssl = false, + $rabbitmq = false, $spice = true, $haproxy_auth = 'admin:changeme', $keepalived_state = 'BACKUP', @@ -211,6 +219,7 @@ class cloud::loadbalancer( $spice_bind_options = [], $horizon_bind_options = [], $horizon_ssl_bind_options = [], + $rabbitmq_bind_options = [], $galera_bind_options = [], $ks_ceilometer_public_port = 8777, $ks_cinder_public_port = 8776, @@ -227,6 +236,7 @@ class cloud::loadbalancer( $ks_nova_public_port = 8774, $ks_swift_public_port = 8080, $ks_trove_public_port = 8779, + $rabbitmq_port = 5672, $horizon_port = 80, $horizon_ssl_port = 443, $spice_port = 6082, @@ -370,6 +380,16 @@ class cloud::loadbalancer( }, bind_options => $spice_bind_options, } + cloud::loadbalancer::binding { 'rabbitmq_cluster': + ip => $rabbitmq, + port => $rabbitmq_port, + options => { + 'mode' => 'tcp', + 'option' => ['tcpka', 'tcplog', 'forwardfor'], + 'balance' => 'roundrobin', + }, + bind_options => $rabbitmq_bind_options, + } cloud::loadbalancer::binding { 'trove_api_cluster': ip => $trove_api, port => $ks_trove_public_port, diff --git a/spec/classes/cloud_loadbalancer_spec.rb b/spec/classes/cloud_loadbalancer_spec.rb index 4d4ad4d6..0e4177a0 100644 --- a/spec/classes/cloud_loadbalancer_spec.rb +++ b/spec/classes/cloud_loadbalancer_spec.rb @@ -467,6 +467,20 @@ describe 'cloud::loadbalancer' do :bind_options => ['ssl', 'crt'] )} end + context 'configure RabbitMQ binding' do + before do + params.merge!( :rabbitmq => true ) + end + it { is_expected.to contain_haproxy__listen('rabbitmq_cluster').with( + :ipaddress => [params[:vip_public_ip]], + :ports => '5672', + :options => { + 'mode' => 'tcp', + 'balance' => 'roundrobin', + 'option' => ['tcpka', 'tcplog', 'forwardfor'], + } + )} + end end # shared:: openstack loadbalancer context 'on Debian platforms' do From f02268b75c18d363379fb428189d328657e71f78 Mon Sep 17 00:00:00 2001 From: Emilien Macchi Date: Fri, 3 Oct 2014 14:57:00 -0400 Subject: [PATCH 2/2] messaging: support HAproxy binding As an option and disabled by default for backward compatibility, allow to export a puppet resource to create HAproxy binding for RabbitMQ service. Also add an option to specify the RabbitMQ service TCP port. --- manifests/messaging.pp | 35 ++++++++++++++++++++++++---- spec/classes/cloud_messaging_spec.rb | 3 ++- templates/loadbalancer/monitor.erb | 4 ++++ 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/manifests/messaging.pp b/manifests/messaging.pp index dad5b4b3..99457f6f 100644 --- a/manifests/messaging.pp +++ b/manifests/messaging.pp @@ -28,14 +28,30 @@ # Defaults to 'rabbitpassword' # # [*cluster_node_type*] -# (optionnal) Store the queues on the disc or in the RAM. +# (optional) Store the queues on the disc or in the RAM. # Could be set to 'disk' or 'ram'. # Defaults to 'disc' - +# +# [*haproxy_binding*] +# (optional) Enable or not HAproxy binding for load-balancing. +# Defaults to false +# +# [*rabbitmq_ip*] +# (optional) IP address of RabbitMQ interface. +# Required when using HAproxy binding. +# Defaults to $::ipaddress +# +# [*rabbitmq_port*] +# (optional) Port of RabbitMQ service. +# Defaults to '5672' +# class cloud::messaging( $cluster_node_type = 'disc', $rabbit_names = $::hostname, - $rabbit_password = 'rabbitpassword' + $rabbit_password = 'rabbitpassword', + $haproxy_binding = false, + $rabbitmq_ip = $::ipaddress, + $rabbitmq_port = '5672', ){ # we ensure having an array @@ -63,7 +79,8 @@ class cloud::messaging( config_cluster => true, cluster_nodes => $array_rabbit_names, wipe_db_on_cookie_change => true, - cluster_node_type => $cluster_node_type + cluster_node_type => $cluster_node_type, + port => $rabbitmq_port, } rabbitmq_vhost { '/': @@ -91,4 +108,14 @@ class cloud::messaging( provider => 'rabbitmqctl', } + if $haproxy_binding { + @@haproxy::balancermember{"${::fqdn}-rabbitmq": + listening_service => 'rabbitmq_cluster', + server_names => $::hostname, + ipaddresses => $rabbitmq_ip, + ports => $rabbitmq_port, + options => 'check inter 5s rise 2 fall 3' + } + } + } diff --git a/spec/classes/cloud_messaging_spec.rb b/spec/classes/cloud_messaging_spec.rb index fbfcae77..072d18ac 100644 --- a/spec/classes/cloud_messaging_spec.rb +++ b/spec/classes/cloud_messaging_spec.rb @@ -36,7 +36,8 @@ describe 'cloud::messaging' do :config_cluster => true, :cluster_nodes => params[:rabbit_names], :wipe_db_on_cookie_change => true, - :cluster_node_type => 'disc' + :cluster_node_type => 'disc', + :port => '5672', ) end diff --git a/templates/loadbalancer/monitor.erb b/templates/loadbalancer/monitor.erb index e8749deb..a8fbc604 100644 --- a/templates/loadbalancer/monitor.erb +++ b/templates/loadbalancer/monitor.erb @@ -38,6 +38,10 @@ monitor fail if metadata_api_dead acl spice_dead nbsrv(spice_cluster) lt 1 monitor fail if spice_dead <%- end -%> +<%- if @rabbitmq -%> +acl rabbitmq_dead nbsrv(rabbitmq_cluster) lt 1 +monitor fail if rabbitmq_dead +<%- end -%> <%- if @glance_api -%> acl glance_api_dead nbsrv(glance_api_cluster) lt 1 monitor fail if glance_api_dead