启动失败
对于启动失败的问题,请参考以下步骤进行处理:
- 查看机器是否存在hostname。
输入hostname -i, 确认host ip是否存在
e.g.
$hostname -i
100.12.34.56
- 查看目录是否存在,权限是否正确。
如果目录不存在,需要使用admin用户建立目录。
/opt/taobao/install/obproxy
drwxr-xr-x 2 admin admin 4096 May 20 15:01 bin
drwxr-xr-x 2 admin admin 4096 May 20 15:02 etc
lrwxrwxrwx 1 admin admin 28 Apr 27 16:30 log -> /home/admin/logs/obproxy/log
lrwxrwxrwx 1 admin admin 33 Apr 27 16:30 minidump -> /home/admin/logs/obproxy/minidump
drwxr-xr-x 2 admin admin 4096 Apr 27 16:30 tools
/home/admin/logs/obproxy
drwxrwxr-x 2 admin admin 2084864 May 20 15:02 log
drwxrwxr-x 2 admin admin 4096 Apr 27 18:42 minidump
- 查看端口是否被暂用。
假定使用的端口为2883, 确认端口是否占用
$sudo netstat -anp | grep 2883
tcp 0 0 0.0.0.0:2883 0.0.0.0:* LISTEN 33371/obproxy
- 查看启动命令行是否使用非英文符号。
从word等文档中拷贝出来的命令行,其中破折号可能是中文的,proxy会识别失败的,导致命令行参数失效。如果使用了非英文符号,将所有的符号使用英文符号重写即可解决。
- 检查 OCP 是否不可用。
当ocp不可用时,意味着config server不可用. 此时proxy的仍然能保证正常启动, 但依赖以下2个前提:
- proxy本地缓存文件没有被删除, 这里主要是指etc目录或者.conf目录中的
obproxy_config.bin
+obproxy_config_server_info.json
+obproxy_rslist_info.json
存在本地缓存. 如果没有本地缓存, 从其他相同环境部署的proxy目录中拷贝过来这些文件即可。 - proxy启动参数不要指定
-e
.-e
是proxy首次部署才使用的, 会依赖ocp. 正常启动proxy时一定不要指定-e
。
- 检查启动参数。
- 使用rslist启动时, rslist格式为:
ip1:port1;ip2:port2;ip3:port3
, 中间没有任何空格。 - 使用
-o
传入启动参数时,格式为:k1=v1,k2=v2,k3=v3
,中间不包含任何空格。
无法建立连接
obproxy启动成功后,当使用mysql client连接obproxy时,可能会出现下表中的错误。
类型 | 报错信息 |
IP PORT错误 | ERROR 2003 (HY000): Can’t connect to MySQL server on ‘127.1’ (111) |
权限错误 | ERROR 1045 (42000): Access denied for user ‘XXXXXXXXX’ |
租户名错误 | ERROR 5160 (HY000): invalid tenant name specified in connection string |
认证错误 | ERROR 2013 (HY000): Lost connection to MySQL server at ‘reading authorization packet’, system error: 0 |
其中:
- IP PORT错误
请检查所需建立连接的OBProxy是否存在。
- 权限错误、租户名错误或认证错误
这类错误情况比较复杂,按照如下方式进行分析:
- 检查用户名、租户名、集群名或密码是否正确。
如果不确认是否正确,可以直接连接observer确认该信息是否正确, 注意连接observer的时候不能带集群名。
b. 检查本机mysql版本是否过低。
MySQL 5.7.8之前版本, 用户名长度超过16字节会被截断。5.7.8版本之后版本用户长度超过32字节会被截断。这里的用户名应包含完整的username@tenantname#clustername。
c. 本地json配置集群是否和远程json文件一致
该配置文件主要用于确认您需要连接的OceanBase集群(ObRegion)是否存在。搜索关键字:ObRegion
本地json配置文件在以下两个目录:
/opt/taobao/install/obproxy/etc
obproxy_config_server_info.json
obproxy_rslist_info.json
/opt/taobao/install/obproxy/.conf
obproxy_config_server_info.json
obproxy_rslist_info.json
这两个文件以/opt/taobao/install/obproxy/etc目录下文件为准。
远程json配置文件:
查看 /opt/taobao/install/obproxy/obproxy_config.bin文件
其中有一个配置项为:obproxy_config_server_url
e.g.
obproxy_config_server_url=xxx
curl "xxx"
注意 curl URL的时候需要在URL上加上双引号
其他问题
其他问题请参考以下方法排查:
查看obproxy日志, 搜索关键日志:
Now closing connection
根据obproxy trace ID,可以简单的跟踪问题
e.g.
[2016-05-24 21:59:29.195634] INFO [PROXY.CS] ob_mysql_client_session.cpp:258 [36485][Y0-7FC4C44325B0] [11]session born(cs_id=4, client_vc_=0x7fc4be003550)
[2016-05-24 21:59:29.197318] INFO [PROXY] ob_proxy_auth_parser.cpp:335 [36485][Y0-7FC4C44325B0] [38]succ to parse handshake response(result=cluster_name:"111",
tenant_name:"sysbench", user_name:"root", user_tenant_name:"root@sysbench", full_name:"root@sysbench#111", response:{capability_.capability:239237, max_packet_si
ze:16777216, character_set:8, username:"root@sysbench", database:"", auth_plugin_name:"", connect_attrs:[]}, is_clustername_from_default:false, ret=0)
[2016-05-24 21:59:29.197356] WARN [PROXY.SM] setup_get_cluster_resource (ob_mysql_sm.cpp:556) [36485][Y0-7FC4C44325B0] [16] cluster does not exist, this connect
ion will disconnect(sm_id=9, cluster_name=111, ret=-4016)
[2016-05-24 21:59:29.197369] WARN [PROXY.SM] setup_error_transfer (ob_mysql_sm.cpp:3925) [36485][Y0-7FC4C44325B0] [9] [setup_error_transfer] Now closing connect
ion(sm_id=9, request_cmd="End")
该问题的原因是访问了一个不存在的集群名为111的OceanBase集群