作者:OceanBase高级技术专家神差
一、Proxy运行环境
obproxy运行环境:
OS: Linux Redhat 7u x86-64 及以上 CPU: 2 核及以上 内核:2.6.32 及以上版本 内存:1G 及以上 磁盘空间:对磁盘大小没有特别需求,根据数据和希望保留的日志大小决定 推荐 2G 及以上
二、Proxy命令行启动说明
obproxy在启动的时候,需要获悉rs_list
等参数才可以正常启动,目前有两种方式。
第一种方式:启动的时候通过命令行指定rs_list
参数,这种方式用于现阶段开发调试阶段,启动命令如下:
./bin/obproxy -p$port -r $ip:$port -e -n appname -o with_config_server=false -c 集群名
这种方式不需要额外配置。with_config_server=false
,标示不依赖config server启动.
(注意: rslist方式只能访问单个集群,生产推荐使用config_server方式)
第二种方式:依赖config server启动,启动命令如下:
./bin/obproxy -p$port -e -n appname -o with_config_server=true,obproxy_config_server_url=http://xxxx:port/obproxy_config
这种启动方式不需要在命令行指定rs_list
,但是需要配置config server。启动的时候需要把obproxy_config_server_url
后面的地址替换成你的配置地址.
三、Proxy启动参数说明
./bin/obproxy -h
----------------------------------------------------------------------------------
obproxy [OPTIONS]
-h,--help print this help
-p,--listen_port LPORT obproxy listen port
-o,--optstr OPTSTR extra options string
-n,--appname APPNAME application name
-c,--cluster_name CLUSTER_NAME root server cluster name
-r,--rs_list RS_LIST root server list(format ip:sql_prot)
-d,--dump_config_sql DSQL dump config sql to file
-e,--execute_config_sql ESQL exectue config sql(create tables, insert initial data)
-N,--nodaemon don't run in daemon
-V,--obproxy_version VERSION current obproxy version
example:
run without config server:
./bin/obproxy -p$port -r'xxxx:port;xxxx:port' -n test -c njbank
run with config server:
./bin/obproxy -p$port -o obproxy_config_server_url='your config url' -e -n test
dump config update sql:
./bin/obproxy -d
''
----------------------------------------------------------------------------------
注:
- 启动命令中-p指定的端口是obproxy监听的端口,客户端通过mysql连接这个端口访问OB。只有第一次启动的时候需要指定这些参数,后续重启则不需要
- 启动命令中-e指定的建表操作,建议只在proxy第一次启动时进行,后续启动升级等均不要执行此命令
- 不依赖config server启动时, 传入的rs list中port是observe的sql port, 而不是rpc port
四、近端容器化部署
我们可以制作一个ODP的镜像,然后使用该镜像,在应用的容器中作为一个sidecar方式启动,下面介绍如何利用ObProxy的rpm包制作一个镜像并使用。
1. 制作镜像
准备文件
- 如果以 supervisord 方式启动,准备 supervisord 配置文件:obproxy.supervisord.conf。示例参见附录1
- 该文件仅用于 Docker 镜像内以 supervisord 方式启动obproxy_startup.sh文件,
- 启动脚本:obproxy_startup.sh,示例参见附录2
- 用于启动并守护 obproxy 进程
- OBProxy RPM包,需根据操作系统选择安装相应RPM包
- obproxy-${version}.el6.x86_64.rpm //适配6u机器
- obproxy-${version}.el7.x86_64.rpm //适配7u机器
其中version是版本号。
DockerFile编写
如果以supervisord方式启动,复制以下代码到DockerFile中,其中version以压缩包中rpm包版本号为准
ENV ADMIN_HOME=/home/admin ENV OBPROXY_VERSION=xxx ENV OBPROXY_ROOT=$ADMIN_HOME/obproxy-${OBPROXY_VERSION} ENV OBPROXY_RPM=obproxy-${OBPROXY_VERSION}.rpm RUN mkdir -p $ADMIN_HOME RUN chown -R admin.admin $ADMIN_HOME COPY ${OBPROXY_RPM} /tmp/${OBPROXY_RPM} RUN cd /tmp && \ rpm2cpio ${OBPROXY_RPM} | cpio -id && \ mv opt/taobao/install/obproxy-${OBPROXY_VERSION} ${OBPROXY_ROOT} RUN ln -s ${OBPROXY_ROOT} ${ADMIN_HOME}/obproxy COPY obproxy.supervisord.conf /etc/supervisor/conf.d/ COPY obproxy_startup.sh ${OBPROXY_ROOT}/start_obproxy.sh
如果不以 supervisord 方式启动,复制以下代码,并按照业务自定义的启动方式,运行 obproxy_startup.sh 启动脚本(注意,obproxy 一定要先于应用启动)
ENV ADMIN_HOME=/home/admin ENV OBPROXY_ROOT=$ADMIN_HOME/obproxy-${OBPROXY_VERSION} ENV OBPROXY_VERSION=xxx ENV OBPROXY_RPM=obproxy-${OBPROXY_VERSION}.rpm RUN mkdir -p $ADMIN_HOME RUN chown -R admin.admin $ADMIN_HOME COPY ${OBPROXY_RPM} /tmp/${OBPROXY_RPM} RUN cd /tmp && \ rpm2cpio ${OBPROXY_RPM} | cpio -id && \ mv opt/taobao/install/obproxy-${OBPROXY_VERSION} ${OBPROXY_ROOT} COPY obproxy_startup.sh ${OBPROXY_ROOT}/start_obproxy.sh
2. 启动镜像
启动要求
- 设置环境变量(注意:每次启动均需要该变量)
- obproxy_config_server_url = xxx //OCP的地址
- (可选)obproxy_port = xxx //OBProxy的端口号,默认是2883
- (可选)obproxy_extra_opt=k=v,k=v... //obproxy配置参数
- 修改数据库链接地址。obproxy启动后,业务需要把数据库地址改成 127.0.0.1:2883。这个需要业务自行根据自己的方式修改
PS:不管什么方式,启动步骤都是上面这样,只不过不同平台,传递环境变量和调用启动脚本的方式不同
启动
以 docker run -e/--env-file 方式启动容器,传递 obproxy_config_server_url、obproxy_port、obproxy_extra_opt 等环境变量
3. 验证
OBProxy 端口是否开启
# 2883 由 ODP 开启,是 ODP 对外提供的 mysql 协议入口 $ netstat -an|grep 2883 tcp 0 0 0.0.0.0:2883 0.0.0.0:* LISTEN
验证数据库访问请求是否经过 ODP。
- 先确认业务是否访问到了本地 127.0.0.1:2883
- 验证业务访问 DB 是否正常
- 辅助验证,不一定有日志:
- 通过 ps -ax | grep obproxy 获取 obproxy 的 pid
- 查询 odp 的请求日志,验证数据库访问请求是否正常:
grep "${sql}" /home/admin/logs/obproxy/log/obproxy.${pid}.log
中有经过 odp 的请求日志,数据库访问请求是否正常,可以查看经过 odp 的请求日志。