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’;
确认是否切换