|
11.2 使用与运维5 `, d2 B5 @( {
OceanBase不是设计出来的,而是在使用过程中不断进化出来的。因此,系统使' d5 [. V( D3 h# G8 i- _; `, D
用以及运维的方便性至关重要。
. q# p1 G9 Z6 s& KOceanBase的使用者是业务系统开发人员,并交由专门的OceanBase DBA来运3 d" H% u( F* z6 H2 H
维。为了方便业务使用,OceanBase实现了SQL接口且兼容MySQL协议,从而融入到
7 G4 t9 ~4 S3 q; n4 jMySQL开源生态圈。MySQL大部分管理工具,例如MySQL客户端,MySQL admin,/ X+ i$ }1 X1 `$ @. T1 s
能够在OceanBase系统中直接使用。另外,OceanBase将系统运维、监控相关的内部
3 B& K, h) W" X信息存放到内部的系统表中,从而方便运维、监控系统获取。
. r0 {( j) ?0 K; Y; @. Z" _11.2.1 使用
, Y0 K: l$ @3 J1 A2 |& EOceanBase早期版本只允许通过Java或者C API接口访问,新版本增加了SQL支$ b5 R( X$ s. n' S" @
持,且兼容MySQL客户端访问协议。OceanBase推荐用户使用SQL,但老应用仍然可8 r. E. S4 T6 {) f$ N
以使用以前的Java API访问OceanBase。下面介绍几个访问与使用场景。
1 M- E) Q9 v2 J% X5 J' h% Q1.MySQL客户端连接
b' ~* u# s- K7 r. Q: O# p7 r如图11-4所示,使用者采用MySQL客户端连接OceanBase。通过MySQL客户端可
: b8 Y2 n% N( w9 s5 f以查看系统已有的表格、表格schema,执行select、update、insert、delete等SQL语' |2 ~* @% C2 } e1 H+ {3 s
句,查看系统内部状态,以及发送OceanBase集群运维命令。图中首先通过create7 r3 S* S. v0 y6 _3 t9 @
table命令创建一张名称为test的表格,表格包含两列:id和name,其中id为主键。接# r- W) T$ ^" J0 q# P# `* ^+ G
着,往表格中写入两行记录(1,"alice"),(2,"bob")。最后,通过select语句读
! B$ J1 h% ~/ p5 ]& z8 y取这两行数据。
( B- k" J! _/ n& m- P- @& Q5 H( z图 11-4 采用MySQL客户端连接OceanBase
4 x) H* ?3 F0 f- u% f/ ?2 [2.JDBC访问(JDBC template)
. B# E5 g2 \. L# N. C2 O: I5 n, R1 RJava应用通过标准JDBC访问OceanBase,代码如下所示:0 B( k( K8 T* L/ P9 j% p
ObGroupDataSource groupSource=new OBGroupDataSource();, }+ J3 l+ p' N; u+ n k* H: e8 H
groupSource.setUserName("user");//设置用户名& I, R% S+ ^' `7 }3 K
groupSource.setPasswd("pass");//设置密码
% F0 ?8 M3 T, z2 K, cgroupSource.setDbName("test");//OceanBase不支持db,这里可以填任意值
( L1 d; d7 R, c8 g9 T) {groupSouorce.setConfigURL(ob_addr_url);//设置OceanBase集群的地址
4 d0 d* o# C! I! F# ?& D7 ?, kgroupSource.init();//初始化data source4 T* J; O+ j0 d) q5 M4 |* [
JdbcTemplate jtp=new JdbcTemplate();
( s5 j- d1 c5 ojtp.setDataSource(groupSource);//设置jdbc template依赖的data source
' f& u' ~8 a/ NString sql="select 1 from dual";: l' s0 O4 }% ^% h* ]
int ret=jtp.queryForInt(sql);//执行SQL查询
: d% b" J) _1 \- b: y9 W( N3.Spring集成
! }( U" R/ \2 \9 N) ]可以通过将OceanBase DataSource集成到Spring中,配置如下:
6 b7 L' r8 I3 R. T1 |<bean id="groupDataSource"
; t% y$ L( |' i/ pclass="com.alipay.oceanbase.ObGroupDataSource"
( p- Y6 T0 v+ `+ D9 W3 E/ Sinit-method="init">- `) I" N. k! r+ x
<property name="username"value="user"/>
/ y8 ~( s1 a- f1 c6 Z<property name="passwd"value="pass"/>
8 ]: U; ~* J4 o, k! L- F' z<property name="dbName"value="test"/>' @/ P. }9 B# r8 D4 z0 B
<property name="configURL"value=ob_addr_url/>
! H1 x% l( N2 g</bean>! o4 \9 D! u& h1 g7 l! ^# v
4.C客户端
. h9 ?. S2 p! y! ~/ \C应用通过OceanBase C客户端访问OceanBase,使用方式与MySQL C客户端完全1 `7 v+ e0 r( \# D
一致,代码如下:
* X; D3 b* Y' @9 c9 gMYSQL mysql;
/ z, P( C7 Z9 c/ Y. Fmysql_init(&mysql); //初始化
2 ]- u D* j+ M$ Xmysql_real_connect(&mysql,ob_url,ob_user,ob_pass,NULL,0,NULL,0); //连接1 T: j- x1 h2 ^$ D
OceanBase数据库
7 L0 ~5 F- e) a$ r. S& Ymysql_real_query(&mysql,sql,strlen(sql)); //执行SQL查询
; O- b& `9 [* B& g, B0 x5 ]MYSQL_RES*res=mysql_store_result(&mysql); //获取SQL查询结果集
3 S5 L, o3 M, ~3 ]/ X7 X//处理SQL查询返回的结果集
3 Q7 q! S0 Y' |2 f% b1 Owhile(MYSQL_ROW row=mysql_fetch_row(res)) //从结果集读取一行数据- a, `0 s8 O+ Q: l7 C. b8 c
{* [, b. U: s4 l2 J! \" j8 |
//处理结果集中的一行结果
3 ^: c2 V' O$ z4 D+ D0 ^}# U8 Q% W4 g1 m5 p9 A
mysql_free_result(res); //释放结果集
( `0 \: d% Q. omysql_close(&mysql); //关闭连接" ?% d8 W$ e* y8 B1 Z
当然,应用可能会在客户端维护OceanBase连接池,Java应用还可能会使用其他
3 a) p4 A( f7 i5 w' `5 y+ j持久层框架,例如iBatis。由于OceanBase兼容JDBC和MySQL C客户端,使用MySQL& [1 ]1 g1 q" O! y: T: C2 P/ j9 M
的应用无须修改代码就能接入OceanBase。. j2 C: i8 {' A O+ i* t- x
11.2.2 运维
: {4 e; S! I( X* ZOceanBase内部实现了系统表机制,用于存储监控以及运维相关的信息。内部系
+ A" D0 D. F2 w# o1 D) B: H/ S统表包含的内容如下:
% P+ s) B/ ~( K+ p( s- m' ~8 P5 w: O) v●数据字典:表格的定义以及表格之间的关系、用户以及权限信息;
" k% t7 o7 Q& K9 \- n●服务器列表:集群中每种角色所在的服务器列表;
% _! `% f. ]' Z2 T+ r) b●配置信息:集群中每台服务器的配置信息;7 b9 a& `5 @) u" s$ N
●内部状态:每台服务器的读写次数、读写延时、缓存命中率、子表个数、内; @3 r' H( X9 T& B
存、磁盘、CPU使用情况、请求关键路径时间消耗,每日合并状态等;2 V! ?6 E P8 Z5 H
基于内部系统表,可以开发各种方便的OceanBase运维功能,如OceanBase数据, I! |2 m! W: r" m& m& W0 f7 u
库会话(Session)管理,读写性能实时监控工具、监控平台等。+ I3 {" r& C% T, l% ]5 L5 l9 o
图11-5是OceanBase某线上应用平均读取延时的监控图,包括单行读取平均延时
4 m3 r4 u( J. R% f% H7 r; w# I(average_succ_get_time)以及多行扫描平均延时(average_succ_scan_time)两个指
5 `; e2 ^* [+ I9 m5 v H标,且单位均为微秒。监控图包含三种数据:当前数据(currval),昨天数据2 A+ h& ~. ]& F7 ]# g( K
(lastval)以及上周数据(baseval),便于对比。由于监控、运维工具变化较快,这8 \# I1 d) a+ D" Q- M
里不做太多介绍。
, X, d3 k. U6 ^3 w2 G8 X0 t图 11-5 OceanBase某线上应用读取延时% u! a2 L* ^. c' J6 `
8 ]$ E' [. I" V/ L+ t, o
' A# }. r t* q- y. k8 u+ v' r4 K* p" ?( _, j# ?
|
|