Skip to main content
Version: Next

⚙ Server Configuration and Provisioning

Settings

General

ReductStore uses environment variables for configuration. Here is a list of available settings:

NameDefaultDescription
RS_LOG_LEVELINFOLogging level, can be: TRACE, DEBUG, INFO, WARNING, ERROR
RS_HOST0.0.0.0Listening IP address
RS_PORT8383Listening port
RS_API_BASE_PATH/Prefix for all URLs of requests
RS_DATA_PATH/dataPath to a folder where the storage stores the data
RS_API_TOKENIf set, the storage uses token authorsization
RS_CERT_PATHPath to an SSL certificate. If unset, the storage uses HTTP instead of HTTPS
RS_CERT_KEY_PATHPath to the private key of the desired SSL certificate. Should be set with RS_CERT_PATH
RS_LICENSE_PATHPath to the license file. Required for commercial usage. See Pricing for more details.
RS_CORS_ALLOW_ORIGINSets the Access-Control-Allow-Origin header. Use * to allow all origins or list specific origins separated by commas.

For Snap Users

If you use snap, you can configure the database by using the snap set command:

snap set reductstore log-level=DEBUG

This command changes the log level to DEBUG and restarts the database. You can check the current configuration with the snap get reductstoret command:

snap get reductstore
Key Value
api-base /
api-token
cert-key-path
cert-path
data-path /var/snap/reductstore/common
host 0.0.0.0
log-level DEBUG
port 8383

By default, the database uses the /var/snap/reductstore/common folder to store data. Due to snap restrictions, you can't use root filesystem folders. We recommend that you connect the snap to the removable-media interface and store the data in a folder outside the snap in /mnt/* or /media/* folders:

snap connect reductstore:removable-media
mkdir /mnt/data
snap set reductstore data-path=/mnt/data
danger

Removing the snap will remove all data stored in the default data path. If you want to keep the data, you need to move it to another location before removing the snap. Or use the snap connect reductstore:removable-media command to connect the snap to the removable-media interface and store the data in a folder outside the snap.

I/O Settings

In addition to general settings, you can configure I/O settings to optimize communication over HTTP with the storage engine. The following table describes the available environment variables:

NameDefaultDescription
RS_IO_BATCH_MAX_SIZE8MBMaximum size of a batch of records sent to the client.
RS_IO_BATCH_MAX_RECORDS85Maximum number of records in a batch sent and received from the client.
RS_IO_BATCH_MAX_METADATA_SIZE8KBMaximum size of metadata in a batch of records sent and received from the client.
RS_IO_BATCH_TIMEOUT5sMaximum time for a batch of records to be prepared and sent to the client. If the batch is not full, it will be sent after the timeout.
RS_IO_BATCH_RECORD_TIMEOUT1sMaximum time to wait for a record to be added to a batch. If the record is not added, the unfinished batch will be sent to the client.

Most of the I/O settings are related to batching and specify the size of the batch, the number of records in the batch, and the timeout for preparing and sending the batch on the server side.

However, if a client is using the HTTP/1.1 protocol, the RS_IO_BATCH_MAX_METADATA_SIZE and RS_IO_BATCH_MAX_RECORDS settings are used to limit the size of the headers in the HTTP request from the client. This means that the client can't send more records in a single batch than specified by the RS_IO_BATCH_MAX_RECORDS and the size of the headers in the request can't exceed the value of the RS_IO_BATCH_MAX_METADATA_SIZE setting.

Read more about batching in the HTTP API Reference.

Replication Settings

ReductStore supports data replication between different instances. You can configure replication settings using the following environment variables:

NameDefaultDescription
RS_REPLICATION_TIMEOUT5sTimeout for attempts to reconnect to the target server in seconds.
RS_REPLICATION_LOG_SIZE1000000Maximum number of pending records in the replication log. The oldest records are overwritten when the limit is reached.

Provisioning

ReductStore provides an HTTP API to create and configure resources such as buckets, access tokens or replication tasks. However, if you are following an Infrastructure as Code (IaC) approach, you may want to provision resources at the deployment stage and ensure that they can't be modified or deleted using the HTTP API.

Example

Here is an example of provisioning two buckets and a token to access them:

RS_BUCKET_A_NAME=bucket-1
RS_BUCKET_A_QUOTA_TYPE=FIFO
RS_BUCKET_A_QUOTA_SIZE=1Tb

RS_BUCKET_B_NAME=bucket-2

RS_TOKEN_A_NAME=token
RS_TOKEN_A_VALUE=somesecret
RS_TOKEN_A_READ=bucket-1,bucket-2

As you can see, each resource has a type and an ID. The type is BUCKET for buckets and TOKEN for tokens. The ID is a unique identifier for the resource. You can use any string value for the ID. It is only used to group resources of the same type.

Below you will find the available settings for each resource type.

Bucket Provisioning

You can provision buckets by setting environment variables. The following table lists the available settings:

NameDefaultDescription
RS_BUCKET_<ID>_NAMEProvisioned bucket name (required)
RS_BUCKET_<ID>_QUOTA_TYPENONEIt can be NONE, FIFO or HARD.
RS_BUCKET_<ID>_QUOTA_SIZE0Size of quota to start removing old data e.g. 1 KB, 10.4 MB etc.
RS_BUCKET_<ID>_MAX_BLOCK_SIZE64MbMaximal block size for batched records
RS_BUCKET_<ID>_MAX_BLOCK_RECORDS1024Maximal number of batched records in a block

For more information about the bucket settings, see the Buckets Guide.

Token Provisioning

You can provision tokens by setting environment variables. The following table lists the available settings:

NameDefaultDescription
RS_TOKEN_<ID>_NAMEProvisioned token name (required)
RS_TOKEN_<ID>_VALUEProvisioned value of token (required)
RS_TOKEN_<ID>_FULL_ACCESSfalseFull access permission
RS_TOKEN_<ID>_READList of buckets for reading separate by a comma.
RS_TOKEN_<ID>_WRITEList of buckets for writing separate by a comma.

For more information about the token settings, see the Access Control Guide.

Replication Provisioning

You can provision replication tasks by setting environment variables. The following table lists the available settings:

NameDefaultDescription
RS_REPLICATION_<ID>_NAMEProvisioned replication task name (required)
RS_REPLICATION_<ID>_SRC_BUCKETSource bucket name (required)
RS_REPLICATION_<ID>_DST_BUCKETRemote bucket name (required). It must be created before replication
RS_REPLICATION_<ID>_DST_HOSTURL of destination instance (required). For example, https://play.reduct.store or http://localhost:8383
RS_REPLICATION_<ID>_DST_TOKENToken for destination instance
RS_REPLICATION_<ID>_ENTRIESList of entries to replicate. Separate entries with a comma. If the list is empty, all entries will be replicated.
RS_REPLICATION_<ID>_INCLUDE_<KEY>Replicate only records with KEY equal to the value of the environment variable. Can be used multiple times.
RS_REPLICATION_<ID>_EXCLUDE_<KEY>Do not replicate records with KEY equal to the value of the environment variable. Can be used multiple times.
RS_REPLICATION_<ID>_EACH_SReplicate a record every S seconds. Can have a floating-point value.
RS_REPLICATION_<ID>_EACH_NReplicate every N-th record.

For more information about the replication settings, see the Data Replication Guide.