{"id":29857250,"url":"https://github.com/logicalclocks/rondb-tools","last_synced_at":"2026-03-15T12:24:05.419Z","repository":{"id":298067691,"uuid":"998743751","full_name":"logicalclocks/rondb-tools","owner":"logicalclocks","description":"Tools for benchmarking RonDB","archived":false,"fork":false,"pushed_at":"2025-06-24T12:43:20.000Z","size":94,"stargazers_count":0,"open_issues_count":1,"forks_count":2,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-07-26T22:13:20.023Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/logicalclocks.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-09T07:17:22.000Z","updated_at":"2025-06-24T12:43:24.000Z","dependencies_parsed_at":null,"dependency_job_id":"b897bbdf-ffd5-429b-b6b1-e82c4c661a86","html_url":"https://github.com/logicalclocks/rondb-tools","commit_stats":null,"previous_names":["logicalclocks/rondb-tools"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/logicalclocks/rondb-tools","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logicalclocks%2Frondb-tools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logicalclocks%2Frondb-tools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logicalclocks%2Frondb-tools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logicalclocks%2Frondb-tools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/logicalclocks","download_url":"https://codeload.github.com/logicalclocks/rondb-tools/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logicalclocks%2Frondb-tools/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267786038,"owners_count":24144125,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-29T02:00:12.549Z","response_time":2574,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-07-30T00:39:23.798Z","updated_at":"2026-03-15T12:24:00.383Z","avatar_url":"https://github.com/logicalclocks.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RonDB Tools\n\nThis tool lets you deploy a RonDB cluster on AWS, monitor the cluster and run benchmarks.\n\n## Simple usage\n\nA minimal guide to get started.\n\n1. The easiest way to get all necessary dependencies is to install `nix` and run `nix-shell`.\n  You'll get a bash session with access to the dependencies, without modifying your system directories.\n  Otherwise:\n    * [Install terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)\n    * Install AWS CLI, python3, rsync and tmux.\n      * On Debian/Ubuntu: `apt-get update \u0026\u0026 apt-get install -y awscli python3 rsync tmux`\n      * On macOS: `brew install awscli python3 rsync tmux`\n2. You need an AWS API key to create cloud resources.\n  Run `aws configure` and enter it.\n3. Run `./cluster_ctl deploy` to initialize and deploy the cluster.\n   Go to the printed web address to monitor the cluster using grafana dashboards.\n4. Run `./cluster_ctl bench_locust` to create test data and start locust.\n  Go to the printed web address to access locust.\n5. In the locust GUI, set the number of users to the same as the number of workers and press `START`.\n  During the benchmark run, you can use both locust and grafana to gather statistics, from the client's and server's point of view, respectively.\n6. Run `./cluster_ctl cleanup` to destroy the AWS resources and local files created.\n\n## Manual\n\n### Cluster configuration\n\nA cluster can be (re)configured by changing the values in `config.py`.\n\nBefore running `./cluster_ctl deploy` (or `./cluster_ctl terraform`) and after running `./cluster_ctl cleanup`, terraform is not initialized and you may edit `config.py` freely.\nOtherwise, follow these steps:\n* If you intend to change region, run `./cluster_ctl cleanup`.\n  This is because `region` cannot be updated for an existing cluster.\n* Edit `config.py`.\n* Apply the changes. The easiest way to do this is to run `./cluster_ctl deploy`.\n\n  If the cluster already existed, it might be possible to apply the changes faster, but it's more complex:\n  * If you have changed variables that affect AWS resources, you must run `./cluster_ctl terraform`.\n    These variables include `num_azs`, `cpu_platform`, `*_instance_type`, `*_disk_size` and `*_count`.\n  * Run `./cluster_ctl install` at least for affected nodes.\n    This may include more nodes than you suppose.\n    For example, changing `ndbmtd_count` will affect the sequence of node IDs assigned to `mysqld`, `rdrs` and `bench` nodes, and will also affect the `ndb_mgmd` config.\n  * Run `./cluster_ctl start` at least for affected nodes.\n* If all data nodes have been reinstalled or restarted, the test data table is lost.\n  You'll have to repopulate using `./cluster_ctl bench_locust` or `./cluster_ctl populate`.\n* If you have run `./cluster_ctl deploy` or `./cluster_ctl start` on `bench` nodes, locust will be stopped but not started.\n  You'll have to use `./cluster_ctl bench_locust` or `./cluster_ctl start_locust` for that.\n\n### `cluster_ctl` reference\n\nSome sub-commands take a `NODES` argument.\nIt is a comma-separated list of node names and node types.\nIf given, the command will operate only on matching nodes, otherwise on all nodes.\nAvailable node types are: `ndb_mgmd`, `ndbmtd`, `mysqld`, `rdrs`, `prometheus`, `grafana` and `bench`.\n\n* `./cluster_ctl deploy [NODES]`\n    A convenience command equivalent to `terraform`, `install` and `start`.\n\n* `./cluster_ctl terraform`\n    Configure, initialize and apply terraform as needed.\n    In detail,\n    * create or update `terraform.tfvars`.\n    * call `terraform init` unless it is already initialized.\n    * call `terraform apply`.\n\n* `./cluster_ctl install [NODES]`\n    Install necessary software and configuration files.\n    Depending on the node type this may include RonDB, prometheus, grafana and locust.\n\n* `./cluster_ctl start [NODES]`\n    Start or restart services.\n    (This will not start locust, see `bench_locust`.)\n\n* `./cluster_ctl stop [NODES]`\n    Stop services.\n\n* `./cluster_ctl open_tmux [NODES]`\n    Create a tmux session with ssh connections opened to all applicable nodes.\n\n    When attached to the tmux session, you can press `C-b n` to go to the next window, and `C-b d` to detach.\n\n    If a session already exists, ignore the `NODES` argument and reattach to it.\n    To connect to a different set of nodes, use `kill_tmux` first.\n\n    See also the `./cluster_ctl ssh` command.\n\n* `./cluster_ctl kill_tmux`\n    Kill the tmux session created by open_tmux.\n\n* `./cluster_ctl ssh NODE_NAME [COMMAND ...]`\n    Connect to a node using ssh.\n    Run `./cluster_ctl list` to see the options for `NODE_NAME`.\n\n    See also the `./cluster_ctl open_tmux` command.\n\n* `./cluster_ctl bench_locust [--cols COLUMNS] [--rows ROWS] [--types COLUMN_TYPES] [--workers WORKERS]`\n    A convenience command equivalent to `populate` followed by `start_locust`.\n\n* `./cluster_ctl populate [--cols COLUMNS] [--rows ROWS] [--types COLUMN_TYPES]`\n    Create and populate a table with test data.\n    If a table already exists, recreate it if any parameter has changed, otherwise do nothing.\n    Parameters:\n    * `COLUMNS`: Number of columns in table. Default 10.\n    * `ROWS`: Number of rows in table. Default 100000.\n    * `COLUMN_TYPES`: The columns types in table; one of `INT`, `VARCHAR`, `INT_AND_VARCHAR`. Default `INT`.\n\n* `./cluster_ctl start_locust [--rows ROWS] [--workers WORKERS]`\n    Start or restart locust services.\n    You need to run `populate` first.\n    Parameters:\n    * `ROWS`: Number of rows in table. Default 100000.\n            **Warning**: This must be set to the same value as the last call to `populate`.\n            Prefer using `bench_locust`, which will do the right thing automatically.\n    * `WORKERS`: Number of locust workers. Defaults to the maximum possible (one per available CPU).\n\n* `./cluster_ctl stop_locust`\n    Stop locust.\n\n* `./cluster_ctl list`\n    Print node information, including node name, node type, public and private IP, NDB Node IDs, and running processes.\n\n* `./cluster_ctl cleanup`\n    This will\n    * destroy the terraform cluster created by `./cluster_ctl terraform`\n    * destroy the AWS SSH key created by `./cluster_ctl terraform`\n    * remove the tmux session created by `./cluster_ctl open_tmux`\n    * delete temporary files\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flogicalclocks%2Frondb-tools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flogicalclocks%2Frondb-tools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flogicalclocks%2Frondb-tools/lists"}