OBProxy 路由策略与使用运维-常见问题
启动失败
机器是否存在 hostname :输入hostname -i, 确认host ip是否存在
目录是否存在,权限是否正确:确保当前目录下有读、写、执行的权限
端口是否被占用:使用obproxyd.sh启动OBProxy, 使用的端口为2883
启动环境是否指定正确:如果通过obproxyd.sh启动, 需要使用-e参数指定OBProxy运行环境
成功启动但无法建立连接
常见问题 | 报错 | 解决思路 |
IP PORT错误 | ERROR 2003 (HY000): Can't connect to MySQL server on '127.1' (111) | 检查所需建立连接的obproxy, obproxy是否存在 |
权限错误 | ERROR 1045 (42000): Access denied for user ‘XXXXXXXXX’ | 直接连接observer确认该信息是否正确 |
租户名错误 | ERROR 5160 (HY000): invalid tenant name specified in connection string | 本机mysql版本是否过低,MySQL 5.7.8之前版本, 用户名长度超过16字节会被截断。5.7.8版本之后版本用户长度超过32字节会被截 |
认证错误 | ERROR 2013 (HY000): Lost connection to MySQL server at ‘reading authorization packet’, system error: 0 | 本地json配置集群是否和远程json文件一致,该配置文件主要用于确认你需要连接的OB集群是否存在 |
慢查询配置项及其修改方式
OBProxy 有自己的慢查询日志打印功能,通过 OBProxy 的以下两个配置项可控制打印到日志中的 SQL 或事务的处理时间阈值。
配置项 | 说明 |
slow_transaction_time_threshold | 指慢查询或事务的整个生命周期的时间阈值,超过了该时间,就会打印相关日志。 |
slow_proxy_process_time_threshold | 在发往 Server 前 Proxy 本身的处理时间,包括获取集群信息、路由信息、黑名单信息等。 |
slow_query_time_threshold | 指从 OBProxy 获取 SQL 直到返回给客户端之前的这段时间的阈值,超过了该时间,也会打印相关日志。 |
一般修改配置项slow_transaction_time_threshold即可,配置项 slow_proxy_process_time_threshold默认值为 2ms,该值适用于绝大多数场景
obclient> ALTER PROXYCONFIG SET slow_transaction_time_threshold='100ms';
慢查询举例
SQL相关timeout设置
默认配置:
查询超时:ob_query_timeout(默认10s)
事务未提交超时ob_trx_timeout 默认100s)
事务空闲超时ob_trx_idle_timeout(默认120s)
常见超时原因:
连接闲置时间超时
客户端SQL执行耗时长
问题解决:
Ping to keep alive.
调优SQL or 调整timeout value
小结:
OBProxy作为OceanBase的高性能且易于运维的反向代理服务器,具有防连接闪断、OBServer宕机
或升级不影响客户端正常请求、兼容所有MySQL客户端、支持热升级和多集群功能
OBProxy核心功能包括路由、连接管理以及运维&&监控
OBProxy的部署方式可以分为集中部署和客户端部署
OBproxy可以通过RSList启动,也可以通过config_url启动,前者只可以管理特定的OB集群,后者可
以管理多个集群
OBProxy弱一致性读策略可以分为主备均衡的路由策略(默认)、备优先读策略、读写分离策略
OBProxy慢查询日志除了SQL本身之行的时间,还包括发送和接收数据消耗的网络延时
集中式部署的特点:集中式系统中,每个终端或客户端机器仅仅负责数据的录入和输出,而数据的存储与控制处理完全交由主机来完成。集中式系统最大的特点就是部署结构简单。由于集中式系统往往基于底层性能卓越的大型主机,因此无须考虑如何对服务进行多个节点的部署,也就不用考虑多个节点之间的分布式协作问题。