feat: add deploy mode (#247)

## Rationale
In the current implementation, every time the CeresDB node changes, it
will cause large-scale scheduling in the cluster. However, in the actual
situation, we hope to control the affected range of the cluster when
deploy and debug. Therefore, we need to add a deploy mode switch to
control cluster scheduling.

## Detailed Changes
* Add `DeployMode` switch in `RebalancedShardScheduler`, shard topology
will be locked when deploy mode is true.
* Add some API to control `DeployMode`.

## Test Plan
Pass all unit tests and test `DeployMode` take effect locally.
9 files changed
tree: 1d2dfc33c63a3c157335a54413d0693eabc95826
  1. .github/
  2. cmd/
  3. config/
  4. docker/
  5. docs/
  6. pkg/
  7. scripts/
  8. server/
  9. .gitignore
  10. .golangci.yml
  11. CODE_OF_CONDUCT.md
  12. CONTRIBUTING.md
  13. Dockerfile
  14. go.mod
  15. go.sum
  16. LICENSE
  17. Makefile
  18. README.md
  19. revive.toml
  20. tools.go
README.md

Ceresmeta

codecov License

CeresMeta is the meta service for managing the CeresDB cluster.

Status

The project is in a very early stage.

Quick Start

Build ceresmeta binary

make build

Standalone Mode

Although CeresMeta is designed to deployed as a cluster with three or more instances, it can also be started standalone:

# ceresmeta0
mkdir /tmp/ceresmeta0
./ceresmeta --config ./config/example-standalone.toml

Cluster mode

Here is an example for starting CeresMeta in cluster mode (three instances) on single machine by using different ports:

# Create directories.
mkdir /tmp/ceresmeta0
mkdir /tmp/ceresmeta1
mkdir /tmp/ceresmeta2

# Ceresmeta0
./ceresmeta --config ./config/exampl-cluster0.toml

# Ceresmeta1
./ceresmeta --config ./config/exampl-cluster1.toml

# Ceresmeta2
./ceresmeta --config ./config/exampl-cluster2.toml

Acknowledgment

CeresMeta refers to the excellent project pd in design and some module and codes are forked from pd, thanks to the TiKV team.

Contributing

The project is under rapid development so that any contribution is welcome. Check our Contributing Guide and make your first contribution!

License

CeresMeta is under Apache License 2.0.