MariaDB Galera Cluster
This is currently being tested, use at your own risk.
LibreNMS can be used with a MariaDB Galera Cluster. This is a Multi Master cluster, meaning each node in the cluster reads and writes to the database. All nodes have the same capability. LibreNMS randomly choose a working node to read and write requests to.
For more information see https://laravel.com/docs/database#read-and-write-connections
Getting Started
- Use at least 3 nodes in the cluster. We recommend an odd number of nodes. An odd number gives a majority at a disagreement about the data.
- Give all servers a similar hardware performance. The slowest server limits the cluster performance.
- Backup the database before starting, and backing up the database regularly is still recommended even in a working cluster environment.
Install and Configure Galera
Install Galera4 and MariaDB Server
These can be obtained from your OS package manager. For example in Ubuntu.
sudo apt-get install mariadb-server mariadb-client galera-4
Create Galera Config
Create a new file /etc/mysql/conf.d/galera.conf on each node
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="librenms_cluster"
wsrep_cluster_address="gcomm://192.168.1.35,192.168.1.36,192.168.1.37,192.168.1.38,192.168.1.39"
# Galera Synchronization Configuration
wsrep_sst_method=rsync
# Galera Node Configuration
wsrep_node_address="192.168.1.35"
wsrep_node_name="librenms1.35"
Edit LibreNMS .env
LibreNMS supports up to 9 Galera nodes. You define these nodes in the .env file. For each node, you set the access of this LibreNMS installation or poller: write, read, or both. The Galera nodes here are the same or different for each LibreNMS poller. For a poller with one Galera node, add one DB_HOST and remove the others. You therefore control the Galera nodes of the read and the write of each poller.
- DB_HOST is always set to read/write.
- DB_HOST is mandatory. It does not need the same value on each poller. It can differ, but it must be part of the same Galera cluster.
- If the DB_HOST node is down, a command such as
lnms dbstops. These commands use only DB_HOST. They do not fail over to another node. - Set DB_CONNECTION=mysql_cluster to enable
- DB_STICKY can be used if you are pulling out of sync data form the database in a read request. For more information see https://laravel.com/docs/database#the-sticky-option
The below example setting up 5 nodes
DB_HOST=192.168.1.35
DB_HOST_R2=192.168.1.36
DB_HOST_R3=192.168.1.37
DB_HOST_R4=192.168.1.38
DB_HOST_R5=192.168.1.39
DB_HOST_W2=192.168.1.36
DB_HOST_W3=192.168.1.37
DB_STICKY=true
DB_CONNECTION=mysql_cluster
DB_DATABASE=librenms
DB_USERNAME=librenms
DB_PASSWORD=password
.env file above connects a LibreNMS installation or poller to each Galera node in this way. - 192.168.1.35 - Read/Write
- 192.168.1.36 - Read/Write
- 192.168.1.37 - Read/Write
- 192.168.1.38 - Read Only
- 192.168.1.39 - Read Only
Starting Galera Cluster for the first time.
1) Shutdown MariaDB server on ALL nodes.
sudo systemctl stop mariadb-server
sudo galera_new_cluster
sudo systemctl start mariadb-server
Galera Cluster Status
To see some stats on how the Galera cluster is preforming run the following.
lnms db
SHOW GLOBAL STATUS LIKE 'wsrep_%';
| Variable Name | Value | Notes |
|---|---|---|
| ----------------------------------- | ---------------------------------------------------------------- | --------------------------------------------------------- |
| wsrep_cluster_size | 2 | Current number of nodes in Cluster |
| wsrep_cluster_state_uuid | e71582f3-cf14-11eb-bcf6-a23029e16405 | The UUID of the last transaction. It is the same on each node |
| wsrep_connected | On | On = Connected with other nodes |
| wsrep_local_state_comment | Synced | Synced with other nodes |
Restarting the Entire Cluster
In a cluster, keep at least one node online at all times. A failed node recovers without a problem while one node stays online. If ALL nodes are offline, do these steps. They start the cluster with the newest database. Log in to each node and run this command:
sudo cat /var/lib/data/grastate.dat
# GALERA saved state
version: 2.1
uuid: e71582f3-cf14-11eb-bcf6-a23029e16405
seqno: -1
safe_to_bootstrap: 1
If the safe_to_bootstrap = 1, then Galera determined that this node has the most up-to-date database and can be safeley used to start the cluster.
Once you have found a node that can be used for starting the cluster, follow the steps in starting for the first time.