java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2726|回复: 0

《大规模分布式存储系统》第11章 质量保证、运维及实践【11.2】

[复制链接]
  • TA的每日心情
    开心
    2021-5-25 00:00
  • 签到天数: 1917 天

    [LV.Master]出神入化

    2076

    主题

    3734

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66670

    宣传达人突出贡献优秀版主荣誉管理论坛元老

    发表于 2017-3-15 18:18:57 | 显示全部楼层 |阅读模式
    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# ?
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Java自学网

    GMT+8, 2025-3-11 19:21 , Processed in 0.155130 second(s), 30 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

    快速回复 返回顶部 返回列表