java自学网VIP

Java自学网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2676|回复: 0

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

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

    [LV.Master]出神入化

    2040

    主题

    3698

    帖子

    6万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    66476

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

    发表于 2017-3-15 18:18:57 | 显示全部楼层 |阅读模式
    11.2 使用与运维7 R& }, m5 P" Q. C  t' ^
    OceanBase不是设计出来的,而是在使用过程中不断进化出来的。因此,系统使
    0 M7 t% c! H2 w9 \! \5 L2 q  J用以及运维的方便性至关重要。
    ' O4 W$ Z' y  `' l8 X6 MOceanBase的使用者是业务系统开发人员,并交由专门的OceanBase DBA来运; n& Y$ s! y8 W- g
    维。为了方便业务使用,OceanBase实现了SQL接口且兼容MySQL协议,从而融入到
    ' a6 E* i+ P: tMySQL开源生态圈。MySQL大部分管理工具,例如MySQL客户端,MySQL admin,
    5 X% n: T! K4 w能够在OceanBase系统中直接使用。另外,OceanBase将系统运维、监控相关的内部5 x3 {6 E7 ^2 t4 ?# x8 t
    信息存放到内部的系统表中,从而方便运维、监控系统获取。  `! U" S+ `6 A& Z
    11.2.1 使用! K$ S( Z* i" t- m) m- n6 R& A
    OceanBase早期版本只允许通过Java或者C API接口访问,新版本增加了SQL支. X. y  ~9 S; c" I0 h* t, q
    持,且兼容MySQL客户端访问协议。OceanBase推荐用户使用SQL,但老应用仍然可
    + Y/ |# `3 n1 m以使用以前的Java API访问OceanBase。下面介绍几个访问与使用场景。* y$ `3 Y. u' R
    1.MySQL客户端连接& y0 l! x, o4 P
    如图11-4所示,使用者采用MySQL客户端连接OceanBase。通过MySQL客户端可
    ( F" J! c) n2 i! r以查看系统已有的表格、表格schema,执行select、update、insert、delete等SQL语* Q& p6 U7 w$ [
    句,查看系统内部状态,以及发送OceanBase集群运维命令。图中首先通过create- A$ ]5 V( q8 J: p
    table命令创建一张名称为test的表格,表格包含两列:id和name,其中id为主键。接0 L  K9 O; N8 I6 ?
    着,往表格中写入两行记录(1,"alice"),(2,"bob")。最后,通过select语句读/ l  s' n$ k! `- p! A+ U
    取这两行数据。
    3 M( M) L0 [. h9 H图 11-4 采用MySQL客户端连接OceanBase" O& p, G) n9 c! \6 w
    2.JDBC访问(JDBC template)2 k7 C2 G5 P9 E6 ~9 j
    Java应用通过标准JDBC访问OceanBase,代码如下所示:+ K, i5 M; J6 e0 V  L# Z8 Z
    ObGroupDataSource groupSource=new OBGroupDataSource();7 Y, G$ n( r0 V$ a; y' T  d
    groupSource.setUserName("user");//设置用户名
    & R' K3 k9 T+ h4 F+ wgroupSource.setPasswd("pass");//设置密码' k$ C9 d4 f8 B3 X1 M2 |" |
    groupSource.setDbName("test");//OceanBase不支持db,这里可以填任意值
    " ?2 ~) I: l; j$ m' K! y' egroupSouorce.setConfigURL(ob_addr_url);//设置OceanBase集群的地址
    0 `3 f, Y. r; y/ Y/ XgroupSource.init();//初始化data source
    9 H. c  ^5 l$ \& }* H9 A# F1 B; ZJdbcTemplate jtp=new JdbcTemplate();  y# H( I0 o# e" Z+ z' N5 `
    jtp.setDataSource(groupSource);//设置jdbc template依赖的data source0 o" P5 h& q  D$ Z) T4 e; s
    String sql="select 1 from dual";
    . M6 K$ j2 J* R5 J6 E; C1 C) hint ret=jtp.queryForInt(sql);//执行SQL查询5 ?4 l4 G; Z' w) x& C( F" h  R0 y
    3.Spring集成
    # B  t2 V$ G3 `可以通过将OceanBase DataSource集成到Spring中,配置如下:. R& [: i8 N8 D( N$ c& I* c
    <bean id="groupDataSource"
    1 ]( S0 L! b4 `% Q! U  jclass="com.alipay.oceanbase.ObGroupDataSource"
    0 v2 K; F5 S8 l% N0 D$ uinit-method="init">8 Q1 c3 i) X2 a2 k( }. \
    <property name="username"value="user"/>
    " k7 z; s. Q# J* Z7 q0 L& Z+ Q<property name="passwd"value="pass"/>
    5 P! c# k$ J8 q" Q<property name="dbName"value="test"/>4 G. P  N4 s5 P; E+ E0 ]
    <property name="configURL"value=ob_addr_url/>) y+ E4 h4 p$ p& X9 r7 g9 O7 r
    </bean>, `% n* o% g. W: \5 |! B) L# o
    4.C客户端" s# o8 b3 ]) p; f* i' r8 ?
    C应用通过OceanBase C客户端访问OceanBase,使用方式与MySQL C客户端完全3 d4 R2 \* G7 \6 s$ P# W
    一致,代码如下:% |$ H) j/ d$ O' e
    MYSQL mysql;( {, \& E' f$ ?# W. F) u4 ?
    mysql_init(&mysql); //初始化/ `3 g9 j1 _# X1 k2 b
    mysql_real_connect(&mysql,ob_url,ob_user,ob_pass,NULL,0,NULL,0); //连接$ j/ j! \: N- }  C2 J$ A7 ]
    OceanBase数据库: _6 m) I/ `9 h- ?& S" I2 h! W
    mysql_real_query(&mysql,sql,strlen(sql)); //执行SQL查询
    ; y! Z" I' d4 s7 TMYSQL_RES*res=mysql_store_result(&mysql); //获取SQL查询结果集
    - W$ F; w3 q$ Y3 ^4 l1 ~//处理SQL查询返回的结果集
    ; f' \* `/ P+ c( G9 N6 Xwhile(MYSQL_ROW row=mysql_fetch_row(res)) //从结果集读取一行数据% V9 |% O/ q' b+ d: G- p: R1 K
    {
    * Q9 t3 m/ S5 X& M8 i//处理结果集中的一行结果) {6 ^* f. |  P, ^* n5 }
    }
    2 [0 \! s0 |/ y6 a5 bmysql_free_result(res); //释放结果集5 s' a, ?. d) l
    mysql_close(&mysql); //关闭连接
    - `& A( r1 U% P( K& X. w: O4 y当然,应用可能会在客户端维护OceanBase连接池,Java应用还可能会使用其他
    * y' X+ a& m) D' }6 N持久层框架,例如iBatis。由于OceanBase兼容JDBC和MySQL C客户端,使用MySQL5 y" W  p( ?3 T6 q2 y; a
    的应用无须修改代码就能接入OceanBase。
    , z* K. ]& ~3 _4 }6 {11.2.2 运维' p6 b+ Y5 p& s$ B
    OceanBase内部实现了系统表机制,用于存储监控以及运维相关的信息。内部系
      H" a; t7 E! s- o+ g统表包含的内容如下:  j3 m* |. W) n2 l0 ?: p
    ●数据字典:表格的定义以及表格之间的关系、用户以及权限信息;0 a* d8 j# Z* h# g6 t, E- ]3 W
    ●服务器列表:集群中每种角色所在的服务器列表;
    % f; t* n& S7 O% j" D$ u- Y●配置信息:集群中每台服务器的配置信息;% N/ B5 @/ F# H) V
    ●内部状态:每台服务器的读写次数、读写延时、缓存命中率、子表个数、内) x6 m7 ?! x3 k# D+ R# O
    存、磁盘、CPU使用情况、请求关键路径时间消耗,每日合并状态等;. G5 n( T) F' q! O8 k% p0 m  f( u
    基于内部系统表,可以开发各种方便的OceanBase运维功能,如OceanBase数据! I0 ?, U- p5 d* q% e
    库会话(Session)管理,读写性能实时监控工具、监控平台等。
    " K8 R- [& F, _  K" Z% m图11-5是OceanBase某线上应用平均读取延时的监控图,包括单行读取平均延时: h/ ]+ a* p1 ~7 z
    (average_succ_get_time)以及多行扫描平均延时(average_succ_scan_time)两个指% Q( S8 i. o1 R2 l1 F, E- I+ {4 ?/ @
    标,且单位均为微秒。监控图包含三种数据:当前数据(currval),昨天数据
    9 _2 j4 C  o5 \; g- W9 e(lastval)以及上周数据(baseval),便于对比。由于监控、运维工具变化较快,这
    ; f# q4 Y3 d& A- w8 I% O0 D8 q( q里不做太多介绍。
    : V7 a  F! K' g" r0 d7 A图 11-5 OceanBase某线上应用读取延时
    3 |8 n7 W7 I% b1 y' ?% ?# }. _: J7 q8 r

    + k/ x/ V7 `6 h* b8 B2 l% \4 B/ o  s+ Y% _0 D
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2025-1-22 14:40 , Processed in 0.297997 second(s), 30 queries .

    Powered by Javazx

    Copyright © 2012-2022, Javazx Cloud.

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