Planning Analytics Workspace local/distributed fails to start when IPv6 is disabled on Linux using kernel boot parameter

Condition

Planning Analytics Workspace local/distributed version 2.0.75 and later fails to start when IPv6 is disabled using Linux kernel boot parameter ipv6.disable=1. This problem only applies to Docker Swarm deployments of Planning Analytics Workspace.

Cause

Planning Analytics Workspace distributed version 2.0.75 and later includes a version of MySQL database that requires the kernel IPv6 support to be enabled to start up. See https://bugs.mysql.com/bug.php?id=106485 for a description of this issue.

On Linux systems where the kernel IPv6 support is disabled, some of the PAW mysql-cluster containers enter a restart loop. Inspecting the logs for the mysql-mgmt pod/container reveals an error as follows:
MySQL Cluster Management Server mysql-8.0.28 ndb-8.0.28 
2022-04-12 09:42:01 [MgmtSrvr] ERROR -- At least one hostname in the configuration does not match a local interface. Failed to bind on mysql-mgmt 
2022-04-12 09:42:01 [MgmtSrvr] ERROR -- The hostname this node should have according to the configuration does not match a local interface. 
Attempt to bind 'mysql-mgmt' failed with error: 97 'Address family not supported by protocol' 
You can check the host boot parameters to confirm that kernel IPv6 support is disabled:
$ cat /proc/cmdline
...
BOOT_IMAGE=(hd0,msdos1)/vmlinuz-4.18.0-305.19.1.el8_4.x86_64 root=/dev/mapper/rhel-root ro
             resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet
--->>>>      ipv6.disable=1         <<<<---
             noibrs noibpb nopti nospectre_v2 nospectre_v1 l1tf=off nospec_store_bypass_disable no_stf_barrier mds=off mitigations=off

Remedy

To work around this problem, kernel IPv6 support must be enabled on all the cluster nodes.

These general steps describe one possible solution to enable IPv6 in the kernel. Specific steps for resolution may vary in your environment.

  1. Edit /etc/default/grub and remove ipv6.disable=1 in line GRUB_CMDLINE_LINUX. For example:
    GRUB_TIMEOUT=5
    GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
    GRUB_DEFAULT=saved
    GRUB_DISABLE_SUBMENU=true
    GRUB_TERMINAL_OUTPUT="console"
    GRUB_CMDLINE_LINUX="resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet ipv6.disable=1 noibrs noibpb nopti nospectre_v2 nospectre_v1 l1tf=off nospec_store_bypass_disable no_stf_barrier mds=off mitigations=off"
    GRUB_DISABLE_RECOVERY="true"
    GRUB_ENABLE_BLSCFG=true
  2. Regenerate the GRUB configuration file.
    $ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  3. Reboot.
    $ sudo shutdown -r now
  4. (Optional) If you still want to disable IPv6, use sysctl settings instead of disabling IPv6 with the kernel settings.
    $ sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
    $ sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
  5. Restart Docker.
    $ sudo systemctl restart docker