Loadbalancer: Add support for Redis

Add support for Redis in the loadbalancer setup.
Redis loadbalancing system is particular as it does not provide
clustering capabilities yet, hence this pattern[1] will be applied.

[1] https://github.com/falsecz/haredis

Change-Id: I80a6c284af9eceb6b669a03c5d93256261523331
This commit is contained in:
Yanis Guenane
2015-04-07 12:42:35 +02:00
parent 6f5c208f8d
commit 3bef84147b
3 changed files with 95 additions and 0 deletions

View File

@@ -130,6 +130,10 @@
# (optional) Enable or not RabbitMQ binding
# Defaults to false
#
# [*redis*]
# (optional) Enable or not Redis binding
# Defaults to false
#
class tripleo::loadbalancer (
$controller_virtual_ip,
$control_virtual_interface,
@@ -157,6 +161,7 @@ class tripleo::loadbalancer (
$horizon = false,
$mysql = false,
$rabbitmq = false,
$redis = false,
) {
if !$controller_host and !$controller_hosts {
@@ -572,4 +577,26 @@ class tripleo::loadbalancer (
}
}
if $redis {
haproxy::listen { 'redis':
ipaddress => [$controller_virtual_ip],
ports => 6379,
options => {
'timeout' => [ 'client 0', 'server 0' ],
'mode' => 'tcp',
'balance' => 'first',
'option' => ['tcp-check',],
'tcp-check' => ['send info\ replication\r\n','expect string role:master'],
},
collect_exported => false,
}
haproxy::balancermember { 'redis':
listening_service => 'redis',
ports => '6379',
ipaddresses => $controller_hosts_real,
server_names => $controller_hosts_names_real,
options => ['check', 'inter 2000', 'rise 2', 'fall 5'],
}
}
}

View File

@@ -0,0 +1,38 @@
# Copyright 2015 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::redis_notification
#
# Configure the Redis notification script that talks to HAProxy
#
# === Parameters:
#
# [*haproxy_monitor_ip*]
# (String) IP address on which HAProxy is listening on
# Defaults to 127.0.0.1
#
class tripleo::redis_notification (
$haproxy_monitor_ip = '127.0.0.1',
) {
file { '/usr/local/bin/redis-notifications.sh' :
ensure => file,
content => template('tripleo/redis/redis-notifications.sh.erb'),
owner => 'root',
group => 'root',
mode => '0755',
}
}

View File

@@ -0,0 +1,30 @@
#!/bin/bash
HAPROXY="<%= @haproxy_monitor_ip %>:1993"
CMD="$1"
ARGS="$2"
ARG1=`echo $ARGS | awk '{print $1}'`
call_curl () {
DATA=`echo "s=$1&action=$2&b=%234" | sed -e s/:/%3A/`
curl --silent -o /dev/null $HAPROXY --data "$DATA"
echo curl $HAPROXY --data "$DATA"
return 0
}
[ "$CMD" = "+odown" ] && [ "$ARG1" = "master" ] && \
call_curl `echo $ARGS | awk '{print $2 ":" $3 ":" $4}'` 'disable'
[ "$CMD" = "+sdown" ] && [ "$ARG1" = "slave" ] && \
call_curl `echo $ARGS | awk '{print $6 ":" $3 ":" $4}'` 'disable'
[ "$CMD" = "+switch-master" ] && \
call_curl `echo $ARGS | awk '{print $1 ":" $4 ":" $5}'` 'enable' &&
call_curl `echo $ARGS | awk '{print $1 ":" $2 ":" $3}'` 'disable'
[ "$CMD" = "-odown" ] && [ "$ARG1" = "master" ] && \
call_curl `echo $ARGS | awk '{print $2 ":" $3 ":" $4}'` 'enable'
# without exit code, sentinel thinks the script is still running and locks any further execution
exit 0