涉及到多个角色/服务(Mergeserver,Updateserver,Chunkserver,Rootserver)的Oceanbase调试需要将整个集群启动起来后进行,为了方便,可以在同一台计算机上启动这些服务,只要占用的端口不同即可。下面简要记录如何在同一台计算机上启动Oceanbase的四个服务。
1. 编译并安装Oceanbase集群(configure, make, make install)到目标文件夹
2. 将single-machine-bootstrap拷贝到目标文件夹,并运行一次,以自动初始化各种数据目录,其中data和etc目录如下:
single-machine-bootstrap会自动生成一个最简单的schema.ini,只建立了一个简单示例表,这可能不是你需要的,可以进入到etc/目录,将这个文件替换成你需要的schema
4. 使用oceanbase.sh脚本启动集群 :
oceanbase.sh start_rs
oceanbase.sh start_ups
oceanbase.sh start_ms
oceanbase.sh start_cs
5. 执行rs_admin来设置主机群标志(MUST):
bin/rs_admin -r 10.1.11.11 -p 1111 set_obi_role -o OBI_MASTER
上面的ip和端口是rs的,可以在etc/rootserver.conf中查看到。
6. 使用oceanbase.sh脚本关闭集群:
oceanbase.sh stop_rs
oceanbase.sh stop_ups
oceanbase.sh stop_ms
oceanbase.sh stop_cs
不一定能一次就关死,必要时候ps -aux | grep server 看一下
oceanbase各个server的运行日志在data/log目录下,通过查看日志可以观察程序是否运行正确
具体调试就得靠gdb了,attach上去即可。
另外,为了调试查询相关的问题,还可以使用客户端,有两种途径:(1)自己利用c api来编写客户端(2)利用psql(自从有了ObConnector,Oceanbase就可以被各种通用的SQL客户端访问了。OBConnector的功能是让用户可以通过Postgres Psql工具或其他语言的Postgres数据库接口(如Posgres JDBC,Postgres PHP PDO接口)连接和访问Oceanbase数据库。)
常见问题:
1. 启动时(特别是重启时)无法创建table
》请(1)尝试重启,(2)检查etc/rootserver.conf下面的__create_table_in_init=1项目,确保值为1,(3)删除data/rs_commitlog, data/ups_commitlog再重启
2. 重启时一些server没法启动
》 确保原server被kill掉了,如果没有,使用kill -9 server_pid暴力踢之
3. 其它
》确保使用了rs_admin来设置obi role,这一步是必须的,容易忘记。
作者email:hustos@qq.com