
点击上方#详解 OBProxy系列合集
查看更多精彩内容



检查安装环境
1.1.1 平台适配
1.1.2 操作系统
[2021-10-13 10:38:17.235062] WARN [PROXY] get_kernel_release_by_uname (ob_config_server_processor.cpp:1039) [2060][Y0-0] [lt=14] [dc=0] unknown uname release(uinfo.release="4.18.0-80.el8.x86_64", ret=-4016)
1.1.3 硬件资源
CPU:随着请求量增加,CPU使用率会增加,QPS也会接近线性增加,直到CPU满负载,QPS会基本恒定。 内存:内存使用量主要和连接数有关,随着连接数增加,内存使用会变多,配置项client_max_connections会控制允许的客户端连接数,默认最多支持8192个客户端连接,超过该数值会导致客户端连接失败。 磁盘:磁盘主要用来存放配置文件和日志文件,其中日志文件对磁盘的使用比较多,当磁盘使用量超过80%后,OBProxy会主动清理日志文件。
选择合适版本
如果只是学习使用,一般安装最新的版本即可。如果是生产环境,建议大家关注下每个版本的功能迭代和 bugfix 情况。无论什么项目,阅读 Release Notes 是一个很好的习惯,可以帮助大家避坑和掌握每个版本的功能支持情况,做到心中有数。
OBProxy 的代码已经开源,在 OceanBase 开源项目中找到 OBProxy 项目,点击 Releases 可以查看每个版本的详细信息。OBProxy 每个版本都经过了功能测试、压力测试和性能测试,大家可以放心使用。
通过 OBdeploy 安装
obproxy-ce:version: 3.2.3# Set dependent components for the component.# When the associated configurations are not done, OBD will automatically get the these configurations from the dependent components.depends:- oceanbase-ceservers:- 192.168.1.5global:listen_port: 2883 # External port. The default value is 2883.prometheus_listen_port: 2884 # The Prometheus port. The default value is 2884.home_path: root/obproxy# oceanbase root server list# format: ip:mysql_port;ip:mysql_port. When a depends exists, OBD gets this value from the oceanbase-ce of the depends.# rs_list: 192.168.1.2:2881;192.168.1.3:2881;192.168.1.4:2881enable_cluster_checkout: false# observer cluster name, consistent with oceanbase-ce's appname. When a depends exists, OBD gets this value from the oceanbase-ce of the depends.# cluster_name: obclusterskip_proxy_sys_private_check: trueenable_strict_kernel_release: false# obproxy_sys_password: # obproxy sys user password, can be empty. When a depends exists, OBD gets this value from the oceanbase-ce of the depends.# observer_sys_password: # proxyro user pasword, consistent with oceanbase-ce's proxyro_password, can be empty. When a depends exists, OBD gets this value
obd cluster display查看部署情况,参考下述例子。通过该命令我们可以看到OBProxy 信息,其中 port 2883 表示提供 SQL 服务的端口是2883,也就是 JDBC URL 中需要填写的 PORT。
[root@xx.xx.xx.xx obtest]$obd cluster display obtestGet local repositories and plugins okOpen ssh connection okCluster status check okConnect to observer okWait for observer init ok+--------------------------------------------------+| observer |+----------------+---------+------+-------+--------+| ip | version | port | zone | status |+----------------+---------+------+-------+--------+| 172.30.199.109 | 3.1.3 | 2881 | zone1 | active || 172.30.199.110 | 3.1.3 | 2881 | zone2 | active || 172.30.199.111 | 3.1.3 | 2881 | zone3 | active |+----------------+---------+------+-------+--------+Connect to obproxy ok+--------------------------------------------------+| obproxy |+----------------+------+-----------------+--------+| ip | port | prometheus_port | status |+----------------+------+-----------------+--------+| 172.30.199.109 | 2883 | 2884 | active |+----------------+------+-----------------+--------+
安装后检查
obd cluster display已经做了状态检查。使用终端登录到 OBProxy 进程所在机器,通过
ps -ef | grep obproxy命令查看进程信息。
[root@observer109 ~]# ps -ef | grep obproxy | grep -v grepadmin 6868 1 0 May20 ? 00:02:09 bash home/admin/obproxy/obproxyd.sh home/admin/obproxy 172.30.199.109 2883 daem
新版本 OBProxy 的目录会带版本号,如 obproxy-3.2.3目录名表示3.2.3版本的 OBProxy 在 OBProxy 的目录下执行 ./bin/obproxy -V
查看使用 root@proxysys 账号登录后,执行 show proxyinfo binary
查看
[root@observer109 obproxy]# ./bin/obproxy -V./bin/obproxy -Vobproxy (OceanBase 3.2.3 2)REVISION: 6-local-99faebfc7130b70ad0f56330a28cab6a32ec9a33BUILD_TIME: Mar 30 2022 01:53:08
MySQL [(none)]> show proxyinfo binary\G*************************** 1. row ***************************name: binary infoinfo: ObProxy-OceanBase 3.2.6-5902.el7version:RELEASE_7UMD5:REVISION:5902-local-f6b6e366ce8ed7611a05c2fc4701c791f26e0356BUILD_TIME:May 23 2022 09:19:44

目录介绍
/home/admin/obproxy),通过 ls 命令查看。
[root@observer109 obproxy]# ls -alrttotal 44drwxrwxr-x 2 admin admin 4096 May 12 14:55 libdrwx------ 8 admin admin 4096 May 12 14:55 ..drwxrwxr-x 2 admin admin 4096 May 12 14:55 bindrwxrwxr-x 2 admin admin 4096 May 12 14:57 sharding-configdrwxrwxr-x 2 admin admin 4096 May 12 14:57 control-configdrwxrwxr-x 2 admin admin 4096 May 12 14:57 logdrwxrwxr-x 2 admin admin 4096 May 12 14:57 rundrwxrwxr-x 10 admin admin 4096 May 20 13:43 .-rw-r--r-- 1 admin admin 910 May 20 13:43 obproxyd.shdrwxrwxr-x 2 admin admin 4096 May 20 13:44 .confdrwxrwxr-x 2 admin admin 4096 May 23 17:27 etc
bin目录:保存 obproxy 的二进制文件 etc目录和 .conf 目录:保存配置信息,.conf 是 etc 的备份,如果etc目录被删除,会使用.conf中的内容 sharding-config目录:保存sharding相关的配置文件 log目录:保存日志文件的目录,磁盘占用最大,日志文件也分为多种,帮助排查定位问题 obproxyd.sh:守护脚本,内容简单,大家可以通过阅读脚本代码了解实现原理

设置配置项 obproxy_config_server_url
,内容为 OCP 的地址,访问该地址可以获得集群信息通过启动配置参数指定集群中机器的 IP 和 PORT,也叫做 rslist 方式,该方式只支持访问一个集群
OBProxy 重启
./bin/obproxy -p 2883 -r '192.168.1.1:2881' -c 'cluster1' -o enable_strict_kernel_release=false,work_thread_num=8
-p:指定服务监听端口号,一般使用2883 -r:此处使用的是 rslist 方式启动,直接指定 ObServer 的 IP 和 PORT,这里需要注意 ObServer 有一个 RPC端口和一个 SQL 端口,需要使用 SQL 端口,一般是 2881 -c:访问的集群名字,对应 ObServer 进程的 -n 选项,也可以通过 SQL 查询 OceanBase 数据库获得集群名;如果通过 OBProxy 代理多个集群,只能使用指定 OCP 对应 URL 的方式 -o:后面是配置项信息,可以首次启动指定,格式为 k1=v1,k2=v2
,和前面几个选项不同,此选项非必须
./bin/obproxy命令即可。
rm -rf etc .conf删除持久化的配置信息,然后执行首次启动命令。
succ to init logger可以确定启动时间,该日志只在启动时打印一次。
OBProxy 退出
内存使用太多:OBProxy 本身对内存使用做了限制,通过配置项 proxy_mem_limited
控制,默认为2G,内存使用超过该配置值后 OBProxy 会主动退出,这样好处是防止 OOM 情况。但坏处是如果大小设置不合理会导致系统有剩余内存,OBProxy 也会退出,可以通过在 obproxy.log 中搜索memroy is out of limit
确定是这种情况。进程core掉:通过 dmesg 命令和在 core 文件目录查看可以确认。core行为都是非预期的,需要排查。名字中包含obproxy、ET_NET、ET_TASK、ET_BLOCKING、ET_GRPC和ASYNC_LOG的 core 文件都是 OBProxy 进程产生的。 被信号中止:通过搜索关键日志 receive signal
确定信号值,这种问题排查较困难,需要确定系统执行过的操作命令。
$ls -l proc/`pidof obproxy` -ddr-xr-xr-x 8 zhixin.lm users 0 May 23 10:29 proc/100277
小结


交付方式:OBProxy 有 rpm 包和 docker 两种形式,Obdeploy 和 OCP 都是通过 rpm 部署,蚂蚁内部 PASS平台通过 docker 方式启动 数量:我们对 OBProxy 的数量没有做任何限制,但真实部署时,OBProxy 的数量和 APP 或 ObServer 的数量有一定关系,这取决于具体的部署方式 部署方式:不同部署方式背后反映的是 RT 和资源抢占,有客户端部署、ObServer 端部署和独立部署三部分,这对性能至关重要
部署在应用端

部署在 ObServer 端
多了 LB 组件做 OBProxy 的负载均衡,链路更长 APP 和 OBProxy 之间没有明确的一一对应关系,排查问题会困难些 OBProxy 部署在 ObServer 所在机器,压力情况下会有机器的CPU/MEM资源抢占

独立部署

小结

enable_strict_kernel_release和
proxy_mem_limited配置项的值。接下来,我们还会在设置上进行优化,逐步提高 OBProxy 的易用性,打磨一个开箱即用的好产品。
课后互动
上期互动答案
# 本期互动问题
文章转载自OceanBase数据库星球,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




