Configuration via CLI

View as Markdown

Table of Contents


There are two main configuration-managing commands, each with multiple subcommands:

  1. ais config - show and update configuration
  2. ais show config - show configuration

As always, subcommands will reveal themselves via tab completion (<TAB-TAB>).

In brief:

1$ ais config --help
2NAME:
3 ais config - Configure AIS cluster and individual nodes (in the cluster); configure CLI (tool)
4
5USAGE:
6 ais config command [arguments...] [command options]
7
8COMMANDS:
9 show show CLI, cluster, or node configurations (nodes inherit cluster and have local)
10 cluster configure AIS cluster
11 node configure AIS node
12 reset reset (cluster | node | CLI) configuration to system defaults
13 cli display and change AIS CLI configuration
14
15OPTIONS:
16 --help, -h show help

ais config show is an alias for ais show config — both can be used interchangeably.

Here are a few usage examples:

ais config cluster

1$ ais config cluster --help
2NAME:
3 ais config cluster - Configure AIS cluster.
4 Examples:
5 - 'ais config cluster --json' - show entire cluster config in JSON;
6 - 'ais config cluster log' - show 'log' section;
7 - 'ais config cluster log.level 4' - set log level to 4;
8 - 'ais config cluster log.modules ec xs' - elevate verbosity for selected modules;
9 - 'ais config cluster features S3-API-via-Root' - enable feature flag;
10 - 'ais config cluster features none' - reset all feature flags;
11 - 'ais config cluster log.modules none' - reset log modules
12
13USAGE:
14 ais config cluster KEY=VALUE [KEY=VALUE...] [command options]
15
16OPTIONS:
17 --json, -j JSON input/output
18 --transient Update config in memory without storing the change(s) on disk
19 --help, -h Show help

ais config node

1$ ais config node --help
2NAME:
3 ais config node - Configure AIS node.
4 Each node in the cluster has 'inherited' (from cluster config) and 'local' configuration.
5 Nodes can override inherited defaults with local values; use caution: local changes
6 may cause inconsistent behavior across the cluster. Examples:
7 - 'ais config node NODE local --json' - show node's local config in JSON;
8 - 'ais config node NODE inherited log' - show 'log' section (inherited);
9 - 'ais config node NODE local host_net --json' - show node's network config;
10 - 'ais config node NODE log.level 4' - set node's log level;
11 - 'ais config node NODE log.modules none' - reset log modules;
12 - 'ais config node NODE disk.iostat_time_long=4s' - update disk timing (in re: "disk utilization smoothing")
13
14USAGE:
15 ais config node NODE_ID KEY=VALUE [KEY=VALUE...] [command options]
16
17OPTIONS:
18 --json, -j JSON input/output
19 --transient Update config in memory without storing the change(s) on disk
20 --help, -h Show help

Example: show config, update config

1# show `ais config` subcommands:
2$ ais config <TAB-TAB>
3cli cluster node reset show
1# select `cluster` configuration and see usage and options
2$ ais config cluster --help
1# show the entire cluster configuration in JSON
2$ ais config cluster --json
1# show one selected section (e.g., checksum) from the cluster config
2$ ais config cluster checksum
1# update one value (e.g., checksum type)
2$ ais config cluster checksum.type=md5
3
4# same using JSON-formatted values
5$ ais config cluster checksum.type='{"type":"md5"}'

More examples:

1$ ais config cluster log.level 4
2PROPERTY VALUE
3log.level 4
4log.max_size 4MiB
5log.max_total 128MiB
6log.flush_time 40s
7log.stats_time 1m
8log.to_stderr false
9
10Cluster config updated
11
12$ ais config cluster log.modules <TAB-TAB>
13transport memsys fs ec ios backend mirror downloader s3
14ais cluster reb stats xs space dsort etl none
15
16$ ais config cluster log.modules space,s3
17PROPERTY VALUE
18log.level 4 (modules: space,s3)
19log.max_size 4MiB
20log.max_total 128MiB
21log.flush_time 40s
22log.stats_time 1m
23log.to_stderr false
24
25Cluster config updated

Note: Single quotes are strongly recommended when values contain spaces, wildcards, or double quotes.

Example: show specific config section (flat and JSON)

1$ ais config cluster ec
2PROPERTY VALUE
3ec.objsize_limit 262144
4ec.compression never
5ec.bundle_multiplier 2
6ec.data_slices 1
7ec.parity_slices 1
8ec.enabled false
9ec.disk_only false
10
11# same in JSON:
12
13$ ais config cluster ec --json
14
15 "ec": {
16 "objsize_limit": 262144,
17 "compression": "never",
18 "bundle_multiplier": 2,
19 "data_slices": 1,
20 "parity_slices": 1,
21 "enabled": false,
22 "disk_only": false
23 }

Configuration inheritance

AIS supports configuration inheritance with local override.

At any point in time there is a single, protected and replicated version of the cluster configuration. When a new cluster gets deployed, all nodes inherit the same initial configuration with identical default values. When a new node joins the cluster, it receives the current version of the cluster configuration.

However, you can select any node and override any inherited value. Note that if the corresponding value later changes at the cluster level, the node’s override takes precedence — the cluster-level update won’t apply to that node.

In other words, overriding inherited configuration on the node level breaks future inheritance for that setting.

Use ais config reset to remove all previous overrides.

All configuration updates are persistent by default. Use the --transient flag to update in memory only (changes won’t persist across reboots).

See also: AIStore Configuration

Show configuration

1# Select what to show: CLI config, cluster config, or any node's config:
2
3$ ais show config <TAB-TAB>
4cli cluster p[kdQp8080] t[NBzt8081]

Target nodes have the t prefix; gateways (proxies) have the p prefix.

1# For cluster config, use `TAB` completion to select a named section, or press Enter:
2
3$ ais show config cluster <TAB-TAB>
4
5downloader net proxy config_version keepalivetracker
6checksum disk arch tracing fshc
7ec get_batch rebalance tcb resilver
8transport uuid timeout tco ext
9features rate_limit space memsys auth
10versioning log lru lastupdate_time mirror
11write_policy chunks client distributed_sort periodic
1$ ais show config cluster --help
2NAME:
3 ais show config - show CLI, cluster, or node configurations (nodes inherit cluster and have local)
4
5USAGE:
6 ais show config cli | cluster [CONFIG SECTION OR PREFIX] | [command options]
7 NODE_ID [ inherited | local | all [CONFIG SECTION OR PREFIX ] ]
8
9OPTIONS:
10 --json, -j json input/output
11 --help, -h show help
1# For a specific node, choose inherited, local, or both:
2
3$ ais show config t[NBzt8081] <TAB-TAB>
4inherited local

Cluster configuration

ais show config cluster [CONFIG_PREFIX]

Display the cluster configuration. If CONFIG_PREFIX is given, only configurations matching the prefix will be shown.

FlagTypeDescriptionDefault
--json, -jboolOutput in JSON formatfalse

Node configuration

ais show config NODE_ID [inherited | local] [CONFIG_PREFIX]

Display the node’s configuration. Node configuration consists of two parts:

  • inherited — cluster configuration (may include local overrides)
  • local — node-specific settings that override cluster defaults

If CONFIG_PREFIX is given, only configurations matching the prefix will be shown.

When showing inherited config, the output includes an extra column with global values:

  • - — local and global values are the same (not overridden)
  • N/A — option is local-only and doesn’t exist in global config
FlagTypeDescriptionDefault
--json, -jboolOutput in JSON formatfalse

Examples

Show node’s local configuration

Note: Examples in this section show local-playground paths and ports; production deployments will differ.

1$ ais show config CASGt8088 local
2PROPERTY VALUE
3confdir /home/divaturi/.ais8
4log_dir /tmp/ais/8/log
5host_net.hostname
6host_net.hostname_intra_control
7host_net.hostname_intra_data
8host_net.port 8088
9host_net.port_intra_control 9088
10host_net.port_intra_data 10088
11fspaths.paths /tmp/ais/mp1/8,/tmp/ais/mp2/8,/tmp/ais/mp3/8,/tmp/ais/mp4/8,/tmp/ais/mp5/8
12test_fspaths.root /tmp/ais
13test_fspaths.count 5
14test_fspaths.instance 8

Show node’s inherited configuration

1$ ais show config CASGt8088 inherited
2PROPERTY VALUE DEFAULT
3auth.enabled false -
4auth.secret ********** -
5backend.conf map[] -
6checksum.enable_read_range false -
7checksum.type xxhash -
8checksum.validate_cold_get true -
9checksum.validate_obj_move false -
10checksum.validate_warm_get false -
11client.client_long_timeout 30m -
12# only 10 lines of output shown

Show cluster LRU config section

1$ ais show config cluster lru
2PROPERTY VALUE
3lru.dont_evict_time 1s
4lru.capacity_upd_time 10m
5lru.enabled true
6
7$ ais show config cluster space
8PROPERTY VALUE
9space.cleanupwm 70
10space.lowwm 80
11space.highwm 90
12space.out_of_space 95

Update cluster configuration

ais config cluster NAME=VALUE [NAME=VALUE...]

Use tab completion to discover available settings:

1$ ais config cluster <TAB-TAB>
2Display all 108 possibilities? (y or n)
3
4$ ais config cluster timeout.<TAB-TAB>
5timeout.cplane_operation timeout.max_host_busy timeout.send_file_time
6timeout.join_startup_time timeout.max_keepalive timeout.startup_time

Specify name-value pairs separated by space or =. To see the current value before updating, just press Enter:

1$ ais config cluster lru.enabled
2PROPERTY VALUE
3lru.enabled true
4
5$ ais config cluster lru.enabled=false
6{
7 "lru.enabled": "false"
8}
9
10Cluster config updated

Set multiple config values

1$ ais config cluster periodic.stats_time=10s disk.disk_util_low_wm=40
2Config has been updated successfully.

Update node configuration

ais config node NODE_ID [inherited | local] NAME=VALUE [NAME=VALUE...]

Steps:

  1. Select a node (or use <TAB-TAB> to complete)
  2. Select inherited to update cluster-level values, or local for node-specific settings
  3. Specify name-value pairs

When updating inherited values, all previous overrides can be undone with ais config reset.

Set multiple config values

1$ ais config node CMhHp8082 periodic.stats_time=10s disk.disk_util_low_wm=40
2Config has been updated successfully.

Reset configuration

ais config reset [NODE_ID]

Reset configuration back to cluster defaults, removing all local overrides.

1# Reset all nodes to cluster defaults:
2
3$ ais config reset
4config successfully reset for all nodes
1# Reset a specific node:
2
3$ ais config reset CMhHp8082
4config for node "CMhHp8082" successfully reset

CLI configuration

The CLI tool has its own configuration, separate from cluster configuration.

Note: Examples in this section show local-playground paths and ports; production deployments will differ.

Show CLI configuration

ais config cli [--path] [--json]

Display the current CLI configuration. Use --path to show only the config file location.

1$ ais config cli
2
3PROPERTY VALUE
4aliases cp => 'bucket cp'; create => 'bucket create'; evict => 'bucket evict';
5 ls => 'bucket ls'; rmb => 'bucket rm'; start => 'job start';
6 blob-download => 'job start blob-download'; download => 'job start download';
7 dsort => 'job start dsort'; stop => 'job stop'; wait => 'job wait';
8 get => 'object get'; mpu => 'object multipart-upload'; prefetch => 'object prefetch';
9 put => 'object put'; rmo => 'object rm'; space-cleanup => 'storage cleanup';
10 scrub => 'storage validate'
11auth.url http://127.0.0.1:52001
12cluster.client_ca_tls
13cluster.client_crt
14cluster.client_crt_key
15cluster.default_ais_host http://127.0.0.1:8080
16cluster.default_docker_host http://172.50.0.2:8080
17cluster.skip_verify_crt false
18cluster.url http://127.0.0.1:8080
19default_provider ais
20no_color false
21no_more false
22timeout.http_timeout 0s
23timeout.tcp_timeout 60s
24verbose false
1$ ais config cli --path
2/home/user/.ais/cli/cli.json

Update CLI configuration

ais config cli NAME=VALUE [NAME=VALUE...]

The configuration file is updated only if all new options are applied without errors. If an option name doesn’t exist or a value is incorrect, the operation is aborted.

1$ ais config cli timeout.tcp_timeout 61s
2"timeout.tcp_timeout" set to: "61s" (was: "60s")
3
4$ ais config cli --json
5{
6 "cluster": {
7 "url": "http://127.0.0.1:8080",
8 "default_ais_host": "http://127.0.0.1:8080",
9 "default_docker_host": "http://172.50.0.2:8080",
10 "client_crt": "",
11 "client_crt_key": "",
12 "client_ca_tls": "",
13 "skip_verify_crt": false
14 },
15 "timeout": {
16 "tcp_timeout": "60s",
17 "http_timeout": "0s"
18 },
19 "auth": {
20 "url": "http://127.0.0.1:52001"
21 },
22 "aliases": {
23 "wait": "job wait",
24 "cp": "bucket cp",
25 "ls": "bucket ls",
26 "prefetch": "object prefetch",
27 "rmo": "object rm",
28 "dsort": "job start dsort",
29 "get": "object get",
30 "rmb": "bucket rm",
31 "start": "job start",
32 "put": "object put",
33 "stop": "job stop",
34 "blob-download": "job start blob-download",
35 "create": "bucket create",
36 "download": "job start download",
37 "evict": "bucket evict"
38 },
39 "default_provider": "ais",
40 "no_color": false,
41 "verbose": false,
42 "no_more": false
43}