RustFS Multiple Node Multiple Disk Installation

Install a distributed RustFS cluster across multiple servers, each with multiple disks.

Multiple Node Multiple Disk (MNMD) mode is the production deployment for clusters that span multiple servers. A minimum of 4 servers is required, each with at least 1 disk, to safely start a distributed object storage cluster.

Topology and Planning

In the following architecture, requests are distributed to the servers through load balancing. With the default 12 + 4 erasure coding layout, each object is split into 12 data shards and 4 parity shards stored on different disks across different servers:

  • The cluster stays available and loses no data if any single server fails or is taken down for maintenance.
  • The cluster can tolerate the loss of up to 4 disks without data loss.
Deployment architectureLoad Balancing → Server Node1; Load Balancing → Server Node2; Load Balancing → Server Node3; Load Balancing → Server Node4; Server Node1 → Disk1; Server Node1 → Disk2; Server Node1 → Disk3; Server Node1 → Disk4; Server Node2 → Disk1; Server Node2 → Disk2; Server Node2 → Disk3; Server Node2 → Disk4; Server Node3 → Disk1; Server Node3 → Disk2; Server Node3 → Disk3; Server Node3 → Disk4; Server Node4 → Disk1; Server Node4 → Disk2; Server Node4 → Disk3; Server Node4 → Disk4Access and computeStorageLoad BalancingServer Node1Server Node2Server Node3Server Node4Disk1Disk2Disk3Disk4Disk1Disk2Disk3Disk4Disk1Disk2Disk3Disk4Disk1Disk2Disk3Disk4Connection

Before installation, review the Pre-Installation Checklists and make sure that every item meets production requirements.

Hostnames

A RustFS cluster requires hostnames that follow a consistent, sequentially numbered pattern (for example, node1 through node4). There are two ways to achieve sequential hostnames:

1. DNS Configuration:

Create DNS records so that each sequential hostname resolves to the correct node.

2. /etc/hosts configuration:

Add the following entries to /etc/hosts on every node:

/etc/hosts
vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.1 node1
192.168.1.2 node2
192.168.1.3 node3
192.168.1.4 node4

Prerequisites and Service Setup

On every node, complete the common prerequisites and service setup — operating system, firewall, time synchronization, disk formatting, service user, binary download, and systemd unit — then continue below. Remember that all nodes must use the same listening port and must have synchronized clocks.

Configure Environment Variables

  1. Create the same configuration file on every node. RUSTFS_VOLUMES uses brace expansion to enumerate all nodes and all disk mount points (this example: 4 nodes × 4 disks):
/etc/default/rustfs
# Use a unique access key and a strong, random secret (e.g. openssl rand -base64 24)
RUSTFS_ACCESS_KEY=<your-access-key>
RUSTFS_SECRET_KEY=<your-secret-key>
RUSTFS_VOLUMES="http://node{1...4}:9000/data/rustfs{0...3}"
RUSTFS_ADDRESS=":9000"
RUSTFS_CONSOLE_ENABLE=true
RUSTFS_CONSOLE_ADDRESS=":9001"
RUSTFS_OBS_LOGGER_LEVEL=error
RUSTFS_OBS_LOG_DIRECTORY="/var/log/rustfs/"

The access key, secret key, and RUSTFS_VOLUMES value must be identical on all nodes. The hostnames (node1 – node4) must match the DNS or /etc/hosts configuration above.

  1. Create the storage and log directories on every node:
sudo mkdir -p /data/rustfs{0..3} /var/log/rustfs /opt/tls
sudo chmod -R 750 /data/rustfs* /var/log/rustfs

Start and verify the service

  1. Start the service on every node and enable auto-start on boot:
sudo systemctl enable --now rustfs
  1. Verify the service status:
systemctl status rustfs
  1. Check the service port:
netstat -ntpl
  1. View log files:
tail -f /var/log/rustfs/rustfs*.log
  1. Access the console: enter any node's IP address (or the load balancer address) and the console port (default 9001) in a browser. You should see:

Console

Next Steps

On this page