本章介绍 HoraeDB 的运维相关的操作,包括表相关操作,设置访问黑名单,已经如何监控 HoraeDB。未来还会介绍集群扩容,容灾相关:
1 - 监控
HoraeDB 支持使用 Prometheus 和 Grafana 做自监控。
Prometheus
Prometheus 是非常流行的系统和服务监控系统。
配置
把下面的配置保存到 prometheus.yml
文件中。比如,在 tmp
目录下,文件地址为 /tmp/prometheus.yml
。
有两个 HoraeDB http 服务启动在 localhost:5440
、localhost:5441
。
|
|
Prometheus 详细配置见这里。
运行
你可以使用 docker 来运行 Prometheus。Docker 镜像在这里可以找到。
docker run \
-d --name=prometheus \
-p 9090:9090 \
-v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus:v2.41.0
更多 Prometheus 安装方法,参考这里。
Grafana
Grafana 是一个非常流行的可观察性和数据可视化平台。
运行
你可以使用 docker 来运行 Grafana。Docker 镜像在这里可以找到。
docker run -d --name=grafana -p 3000:3000 grafana/grafana:9.3.6
默认用户密码是 admin/admin.
运行上面命令后,grafana 可以用浏览器打开 http://127.0.0.1:3000。
更多 Grafana 安装方法,参考这里。
配置数据源
- 将光标悬停在配置(齿轮)图标上。
- 选择数据源。
- 选择 Prometheus 数据源。
注意: Prometheus 的 url 需要填写成这样 http://your_ip:9090
, your_ip 换成本地地址。
更详细的配置可以参考这里。
导入监控页面
HoraeDB 指标
当导入完成后,你可以看到如下页面:
Panels
- tps: 集群写入请求数。
- qps: 集群查询请求数。
- 99th query/write duration: 查询写入的 99% 分位数。
- table query by table: 表查询请求数。
- 99th write duration details by instance: 写入耗时的 99% 分位数。
- 99th query duration details by instance: 查询耗时的 99% 分位数。
- 99th write partition table duration: 分区表查询耗时的 99% 分位数。
- table rows: 表的写入行数。
- table rows by instance: 实例级别的写入行数。
- total tables to write: 有数据写入的表数目。
- flush count: HoraeDB flush 的次数。
- 99th flush duration details by instance: 实例级别的 flush 耗时的 99% 分位数。
- 99th write stall duration details by instance: 实例级别的写入停顿时间的 99% 分位数 。
2 - 系统表
查询 Table 信息
类似于 Mysql’s information_schema.tables
, HoraeDB 提供 system.public.tables
存储表信息。
system.public.tables
表的列如下 :
- timestamp([TimeStamp])
- catalog([String])
- schema([String])
- table_name([String])
- table_id([Uint64])
- engine([String])
通过表名查询表信息示例如下:
|
|
返回结果
|
|
3 - 表操作
HoraeDB 支持标准的 SQL,用户可以使用 Http 协议创建表和读写表。更多内容可以参考 SQL 语法
创建表
示例如下
|
|
写数据
示例如下
|
|
读数据
示例如下
|
|
查询表信息
示例如下
|
|
Drop 表
示例如下
|
|
查询表路由
示例如下
|
|
4 - 集群运维
集群运维接口的使用前提是,HoraeDB 部署为使用 HoraeMeta 的集群模式。
运维接口
注意: 如下接口在实际使用时需要将 127.0.0.1 替换为 HoraeMeta 的真实地址。
- 查询表元信息 当 tableNames 不为空的时候,使用 tableNames 进行查询。 当 tableNames 为空的时候,使用 ids 进行查询。使用 ids 查询的时候,schemaName 不生效。
curl --location 'http://127.0.0.1:8080/api/v1/table/query' \
--header 'Content-Type: application/json' \
-d '{
"clusterName":"defaultCluster",
"schemaName":"public",
"names":["demo1", "__demo1_0"],
}'
curl --location 'http://127.0.0.1:8080/api/v1/table/query' \
--header 'Content-Type: application/json' \
-d '{
"clusterName":"defaultCluster",
"ids":[0, 1]
}'
- 查询表的路由信息
curl --location --request POST 'http://127.0.0.1:8080/api/v1/route' \
--header 'Content-Type: application/json' \
-d '{
"clusterName":"defaultCluster",
"schemaName":"public",
"table":["demo"]
}'
- 查询节点对应的 Shard 信息
curl --location --request POST 'http://127.0.0.1:8080/api/v1/getNodeShards' \
--header 'Content-Type: application/json' \
-d '{
"ClusterName":"defaultCluster"
}'
- 查询 Shard 对应的表信息 如果 shardIDs 为空时,查询所有 shard 上表信息。
curl --location --request POST 'http://127.0.0.1:8080/api/v1/getShardTables' \
--header 'Content-Type: application/json' \
-d '{
"clusterName":"defaultCluster",
"shardIDs": [1,2]
}'
- 删除指定表的元数据
curl --location --request POST 'http://127.0.0.1:8080/api/v1/dropTable' \
--header 'Content-Type: application/json' \
-d '{
"clusterName": "defaultCluster",
"schemaName": "public",
"table": "demo"
}'
- Shard 切主
curl --location --request POST 'http://127.0.0.1:8080/api/v1/transferLeader' \
--header 'Content-Type: application/json' \
-d '{
"clusterName":"defaultCluster",
"shardID": 1,
"oldLeaderNodeName": "127.0.0.1:8831",
"newLeaderNodeName": "127.0.0.1:18831"
}'
- Shard 分裂
curl --location --request POST 'http://127.0.0.1:8080/api/v1/split' \
--header 'Content-Type: application/json' \
-d '{
"clusterName" : "defaultCluster",
"schemaName" :"public",
"nodeName" :"127.0.0.1:8831",
"shardID" : 0,
"splitTables":["demo"]
}'
- 创建 HoraeDB 集群
curl --location 'http://127.0.0.1:8080/api/v1/clusters' \
--header 'Content-Type: application/json' \
--data '{
"name":"testCluster",
"nodeCount":3,
"ShardTotal":9,
"enableSchedule":true,
"topologyType":"static"
}'
- 更新 HoraeDB 集群
curl --location --request PUT 'http://127.0.0.1:8080/api/v1/clusters/{NewClusterName}' \
--header 'Content-Type: application/json' \
--data '{
"nodeCount":28,
"shardTotal":128,
"enableSchedule":true,
"topologyType":"dynamic"
}'
- 列出 HoraeDB 集群
curl --location 'http://127.0.0.1:8080/api/v1/clusters'
- 修改
enableSchedule
curl --location --request PUT 'http://127.0.0.1:8080/api/v1/clusters/{ClusterName}/enableSchedule' \
--header 'Content-Type: application/json' \
--data '{
"enable":true
}'
- 查询
enableSchedule
curl --location 'http://127.0.0.1:8080/api/v1/clusters/{ClusterName}/enableSchedule'
- 更新限流器
curl --location --request PUT 'http://127.0.0.1:8080/api/v1/flowLimiter' \
--header 'Content-Type: application/json' \
--data '{
"limit":1000,
"burst":10000,
"enable":true
}'
- 查询限流器信息
curl --location 'http://127.0.0.1:8080/api/v1/flowLimiter'
- HoraeMeta 列出节点
curl --location 'http://127.0.0.1:8080/api/v1/etcd/member'
- HoraeMeta 节点切主
curl --location 'http://127.0.0.1:8080/api/v1/etcd/moveLeader' \
--header 'Content-Type: application/json' \
--data '{
"memberName":"meta1"
}'
- HoraeMeta 节点扩容
curl --location --request PUT 'http://127.0.0.1:8080/api/v1/etcd/member' \
--header 'Content-Type: application/json' \
--data '{
"memberAddrs":["http://127.0.0.1:42380"]
}'
- HoraeMeta 替换节点
curl --location 'http://127.0.0.1:8080/api/v1/etcd/member' \
--header 'Content-Type: application/json' \
--data '{
"oldMemberName":"meta0",
"newMemberAddr":["http://127.0.0.1:42380"]
}'
5 - 黑名单
增加黑名单
如果你想限制某个表的查询,可以把表名加到 read_block_list
中。
示例如下:
|
|
返回结果:
|
|
设置黑名单
设置黑名单的操作首先会清理已有的列表,然后再把新的表设置进去。
示例如下:
|
|
返回结果:
|
|
删除黑名单
如果你想把表从黑名单中移除,可以使用如下命令:
|
|
返回结果:
|
|