IPv6 VIP addresses need to be /128
authorMichele Baldessari <michele@acksyn.org>
Wed, 26 Apr 2017 09:40:51 +0000 (11:40 +0200)
committerMichele Baldessari <michele@acksyn.org>
Wed, 3 May 2017 10:32:09 +0000 (12:32 +0200)
We currently hardcode /64 as our VIP addresses when using IPv6.
The problem with this is that some server code might bind to that
IP as a source address when doing inter-cluster communication
(rabbitmq/galera for example). So when the VIP moves there will
be effectively a network outage between the nodes, which should not
happen.

Likely this was hardcoded to /64 because the RA IPaddr2 needs a nic
parameter when /128 is specified. This is due to:
https://bugzilla.redhat.com/show_bug.cgi?id=1445628

We also make sure we use the ipv6_addrlabel option set to 99 so that
they will never be used as source ip addresses.

Depends-On: I7fcf15a00aedbdcfb21db501ad46c69fb97ec30c
Partial-Bug: #1686357

Change-Id: Ibefde870512ad1e03ff12f7aea91b3734f03f96f
Co-Authored-By: Sofer Athlan-Guyot <sathlang@redhat.com>
Co-Authored-By: Marios Andreou <mandreou@redhat.com>
Co-Authored-By: Damien Ciabrini <dciabrin@redhat.com>
manifests/pacemaker/haproxy_with_vip.pp

index a27b94b..1fc3ff7 100644 (file)
@@ -57,17 +57,25 @@ define tripleo::pacemaker::haproxy_with_vip(
   $ensure        = true)
 {
   if($ensure) {
+    # NB: Until the IPaddr2 RA has a fix for https://bugzilla.redhat.com/show_bug.cgi?id=1445628
+    # we need to specify the nic when creating the ipv6 vip.
     if is_ipv6_address($ip_address) {
-      $netmask = '64'
+      $netmask        = '128'
+      $nic            = interface_for_ip($ip_address)
+      $ipv6_addrlabel = '99'
     } else {
-      $netmask = '32'
+      $netmask        = '32'
+      $nic            = ''
+      $ipv6_addrlabel = ''
     }
 
     pacemaker::resource::ip { "${vip_name}_vip":
-      ip_address    => $ip_address,
-      cidr_netmask  => $netmask,
-      location_rule => $location_rule,
-      tries         => $pcs_tries,
+      ip_address     => $ip_address,
+      cidr_netmask   => $netmask,
+      nic            => $nic,
+      ipv6_addrlabel => $ipv6_addrlabel,
+      location_rule  => $location_rule,
+      tries          => $pcs_tries,
     }
     pacemaker::constraint::order { "${vip_name}_vip-then-haproxy":
       first_resource    => "ip-${ip_address}",