sidebar_label | sidebar_position |
---|---|
Quick Start |
2 |
This page will guide you through downloading TigerBeetle, setting up a single- or multi-node cluster, and creating some accounts and transfers using the REPL.
TigerBeetle is a single, small, statically-linked binary.
# macOS
curl -Lo tigerbeetle.zip https://mac.tigerbeetle.com && unzip tigerbeetle.zip && ./tigerbeetle version
# Linux
curl -Lo tigerbeetle.zip https://linux.tigerbeetle.com && unzip tigerbeetle.zip && ./tigerbeetle version
# Windows
powershell -command "curl.exe -Lo tigerbeetle.zip https://windows.tigerbeetle.com; Expand-Archive tigerbeetle.zip .; .\tigerbeetle version"
To build TigerBeetle from source, clone the repo, install Zig and run zig build
:
git clone https://github.com/tigerbeetle/tigerbeetle && cd tigerbeetle
./zig/download.sh # .bat if you're on Windows.
./zig/zig build
./tigerbeetle version
Notes:
- Building from source is not recommended for production deployments.
- If you build TigerBeetle from source, it is only compatible with clients that were also built from source.
You can download prebuilt binaries here:
Linux | Windows | MacOS | |
---|---|---|---|
x86_64 | tigerbeetle-x86_64-linux.zip | tigerbeetle-x86_64-windows.zip | tigerbeetle-universal-macos.zip |
aarch64 | tigerbeetle-aarch64-linux.zip | N/A | tigerbeetle-universal-macos.zip |
You can find instructions on using TigerBeetle with Docker here.
Each TigerBeetle node uses a single data file to store its state. Create the data file using the
format
command:
./tigerbeetle format --cluster=0 --replica=0 --replica-count=1 --development 0_0.tigerbeetle
info(io): creating "0_0.tigerbeetle"...
info(io): allocating 660.140625MiB...
Now we'll run the TigerBeetle server.
./tigerbeetle start --addresses=3000 --development 0_0.tigerbeetle
info(io): opening "0_0.tigerbeetle"...
info(main): 0: cluster=0: listening on 127.0.0.1:3000
Now that we have TigerBeetle running, we can connect to it via the REPL to create some accounts and transfers!
./tigerbeetle repl --cluster=0 --addresses=3000
TigerBeetle Client
Hit enter after a semicolon to run a command.
Examples:
create_accounts id=1 code=10 ledger=700 flags=linked | history,
id=2 code=10 ledger=700;
create_transfers id=1 debit_account_id=1 credit_account_id=2 amount=10 ledger=700 code=10;
lookup_accounts id=1;
lookup_accounts id=1, id=2;
In the REPL, create two accounts on the same ledger using the command:
create_accounts id=1 code=10 ledger=700,
id=2 code=10 ledger=700;
info(message_bus): connected to replica 0
Now create a transfer of 10
(of some amount/currency) between the two accounts.
create_transfers id=1 debit_account_id=1 credit_account_id=2 amount=10 ledger=700 code=10;
Now, the amount of 10
has been credited to account 2
and debited from account 1
.
Let's query TigerBeetle for these two accounts to verify the transfer we made!
lookup_accounts id=1, id=2;
{
"id": "1",
"user_data": "0",
"ledger": "700",
"code": "10",
"flags": [],
"debits_pending": "0",
"debits_posted": "10",
"credits_pending": "0",
"credits_posted": "0"
}
{
"id": "2",
"user_data": "0",
"ledger": "700",
"code": "10",
"flags": "",
"debits_pending": "0",
"debits_posted": "0",
"credits_pending": "0",
"credits_posted": "10"
}
And indeed you can see that account 1
has debits_posted
as 10
and account 2
has
credits_posted
as 10
. The 10
amount is fully accounted for!
You can take a look at the Accounts
reference to understand all of the
fields on the accounts.
You can also take a look at the Request Types to see what else you can do with the REPL.
Up to this point, we have only shown you how to run a single-node TigerBeetle cluster. In production, TigerBeetle is intended to be run with 6 nodes.
Here, we will show you how to run a 3-node cluster (the idea is the same for 6 nodes):
First, create the data files for each node:
./tigerbeetle format --cluster=0 --replica=0 --replica-count=3 --development 0_0.tigerbeetle
./tigerbeetle format --cluster=0 --replica=1 --replica-count=3 --development 0_1.tigerbeetle
./tigerbeetle format --cluster=0 --replica=2 --replica-count=3 --development 0_2.tigerbeetle
Note that the data file stores which replica in the cluster the file belongs to.
Start each server in a new terminal window:
./tigerbeetle start --addresses=127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002 --development 0_0.tigerbeetle
./tigerbeetle start --addresses=127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002 --development 0_1.tigerbeetle
./tigerbeetle start --addresses=127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002 --development 0_2.tigerbeetle
TigerBeetle uses the --replica
that's stored in the data file as an index into the --addresses
provided.
You can connect to the REPL as described above try creating accounts and transfers in this cluster.
You can also read more about deploying TigerBeetle in production.
Now that you've created some accounts and transfers, you may want to read about how TigerBeetle fits into your system architecture and dig into the data model.