Deploy Transfer on Bare Metal
This guide deploys one independent Transfer process next to an existing Curvine cluster. Master and Worker processes must already be running and must come from a version that supports Transfer tasks.
Prepare the Service Configurationâ
Start with the cluster configuration that already contains the Master addresses
and create a Transfer-specific copy. The [transfer] section below is the only
new section required for a single-instance SQLite deployment.
# conf/curvine-transfer.toml
[transfer]
enabled = true
store_url = "sqlite:///var/lib/curvine-transfer/transfer.db"
hostname = "transfer-1.example.com"
rpc_port = 9010
web_port = 9011
endpoints = ["transfer-1.example.com:9010"]
Create the store directory with the same operating-system user that runs the service. The SQLite database must live on persistent local or block storage. Do not put it on a shared filesystem or run a second Transfer process against it.
install -d -o curvine -g curvine /var/lib/curvine-transfer
Start and Stopâ
The distribution includes a Transfer launcher. It sources curvine-env.sh,
writes logs/transfer.out, and manages transfer.pid.
export CURVINE_HOME=/opt/curvine
export CURVINE_CONF_FILE=$CURVINE_HOME/conf/curvine-transfer.toml
$CURVINE_HOME/bin/curvine-transfer.sh start
$CURVINE_HOME/bin/curvine-transfer.sh stop
Run Under systemdâ
Use the bundled launcher so that the service receives the normal Curvine shell
environment. Save the following as /etc/systemd/system/curvine-transfer.service.
[Unit]
Description=Curvine Transfer Service
After=network-online.target
Wants=network-online.target
[Service]
Type=forking
User=curvine
Group=curvine
WorkingDirectory=/opt/curvine
Environment=CURVINE_CONF_FILE=/opt/curvine/conf/curvine-transfer.toml
PIDFile=/opt/curvine/transfer.pid
ExecStart=/opt/curvine/bin/curvine-transfer.sh start
ExecStop=/opt/curvine/bin/curvine-transfer.sh stop
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now curvine-transfer
systemctl status curvine-transfer
Verifyâ
curl --fail http://transfer-1.example.com:9011/readyz
curl --fail http://transfer-1.example.com:9011/healthz
export CURVINE_CONF_FILE=/opt/curvine/conf/curvine-transfer.toml
/opt/curvine/bin/cv transfer list
The client address must be reachable from every CLI user and from every Worker that may execute a Transfer task.
High Availabilityâ
For multiple Transfer processes, replace the SQLite URL with one shared MySQL
store_url. Give every process a unique reachable address and publish one
stable client endpoint through a load balancer or DNS name. Do not use multiple
independent SQLite databases as failover targets.