aboutsummaryrefslogtreecommitdiffstats
path: root/manifests/profile/pacemaker
diff options
context:
space:
mode:
authorBabu Shanmugam <bschanmu@redhat.com>2016-09-19 07:41:44 +0000
committerNuman Siddique <nusiddiq@redhat.com>2017-06-01 11:54:53 +0530
commit48a6a0985d3b532a7f7712704706a03be6127a42 (patch)
treed90439677e37b618a938fdc24a51251f275812e9 /manifests/profile/pacemaker
parent09b9b70c5d64608d7d8432aa371f537ce3bdef25 (diff)
Pacemaker support for OVN DB servers
This patch enables OVN DB servers to be started in master/slave mode in the pacemaker cluster. A virtual IP resource is created first and then the pacemaker OVN OCF resource - "ovn:ovndb-servers" is created. The OVN OCF resource is configured to be colocated with the vip resource. The ovn-controller and Neutron OVN ML2 mechanism driver which depends on OVN DB servers will always connect to the vip address on which the master OVN DB servers listen on. The OVN OCF resource itself takes care of (re)starting ovn-northd service on the master node and we don't have to manage it. When HA is enabled for OVN DB servers, haproxy does not configure the OVN DB servers in its configuration. This patch requires OVS 2.7 in the overcloud. Co-authored:by: Numan Siddique <nusiddiq@redhat.com> Change-Id: I9dc366002ef5919339961e5deebbf8aa815c73db Partial-bug: #1670564
Diffstat (limited to 'manifests/profile/pacemaker')
-rw-r--r--manifests/profile/pacemaker/ovn_northd.pp121
1 files changed, 121 insertions, 0 deletions
diff --git a/manifests/profile/pacemaker/ovn_northd.pp b/manifests/profile/pacemaker/ovn_northd.pp
new file mode 100644
index 0000000..af946af
--- /dev/null
+++ b/manifests/profile/pacemaker/ovn_northd.pp
@@ -0,0 +1,121 @@
+# Copyright 2017 Red Hat, Inc.
+#
+# 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::profile::pacemaker::neutron::plugins::ml2::ovn
+#
+# Neutron ML2 driver Pacemaker HA profile for tripleo
+#
+# === Parameters
+#
+# [*pacemaker_master*]
+# (Optional) The hostname of the pacemaker master
+# Defaults to hiera('ovn_dbs_short_bootstrap_node_name')
+#
+# [*step*]
+# (Optional) The current step in deployment. See tripleo-heat-templates
+# for more details.
+# Defaults to hiera('step')
+#
+# [*pcs_tries*]
+# (Optional) The number of times pcs commands should be retried.
+# Defaults to hiera('pcs_tries', 20)
+#
+# [*ovn_dbs_vip*]
+# (Optional) The OVN database virtual IP to be managed by the pacemaker.
+# Defaults to hiera('ovn_dbs_vip')
+#
+# [*nb_db_port*]
+# The TCP port in which the OVN Northbound DB listens to.
+# Defaults to 6641
+#
+# [*sb_db_port*]
+# The TCP port in which the OVN Southbound DB listens to.
+# Defaults to 6642
+#
+
+class tripleo::profile::pacemaker::ovn_northd (
+ $pacemaker_master = hiera('ovn_dbs_short_bootstrap_node_name'),
+ $step = hiera('step'),
+ $pcs_tries = hiera('pcs_tries', 20),
+ $ovn_dbs_vip = hiera('ovn_dbs_vip'),
+ $nb_db_port = 6641,
+ $sb_db_port = 6642
+) {
+
+ if $step >= 2 {
+ pacemaker::property { 'ovndb-role-node-property':
+ property => 'ovndb-role',
+ value => true,
+ tries => $pcs_tries,
+ node => $::hostname,
+ }
+ }
+
+ if $step >= 3 and downcase($::hostname) == $pacemaker_master {
+ $ovndb_servers_resource_name = 'ovndb_servers'
+ $ovndb_servers_ocf_name = 'ovn:ovndb-servers'
+ $ovndb_vip_resource_name = "ip-${ovn_dbs_vip}"
+
+ if is_ipv6_address($ovn_dbs_vip) {
+ $netmask = '128'
+ $nic = interface_for_ip($ovn_dbs_vip)
+ } else {
+ $netmask = '32'
+ $nic = ''
+ }
+
+ pacemaker::resource::ip { "${ovndb_vip_resource_name}":
+ ip_address => $ovn_dbs_vip,
+ cidr_netmask => $netmask,
+ nic => $nic,
+ tries => $pcs_tries,
+ }
+
+ pacemaker::resource::ocf { "${ovndb_servers_resource_name}":
+ ocf_agent_name => "${ovndb_servers_ocf_name}",
+ master_params => '',
+ op_params => 'start timeout=200s stop timeout=200s',
+ resource_params => "master_ip=${ovn_dbs_vip} nb_master_port=${nb_db_port} sb_master_port=${sb_db_port} manage_northd=yes",
+ tries => $pcs_tries,
+ location_rule => {
+ resource_discovery => 'exclusive',
+ score => 0,
+ expression => ['ovndb-role eq true'],
+ },
+ meta_params => 'notify=true'
+ }
+
+ pacemaker::constraint::order { "${ovndb_vip_resource_name}-then-${ovndb_servers_resource_name}":
+ first_resource => "${ovndb_vip_resource_name}",
+ second_resource => "${ovndb_servers_resource_name}-master",
+ first_action => 'start',
+ second_action => 'start',
+ constraint_params => 'kind=Mandatory',
+ tries => $pcs_tries,
+ }
+
+ pacemaker::constraint::colocation { "${ovndb_vip_resource_name}-with-${ovndb_servers_resource_name}":
+ source => "${ovndb_vip_resource_name}",
+ target => "${ovndb_servers_resource_name}-master",
+ master_slave => true,
+ score => 'INFINITY',
+ tries => $pcs_tries,
+ }
+
+ Pacemaker::Resource::Ip["${ovndb_vip_resource_name}"] ->
+ Pacemaker::Resource::Ocf["${ovndb_servers_resource_name}"] ->
+ Pacemaker::Constraint::Order["${ovndb_vip_resource_name}-then-${ovndb_servers_resource_name}"] ->
+ Pacemaker::Constraint::Colocation["${ovndb_vip_resource_name}-with-${ovndb_servers_resource_name}"]
+ }
+}