mirror of
https://github.com/chrislusf/seaweedfs
synced 2025-09-10 13:22:47 +02:00
385 lines
8.7 KiB
Markdown
385 lines
8.7 KiB
Markdown
# FoundationDB Filer Store Configuration Reference
|
|
|
|
This document provides comprehensive configuration options for the FoundationDB filer store.
|
|
|
|
## Configuration Methods
|
|
|
|
### 1. Configuration File (filer.toml)
|
|
|
|
```toml
|
|
[foundationdb]
|
|
enabled = true
|
|
cluster_file = "/etc/foundationdb/fdb.cluster"
|
|
api_version = 720
|
|
timeout = "5s"
|
|
max_retry_delay = "1s"
|
|
directory_prefix = "seaweedfs"
|
|
```
|
|
|
|
### 2. Environment Variables
|
|
|
|
All configuration options can be set via environment variables with the `WEED_FOUNDATIONDB_` prefix:
|
|
|
|
```bash
|
|
export WEED_FOUNDATIONDB_ENABLED=true
|
|
export WEED_FOUNDATIONDB_CLUSTER_FILE=/etc/foundationdb/fdb.cluster
|
|
export WEED_FOUNDATIONDB_API_VERSION=720
|
|
export WEED_FOUNDATIONDB_TIMEOUT=5s
|
|
export WEED_FOUNDATIONDB_MAX_RETRY_DELAY=1s
|
|
export WEED_FOUNDATIONDB_DIRECTORY_PREFIX=seaweedfs
|
|
```
|
|
|
|
### 3. Command Line Arguments
|
|
|
|
While not directly supported, configuration can be specified via config files passed to the `weed` command.
|
|
|
|
## Configuration Options
|
|
|
|
### Basic Options
|
|
|
|
| Option | Type | Default | Description |
|
|
|--------|------|---------|-------------|
|
|
| `enabled` | boolean | `false` | Enable the FoundationDB filer store |
|
|
| `cluster_file` | string | `/etc/foundationdb/fdb.cluster` | Path to FoundationDB cluster file |
|
|
| `api_version` | integer | `720` | FoundationDB API version to use |
|
|
|
|
### Connection Options
|
|
|
|
| Option | Type | Default | Description |
|
|
|--------|------|---------|-------------|
|
|
| `timeout` | duration | `5s` | Transaction timeout duration |
|
|
| `max_retry_delay` | duration | `1s` | Maximum delay between retries |
|
|
|
|
### Storage Options
|
|
|
|
| Option | Type | Default | Description |
|
|
|--------|------|---------|-------------|
|
|
| `directory_prefix` | string | `seaweedfs` | Directory prefix for key organization |
|
|
|
|
## Configuration Examples
|
|
|
|
### Development Environment
|
|
|
|
```toml
|
|
[foundationdb]
|
|
enabled = true
|
|
cluster_file = "/var/fdb/config/fdb.cluster"
|
|
api_version = 720
|
|
timeout = "10s"
|
|
max_retry_delay = "2s"
|
|
directory_prefix = "seaweedfs_dev"
|
|
```
|
|
|
|
### Production Environment
|
|
|
|
```toml
|
|
[foundationdb]
|
|
enabled = true
|
|
cluster_file = "/etc/foundationdb/fdb.cluster"
|
|
api_version = 720
|
|
timeout = "30s"
|
|
max_retry_delay = "5s"
|
|
directory_prefix = "seaweedfs_prod"
|
|
```
|
|
|
|
### High-Performance Setup
|
|
|
|
```toml
|
|
[foundationdb]
|
|
enabled = true
|
|
cluster_file = "/etc/foundationdb/fdb.cluster"
|
|
api_version = 720
|
|
timeout = "60s"
|
|
max_retry_delay = "10s"
|
|
directory_prefix = "sw" # Shorter prefix for efficiency
|
|
```
|
|
|
|
### Path-Specific Configuration
|
|
|
|
Configure different FoundationDB settings for different paths:
|
|
|
|
```toml
|
|
# Default configuration
|
|
[foundationdb]
|
|
enabled = true
|
|
cluster_file = "/etc/foundationdb/fdb.cluster"
|
|
directory_prefix = "seaweedfs_main"
|
|
|
|
# Backup path with different prefix
|
|
[foundationdb.backup]
|
|
enabled = true
|
|
cluster_file = "/etc/foundationdb/fdb.cluster"
|
|
directory_prefix = "seaweedfs_backup"
|
|
location = "/backup"
|
|
timeout = "120s"
|
|
|
|
# Archive path with extended timeouts
|
|
[foundationdb.archive]
|
|
enabled = true
|
|
cluster_file = "/etc/foundationdb/fdb.cluster"
|
|
directory_prefix = "seaweedfs_archive"
|
|
location = "/archive"
|
|
timeout = "300s"
|
|
max_retry_delay = "30s"
|
|
```
|
|
|
|
## Configuration Validation
|
|
|
|
### Required Settings
|
|
|
|
The following settings are required for FoundationDB to function:
|
|
|
|
1. `enabled = true`
|
|
2. `cluster_file` must point to a valid FoundationDB cluster file
|
|
3. `api_version` must match your FoundationDB installation
|
|
|
|
### Validation Rules
|
|
|
|
- `api_version` must be between 600 and 720
|
|
- `timeout` must be a valid duration string (e.g., "5s", "30s", "2m")
|
|
- `max_retry_delay` must be a valid duration string
|
|
- `cluster_file` must exist and be readable
|
|
- `directory_prefix` must not be empty
|
|
|
|
### Error Handling
|
|
|
|
Invalid configurations will result in startup errors:
|
|
|
|
```
|
|
FATAL: Failed to initialize store for foundationdb: invalid timeout duration
|
|
FATAL: Failed to initialize store for foundationdb: failed to open FoundationDB database
|
|
FATAL: Failed to initialize store for foundationdb: cluster file not found
|
|
```
|
|
|
|
## Performance Tuning
|
|
|
|
### Timeout Configuration
|
|
|
|
| Use Case | Timeout | Max Retry Delay | Notes |
|
|
|----------|---------|-----------------|-------|
|
|
| Interactive workloads | 5s | 1s | Fast response times |
|
|
| Batch processing | 60s | 10s | Handle large operations |
|
|
| Archive operations | 300s | 30s | Very large data sets |
|
|
|
|
### Connection Pool Settings
|
|
|
|
FoundationDB automatically manages connection pooling. No additional configuration needed.
|
|
|
|
### Directory Organization
|
|
|
|
Use meaningful directory prefixes to organize data:
|
|
|
|
```toml
|
|
# Separate environments
|
|
directory_prefix = "prod_seaweedfs" # Production
|
|
directory_prefix = "staging_seaweedfs" # Staging
|
|
directory_prefix = "dev_seaweedfs" # Development
|
|
|
|
# Separate applications
|
|
directory_prefix = "app1_seaweedfs" # Application 1
|
|
directory_prefix = "app2_seaweedfs" # Application 2
|
|
```
|
|
|
|
## Security Configuration
|
|
|
|
### Cluster File Security
|
|
|
|
Protect the FoundationDB cluster file:
|
|
|
|
```bash
|
|
# Set proper permissions
|
|
sudo chown root:seaweedfs /etc/foundationdb/fdb.cluster
|
|
sudo chmod 640 /etc/foundationdb/fdb.cluster
|
|
```
|
|
|
|
### Network Security
|
|
|
|
FoundationDB supports TLS encryption. Configure in the cluster file:
|
|
|
|
```
|
|
description:cluster_id@tls(server1:4500,server2:4500,server3:4500)
|
|
```
|
|
|
|
### Access Control
|
|
|
|
Use FoundationDB's built-in access control mechanisms when available.
|
|
|
|
## Monitoring Configuration
|
|
|
|
### Health Check Settings
|
|
|
|
Configure health check timeouts appropriately:
|
|
|
|
```toml
|
|
[foundationdb]
|
|
enabled = true
|
|
timeout = "10s" # Reasonable timeout for health checks
|
|
```
|
|
|
|
### Logging Configuration
|
|
|
|
Enable verbose logging for troubleshooting:
|
|
|
|
```bash
|
|
# Start SeaweedFS with debug logs
|
|
WEED_FOUNDATIONDB_ENABLED=true weed -v=2 server -filer
|
|
```
|
|
|
|
## Migration Configuration
|
|
|
|
### From Other Filer Stores
|
|
|
|
When migrating from other filer stores:
|
|
|
|
1. Configure both stores temporarily
|
|
2. Use path-specific configuration for gradual migration
|
|
3. Migrate data using SeaweedFS tools
|
|
|
|
```toml
|
|
# During migration - keep old store for reads
|
|
[leveldb2]
|
|
enabled = true
|
|
dir = "/old/filer/data"
|
|
|
|
# New writes go to FoundationDB
|
|
[foundationdb.migration]
|
|
enabled = true
|
|
location = "/new"
|
|
cluster_file = "/etc/foundationdb/fdb.cluster"
|
|
```
|
|
|
|
## Backup Configuration
|
|
|
|
### Metadata Backup Strategy
|
|
|
|
```toml
|
|
# Main storage
|
|
[foundationdb]
|
|
enabled = true
|
|
directory_prefix = "seaweedfs_main"
|
|
|
|
# Backup storage (different cluster recommended)
|
|
[foundationdb.backup]
|
|
enabled = true
|
|
cluster_file = "/etc/foundationdb/backup_fdb.cluster"
|
|
directory_prefix = "seaweedfs_backup"
|
|
location = "/backup"
|
|
```
|
|
|
|
## Container Configuration
|
|
|
|
### Docker Environment Variables
|
|
|
|
```bash
|
|
# Docker environment
|
|
WEED_FOUNDATIONDB_ENABLED=true
|
|
WEED_FOUNDATIONDB_CLUSTER_FILE=/var/fdb/config/fdb.cluster
|
|
WEED_FOUNDATIONDB_API_VERSION=720
|
|
```
|
|
|
|
### Kubernetes ConfigMap
|
|
|
|
```yaml
|
|
apiVersion: v1
|
|
kind: ConfigMap
|
|
metadata:
|
|
name: seaweedfs-config
|
|
data:
|
|
filer.toml: |
|
|
[foundationdb]
|
|
enabled = true
|
|
cluster_file = "/var/fdb/config/cluster_file"
|
|
api_version = 720
|
|
timeout = "30s"
|
|
max_retry_delay = "5s"
|
|
directory_prefix = "k8s_seaweedfs"
|
|
```
|
|
|
|
## Troubleshooting Configuration
|
|
|
|
### Debug Configuration
|
|
|
|
```toml
|
|
[foundationdb]
|
|
enabled = true
|
|
cluster_file = "/etc/foundationdb/fdb.cluster"
|
|
timeout = "60s" # Longer timeouts for debugging
|
|
max_retry_delay = "10s"
|
|
directory_prefix = "debug_seaweedfs"
|
|
```
|
|
|
|
### Test Configuration
|
|
|
|
```toml
|
|
[foundationdb]
|
|
enabled = true
|
|
cluster_file = "/tmp/fdb.cluster" # Test cluster
|
|
timeout = "5s"
|
|
directory_prefix = "test_seaweedfs"
|
|
```
|
|
|
|
## Configuration Best Practices
|
|
|
|
### 1. Environment Separation
|
|
|
|
Use different directory prefixes for different environments:
|
|
- Production: `prod_seaweedfs`
|
|
- Staging: `staging_seaweedfs`
|
|
- Development: `dev_seaweedfs`
|
|
|
|
### 2. Timeout Settings
|
|
|
|
- Interactive: 5-10 seconds
|
|
- Batch: 30-60 seconds
|
|
- Archive: 120-300 seconds
|
|
|
|
### 3. Cluster File Management
|
|
|
|
- Use absolute paths for cluster files
|
|
- Ensure proper file permissions
|
|
- Keep backup copies of cluster files
|
|
|
|
### 4. Directory Naming
|
|
|
|
- Use descriptive prefixes
|
|
- Include environment/application identifiers
|
|
- Keep prefixes reasonably short for efficiency
|
|
|
|
### 5. Error Handling
|
|
|
|
- Configure appropriate timeouts
|
|
- Monitor retry patterns
|
|
- Set up alerting for configuration errors
|
|
|
|
## Configuration Testing
|
|
|
|
### Validation Script
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
# Test FoundationDB configuration
|
|
|
|
# Check cluster file
|
|
if [ ! -f "$WEED_FOUNDATIONDB_CLUSTER_FILE" ]; then
|
|
echo "ERROR: Cluster file not found: $WEED_FOUNDATIONDB_CLUSTER_FILE"
|
|
exit 1
|
|
fi
|
|
|
|
# Test connection
|
|
fdbcli -C "$WEED_FOUNDATIONDB_CLUSTER_FILE" --exec 'status' > /dev/null
|
|
if [ $? -ne 0 ]; then
|
|
echo "ERROR: Cannot connect to FoundationDB cluster"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Configuration validation passed"
|
|
```
|
|
|
|
### Integration Testing
|
|
|
|
```bash
|
|
# Test configuration with SeaweedFS
|
|
cd test/foundationdb
|
|
make check-env
|
|
make test-unit
|
|
```
|