Vitess · Schema

Vitess Topology

Schema for Vitess cluster topology entities including clusters, keyspaces, shards, tablets, VSchemas, and VReplication workflows used in managing horizontally-sharded MySQL clusters.

Cloud NativeCNCFDatabaseDistributed SystemsGraduatedMySQLSharding
View JSON Schema on GitHub

JSON Schema

vitess-topology-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://vitess.io/schemas/vitess/topology.json",
  "title": "Vitess Topology",
  "description": "Schema for Vitess cluster topology entities including clusters, keyspaces, shards, tablets, VSchemas, and VReplication workflows used in managing horizontally-sharded MySQL clusters.",
  "type": "object",
  "$defs": {
    "Cluster": {
      "type": "object",
      "title": "Cluster",
      "description": "A Vitess cluster registered with VTAdmin, representing a complete Vitess deployment with its own topology service, keyspaces, and tablets.",
      "required": ["id", "name"],
      "properties": {
        "id": {
          "type": "string",
          "description": "Unique identifier for the cluster used in API paths",
          "minLength": 1,
          "maxLength": 255
        },
        "name": {
          "type": "string",
          "description": "Human-readable display name for the cluster",
          "minLength": 1,
          "maxLength": 255
        }
      }
    },
    "TabletAlias": {
      "type": "object",
      "title": "TabletAlias",
      "description": "A unique identifier for a VTTablet instance combining its cell and numeric UID.",
      "required": ["cell", "uid"],
      "properties": {
        "cell": {
          "type": "string",
          "description": "Cell (availability zone or data center) where the tablet is located",
          "minLength": 1,
          "maxLength": 255
        },
        "uid": {
          "type": "integer",
          "description": "Unique numeric identifier for the tablet within its cell",
          "minimum": 0
        }
      }
    },
    "Tablet": {
      "type": "object",
      "title": "Tablet",
      "description": "A VTTablet instance managing a single MySQL instance within a Vitess shard. Tablets serve one of several roles: PRIMARY (read-write), REPLICA (read-only with replication), or RDONLY (read-only batch workloads).",
      "required": ["alias"],
      "properties": {
        "alias": {
          "$ref": "#/$defs/TabletAlias",
          "description": "Unique identifier for this tablet"
        },
        "hostname": {
          "type": "string",
          "description": "Hostname of the machine running this tablet",
          "format": "hostname"
        },
        "port_map": {
          "type": "object",
          "description": "Map of named ports to their port numbers (e.g., grpc: 16000, mysql: 3306)",
          "additionalProperties": {
            "type": "integer",
            "minimum": 1,
            "maximum": 65535
          }
        },
        "keyspace": {
          "type": "string",
          "description": "Name of the keyspace this tablet serves",
          "minLength": 1,
          "maxLength": 255
        },
        "shard": {
          "type": "string",
          "description": "Key range shard this tablet serves (e.g., '-80', '80-', '-')",
          "pattern": "^(-[0-9a-f]*|[0-9a-f]+-[0-9a-f]*)$"
        },
        "type": {
          "type": "string",
          "description": "Role of this tablet in the cluster topology",
          "enum": ["UNKNOWN", "PRIMARY", "MASTER", "REPLICA", "RDONLY", "BATCH", "SPARE", "EXPERIMENTAL", "BACKUP", "RESTORE", "DRAINED"]
        },
        "mysql_hostname": {
          "type": "string",
          "description": "MySQL hostname, which may differ from the tablet hostname when MySQL runs on a separate host",
          "format": "hostname"
        },
        "mysql_port": {
          "type": "integer",
          "description": "Port number on which MySQL is listening",
          "minimum": 1,
          "maximum": 65535
        },
        "tags": {
          "type": "object",
          "description": "Arbitrary key-value tags for organizing and filtering tablets",
          "additionalProperties": {
            "type": "string"
          }
        }
      }
    },
    "Keyspace": {
      "type": "object",
      "title": "Keyspace",
      "description": "A Vitess keyspace representing a logical database that may be sharded horizontally across multiple MySQL instances. Unsharded keyspaces contain a single shard serving the full key range.",
      "required": ["name"],
      "properties": {
        "name": {
          "type": "string",
          "description": "Unique name of the keyspace within its cluster",
          "minLength": 1,
          "maxLength": 255
        },
        "sharding_column_name": {
          "type": "string",
          "description": "Column name used as the sharding key. Empty for unsharded keyspaces."
        },
        "sharding_column_type": {
          "type": "string",
          "description": "Data type of the sharding column",
          "enum": ["UNSET", "UINT64", "BYTES"]
        },
        "served_froms": {
          "type": "array",
          "description": "ServedFrom records for routing certain tablet types to a different keyspace",
          "items": {
            "type": "object",
            "description": "A ServedFrom record redirecting a tablet type to another keyspace",
            "properties": {
              "tablet_type": {
                "type": "string",
                "description": "Tablet type that is served from another keyspace"
              },
              "keyspace": {
                "type": "string",
                "description": "Keyspace to serve from for this tablet type"
              }
            }
          }
        }
      }
    },
    "Shard": {
      "type": "object",
      "title": "Shard",
      "description": "A shard within a Vitess keyspace representing a contiguous range of the sharding key space managed by a set of tablets.",
      "required": ["name", "keyspace"],
      "properties": {
        "keyspace": {
          "type": "string",
          "description": "Name of the keyspace containing this shard",
          "minLength": 1
        },
        "name": {
          "type": "string",
          "description": "Key range name identifying this shard (e.g., '-80', '80-', '-')"
        },
        "primary_alias": {
          "$ref": "#/$defs/TabletAlias",
          "description": "Tablet alias of the current primary (read-write) tablet for this shard"
        },
        "primary_term_start_time": {
          "type": "string",
          "format": "date-time",
          "description": "Timestamp when the current primary was elected"
        },
        "is_primary_serving": {
          "type": "boolean",
          "description": "Whether the primary tablet is currently serving queries"
        },
        "source_shards": {
          "type": "array",
          "description": "Source shards from which this shard is being populated during a reshard",
          "items": {
            "type": "object",
            "description": "A source shard reference",
            "properties": {
              "uid": {
                "type": "integer",
                "description": "Unique ID for this source shard reference"
              },
              "keyspace": {
                "type": "string",
                "description": "Keyspace of the source shard"
              },
              "shard": {
                "type": "string",
                "description": "Name of the source shard"
              }
            }
          }
        }
      }
    },
    "VSchema": {
      "type": "object",
      "title": "VSchema",
      "description": "VTGate routing schema defining how queries are routed to shards. Specifies vindexes (sharding functions) and table routing rules for a keyspace.",
      "required": ["sharded"],
      "properties": {
        "sharded": {
          "type": "boolean",
          "description": "Whether this keyspace is sharded. Unsharded keyspaces have a simpler VSchema."
        },
        "vindexes": {
          "type": "object",
          "description": "Map of vindex names to their definitions. Vindexes are sharding functions that map column values to shards.",
          "additionalProperties": {
            "$ref": "#/$defs/Vindex"
          }
        },
        "tables": {
          "type": "object",
          "description": "Map of table names to their VSchema table definitions specifying routing behavior",
          "additionalProperties": {
            "$ref": "#/$defs/VSchemaTable"
          }
        }
      }
    },
    "Vindex": {
      "type": "object",
      "title": "Vindex",
      "description": "A vindex (virtual index) defining how column values are mapped to shards. Vindexes enable Vitess to route queries to the correct shard without a scatter query.",
      "required": ["type"],
      "properties": {
        "type": {
          "type": "string",
          "description": "Vindex type determining the hashing algorithm",
          "enum": ["hash", "lookup", "lookup_unique", "consistent_lookup", "consistent_lookup_unique", "xxhash", "unicode_loose_md5", "binary", "binary_md5", "numeric"]
        },
        "params": {
          "type": "object",
          "description": "Additional parameters for the vindex type",
          "additionalProperties": {
            "type": "string"
          }
        },
        "owner": {
          "type": "string",
          "description": "Table that owns this vindex (for lookup vindexes)"
        }
      }
    },
    "VSchemaTable": {
      "type": "object",
      "title": "VSchemaTable",
      "description": "VSchema definition for a table specifying which vindexes are used for routing queries to this table.",
      "properties": {
        "column_vindexes": {
          "type": "array",
          "description": "List of column-to-vindex mappings for this table",
          "items": {
            "type": "object",
            "description": "A mapping from a column to a vindex",
            "required": ["column", "name"],
            "properties": {
              "column": {
                "type": "string",
                "description": "Column name used as input to the vindex"
              },
              "name": {
                "type": "string",
                "description": "Name of the vindex to use for this column"
              }
            }
          }
        },
        "auto_increment": {
          "type": "object",
          "description": "Auto-increment configuration using a Vitess sequence",
          "properties": {
            "column": {
              "type": "string",
              "description": "Column to auto-increment"
            },
            "sequence": {
              "type": "string",
              "description": "Sequence table to use for generating IDs"
            }
          }
        },
        "columns": {
          "type": "array",
          "description": "Column definitions for type-aware query routing",
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "description": "Column name"
              },
              "type": {
                "type": "string",
                "description": "Column data type"
              }
            }
          }
        }
      }
    },
    "Workflow": {
      "type": "object",
      "title": "Workflow",
      "description": "A VReplication workflow orchestrating data movement between keyspaces or shards. Workflow types include MoveTables, Reshard, Materialize, and CreateLookupVindex.",
      "required": ["name"],
      "properties": {
        "name": {
          "type": "string",
          "description": "Unique name for the workflow within its target keyspace",
          "minLength": 1,
          "maxLength": 255
        },
        "source": {
          "type": "object",
          "description": "Source configuration specifying where data is being read from",
          "properties": {
            "keyspace": {
              "type": "string",
              "description": "Source keyspace name"
            },
            "shards": {
              "type": "array",
              "description": "Source shard names being read",
              "items": {
                "type": "string"
              }
            }
          }
        },
        "target": {
          "type": "object",
          "description": "Target configuration specifying where data is being written to",
          "properties": {
            "keyspace": {
              "type": "string",
              "description": "Target keyspace name"
            },
            "shards": {
              "type": "array",
              "description": "Target shard names being written",
              "items": {
                "type": "string"
              }
            }
          }
        },
        "max_v_replication_lag": {
          "type": "string",
          "description": "Maximum replication lag in seconds across all VReplication streams in this workflow",
          "pattern": "^[0-9]+$"
        },
        "workflow_type": {
          "type": "string",
          "description": "Type of VReplication workflow",
          "enum": ["Materialize", "MoveTables", "CreateLookupVindex", "Reshard", "OnlineDDL"]
        },
        "workflow_sub_type": {
          "type": "string",
          "description": "Sub-type providing additional context for the workflow type"
        }
      }
    },
    "Backup": {
      "type": "object",
      "title": "Backup",
      "description": "A tablet backup record representing a point-in-time snapshot of a shard's MySQL data.",
      "required": ["keyspace", "shard"],
      "properties": {
        "cluster_id": {
          "type": "string",
          "description": "ID of the cluster that owns this backup"
        },
        "keyspace": {
          "type": "string",
          "description": "Keyspace this backup covers"
        },
        "shard": {
          "type": "string",
          "description": "Shard this backup covers"
        },
        "tablet_alias": {
          "$ref": "#/$defs/TabletAlias",
          "description": "Alias of the tablet that created this backup"
        },
        "time": {
          "type": "string",
          "format": "date-time",
          "description": "Timestamp when the backup was taken"
        },
        "engine": {
          "type": "string",
          "description": "Backup engine used to create this backup",
          "enum": ["builtin", "xtrabackup", "mysqlshell"]
        },
        "status": {
          "type": "string",
          "description": "Current status of the backup",
          "enum": ["UNKNOWN", "COMPLETE", "INCOMPLETE", "INVALID", "VALID"]
        },
        "name": {
          "type": "string",
          "description": "Unique name for this backup within its storage location"
        }
      }
    }
  }
}