MaxScale & Pacemaker on CentOS 7 ------ Install packages on **both** nodes ``` sudo yum install corosync pcs pacemaker maxscale ``` Set the password for the hacluster user [both nodes] ``` sudo passwd hacluster ``` Start the pcs daemon service [both nodes] ``` sudo systemctl start pcsd ``` Authenticate the cluster ``` sudo pcs cluster auth node01.domain.local node02.domain.local ``` Create cluster ``` sudo pcs cluster setup --name clustername node01.domain.local node02.domain.local ``` * Example output ``` Shutting down pacemaker/corosync services... Redirecting to /bin/systemctl stop pacemaker.service Redirecting to /bin/systemctl stop corosync.service Killing any remaining services... Removing all cluster configuration files... node01.domain.local: Succeeded node02.domain.local: Succeeded ``` * Check the changes in: `nano /etc/corosync/corosync.conf` Start the cluster ``` sudo pcs cluster start --all ``` Check the cluster status ``` sudo pcs status cluster sudo pcs status nodes sudo corosync-cmapctl | grep members sudo pcs status corosync sudo crm_verify -L -V ``` Set quorum settings ``` sudo pcs property set stonith-enabled=false sudo pcs property set no-quorum-policy=ignore ``` * Verify the properties with: `sudo pcs property` Create a virtual IP resource called `virtual_ip` ``` sudo pcs resource create virtual_ip ocf:heartbeat:IPaddr2 \ ip=10.10.10.123 cidr_netmask=24 \ op monitor interval=30s ``` Check the resource status ``` sudo pcs status resources ``` Prevent Resources from Moving after Recovery ``` sudo pcs resource defaults resource-stickiness=100 ``` * Confirm the resource defaults with `sudo pcs resource defaults` Create maxscale service resource called `maxscale_service` * Note: for maxscale 1.1.1 and older change `systemd` to `lsb` in the command below as the startup scripts are invoked via systemd in version 1.2 and newer. ``` sudo pcs resource create maxscale_service systemd:maxscale \ op monitor interval="10s" timeout="15s" \ op start interval="0" timeout="15s" \ op stop interval="0" timeout="30s" ``` Let the cluster control maxscale on **both** nodes ``` sudo systemctl stop maxscale ``` * According to [maxscale guide](https://mariadb.com/blog/how-make-maxscale-high-available-corosyncpacemaker) disable maxscale from starting automatically on **both** nodes ``` sudo systemctl disable maxscale ``` Create constraints so that the VIP and maxscale stay together ``` sudo pcs constraint colocation add maxscale_service virtual_ip INFINITY ``` * View constraints with `sudo pcs constraint list` * If desired, to keep the maxscale from starting before the VIP is started on the server add an ordering constraint ``` sudo pcs constraint order virtual_ip then maxscale_service ``` Restart the cluster ``` sudo pcs cluster stop --all && sudo pcs cluster start --all ``` Check the status ``` sudo pcs status ``` Enable cluster services on both nodes ``` sudo systemctl enable pcsd sudo systemctl enable corosync sudo systemctl enable pacemaker ``` # Troubleshooting / Status * Check cluster status with `sudo pcs status` * Stop a node (force a failover) with `sudo pcs cluster stop node.domain.local` * Start a node with `sudo pcs cluster start node.domain.local` # Sources: * [Clusterlabs official documentation](http://clusterlabs.org/doc/en-US/Pacemaker/1.1-pcs/html/Clusters_from_Scratch/index.html) * [Simple guide to getting this running with Apache](http://jensd.be/?p=156) * [MariaDB documentation for EL 6](https://mariadb.com/blog/how-make-maxscale-high-available-corosyncpacemaker)