Merge "Add Redis as a Pacemaker resource"

This commit is contained in:
Jenkins 2015-06-09 07:15:33 +00:00 committed by Gerrit Code Review
commit 0625ac253e
5 changed files with 59 additions and 17 deletions

View File

@ -364,6 +364,9 @@ parameters:
default: 5672
description: Set rabbit subscriber port, change this if using SSL
type: number
RedisVirtualIP:
type: string
default: '' # Has to be here because of the ignored empty value bug
SnmpdReadonlyUserName:
default: ro_snmp_user
description: The user name for SNMPd with readonly rights running on all Overcloud nodes

View File

@ -2,3 +2,6 @@
# Overcloud controller with Pacemaker.
resource_registry:
OS::TripleO::ControllerConfig: ../puppet/controller-config-pacemaker.yaml
parameter_defaults:
RedisVirtualIP: 192.0.2.142

View File

@ -399,6 +399,9 @@ parameters:
Specifies the interface where the public-facing virtual ip will be assigned.
This should be int_public when a VLAN is being used.
type: string
RedisVirtualIP:
type: string
default: '' # Has to be here because of the ignored empty value bug
SSLCertificate:
default: ''
description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
@ -663,6 +666,7 @@ resources:
RabbitClientPort: {get_param: RabbitClientPort}
SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
RedisVirtualIP: {get_param: RedisVirtualIP}
SSLCertificate: {get_param: SSLCertificate}
SSLKey: {get_param: SSLKey}
SSLCACertificate: {get_param: SSLCACertificate}

View File

@ -373,6 +373,9 @@ parameters:
default: 5672
description: Set rabbit subscriber port, change this if using SSL
type: number
RedisVirtualIP:
type: string
default: '' # Has to be here because of the ignored empty value bug
SnmpdReadonlyUserName:
default: ro_snmp_user
description: The user name for SNMPd with readonly rights running on all Overcloud nodes
@ -753,6 +756,7 @@ resources:
horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
rabbitmq_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
redis_vip: {get_param: RedisVirtualIP}
memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
mysql_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
ceph_cluster_network: {get_attr: [NetIpSubnetMap, net_ip_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
@ -979,6 +983,7 @@ resources:
rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
# Redis
redis::bind: {get_input: redis_network}
redis_vip: {get_input: redis_vip}
# Misc
memcached::listen_ip: {get_input: memcached_network}
neutron_public_interface_ip: {get_input: neutron_public_interface_ip}

View File

@ -55,6 +55,7 @@ if hiera('step') >= 1 {
class { '::tripleo::loadbalancer' :
controller_hosts => $controller_node_ips,
controller_hosts_names => $controller_node_names,
redis => false,
manage_vip => false,
haproxy_service_manage => false,
}
@ -106,6 +107,13 @@ if hiera('step') >= 1 {
service_manage => false,
}
# Redis
class { '::redis' :
bind => '0.0.0.0',
service_manage => false,
notify_service => false,
}
# Galera
if str2bool(hiera('enable_galera', 'true')) {
$mysql_config_file = '/etc/my.cnf.d/galera.cnf'
@ -238,25 +246,35 @@ if hiera('step') >= 2 {
require => Class['::mysql::server'],
before => Exec['galera-ready'],
}
}
# Redis
$redis_node_ips = hiera('redis_node_ips')
$redis_master_hostname = downcase(hiera('bootstrap_nodeid'))
pacemaker::resource::ocf { 'redis':
ocf_agent_name => 'heartbeat:redis',
master_params => '',
meta_params => 'notify=true ordered=true interleave=true',
resource_params => 'wait_last_known_master=true',
require => Class['::redis'],
}
$redis_vip = hiera('redis_vip')
pacemaker::resource::ip { 'vip-redis':
ip_address => $redis_vip,
}
pacemaker::constraint::base { 'redis-master-then-vip-redis':
constraint_type => 'order',
first_resource => 'redis-master',
second_resource => "ip-${redis_vip}",
first_action => 'promote',
second_action => 'start',
require => [Pacemaker::Resource::Ocf['redis'],
Pacemaker::Resource::Ip['vip-redis']],
}
pacemaker::constraint::colocation { 'vip-redis-with-redis-master':
source => "ip-${redis_vip}",
target => 'redis-master',
score => 'INFINITY',
require => [Pacemaker::Resource::Ocf['redis'],
Pacemaker::Resource::Ip['vip-redis']],
}
if $redis_master_hostname == $::hostname {
$slaveof = undef
} else {
$slaveof = "${redis_master_hostname} 6379"
}
class {'::redis' :
slaveof => $slaveof,
}
if count($redis_node_ips) > 1 {
Class['::tripleo::redis_notification'] -> Service['redis-sentinel']
include ::redis::sentinel
include ::tripleo::redis_notification
}
exec { 'galera-ready' :
@ -1183,6 +1201,15 @@ if hiera('step') >= 4 {
Pacemaker::Resource::Service[$::mongodb::params::service_name]],
}
}
pacemaker::constraint::base { 'vip-redis-then-ceilometer-central':
constraint_type => 'order',
first_resource => "ip-${redis_vip}",
second_resource => "${::ceilometer::params::agent_central_service_name}-clone",
first_action => 'start',
second_action => 'start',
require => [Pacemaker::Resource::Service[$::ceilometer::params::agent_central_service_name],
Pacemaker::Resource::Ip['vip-redis']],
}
pacemaker::constraint::base { 'keystone-then-ceilometer-central-constraint':
constraint_type => 'order',
first_resource => "${::keystone::params::service_name}-clone",