启动失败

    对于启动失败的问题,请参考以下步骤进行处理:

    1. 查看机器是否存在hostname。
    1. 输入hostname -i, 确认host ip是否存在
    2. e.g.
    3. $hostname -i
    4. 100.12.34.56
    1. 查看目录是否存在,权限是否正确。

    如果目录不存在,需要使用admin用户建立目录。

    1. /opt/taobao/install/obproxy
    2. drwxr-xr-x 2 admin admin 4096 May 20 15:01 bin
    3. drwxr-xr-x 2 admin admin 4096 May 20 15:02 etc
    4. lrwxrwxrwx 1 admin admin 28 Apr 27 16:30 log -> /home/admin/logs/obproxy/log
    5. lrwxrwxrwx 1 admin admin 33 Apr 27 16:30 minidump -> /home/admin/logs/obproxy/minidump
    6. drwxr-xr-x 2 admin admin 4096 Apr 27 16:30 tools
    7. /home/admin/logs/obproxy
    8. drwxrwxr-x 2 admin admin 2084864 May 20 15:02 log
    9. drwxrwxr-x 2 admin admin 4096 Apr 27 18:42 minidump
    1. 查看端口是否被暂用。
    1. 假定使用的端口为2883, 确认端口是否占用
    2. $sudo netstat -anp | grep 2883
    3. tcp 0 0 0.0.0.0:2883 0.0.0.0:* LISTEN 33371/obproxy
    1. 查看启动命令行是否使用非英文符号。

    从word等文档中拷贝出来的命令行,其中破折号可能是中文的,proxy会识别失败的,导致命令行参数失效。如果使用了非英文符号,将所有的符号使用英文符号重写即可解决。

    1. 检查 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
    1. 检查启动参数。
    • 使用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是否存在。

    • 权限错误、租户名错误或认证错误

    这类错误情况比较复杂,按照如下方式进行分析:

    1. 检查用户名、租户名、集群名或密码是否正确。

    如果不确认是否正确,可以直接连接observer确认该信息是否正确, 注意连接observer的时候不能带集群名。

    b. 检查本机mysql版本是否过低。

    MySQL 5.7.8之前版本, 用户名长度超过16字节会被截断。5.7.8版本之后版本用户长度超过32字节会被截断。这里的用户名应包含完整的username@tenantname#clustername。

    c. 本地json配置集群是否和远程json文件一致

    该配置文件主要用于确认您需要连接的OceanBase集群(ObRegion)是否存在。搜索关键字:ObRegion

    本地json配置文件在以下两个目录:

    1. /opt/taobao/install/obproxy/etc
    2. obproxy_config_server_info.json
    3. obproxy_rslist_info.json
    4. /opt/taobao/install/obproxy/.conf
    5. obproxy_config_server_info.json
    6. obproxy_rslist_info.json

    这两个文件以/opt/taobao/install/obproxy/etc目录下文件为准。

    远程json配置文件:

    1. 查看 /opt/taobao/install/obproxy/obproxy_config.bin文件
    2. 其中有一个配置项为:obproxy_config_server_url
    3. e.g.
    4. obproxy_config_server_url=xxx
    5. curl "xxx"
    6. 注意 curl URL的时候需要在URL上加上双引号

    其他问题

    其他问题请参考以下方法排查:

    1. 查看obproxy日志, 搜索关键日志:
    2. Now closing connection
    3. 根据obproxy trace ID,可以简单的跟踪问题
    4. e.g.
    5. [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)
    6. [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",
    7. tenant_name:"sysbench", user_name:"root", user_tenant_name:"root@sysbench", full_name:"root@sysbench#111", response:{capability_.capability:239237, max_packet_si
    8. ze:16777216, character_set:8, username:"root@sysbench", database:"", auth_plugin_name:"", connect_attrs:[]}, is_clustername_from_default:false, ret=0)
    9. [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
    10. ion will disconnect(sm_id=9, cluster_name=111, ret=-4016)
    11. [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
    12. ion(sm_id=9, request_cmd="End")
    13. 该问题的原因是访问了一个不存在的集群名为111OceanBase集群