【SOP 系列 15】configserver 安装和使用

ob-configserver 使用场景

  • 通过 OMS 3.3.1 版本或 3.3.1 以上版本迁移 OceanBase 到其他数据源时(增量迁移)。

  • OBProxy 命令行启动时,指定 obproxy_config_server_url 参数,一个 OBProxy 可以访问多个 OceanBase 集群。

以上使用场景如果没有使用 OCP ,可以使用 ob-configserver 来获取 OceanBase 集群的 rs_list 信息。

1、下载 ob-configserver

wget http://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/ob-configserver-1.0.0-2.el7.x86_64.rpm -O "ob-configserver-1.0.0-2.el7.x86_64.rpm"

说明

建议在 阿里云开源镜像站 下载最新的版本。

2、安装 ob-configserver

yum install ob-configserver-1.0.0-2.el7.x86_64.rpm

安装后目录结构:

tree -L 3 /home/admin/ob-configserver
/home/admin/ob-configserver
├── bin
│   └── ob-configserver
├── conf
│   └── config.yaml
├── log
└── run

感兴趣的同学,也可以在 GitHub 上下载源码编译安装。

https://github.com/oceanbase/oceanbase/tree/3.1/tools/ob-configserver

3、编辑配置文件

vim /home/admin/ob-configserver/conf/config.yaml

说明:

  • 0.0.0.0:9999:表示在 ob-configserver 所在服务器的所有 IP 上监听 9999 端口(默认是 8080)。

  • vip address :如果有多个 ob-configserver,可以通过 LB 提供一个统一的访问入口,如果没有 vip,这里需要填写 ob-configserver 机器实际的 IP 地址,端口跟 server 0.0.0.0 处监听端口保持一致。

  • 如果 database_type 选择的是 mysql ,那么 connection_url 可以是 OceanBase 的存储,也可以是原生 MySQL。

  • connection_url:指定的数据库用户需要有 URL 里对应库创建表和 DML 的权限,注意这里的库名不要使用 oceanbase 库,否则会提示没有权限。

4、启动 ob-configserver

4.1 debug 模式

cd /home/admin/ob-configserver && bin/ob-configserver -c conf/config.yaml

使用 ctrl+c 可以退出 debug 模式。

4.2 release 模式

export GIN_MODE=release
cd /home/admin/ob-configserver 
nohup bin/ob-configserver -c conf/config.yaml &

启动后查看日志,ob-configserver 监听的端口正常。

5、ob-ocnfigserver 的使用

使用 OBD 部署或者 rpm 手动命令行部署的 OceanBase 集群,参数 obconfig_url 值为空,确认方法如下:

mysql> select name,value,svr_ip,svr_port from oceanbase.__all_virtual_sys_parameter_stat where name='obconfig_url';
+--------------+-------+---------------+----------+
| name         | value | svr_ip        | svr_port |
+--------------+-------+---------------+----------+
| obconfig_url |       | 172.30.199.49 |     2882 |
+--------------+-------+---------------+----------+
1 row in set (0.00 sec)

使用上面我们部署的 ob-configserver 来修改 obconfig_url 参数。

alter system set obconfig_url = 'http://172.30.199.46:9999/services?Action=ObRootServiceInfo&ObCluster=cluster2';

验证通过 ob-configserver 是否可以解析出 OceanBase 集群 rs_list 的信息。

curl -s 'http://172.30.199.46:9999/services?Action=ObRootServiceInfo&ObCluster=cluster2' |jq .

说明:jq 命令是用来格式化(美化)shell 命令行下 json 的输出,可以通过 yum install jq 安装。

5.1 OMS 中使用

OMS 3.3.1 版本开始,如果 OceanBase 作为源端增量迁移时,可以填写 configurl 的地址,通过 configserver 提供的解析,可以不用再绝对依赖 OCP。

5.2 OBProxy 中使用

可以在使用 OBD 新部署的 OBProxy 中不使用 rs_list,使用 obproxy_config_server_url,示例如下:

obproxy_config_server_url: http://172.30.199.46:9999/services?Action=GetObProxyConfig

注意

observer_sys_password 里面的密码需要跟 oceanbase-ce 部分的 proxyro_password 密码保持一致。

当 OBProxy 通过 obproxy_config_server_url 方式启动后,在待访问的目标 OceanBase 集群里需要设置obconfig_url 参数,示例如下:

alter system set obconfig_url = 'http://172.30.199.46:9999/services?Action=ObRootServiceInfo&ObCluster=obcluster';

此时,我们通过 OBD 或者手动部署的 OBProxy 也可以支持访问多个 OceanBase 集群了。

常见问题

  • 启动 ob-configserver 时,需要确保 config.yaml 里 connection_url 指定的 OceanBase 集群开启了_ob_enable_prepared_statement 参数。

    2022-11-16T09:52:14.47799+08:00 ERROR [12258,] caller=cmd/main.go:36:func1: start configserver failed: start config server: create configserver schema: sql/schema: reading schema information Error 1235: while parameter _ob_enable_prepared_statement is disabled, prepared statement not supported
    [172.30.199.49:2882] [2022-11-16 09:52:14.459102] [YB42AC1EC731-0005EB5F1D83A0A7] fields: args:="[]"
    

    确认和修改:

    mysql> select name,value,svr_ip,svr_port from oceanbase.__all_virtual_sys_parameter_stat where name='_ob_enable_prepared_statement';
    +-------------------------------+-------+---------------+----------+
    | name                          | value | svr_ip        | svr_port |
    +-------------------------------+-------+---------------+----------+
    | _ob_enable_prepared_statement | False | 172.30.199.49 |     2882 |
    +-------------------------------+-------+---------------+----------+
    1 row in set (0.00 sec)
    
    
    mysql> alter system set _ob_enable_prepared_statement='True';
    Query OK, 0 rows affected (0.02 sec)
    

    或者将 configserver 的 config.yaml 里 connection_url 添加上 parseTime=true&interpolateParams=true,示例:

    user:password@tcp(127.0.0.1:3306)/oceanbase?parseTime=true&interpolateParams=true
    
  • 新启动 ob-configserver 或者将 ob-configserver 的存储进行调整(比如最开始存储在 OceanBase 集群上,后面切换存储到原生 MySQL 实例上),需要等 connection_url 里指定的库的 ob_clusters 表里有对应的记录才可以。

    可以在 OceanBase 集群内设置 obconfig_url 这个参数后,然后 RS 切主一次, 会触发自动汇报 RS 信息到 configserver。

    alter system switch rootservice leader server 'x.x.x.x:2882';
    

如果是OB 4.x, RS 切主命令发生了变化:
ALTER SYSTEM SWITCH REPLICA leader LS=1 SERVER=‘目标ip:_rpc_port’ TENANT =‘sys’;

切换前后可以
select svr_ip,svr_port from dba_ob_servers where with_rootserver=‘YES’;
确认是否切换

1 个赞

不错,终于独立出来,开源了

1 个赞

这个好呀,真详细,有空实操一下 :grinning:

1 个赞

OceanBase 4.x查看参数obconfig_url的value值,是从oceanbase.__all_sys_parameter这张表中查询

111111111test

1 个赞

test123


V4 或者 v3 单节点集群只有一个root service 切不了呀,请问这个怎么处理呀