Security Level ONIP SOABean DDS HUAWEI TelcoSOA PDU
Security Level: ONIP SOABean DDS 开发维护指南 ——HUAWEI Telco-SOA PDU www. huawei. com HUAWEI TECHNOLOGIES CO. , LTD. Huawei Confidential
目录 1 产品集成的困境与挑战 2 DDS产品定位 3 DDS特性介绍 4 DDS开发指南 5 DDS部署及使用 HUAWEI TECHNOLOGIES CO. , LTD. Huawei Confidential Page 2
目录 1 产品集成的困境与挑战 2 DDS产品定位 3 DDS特性介绍 4 DDS开发指南 5 DDS部署及使用 HUAWEI TECHNOLOGIES CO. , LTD. Huawei Confidential Page 4
目录 1 产品集成的困境与挑战 2 DDS产品定位 3 DDS特性介绍 4 DDS开发指南 5 DDS部署及使用 HUAWEI TECHNOLOGIES CO. , LTD. Huawei Confidential Page 7
DDS功能�� DDS Tools DDS Client CLI JDBC Console Tool ODBC GUI Tool DDS Server Node Manage ment Listener Policy Management Sharding Policy Read Write Policy Routing Policy Upgrading Policy Adapting Policy Security Policy TM Session Cursor Agent Task Heart beat Distributed SQL Engine Distributed Transaction Management SQL Parser Distributed SQL Optimizer Data Sharding Amount Optimizer Network Times Optimizer DML Parser DDL Parser Distributed SQL Planner DML Executor DDL Executor Optimizer Pattern Repository Group-by Placement … Sub-query Unnest DCL Parser Cache Distributed SQL Executor View Merge Predict Push DCL Executor Event Trigger Infrastructure Table Dictionary Log Server Global Area/PGA Config Spinlock MPR(Multi-Platform Runtime) Windows Wrapper SUSE Wrapper HUAWEI TECHNOLOGIES CO. , LTD. AIX Wrapper Communicati on Oracle Driver Huawei Confidential Conn Pool LDBC DB 2 Driver My. SQL Driver Page 8 OM Gauss. DB Driver Monitor Node Agent Load Balance Session Management
提供数据透明�� , 支持多种数据� Application (C++) BODAF 元数据管理虚 虚拟节点管理 拟点 中心 Application (C++) Application (Java) ODBC BODAF JDBC 1、向客�呈�一个集中式虚� 数据�,屏蔽了底�各种数据 源的差异、特�和��,以及 位置 Cloud Data Server DDS Instance Server Cluster Active Buffer Meta data Redo files … Data Resharding Data Backup & Recovery Data Query Data Online Move Data Load Data Sharding Policy Data Routing Policy Security Policy Data Monitor Upgrading Policy Data Read-Write Policy Data. Source Adapting Tools … Distributed SQL Engine Oracle DB 2 Parameter Stand. By Buffer Data File Distributed Transaction Management My. SQL HUAWEI TECHNOLOGIES CO. , LTD. Fastore Teastore Huawei Confidential 2、向客�提供�一的 DDS SQL�言,屏蔽各种数据源 SQL�言的差异 3、提供�一的��代� 4、�格遵循关系数据� ACID 原� 5、支持异构数据�,分�段支 持ORACLE,My. SQL、 Postgre. SQL等等数据� Page 11
支持分布式主� DN 1 Seq 1: Start with Increment by n m DN 2 Seq 1: Start with Increment by n+1 m DNm Seq 1: Start with Increment by n+m m DDS Application Sequence可以创建在一个或多个数据源上: CREATE SEQUENCE [ schema_name. ]seq_name START WITH MINVALUE start_val ON dn_name min_val INCREMENT BY MAXVALUE step 分布Sequence特点 max_val [, dn_name] [, . . . n]; 1、若Sequence创建在一个数据节点上 使用Sequence: 可保证主键值唯一且连续,但可靠性低 SELECT seq 1. currval from dual SELECT seq 1. nextval from dual; 2、若Sequence创建在多个数据源上 SELECT seq 1. nextval FROM dual CONNECT BY level <= <value> 可保证主键值唯一,但不保证连续,可靠性高 HUAWEI TECHNOLOGIES CO. , LTD. Huawei Confidential Page 13
支持多�数据路由 路由�理 SELECT * FROM USER WHERE userid = ? 分区表�建 CREATE TABLE dds. user ( int userid, … … … ) 一�分区 PARTITION BY(Num. Range(userid)) ( PARTITION P 1 VALUES INTERVAL(0, 1000000) 二�分区 PARTITION BY(Range. Hash(userid)) ( PARTITION P 1 -1 VALUES INTERVAL(0, 214) ON dn 11, PARTITION P 1 -2 VALUES INTERVAL(214, 215) ON dn 12 PARTITION P 1 -2 VALUES INTERVAL(215, 216) ON dn 13 ) 找到schema Application 找到table 找到一�分区 DDS 找到二�分区 找到数据�点 PARTITION P 2 VALUES INTERVAL(1000000, 2000000) PARTITION BY(Range. Hash(userid)) ( PARTITION P 2 -1 VALUES INTERVAL(0, 214) ON dn 21, PARTITION P 2 -2 VALUES INTERVAL(214, 215) ON dn 22 PARTITION P 2 -2 VALUES INTERVAL(215, 216) ON dn 23 ) ); 找到数据源 P 1: 1~10000000 P 2: 10000001~20000000 DN 11 DN 12 DN 13 [0~214 -1) P 1 -1 [214~215 -1) P 1 -2 [215~216 -1) P 1 -3 HUAWEI TECHNOLOGIES CO. , LTD. Huawei Confidential DN 21 DN 22 DN 33 [0~214 -1) P 2 -1 [214~215 -1) P 2 -2 [215~216 -1) P 2 -3 Page 14
支持�性伸� Zookeeper JDBC APP APPJDBC �用背景: DDS性 能不能�足 App需要 Zookeeper …… Zookeeper集群 DDS DDS DDS …… �施步�: 1、增加DDS�点 2、DDS向Zookeeper�行状�注册。 3、Zookeeper通知��者 JDBC(位于APP中) …… HUAWEI TECHNOLOGIES CO. , LTD. 4、App建立�接�将新增 DDS参与��均衡 Huawei Confidential Page 18
目录 1 产品集成的困境与挑战 2 DDS产品定位 3 DDS特性介绍 4 DDS开发指南 5 DDS部署及使用 HUAWEI TECHNOLOGIES CO. , LTD. Huawei Confidential Page 23
开户流程图(部分) HUAWEI TECHNOLOGIES CO. , LTD. Huawei Confidential Page 25
DDS使用流程 HUAWEI TECHNOLOGIES CO. , LTD. Huawei Confidential Page 26
DDS常用接口(JDBC) 1. 创建DDS连接 Connection Driver. Manager: : get. Connection(url, username, password) 参数�明: Ø url�接入 DDS的�接信息,有两种格式: 当DDS�集群�,�用从 Zookeeper接入,url格式� jdbc: soa: dds: zk: @ip: port<, ip: port><…>/root-path/instance Zoo. Keeper支持集群部署,多� IP和端口号通�逗号隔开。 url示例如下: jdbc: soa: dds: zk: @10. 137. 166. 133: 1281, 10. 137. 166. 134: 1281/soa_dds/cluster 1/in stance 其中“root-path”需要与配置文件dds. env. local. xml中配置� “cluster-manager”的 “root-path”相一致。 当DDS�非集群�,�用直接与 DDS Server建立�接, url格式�: DDS url: jdbc: soa: dds: @ip: port Ø password�非加密密� HUAWEI TECHNOLOGIES CO. , LTD. Huawei Confidential Page 27
DDS常用接口(JDBC) 2. 创建Prepare. Statement对象 Prepared. Statement Connection: : prepare. Statement(String sql) 参数�明: ��法支持参数�定。可以在 SQL字符串中�置参数,任意��型的参数都可以使用 “ ?”表示,之后再�参数�行�定。�定参数的�明�参� 后��明 。具体示例如下: String sql = "SELECT id, data FROM Images WHERE id<=? "; //此��置的参数作� id的��条件,可灵活配置。 String sql = "insert into tbl_contract_menu(id, name, operator_code, description) values (? , ? , ? )" //此��置的参数作�插入数据。 字符串�独定�之后,�建 statement相关代��: Prepared. Statement p. Stmt= conn. prepare. Statement(sql); 3. 绑定参数(可选) void Prepare. Statement: : set. Type(int index, Type value) �明: Index从1开始,斜体部分�成 index��参数的相��型 HUAWEI TECHNOLOGIES CO. , LTD. Huawei Confidential Page 28
DDS常用接口(JDBC) 4. 执行语句 Result. Set Prepared. Statement: : execute. Query(String sql) int Prepared. Statement: : execute. Update(String sql) �明: ��数据使用 execute. Query,若��成功, rs中存�的是���果, rs. next可以� �取出所有数据;若��失�, rs�空�象。 增加、�除、修改数据使用 execute. Update,返回影响��数。 5. 使用Result. Set对象 boolean Result. Set: : next() Type Result. Set: : get. Type(int index) �明: next是将cursor移�到当前行的下一行。�行完��,最初 cursor位于第一行之前, 使用next指向第一行。 get. Type�取当前行指定列的�,斜体部分需要替�成 index��的字段的�型,如 Int。 HUAWEI TECHNOLOGIES CO. , LTD. Huawei Confidential Page 29
DDS常用接口(JDBC) 6. 关闭Result. Set对象 void Result. Set: : close() 7. 关闭Prepare. Statement对象 void Prepare. Statement: : close() 8. 关闭DDS连接 void Connection: : close() HUAWEI TECHNOLOGIES CO. , LTD. Huawei Confidential Page 30
目录 1 产品集成的困境与挑战 2 DDS产品定位 3 DDS特性介绍 4 DDS开发指南 5 DDS部署及使用 HUAWEI TECHNOLOGIES CO. , LTD. Huawei Confidential Page 32
目录结构 DDS目��构: HUAWEI TECHNOLOGIES CO. , LTD. Huawei Confidential Page 33
重要配置 dds. server. xml: <base-config> <!-- long. Sql timeout(ms)--> <dds-long-sql-print timeout="512"/> <authentication > <user-name value="dds"/> <password value="5068 e 6 af 80 bdcc 5 e 82 d 87 a 9 e 08561 fbe"/> <!--The ip will be locked after faild-attemps login failures. --> <!--if config refresh, must restart server--> <failed-attemps value="3"/> <!--how much time(second) the ip will be locked. --> <!--if config refresh, must restart server--> <ip-lock-time value="60"/> </authentication> <client-whitelist> <!--IP white. List--> <valid-ip value="127. 0. 0. 1"/> </client-whitelist> <!--The max connections of every client--> <client-max-connections value="1024"/> </base-config> HUAWEI TECHNOLOGIES CO. , LTD. Huawei Confidential user-name ddssql 具�接 DDS Server�的用�名。只 有此�配置的用�名才 能通� DDS Server的 ����,建�使用 三个以上字符作�用� 名。 password IP鉴权白名单,该名单中 的IP地址所在的服务器允 ddssql 具�接 DDS 许与本机通讯。 Server�的用�密�。 “valid-ip value”对应一个 只有此�配置的用�密 合法的IP地址,多个IP地 �才能通� DDS 址需分别填写,3个IP地 Server的����。 址示例如下: 用�密�需配置�� <client-whitelist> � AES 128加密算法加 密后的密�,需使用 “ddspe” 具加密。 Page 34
重要配置 self:根据dds内部配置文 件dds. datasource. xml和 dds. *. sharding. xml�入 DDL,建立相关分区��。 <dds-start-mode> none:启��手 �入 <!--if config refresh, must restart server--> DDL�法文件,默��。 <!-- dds-mode value="embedded" or "self" or "none“--> embedded:根据��插 <ds-load-mode value=“self"> <!--ds-load-mode value="embedded" ds-loader="fromjavabodaf"--> 件�入 DDL�法,建立相 关分区��。根据 ds <!--Needing the config item when dds-mode value="embedded". loader所配内容在ds lib-name: plugin name, param: entry param content of plugin--> loaders配置�中找到� <!--if config refresh, must restart server--> �插件。 <!--ds-loaders> <ds-loader name="fromjavabodaf" lib-name="load_dict_sdp"> <param name="datasourcefile" alue="${BODAF_USER}/config/datasource. xml"/> <param name="bofiledir" value="${BODAF_USER}/bo/baseline"/> </ds-loader> ��日志开关,修改后需重启 DDS Server�程才能生效。 </ds-loaders--> 注意 开启�开关后, 30分�内可在 </ds-load-mode> ��日志的开关打开后会影响系�的性能,减���的运行速 “${DDS_HOME}/log/debug/ddsserver_*. dlog”文件中�� </dds-start-mode> 度,占用磁�空�,所以系�商用后一般不允�打开。如果定 debug日志信息。超� 30分�后,�开关失效,停止打印 <log-params> 位��需要,在得到��主管同意以后才可以打开��日志的 debug日志信息。 <debug-log-on value="0"/> 开关�行��定位,完�后立即关���日志的开关。 商用 取�如下: </log-params> �境不建�打开�个配置�,可以使用 logadm��打开 /关� 0:关���日志开关,默��。 </advance-config> 日志。 1:打开��日志开关。 dds. server. xml: <advance-config> HUAWEI TECHNOLOGIES CO. , LTD. Huawei Confidential Page 35
重要配置 dds. env. local. xml: <base-config> <!-- node id and name--> DDS Server提供的服�端口,修改后需 <!--if config refresh, must restart nodeagent--> 重启DDS Server�程才能生效。 <node id="101" name="dds 101"/> 取�范�: 1024~65535。 <!-- native ports--> <ports> <!-- dds port--> <!--if config refresh, must restart server--> <dds-server value="7777"/> 共享内存信息,修改后需重 </ports> 启monitor、nodeagent以及 <advance-config> logserver�程才能生效。 <!--the base. Key of share memory--> “base-key”:共享内存基址, <shm-key base-key="0 x 22"/> monitor、nmgr以及logserver <!-- if base-key is 0 x 22 , the rule : 等模�都会使用共享内存, component segment shm key �些共享内存都从 base-key ========== 偏移�取。 monitor 004000 0 x 22004000 默��: 0 x 22。 nmgr 001010 0 x 22001010 �明 logserver 009000 0 x 22009000 安装DDS Server前需确保� --> 基址未被其他�程使用,否 </advance-config> �会造成启�失�。 HUAWEI TECHNOLOGIES CO. , LTD. Huawei Confidential Page 36
重要配置 dds. datasource. xml : <data-sources> <!-- name: ds name, ds. Type: ds type(pdb), db. Type: db type(oracle, mysql)--> DDS的statement池�存数据源的url,用于�取 PDB端的statement <data-source name="UP_DS_1" ds. Type="pdb" db. Type="oracle"> 和特定数据�的�接。 <url>ora 119</url> 个数。PDB端的每个statement��一个数据 �游�( cursor)。 取�由 db. Type的取� <user-name>wwei</user-name> 决定。不同�型 的数据 在Oracle端�看 v$open_cursor得到的cursor, <password>E 52 D 6 DA 4 D 79 A 2132 D 4 D 4116513 EDB 6 EF</password> �配置格式不同。 包括DDS端打开的cursor数(最大个数� <connection-pool> db. Type取� Oracle�, dds. datasource. xml文件配置的statement <size min="1" max="200" step="1"/> 配置tns名或者 number)和session_cached_cursors 之和。 <heartbeat cycle="6000" cycle-when-broken="2000"/> ”IP: Port/SID”。若配置 <connect-operate timeout="100"/> 其中,session_cached_cursors可以通�命 � ”IP/SID”,表示默� <statement number="300"/> 令show parameter 端口� 1521。 session_cached_cursors�行�看。 <long-sql-print timeout="50"/> SQL> show parameter db. Type取� mysql�, </connection-pool> 配置 session_cached_cursors; </data-source> “databasename@ip: po 在My. SQL端通��看参数可得到 </data-sources> rt”,其中 max_prepared_stmt_count。可参考命令 <data-nodes> databasename是数据 show variables�行��。 <data-node name="UP_DN_1"> �点�一�具有相同数据副 �名, ip与port� mysql> show global variables like <data-sources> 本的数据源的分�, 数据源 所在的IP与提供的服� <data-source name="UP_DS_1" read-write-mode="rw"/> '%stmt%'; 名称�前面 datasources中 端口。 如果需修改statement最大�,可参考如下命 </data-sources> 定�的数据源, �写模式有 令。 </data-node> 三种:rw、r、w。 mysql> set global max_prepared_stmt_count=124000; HUAWEI TECHNOLOGIES CO. , LTD. Huawei Confidential Page 37
重要配置 dds. datasource. xml : 分区算法支持以下几种: <sharding-rules user-name="dds" schema-name="dds"> user-name� dds登�用�, Hash:���算法后 “range <sharding-rule name="sharding 1"> schema-name��用�下定� -area”参数无需配置, <algorithm name="Hash" sharding-field="shard. Field 1“> <algorithm name="Hash" sharding-field="shard. Field 1"> 的某个schema名字,�名字来 “virtual-partition”参数范�� <resharding virtual-partition="0 -512" data-node="dn 1" /> 源于dds. *. sharding. xml <resharding virtual-partition="512 -65535" data-node="dn 2" /> 0 -65534。 Num. Range:�� int�型分 </algorithm> 分区算法��信息。 区字段,“range-area”参数 </sharding-rule> range-area 填写分区范�,范�是 <sharding-rule name="sharding 3"> 待分区字段取�范�。 int� 型数�的取�范�; “virtual <algorithm name="Num. Range" sharding-field="shard. Field 1"> virtual-partition”参数无需配置。 <resharding range-area="min-1001"> hash算法的分区范�。 String. Range:�� string� <algorithm name="Hash" sharding-field="shard. Field 2"> data-node <resharding virtual-partition="0 -512" data-node="dn 1" /> 型分区字段,“range-area” 数据�点名称。 参数填写分区范�, “virtual<resharding virtual-partition="512 -65535" data-node="dn 2" /> �明 partition”参数无需配置。 </algorithm> 分区的区�遵循左�右开原 两�路由 Date. Range:�� data�型 </resharding> �,例如配置� “ 0 -1001”, 分区字段,“range-area”参 <resharding range-area="1001 -max"> 表示[0, 1001),�从 0取到 数填写分区范�, “virtual <algorithm name="Hash" sharding-field="shard. Field 3"> 1000。 <resharding virtual-partition="0 -512" data-node="dn 3" /> partition”参数无需配置。 Sharing:不分区,每个� <resharding virtual-partition="512 -65535" data-node="dn 4” /> 点保有全量数据,此� </algorithm> “range-area”和“virtual </resharding> partition”参数无需配置。 </algorithm> </sharding-rules> HUAWEI TECHNOLOGIES CO. , LTD. Huawei Confidential Page 38
重要配置 dds. *. sharding. xml : <user-schema user-name="dds" default-schema="dds"> <schema-define name="dds"> node name 配置某个表使用的分区��, <tables> �点名称 ,当建在多个�点上 sharding-rule必�� <!--name: table name, sharding-rule: sharding rule name, �,保�唯一性,不保��� dds. datasource. xml中已定 sharding-column: partition field of table , sharding-field: pratititon field in sharding rule--> 性。 �的��。 <table name="TEST_TAB" sharding-rule="sharding 1"> <table name="TEST_TAB" sharding-rule="sharding 1“> �明 (�一安装的�境无需� <property sharding-column="id" sharding-field="shard. Field 1"/> 行以下操作) </table> sharding-column 使用sequence前需在��数据 <table name="TEST_TAB 2" sharding-rule="sharding 2"/> 填写name��的表 不分区表,配置�� 源上�建内置表和存��程, <table name="TEST_MYSQL" sharding-rule="sharding 3"> 中,用于分区的字段 名称即可. 脚本需存放在目�: <property sharding-column="id" sharding-field="shard. Field 1"/> 名称,例如:表A使 ${HOME}/ONIP_DDS/server/d <property sharding-column="name" sharding-field="shard. Field 2"/> 用id字段作�分区字 b。包括 <property sharding-column="addr" sharding-field="shard. Field 3"/> 段,�填写 id。 create. Table. sql:建表脚本 </table> sharding-field p_DDS_generate_seq. sql:存 </tables> 填写 ��程脚本 <dds-sequence name="SEQ_TEST" start-with="1" “dds_datasource. xml” increment-by="1" min-value="1" max-value="9999999" > 使用方法: 文件中定�的 oracle上�入命令参考: <node-list> “sharding-field”。 sqlplus @SID <node name="USER_DN_1"/> username/password @xxx. sql </node-list> mysql上�入命令参考: mysql </dds-sequence> -u username -p password -D </schema-define> dbname @xxx. sql </user-schema> HUAWEI TECHNOLOGIES CO. , LTD. Huawei Confidential Page 39
进程启停(单机) 1. 启动DDS服务 start_dds. sh 2. 停止DDS服务 stop_dds. sh 3. 基本验证 >ddssql username@ip: port Please enter password: **** Successfully CONNECT to DDSServer. SQL>select * from systables; HUAWEI TECHNOLOGIES CO. , LTD. Huawei Confidential Page 42
常用 具 1. 客户端 具 ddssql 2. 加密 具 ddspe 3. 日志开关 具 logadm 4. 监控 具 monitor 5. 错误码查看 具 ddserr 6. 故障搜集脚本 dds_gatherinfo. sh HUAWEI TECHNOLOGIES CO. , LTD. Huawei Confidential Page 43
查看DDS系统信息 1. DDS系�表 序号 名称 用途 1 DUAL 与其他数据库的dual表作用一致。 2 SYSCOLUMNS 记录系统中每个表的列信息 3 SYSTABLES 记录系统中所有表信息 4 SYS_DATANODE 记录系统中datanode的配置信息 5 SYS_TAB_NODE 记录用户表与datanode的关系 6 SYS_PARTITION_RANGE 记录用户分区表ID的分区边界ID的关系 7 SYS_PARTITION_BORDER 记录边界ID的定义 8 SYS_DATASOURCE 记录系统中的数据源信息 9 SYSINDEXES 记录系统中表的索引信息 10 SYS_INDEX_COL 记录索引列信息 11 SYS_SEQUENCE 记录系统中的SEQUENCE信息 HUAWEI TECHNOLOGIES CO. , LTD. Huawei Confidential Page 44
问题定位 DDS Server报错分析: 1. �看 DDS客�端��信息 2. �看 DDSServer run日志 ${DDS_HOME}/log/run/ddsserver_0. rlog 3. �看 debug日志 ${DDS_HOME}/log/debug/ddsserver_0. dlog 4. 搜集定位信息,�系�� 程� dds_gatherinfo. sh DDS Server性能问题分析: 1. �看�行�划 SQL>explain plan for select * from tablename; 2. �看 longsql ${DDS_HOME}/var/profile/ long. Sql_ddsserver_0. plog HUAWEI TECHNOLOGIES CO. , LTD. Huawei Confidential Page 46
Thank you www. huawei. com
- Slides: 47