configserver 简介
什么是configserver
configserver 是一个 web 服务,提供了 OceanBase 元数据信息存取的功能。
configserver 的作用
●存储 OceanBase 的 rootservice 列表,当 OceanBase bootstrap 时,或者之后有 rootservice 列表变化时,OceanBase 会请求 configserver,将 rootservice 列表写进去,configserver 记录了所有相关的 OceanBase 集群的信息,统一进行存储。
●提供查询 OceanBase rootservice 列表的能力,以特定的 api 给 OceanBase 相关组件使用。
configserver 部署方式
configserver 进程本身是无状态的一个 web 服务,所有数据都放在后端的存储当中,根据不同的使用场景,可以灵活选择。
1. 安装方式,可以通过rpm的方式进行安装,rpm包下载地址: ob-configserver-1.0.0-2.el7.x86_64.rpm
2. rpm包安装完成之后的目录结构
#tree
.
├── bin
│ └── ob-configserver
├── conf
│ └── config.yaml
├── log
└── run
3. 修改配置文件
configserver 的配置都使用一个配置文件来记录,按照实际情况来进行修改
log:
level: info
filename: ./log/ob-configserver.log
maxsize: 30
maxage: 7
maxbackups: 10
localtime: true
compress: true
server:
address: "0.0.0.0:9999"
run_dir: run
vip:
address: "100.81.152.81"
port: 9999
storage:
# database_type: sqlite3
#
# store data in a file `/tmp/data.db`
# connection_url: "/tmp/data.db?cache=shared&_fk=1"
#
# store data in memory, only for test
# connection_url: "file:ent?mode=memory&cache=shared&_fk=1"
database_type: mysql
connection_url: "root:root@tcp(127.0.0.1:3306)/oceanbase?parseTime=true"
configserver 得配置文件包括几个部分
●日志配置:包括级别,文件,回收策略等
●服务配置: 包括监听地址,run 目录
●vip配置: 如果使用了vip,需要配置为正确的vip地址和端口,返回结果中的url地址会使用vip地址和端口, 如果没有使用vip,这里要配置成服务器的ip和端口, 不能写127.0.0.1,localhost或者主机名
●存储配置: 支持两种存储,sqlite3 和 mysql, 使用 sqlite3 只能将数据存在本地文件,或者测试时也可以配置存在内存中,不建议生产环境使用,使用 mysql 可以将数据存到数据库中,configserver 可以起多个进程,通过配置 vip 或者域名来保持高可用。
4. 启动configserver进程
bin/ob-configserver -c conf/config.yaml &
configserver 接口说明
为了兼容性考虑,完全按照 OCP 的 configserver的接口形式,请求路径 'http://xxx:xx/services?Action=xxx', 以不同的 Action 来区分不同的功能。以下以不同的接口功能来分别介绍。
注册 OceanBase 集群 rootservice 信息
●请求地址: http://${domain}/services
●请求方式: POST
●请求参数:
名称 | 类型 | 是否必填 | 典型值 | 说明 |
Action | String | 是 | ObRootServiceInfo | Action 必填,不可以修改 |
ObCluster | String | 否 | obcluster | 集群名,ObCluster和ObRegion必须填其中一个 |
ObClusterId | int64 | 否 | 1 | OB 集群ID,ObClusterId 和 ObRegionId 表示相同的含义,如果需要的话,填写其中一个就可以 |
ObRegion | String | 否 | obcluster | 集群名,ObCluster和ObRegion必须填其中一个 |
ObRegionId | int64 | 否 | 1 | OB 集群ID,ObClusterId 和 ObRegionId 表示相同的含义,如果需要的话,填写其中一个就可以 |
version | int | 否 | 1 | 版本,2表示支持主备库的版本,不传 OB 集群 ID 的话以列表形式返回OB得rs 信息,1表示老版本,之后返回一个OB集群的rs信息,当主备库情况,返回主库信息或最新的备库信息 |
- 返回结果
# version = 1 或者 version =2 并且传了 ob 集群 id
{
"Code": 200,
"Message": "successful",
"Success": true,
"Data": {
"ObClusterId": 1,
"ObRegionId": 1,
"ObCluster": "xueran",
"ObRegion": "xueran",
"ReadonlyRsList": [],
"RsList": [{
"address": "11.124.5.58:3882",
"role": "LEADER",
"sql_port": 3881
}],
"Type": "PRIMARY",
"timestamp": 1652419587417171
},
"Trace": "ae51534d2011cf54",
"Server": "100.81.152.81",
"Cost": 1
}
# version = 2 并且没有传 ob 集群的 id
{
"Code": 200,
"Message": "successful",
"Success": true,
"Data": [{
"ObClusterId": 1,
"ObRegionId": 1,
"ObCluster": "xueran",
"ObRegion": "xueran",
"ReadonlyRsList": [],
"RsList": [{
"address": "11.124.5.58:3882",
"role": "LEADER",
"sql_port": 3881
}],
"Type": "PRIMARY",
"timestamp": 1652419587417171
}, {
"ObClusterId": 2,
"ObRegionId": 2,
"ObCluster": "xueran",
"ObRegion": "xueran",
"ReadonlyRsList": [],
"RsList": [{
"address": "11.124.5.57:2882",
"role": "LEADER",
"sql_port": 2881
}],
"Type": "STANDBY",
"timestamp": 1652436572067984
}],
"Trace": "6086557f99347161",
"Server": "100.81.152.81",
"Cost": 2
}
删除 OceanBase 集群 rootservice 信息
- 请求地址: http://${domain}/services
- 请求方式: DELETE
- 请求参数:
名称 | 类型 | 是否必填 | 典型值 | 说明 |
Action | String | 是 | ObRootServiceInfo | Action 必填,不可以修改 |
ObCluster | String | 否 | obcluster | 集群名,ObCluster和ObRegion必须填其中一个 |
ObClusterId | int64 | 否 | 1 | OB 集群ID,ObClusterId 和 ObRegionId 表示相同的含义,需要填写其中一个 |
ObRegion | String | 否 | obcluster | 集群名,ObCluster和ObRegion必须填其中一个 |
ObRegionId | int64 | 否 | 1 | OB 集群ID,ObClusterId 和 ObRegionId 表示相同的含义,需要填写其中一个 |
version | int | 否 | 2 | 仅支持version=2 |
- 返回结果
{
"Code": 200,
"Message": "successful",
"Success": true,
"Data": "success",
"Trace": "c6bba4477215d762",
"Server": "100.81.152.81",
"Cost": 2
}
查询所有集群的 rootservice 信息
- 请求地址: http://${domain}/services
- 请求方式: GET/POST
- 请求参数:
名称 | 类型 | 是否必填 | 典型值 | 说明 |
Action | String | 是 | GetObProxyConfig | Action 必填,不可以修改 |
VersionOnly | Boolean | 否 | false | 是否只返回version信息 |
- 返回结果
# 返回所有信息
{
"Code": 200,
"Message": "successful",
"Success": true,
"Data": {
"ObProxyBinUrl": "http://100.81.152.81:9999/client?Action=GetObProxy",
"ObProxyDatabaseInfo": {
"DataBase": "***",
"MetaDataBase": "http://100.81.152.81:9999/services?Action=ObRootServiceInfo&User_ID=alibaba&UID=admin&ObRegion=obdv1",
"Password": "***",
"User": "***"
},
"ObRootServiceInfoUrlList": [{
"ObRegion": "xueran",
"ObRootServiceInfoUrl": "http://100.81.152.81:9999/services?Action=ObRootServiceInfo&ObCluster=xueran"
}],
"Version": "07c5563d293278097dc84e6b64ef6341"
},
"Trace": "043214541db350b7",
"Server": "100.81.152.81",
"Cost": 1
}
# versiononly
{
"Code": 200,
"Message": "successful",
"Success": true,
"Data": {
"Version": "07c5563d293278097dc84e6b64ef6341"
},
"Trace": "6631b08008ec9c2f",
"Server": "100.81.152.81",
"Cost": 1
}
查询所有集群的 rootservice 信息,以template形式返回
- 请求地址: http://${domain}/services
- 请求方式: GET/POST
- 请求参数:
名称 | 类型 | 是否必填 | 典型值 | 说明 |
Action | String | 是 | GetObRootServiceInfoUrlTemplate | Action 必填,不可以修改 |
VersionOnly | Boolean | 否 | false | 是否只返回version信息 |
- 返回结果
# 返回所有信息
{
"Code": 200,
"Message": "successful",
"Success": true,
"Data": {
"ObProxyBinUrl": "http://100.81.152.81:9999/client?Action=GetObProxy",
"ObProxyDatabaseInfo": {
"DataBase": "***",
"MetaDataBase": "http://100.81.152.81:9999/services?Action=ObRootServiceInfo&User_ID=alibaba&UID=admin&ObRegion=obdv1",
"Password": "***",
"User": "***"
},
"Version": "b34e6381994003c5d758890ededb82a4",
"ObClusterList": ["xueran"],
"ObRootServiceInfoUrlTemplate": "http://100.81.152.81:9999/services?Action=ObRootServiceInfo&ObRegion=${ObRegion}",
"ObRootServiceInfoUrlTemplateV2": "http://100.81.152.81:9999/services?Action=ObRootServiceInfo&version=2&ObCluster=${ObCluster}&ObClusterId=${OBClusterId}"
},
"Trace": "abdb62d90ab13d38",
"Server": "100.81.152.81",
"Cost": 1
}
# versiononly
{
"Code": 200,
"Message": "successful",
"Success": true,
"Data": {
"Version": "b34e6381994003c5d758890ededb82a4"
},
"Trace": "45a499783746c6d7",
"Server": "100.81.152.81",
"Cost": 1
}
查询 IDC Region 映射关系 (并不实际返回,仅为了兼容处理,返回空列表)
- 请求地址: http://${domain}/services
- 请求方式: GET
- 请求参数:
名称 | 类型 | 是否必填 | 典型值 | 说明 |
Action | String | 是 | ObIDCRegionInfo | Action 必填,不可以修改 |
ObCluster | String | 否 | obcluster | 集群名,ObCluster和ObRegion必须填其中一个 |
ObClusterId | int64 | 否 | 1 | OB 集群ID,ObClusterId 和 ObRegionId 表示相同的含义,如果需要的话,填写其中一个就可以 |
ObRegion | String | 否 | obcluster | 集群名,ObCluster和ObRegion必须填其中一个 |
ObRegionId | int64 | 否 | 1 | OB 集群ID,ObClusterId 和 ObRegionId 表示相同的含义,如果需要的话,填写其中一个就可以 |
version | int | 否 | 1 | 版本,2表示支持主备库的版本,1表示仅支持单集群 |
- 返回结果:
# version = 1 或者 version =2 并且传了 ob 集群 id
{
"Code": 200,
"Message": "successful",
"Success": true,
"Data": {
"ObRegion": "xueran",
"ObRegionId": 2,
"IDCList": [],
"ReadonlyRsList": ""
},
"Trace": "178fd9e8094ef0dc",
"Server": "100.81.152.81",
"Cost": 2
}
# version =2 并且没有传 ob 集群 id
{
"Code": 200,
"Message": "successful",
"Success": true,
"Data": [{
"ObRegion": "xueran",
"ObRegionId": 1,
"IDCList": [],
"ReadonlyRsList": ""
}, {
"ObRegion": "xueran",
"ObRegionId": 2,
"IDCList": [],
"ReadonlyRsList": ""
}],
"Trace": "99b3db8337ff7799",
"Server": "100.81.152.81",
"Cost": 2
}