Configuration: Global cache in Zonemaster-Engine

Table of contents

Introduction

Global cache is a feature that can increase performance when many tests are run within a short time frame, especially when they share some data such as using the same name server names. The global cache is meant for batch testing rather than single tests through the GUI. In the latter case it is desirable that Zonemaster checks again since the zone may have been corrected due to the report in a very recent test.

The global cache improves the caching function by making the DNS lookups from one test to be available for further tests. The cache is stored in Redis, a cache service running in a separate daemon.

To enable global caching, additional software has to be installed and custom profile has to be created, where global caching is enabled.

Prerequisites

Before installing or enabling global cache you must follow the Zonemaster::Engine installation first. The feature is available from version v5.0.0 of Zonemaster-Engine.

For installation on FreeBSD being user root is assumed.

Installation for global cache

Install the Redis daemon and needed Perl library. And then start the Redis daemon. It will listen to localhost and default port.

Rocky Linux

sudo dnf --assumeyes install redis perl-Redis perl-Data-MessagePack
sudo systemctl enable redis
sudo systemctl start redis

Debian and Ubuntu

sudo apt install redis libredis-perl libdata-messagepack-perl
sudo systemctl enable redis
sudo systemctl start redis

FreeBSD

pkg install -y redis p5-Redis p5-Data-MessagePack
sysrc redis_enable="YES"
service redis start

Create directory for custom profile

Create a directory to be used for a custom profile, which is here the same directory as used by Zonemaster-Backend. And then copy the default profile to this directory.

Rocky Linux, Debian and Ubuntu

test -d /etc/zonemaster || sudo mkdir -v /etc/zonemaster
perl -MZonemaster::Engine::Test -E 'say Zonemaster::Engine::Profile->default->to_json' | jq -S . | sudo tee /etc/zonemaster/profile.json > /dev/null

FreeBSD

test -d /usr/local/etc/zonemaster || mkdir -v /usr/local/etc/zonemaster
perl -MZonemaster::Engine::Test -E 'say Zonemaster::Engine::Profile->default->to_json' | jq -S . > /usr/local/etc/zonemaster/profile.json

Enable global cache

Update /etc/zonemaster/profile.json (or /usr/local/etc/zonemaster/profile.json for FreeBSD) by adding a cache section. If the profile already has an empty cache section (i.e. "cache": {}) then it must be removed. Add the following section,

    "cache": {
        "redis": {
            "server": "127.0.0.1:6379",
            "expire": 7200
        }
    },

The expire value can be increased or decreased to increase or decrease the time in seconds that Redis will cache the data. Caching of specific DNS data is never longer than the normal DNS TTL value.

Using global cache

If Zonemaster-CLI has been installed, then run zonemaster-cli with --profile /etc/zonemaster/profile.json (or --profile /usr/local/etc/zonemaster/profile.json for FreeBSD) to use the global cache. Caching will persist between test unless it has expired.

See man zonemaster-cli and look for cli.args for how to make it the custom profile being the default profile for zonemaster-cli.

See Zonemaster::Backend configuration for how to make the custom profile being used for Zonemaster-Backend and Zonemaster-GUI.

For more documentation on profiles, see profile documentation.