lnd/docs/etcd.md
2024-07-22 20:08:12 -07:00

86 lines
2.7 KiB
Markdown

# Experimental etcd support in LND
With the recent introduction of the `kvdb` interface LND can support multiple
database backends allowing experimentation with the storage model as well as
improving robustness through e.g. replicating essential data.
Building on `kvdb` in v0.11.0 we're adding experimental [etcd](https://etcd.io)
support to LND. As this is an unstable feature heavily in development, it still
has *many* rough edges for the time being. It is therefore highly recommended to
not use LND on `etcd` in any kind of production environment especially not
on bitcoin mainnet.
## Building LND with etcd support
To create a dev build of LND with etcd support use the following command:
```shell
$ make tags="kvdb_etcd"
```
The important tag is the `kvdb_etcd`, without which the binary is built without
the etcd driver.
For development, it is advised to set the `GOFLAGS` environment variable to
`"-tags=test"` otherwise `gopls` won't work on code in `channeldb/kvdb/etcd`
directory.
## Running a local etcd instance for testing
To start your local etcd instance for testing run:
```shell
$ ./etcd \
--auto-tls \
--advertise-client-urls=https://127.0.0.1:2379 \
--listen-client-urls=https://0.0.0.0:2379 \
--max-txn-ops=16384 \
--max-request-bytes=104857600
```
The large `max-txn-ops` and `max-request-bytes` values are currently required in
case of running LND with the full graph in etcd. These parameters have been
tested to work with testnet LND.
## Configuring LND to run on etcd
To run LND with etcd, additional configuration is needed, specified either
through command line flags or in `lnd.conf`.
Sample command line:
```shell
$ ./lnd-debug \
--db.backend=etcd \
--db.etcd.host=127.0.0.1:2379 \
--db.etcd.certfile=/home/user/etcd/bin/default.etcd/fixtures/client/cert.pem \
--db.etcd.keyfile=/home/user/etcd/bin/default.etcd/fixtures/client/key.pem \
--db.etcd.insecure_skip_verify
```
Sample `lnd.conf` (with other setting omitted):
```text
[db]
db.backend=etcd
db.etcd.host=127.0.0.1:2379
db.etcd.cerfile=/home/user/etcd/bin/default.etcd/fixtures/client/cert.pem
db.etcd.keyfile=/home/user/etcd/bin/default.etcd/fixtures/client/key.pem
db.etcd.insecure_skip_verify=true
```
Optionally users can specify `db.etcd.user` and `db.etcd.pass` for db user
authentication. If the database is shared, it is possible to separate our data
from other users by setting `db.etcd.namespace` to an (already existing) etcd
namespace. In order to test without TLS, users are able to set `db.etcd.disabletls`
flag to `true`.
## Migrating existing channel.db to etcd
This is currently not supported.
## Disclaimer
As mentioned before this is an experimental feature, and with that your data
may be lost. Use at your own risk!