Chapter 3. External Redis database configuration for high availability support in 3scale API Management
Red Hat supports 3scale configurations that use an external Redis database. However, does not officially support setting up Redis for zero downtime, configuring back-end components for 3scale, or Redis database replication and sharding. The content is for reference only. Additionally, Redis cluster mode is not supported in 3scale.
High availability (HA) is provided for most components by the OpenShift Container Platform (OCP).
When you externalize databases from a Red Hat 3scale API Management deployment, this means to provide isolation from the application and resilience against service disruptions at the database level. The resilience to service disruptions depends on the service level agreements (SLAs) provided by the infrastructure or platform provider where you host the databases. This is not offered by 3scale. For more details on externalizing of databases offered by your chosen deployment, see the associated documentation.
The database components for HA in Red Hat 3scale API Management include:
-
backend-redis: used for statistics storage and temporary job storage. -
system-redis: provides temporary storage for background jobs for 3scale and is also used as a message bus for Ruby processes ofsystem-apppods.
Both backend-redis and system-redis work with supported Redis high availability variants for Redis Sentinel and Redis Enterprise.
If the Redis pod comes to a stop, or if the OpenShift Container Platform stops it, a new pod is automatically created. Persistent storage will restore the data so the pod continues to work. In these scenarios, there will be a small amount of downtime while the new pod starts. This is due to a limitation in Redis that does not support a multi-master setup. You can reduce downtime by preinstalling the Redis images onto all nodes that have Redis deployed to them. This will speed up the pod restart time.
Set up Redis for zero downtime and configure back-end components for 3scale:
Prerequisites
- A 3scale account with an administrator role.
3.1. Setting up Redis for zero downtime Copy linkLink copied to clipboard!
As a 3scale administrator, configure Redis outside of OCP if you require zero downtime. There are several ways to set it up using the configuration options of 3scale pods:
- Set up your own self-managed Redis
- Use Redis Sentinel: Reference Redis Sentinel Documentation
Redis provided as a service:
For example by:
- Amazon ElastiCache
- Redis Enterprise
Red Hat does not provide support for the above mentioned services. The mention of any such services does not imply endorsement by Red Hat of the products or services. You agree that Red Hat is not responsible or liable for any loss or expenses that may result due to your use of (or reliance on) any external content.
3.2. Configuring back-end components for 3scale API Management Copy linkLink copied to clipboard!
As a 3scale administrator, configure Redis HA (failover) for the back-end component environment variables in the following deployment configurations: backend-cron, backend-listener, and backend-worker. These configurations are necessary for Redis HA in 3scale.
If you want to use Redis with sentinels, you must provide sentinel configuration in either backend-redis, system-redis, or both secrets.
3.2.1. Creating backend-redis and system-redis secrets Copy linkLink copied to clipboard!
Follow these steps to create backend-redis and system-redis secrets accordingly:
3.2.2. Deploying a fresh installation of 3scale API Management for HA Copy linkLink copied to clipboard!
Procedure
Create the
backend-redisandsystem-redissecrets with the fields below:backend-redis
Copy to Clipboard Copied! Toggle word wrap Toggle overflow system-redis
NAMESPACE SENTINEL_HOSTS SENTINEL_ROLE URL
NAMESPACE SENTINEL_HOSTS SENTINEL_ROLE URLCopy to Clipboard Copied! Toggle word wrap Toggle overflow When configuring for Redis with sentinels, the corresponding
URLfields inbackend-redisandsystem-redisrefer to the Redis group in the formatredis://[:redis-password@]redis-group[/db], where [x] denotes optional element x andredis-password,redis-group, anddbare variables to be replaced accordingly:Example
redis://:redispwd@mymaster/5
redis://:redispwd@mymaster/5Copy to Clipboard Copied! Toggle word wrap Toggle overflow The
SENTINEL_HOSTSfields are comma-separated lists of sentinel connection strings in the following format:redis://:sentinel-password@sentinel-hostname-or-ip:port
redis://:sentinel-password@sentinel-hostname-or-ip:portCopy to Clipboard Copied! Toggle word wrap Toggle overflow For each element of the list, [x] denotes optional element x and
sentinel-password,sentinel-hostname-or-ip, andportare variables to be replaced accordingly:Example
:sentinelpwd@123.45.67.009:2711,:sentinelpwd@other-sentinel:2722
:sentinelpwd@123.45.67.009:2711,:sentinelpwd@other-sentinel:2722Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
The
SENTINEL_ROLEfields are eithermasterorslave.
Deploy 3scale as indicated in Deploying 3scale API Management using the operator.
-
Ignore the errors due to
backend-redisandsystem-redisalready present.
-
Ignore the errors due to
3.2.3. Migrating a non-HA deployment of 3scale API Management to HA Copy linkLink copied to clipboard!
-
Edit the
backend-redisandsystem-redissecrets with all fields as shown in Deploying a fresh installation of 3scale API Management for HA. Make sure the following
backend-redisenvironment variables are defined in the YAML specification of the Deploymentsbackend-listener,backend-workerandbackend-cron.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Make sure the following
system-redisenvironment variables are defined in the YAML specification of the Deploymentssystem-appandsystem-sidekiq.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.4. Configuring Redis in high availability (HA) mode for 3scale API Management Copy linkLink copied to clipboard!
You can choose between using Redis Enterprise or Redis Sentinel to ensure HA for 3scale API Management. Follow the steps in each subsection to configure and deploy the appropriate Redis setup for your environment.
3.2.4.1. Using Redis Enterprise Copy linkLink copied to clipboard!
To configure Redis Enterprise for 3scale API Management, update the backend-redis and system-redis secrets with the connection string of the Redis Enterprise instances. Use a different Redis Enterprise instance for each database.
Edit
system-redissecret:-
Update the
URLfield with the connection string of the system Redis database.
-
Update the
Edit
backend-redissecret:-
Update the
REDIS_QUEUES_URLfield with the connection string of the Redis database for back-end queues. -
Update the
REDIS_STORAGE_URLfield with the connection string of the Redis database for back-end statistics storage.
-
Update the
The configuration for 3scale API Management with Redis Enterprise differs from a standard Redis integration. Redis Enterprise does not support logical separation of databases, rendering the "/db_index" portion of the typical URL unnecessary. The essential parameters for the Redis connection string include:
redis[s]://[username[:password]@]host[:port]
redis[s]://[username[:password]@]host[:port]
Square brackets ([ ]) indicate an optional parameter sequence. Example values for valid connection strings include:
redis://default:some-password@redisdb1.example.com redis://redisdb2.example.com:6379
redis://default:some-password@redisdb1.example.com
redis://redisdb2.example.com:6379
3.2.4.2. Using Redis Sentinel Copy linkLink copied to clipboard!
You can optionally apply Redis Sentinels to any of the databases. However, Red Hat recommends applying Redis Sentinels to all of them for HA.
Backend redis for statistics: update
backend-redissecret and provide values for:-
REDIS_STORAGE_URL -
REDIS_STORAGE_SENTINEL_ROLE -
REDIS_STORAGE_SENTINEL_HOSTS
-
Backend redis for queue: update
backend-redissecret and provide values for:-
REDIS_QUEUES_URL -
REDIS_QUEUES_SENTINEL_ROLE -
REDIS_QUEUES_SENTINEL_HOSTS
-
Set
REDIS_STORAGE_SENTINEL_HOSTSandREDIS_QUEUES_SENTINEL_HOSTSto a comma-separated list of Redis Sentinels hosts and ports.REDIS_STORAGE_SENTINEL_ROLEandREDIS_QUEUES_SENTINEL_ROLEaccept eithermasterorslave.REDIS_STORAGE_URLandREDIS_QUEUES_URLaccept values in the following format:redis://<master-group>/{db}redis://<master-group>/{db}Copy to Clipboard Copied! Toggle word wrap Toggle overflow Important<master-group>must correspond to the group name configured in Redis Sentinel.Example content of
backend-redissecret:Copy to Clipboard Copied! Toggle word wrap Toggle overflow In this example, values are plain text. However, Openshift Container Platform (OCP) expects value fields to be Base64-encoded.
System redis for data: update
system-redissecret and provide values for:-
NAMESPACE -
SENTINEL_HOSTS -
SENTINEL_ROLE URLSet
SENTINEL_HOSTSto a comma-separated list of sentinels hosts and ports, for example::sentinelpwd@123.45.67.009:2711,:sentinelpwd@other-sentinel:2722
-
Notes
The
system-appandsystem-sidekiqcomponents connect directly to back-end Redis for retrieving statistics.- As of 3scale 2.7, these system components can also connect to back-end Redis (storage) when using sentinels.
The
system-appandsystem-sidekiqcomponents uses onlybackend-redisstorage, notbackend-redisqueues.-
Changes made to the system components support
backend-redisstorage with sentinels.
-
Changes made to the system components support
3.3. Additional information Copy linkLink copied to clipboard!
- For more information about 3scale and Redis database support, see Red Hat 3scale API Management Supported Configurations.
- For more information about Amazon ElastiCache for Redis, see the official Amazon ElastiCache Documentation.
- For more information about Redis Enterprise, see the latest Documentation.