Add tripleo::loadbalancer.

This class configures an HAProxy/keepalived setup for TripleO.
This commit is contained in:
Dan Prince 2015-02-02 12:47:15 -05:00
parent 06334224a4
commit 0123f3949e
1 changed files with 419 additions and 0 deletions

View File

@ -0,0 +1,419 @@
# Copyright 2014 Red Hat, Inc.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
# == Class: tripleo::loadbalancer
#
# Configure an HAProxy/keepalived loadbalancer for TripleO.
class tripleo::loadbalancer (
$controller_host = undef,
$controller_virtual_ip = undef,
$control_virtual_interface = undef,
$public_virtual_interface = undef,
$public_virtual_ip = undef,
$keystone_admin = false,
$keystone_public = false,
$neutron = false,
$cinder = false,
$glance_api = false,
$glance_registry = false,
$nova_ec2 = false,
$nova_osapi = false,
$nova_metadata = false,
$nova_novncproxy = false,
$ceilometer = false,
$swift_proxy_server = false,
$heat_api = false,
$heat_cloudwatch = false,
$heat_cfn = false,
$horizon = false,
$mysql = false,
$rabbitmq = false,
) {
case $::osfamily {
'RedHat': {
$keepalived_name_is_process = false
$keepalived_vrrp_script = 'systemctl status haproxy.service'
} # RedHat
'Debian': {
$keepalived_name_is_process = true
$keepalived_vrrp_script = undef
}
default: {
warning('Please configure keepalived defaults in tripleo::loadbalancer.')
$keepalived_name_is_process = undef
$keepalived_vrrp_script = undef
}
}
class { 'keepalived': }
keepalived::vrrp_script { 'haproxy':
name_is_process => $keepalived_name_is_process,
script => $keepalived_vrrp_script,
}
# KEEPALIVE INSTANCE CONTROL
keepalived::instance { '51':
interface => $control_virtual_interface,
virtual_ips => [join([$controller_virtual_ip, ' dev ', $control_virtual_interface])],
state => 'MASTER',
track_script => ['haproxy'],
priority => 101,
}
# KEEPALIVE INSTANCE PUBLIC
keepalived::instance { '52':
interface => $public_virtual_interface,
virtual_ips => [join([$public_virtual_ip, ' dev ', $public_virtual_interface])],
state => 'MASTER',
track_script => ['haproxy'],
priority => 101,
}
sysctl::value { 'net.ipv4.ip_nonlocal_bind': value => '1' }
class { 'haproxy':
global_options => {
'log' => '/dev/log local0',
'pidfile' => '/var/run/haproxy.pid',
'user' => 'haproxy',
'group' => 'haproxy',
'daemon' => '',
'maxconn' => '4000',
},
defaults_options => {
'mode' => 'tcp',
'log' => 'global',
'retries' => '3',
'maxconn' => '150',
'option' => [ 'tcpka', 'tcplog' ],
'timeout' => [ 'http-request 10s', 'queue 1m', 'connect 10s', 'client 1m', 'server 1m', 'check 10s' ],
},
}
haproxy::listen { 'haproxy.stats':
ipaddress => '*',
ports => '1993',
mode => 'http',
options => {
'stats' => 'enable',
},
collect_exported => false,
}
if $keystone_admin {
haproxy::listen { 'keystone_admin':
ipaddress => [$controller_virtual_ip, $public_virtual_ip],
ports => 35357,
options => {
'option' => [ 'httpchk GET /' ]
},
collect_exported => false,
}
haproxy::balancermember { 'keystone_admin':
listening_service => 'keystone_admin',
ports => '35357',
ipaddresses => $controller_host,
options => ['check', 'inter 2000', 'rise 2', 'fall 5'],
}
}
if $keystone_public {
haproxy::listen { 'keystone_public':
ipaddress => [$controller_virtual_ip, $public_virtual_ip],
ports => 5000,
options => {
'option' => [ 'httpchk GET /' ]
},
collect_exported => false,
}
haproxy::balancermember { 'keystone_public':
listening_service => 'keystone_public',
ports => '5000',
ipaddresses => $controller_host,
options => ['check', 'inter 2000', 'rise 2', 'fall 5'],
}
}
if $neutron {
haproxy::listen { 'neutron':
ipaddress => [$controller_virtual_ip, $public_virtual_ip],
ports => 9696,
options => {
'option' => [ 'httpchk GET /' ]
},
collect_exported => false,
}
haproxy::balancermember { 'neutron':
listening_service => 'neutron',
ports => '9696',
ipaddresses => $controller_host,
options => ['check', 'inter 2000', 'rise 2', 'fall 5'],
}
}
if $cinder {
haproxy::listen { 'cinder':
ipaddress => [$controller_virtual_ip, $public_virtual_ip],
ports => 8776,
options => {
'option' => [ 'httpchk GET /' ]
},
collect_exported => false,
}
haproxy::balancermember { 'cinder':
listening_service => 'cinder',
ports => '8776',
ipaddresses => $controller_host,
options => ['check', 'inter 2000', 'rise 2', 'fall 5'],
}
}
if $glance_api {
haproxy::listen { 'glance_api':
ipaddress => [$controller_virtual_ip, $public_virtual_ip],
ports => 9292,
options => {
'option' => [ 'httpchk GET /' ]
},
collect_exported => false,
}
haproxy::balancermember { 'glance_api':
listening_service => 'glance_api',
ports => '9292',
ipaddresses => $controller_host,
options => ['check', 'inter 2000', 'rise 2', 'fall 5'],
}
}
if $glance_registry {
haproxy::listen { 'glance_registry':
ipaddress => [$controller_virtual_ip, $public_virtual_ip],
ports => 9191,
options => {
'option' => [ 'httpchk GET /' ]
},
collect_exported => false,
}
haproxy::balancermember { 'glance_registry':
listening_service => 'glance_registry',
ports => '9191',
ipaddresses => $controller_host,
options => ['check', 'inter 2000', 'rise 2', 'fall 5'],
}
}
if $nova_ec2 {
haproxy::listen { 'nova_ec2':
ipaddress => [$controller_virtual_ip, $public_virtual_ip],
ports => 8773,
options => {
'option' => [ 'httpchk GET /' ]
},
collect_exported => false,
}
haproxy::balancermember { 'nova_ec2':
listening_service => 'nova_ec2',
ports => '8773',
ipaddresses => $controller_host,
options => ['check', 'inter 2000', 'rise 2', 'fall 5'],
}
}
if $nova_osapi {
haproxy::listen { 'nova_osapi':
ipaddress => [$controller_virtual_ip, $public_virtual_ip],
ports => 8774,
options => {
'option' => [ 'httpchk GET /' ]
},
collect_exported => false,
}
haproxy::balancermember { 'nova_osapi':
listening_service => 'nova_osapi',
ports => '8774',
ipaddresses => $controller_host,
options => ['check', 'inter 2000', 'rise 2', 'fall 5'],
}
}
if $nova_metadata {
haproxy::listen { 'nova_metadata':
ipaddress => [$controller_virtual_ip, $public_virtual_ip],
ports => 8775,
options => {
'option' => [ 'httpchk GET /' ]
},
collect_exported => false,
}
haproxy::balancermember { 'nova_metadata':
listening_service => 'nova_metadata',
ports => '8775',
ipaddresses => $controller_host,
options => ['check', 'inter 2000', 'rise 2', 'fall 5'],
}
}
if $nova_novncproxy {
haproxy::listen { 'nova_novncproxy':
ipaddress => [$controller_virtual_ip, $public_virtual_ip],
ports => 6080,
options => {
'option' => [ 'httpchk GET /' ]
},
collect_exported => false,
}
haproxy::balancermember { 'nova_novncproxy':
listening_service => 'nova_novncproxy',
ports => '6080',
ipaddresses => $controller_host,
options => ['check', 'inter 2000', 'rise 2', 'fall 5'],
}
}
if $ceilometer {
haproxy::listen { 'ceilometer':
ipaddress => [$controller_virtual_ip, $public_virtual_ip],
ports => 8777,
collect_exported => false,
}
haproxy::balancermember { 'ceilometer':
listening_service => 'ceilometer',
ports => '8777',
ipaddresses => $controller_host,
options => [],
}
}
if $swift_proxy_server {
haproxy::listen { 'swift_proxy_server':
ipaddress => [$controller_virtual_ip, $public_virtual_ip],
ports => 8080,
options => {
'option' => [ 'httpchk GET /info' ]
},
collect_exported => false,
}
haproxy::balancermember { 'swift_proxy_server':
listening_service => 'swift_proxy_server',
ports => '8080',
ipaddresses => $controller_host,
options => ['check', 'inter 2000', 'rise 2', 'fall 5'],
}
}
if $heat_api {
haproxy::listen { 'heat_api':
ipaddress => [$controller_virtual_ip, $public_virtual_ip],
ports => 8004,
options => {
'option' => [ 'httpchk GET /' ]
},
collect_exported => false,
}
haproxy::balancermember { 'heat_api':
listening_service => 'heat_api',
ports => '8004',
ipaddresses => $controller_host,
options => ['check', 'inter 2000', 'rise 2', 'fall 5'],
}
}
if $heat_cloudwatch {
haproxy::listen { 'heat_cloudwatch':
ipaddress => [$controller_virtual_ip, $public_virtual_ip],
ports => 8003,
options => {
'option' => [ 'httpchk GET /' ]
},
collect_exported => false,
}
haproxy::balancermember { 'heat_cloudwatch':
listening_service => 'heat_cloudwatch',
ports => '8003',
ipaddresses => $controller_host,
options => ['check', 'inter 2000', 'rise 2', 'fall 5'],
}
}
if $heat_cfn {
haproxy::listen { 'heat_cfn':
ipaddress => [$controller_virtual_ip, $public_virtual_ip],
ports => 8000,
options => {
'option' => [ 'httpchk GET /' ]
},
collect_exported => false,
}
haproxy::balancermember { 'heat_cfn':
listening_service => 'heat_cfn',
ports => '8000',
ipaddresses => $controller_host,
options => ['check', 'inter 2000', 'rise 2', 'fall 5'],
}
}
if $horizon {
haproxy::listen { 'horizon':
ipaddress => [$controller_virtual_ip, $public_virtual_ip],
ports => 80,
options => {
'option' => [ 'httpchk GET /' ]
},
collect_exported => false,
}
haproxy::balancermember { 'horizon':
listening_service => 'horizon',
ports => '80',
ipaddresses => $controller_host,
options => ['check', 'inter 2000', 'rise 2', 'fall 5'],
}
}
if $mysql {
haproxy::listen { 'mysql':
ipaddress => [$controller_virtual_ip],
ports => 3306,
options => {
'timeout' => [ 'client 0', 'server 0' ]
},
collect_exported => false,
}
haproxy::balancermember { 'mysql':
listening_service => 'mysql',
ports => '3306',
ipaddresses => $controller_host,
options => ['check', 'inter 2000', 'rise 2', 'fall 5'],
}
}
if $rabbitmq {
haproxy::listen { 'rabbitmq':
ipaddress => [$controller_virtual_ip, $public_virtual_ip],
ports => 5672,
options => {
'timeout' => [ 'client 0', 'server 0' ]
},
collect_exported => false,
}
haproxy::balancermember { 'rabbitmq':
listening_service => 'rabbitmq',
ports => '5672',
ipaddresses => $controller_host,
options => ['check', 'inter 2000', 'rise 2', 'fall 5'],
}
}
}