From f7826b8a3a083a1776c5f1f02526232a3bf32d4d Mon Sep 17 00:00:00 2001 From: Giulio Fidente Date: Fri, 17 Apr 2015 20:19:36 +0200 Subject: Perform basic setup of Pacemaker cluster using puppet-pacemaker Depends-On: Ia1bbf53c674e34ba7c70249895b106ec0af3c249 Change-Id: Ifa9f579d26a3cba9f8705226984c7b987ae0ad1c --- controller.yaml | 11 ++++++--- overcloud-without-mergepy.yaml | 12 +++++++--- puppet/controller-puppet.yaml | 18 ++++++++++----- puppet/hieradata/controller.yaml | 4 ++-- puppet/manifests/overcloud_controller.pp | 38 +++++++++++++++++++------------- 5 files changed, 54 insertions(+), 29 deletions(-) diff --git a/controller.yaml b/controller.yaml index 4a21bac7..4037fb08 100644 --- a/controller.yaml +++ b/controller.yaml @@ -59,9 +59,6 @@ parameters: default: 'br-ex' description: Interface where virtual ip will be assigned. type: string - CorosyncAuthKey: - description: Auth encryption key for corosync - type: string Debug: default: '' description: Set to True to enable debugging on all services. @@ -70,6 +67,11 @@ parameters: default: true description: Whether to use Galera instead of regular MariaDB. type: boolean + EnablePacemaker: + default: true + description: If enabled services will be monitored by Pacemaker; it + will manage VIPs as well, in place of Keepalived. + type: boolean ExtraConfig: default: {} description: | @@ -305,6 +307,9 @@ parameters: NtpServer: type: string default: '' + PcsdPassword: + type: string + description: The password for the 'pcsd' user. PublicVirtualInterface: default: 'br-ex' description: > diff --git a/overcloud-without-mergepy.yaml b/overcloud-without-mergepy.yaml index f61536ca..32dc9709 100644 --- a/overcloud-without-mergepy.yaml +++ b/overcloud-without-mergepy.yaml @@ -263,6 +263,11 @@ parameters: default: true description: Whether to use Galera instead of regular MariaDB. type: boolean + EnablePacemaker: + default: true + description: If enabled services will be monitored by Pacemaker; it + will manage VIPs as well, in place of Keepalived. + type: boolean ExtraConfig: default: {} description: | @@ -516,10 +521,10 @@ resources: HeatAuthEncryptionKey: type: OS::Heat::RandomString - CorosyncAuthKey: + PcsdPassword: type: OS::Heat::RandomString properties: - length: 128 + length: 16 Controller: type: OS::Heat::ResourceGroup @@ -540,9 +545,9 @@ resources: CloudName: {get_param: CloudName} ControlVirtualInterface: {get_param: ControlVirtualInterface} ControllerExtraConfig: {get_param: controllerExtraConfig} - CorosyncAuthKey: {get_resource: CorosyncAuthKey} Debug: {get_param: Debug} EnableGalera: {get_param: EnableGalera} + EnablePacemaker: {get_param: EnablePacemaker} ExtraConfig: {get_param: ExtraConfig} Flavor: {get_param: OvercloudControlFlavor} GlancePort: {get_param: GlancePort} @@ -583,6 +588,7 @@ resources: NeutronTunnelTypes: {get_param: NeutronTunnelTypes} NovaPassword: {get_param: NovaPassword} NtpServer: {get_param: NtpServer} + PcsdPassword: {get_resource: PcsdPassword} PublicVirtualInterface: {get_param: PublicVirtualInterface} RabbitPassword: {get_param: RabbitPassword} RabbitUserName: {get_param: RabbitUserName} diff --git a/puppet/controller-puppet.yaml b/puppet/controller-puppet.yaml index c3efc82e..007c7103 100644 --- a/puppet/controller-puppet.yaml +++ b/puppet/controller-puppet.yaml @@ -59,9 +59,6 @@ parameters: default: 'br-ex' description: Interface where virtual ip will be assigned. type: string - CorosyncAuthKey: - description: Auth encryption key for corosync - type: string Debug: default: '' description: Set to True to enable debugging on all services. @@ -70,6 +67,11 @@ parameters: default: true description: Whether to use Galera instead of regular MariaDB. type: boolean + EnablePacemaker: + default: true + description: If enabled services will be monitored by Pacemaker; it + will manage VIPs as well, in place of Keepalived. + type: boolean ExtraConfig: default: {} description: | @@ -309,6 +311,9 @@ parameters: NtpServer: type: string default: '' + PcsdPassword: + type: string + description: The password for the 'pcsd' user. PublicVirtualInterface: default: 'br-ex' description: > @@ -436,7 +441,6 @@ resources: bootstack_nodeid: {get_attr: [Controller, name]} controller_host: {get_attr: [Controller, networks, ctlplane, 0]} controller_virtual_ip: {get_param: VirtualIP} - corosync_auth_key: {get_param: CorosyncAuthKey} neutron_enable_tunneling: {get_param: NeutronEnableTunnelling} heat.watch_server_url: list_join: @@ -516,6 +520,7 @@ resources: - {get_param: VirtualIP} - ':5000/v2.0/' enable_galera: {get_param: EnableGalera} + enable_pacemaker: {get_param: EnablePacemaker} mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize} mysql_root_password: {get_param: MysqlRootPassword} mysql_cluster_name: @@ -569,6 +574,7 @@ resources: - - 'mysql://nova:unset@' - {get_param: VirtualIP} - '/nova' + pcsd_password: {get_param: PcsdPassword} rabbit_hosts: str_replace: template: '["host"]' @@ -627,8 +633,8 @@ resources: controller_host: {get_input: controller_host} #local-ipv4 # Pacemaker - corosync::authkey: {get_input: corosync_auth_key} - corosync::bind_address: {get_input: controller_host} + enable_pacemaker: {get_input: enable_pacemaker} + hacluster_pwd: {get_input: pcsd_password} # Swift swift::proxy::proxy_local_net_ip: {get_input: controller_host} diff --git a/puppet/hieradata/controller.yaml b/puppet/hieradata/controller.yaml index 11ec5e27..d7e515ac 100644 --- a/puppet/hieradata/controller.yaml +++ b/puppet/hieradata/controller.yaml @@ -73,8 +73,8 @@ heat::engine::configure_delegated_roles: false heat::engine::trusts_delegated_roles: [] # pacemaker -corosync::authkey_source: 'string' -corosync::multicast_address: broadcast +pacemaker::corosync::cluster_name: 'tripleo_cluster' +pacemaker::corosync::manage_fw: false mysql::server::manage_config_file: true diff --git a/puppet/manifests/overcloud_controller.pp b/puppet/manifests/overcloud_controller.pp index 0d57dc6f..08f9d427 100644 --- a/puppet/manifests/overcloud_controller.pp +++ b/puppet/manifests/overcloud_controller.pp @@ -27,25 +27,33 @@ if !str2bool(hiera('enable_package_install', 'false')) { if hiera('step') >= 1 { $controller_node_ips = split(hiera('controller_node_ips'), ',') + $enable_pacemaker = str2bool(hiera('enable_pacemaker')) + $enable_keepalived = !$enable_pacemaker + class { '::tripleo::loadbalancer' : controller_hosts => $controller_node_ips, } - class { '::corosync': - quorum_members => $controller_node_ips, - } - corosync::service { 'pacemaker': - version => '0', - } - service { 'pacemaker': - ensure => running, - require => Service['corosync'], - } - cs_property { 'stonith-enabled': - value => 'false', - } - cs_property { 'no-quorum-policy': - value => 'ignore', + if $enable_pacemaker { + $pacemaker_cluster_members = regsubst(hiera('controller_node_ips'), ',', ' ', 'G') + if $::hostname == downcase(hiera('bootstrap_nodeid')) { + $pacemaker_master = true + } else { + $pacemaker_master = false + } + user { 'hacluster': + ensure => present, + } -> + class { '::pacemaker': + hacluster_pwd => hiera('hacluster_pwd'), + } -> + class { '::pacemaker::corosync': + cluster_members => $pacemaker_cluster_members, + setup_cluster => $pacemaker_master, + } + class { '::pacemaker::stonith': + disable => true, + } } } -- cgit 1.2.3-korg