本系列的前几篇文章重点探讨了如何将应用程序部署到 IBM PureApplication System 上。部署应用程序后,您需要考虑应用程序如何存储和访问数据。关系数据库管理系统提供了一种标准的数据存储和检索接口、一个围绕数据访问的高级安全模型,以及对多个用户同时访问存储的数据的并发性支持。
如果使用了 PureApplication System,则可以使用一个企业级关系数据库管理系统 (RDBMS) 以 IBM DB2 软件的形式部署应用程序。本文将介绍 DB2、在 PureApplication System 中包含 DB2 的不同方式,以及在包含在 PureApplication System 中一起部署 DB2 数据库和企业应用程序的流程和最佳实践。
IBM DB2 是一款 RDBMS 产品,支持不同的操作系统,比如 Linux、UNIX、Windows® 和 z/OS。具体来讲,PureApplication System 包含产品的 DB2 Linux, UNIX, and Windows (LUW) 版本。
截至 2012 年 4 月,DB2 LUW 的最新版本是 DB2 10.1。这个新版本引入了自适应压缩,进一步改进了现有的数据压缩技术;引入了连续数据摄入,可以在不中断持续数据访问和可用性的情况下填充数据表;还引入了时间旅行查询,从而可以查看并轻松报告过去某个时间点的数据。您在 DB2 10.1 中还可以找到其他增强功能,包括一般查询优化和性能改进,以及安全性和工作负载管理方面的改进。PureApplication System 包含 DB2 10.1 以及 DB2 9.7,用它们防止应用程序未在更新的版本上经过验证。
DB2 LUW 10.1 家族的产品组合中包含不同的版本,从 DB2 Express-C(一个具有社区支持功能的免费 DB2 版本)到高级 Enterprise 版(按照标准配备了多个附加功能)。但是,因为 DB2 LUW 家族的所有 DB2 版本都使用相同的基础数据库引擎,所以为一个 DB2 LUW 版本开发的任何应用程序都适用于所有 DB2 LUW 版本。在 DB2 Express 和具有不同附加功能的 Enterprise 版中,都提供了 DB2 虚拟系统模式,而 DB2 数据库工作负载模式为您提供了 DB2 Enterprise 版。
为 PureApplication System 中的应用程序选择一个数据库
在 PureApplication System 上下文中,可采用多种方式部署或配置数据库。因为 IBM DB2 软件集成在 PureApplication System 内,所以将 DB2 用作一个已部署应用程序的数据库不会涉及额外的成本,从而减少了开销和其他许可跟踪机制。PureApplication System 中的 DB2 的这种内在优势减少了该平台的总体拥有成本。而且,PureApplication System 中的 DB2 的统一性质支持在应用程序使用 DB2 作为数据库后端服务的过程中应用和遵循专注于集成的最佳实践和专家经验。
像其他在 IBM PureApplication System 上运行的应用程序一样,DB2 可用作一种 DB2 虚拟系统模式或用作一种 DB2 数据库工作负载模式中的一部分。正如本系列前面的文章中所述,DB2 虚拟系统模式支持更灵活地控制和配置中间件环境。目前,可将多个映像部署为 DB2 虚拟系统模式:
- DB2 Enterprise
- DB2 Express
- DB2 Enterprise(用于高可用性灾难恢复 (HADR) 功能的主要节点)
- DB2 Enterprise(用于 HADR 的辅助节点)
- DB2 Express(用于 HADR 的主要节点)
- DB2 Express(用于 HADR 的主要节点)
除了可用的 DB2 虚拟系统模式,还可以在对特定上下文应用了一些配置和最佳实践的 PureApplication System 中找到 DB2 数据库工作负载模式。DB2 数据库工作负载模式的部署非常简单,而且能够灵活地更改数据库层中的一些配置参数。有关 DB2 数据库工作负载模式的数据库工作负载标准功能的更多信息,请参阅 数据库模式 一节。目前,有两种不同的数据库工作负载模式可用于 DB2:
- IBM 事务数据库模式
- IBM 数据集市模式
IBM 事务数据库模式 用于容纳部门级在线事务处理 (OLTP) 应用程序,这些应用程序不需要很高的数据库优化水平。此数据库工作负载模式包含针对部门级 OLTP 部署、虚拟机部署调整模板和数据库备份计划的自动配置。此模式中使用了 DB2 Enterprise 版,对数据压缩启用了存储优化功能。
对于配备和管理 PureApplication System 中以数据为中心的应用程序的数据集市基础架构而言,IBM 数据集市模式 提供的一些功能是不可或缺的。IBM 数据集市模式针对数据集市工作负载所需的独特的 I/O 吞吐量进行了调节,IBM 数据集市模式包含数据压缩功能和数据移动工具,所有这些功能和工具都旨在使用急需的信息帮助推动业务发展。此模式中使用了 DB2 Enterprise 版,对数据压缩启用了存储优化功能。此模式中包含用于创建和修改目标数据集市的物理模式、控制流和数据流的 SQL 仓库工具。
对于之前未使用 IBM DB2 软件作为数据库解决方案的用户,PureApplication System 是一个与现有企业应用程序一起评估 DB2 的生产部署的不错的示例。除了前面介绍的在 PureApplication System 中使用 DB2 的优势之外,DB2 虚拟系统和数据库工作负载模式还允许您打开 SQL 兼容性模式,帮助迁移为使用其他竞争数据库软件而编写的应用程序。打开此功能后,为其他竞争数据库编写的原生 SQL 可在 DB2 引擎中进行原生编译,无需使用运行缓慢的模拟软件。此外,还可以使用一种兼容的数据并发性模型,并且 DB2 包含兼容现有的脚本和个人技能的工具,这简化了向 DB2 的过渡。
有关 DB2 SQL 兼容×××的更多信息,请参阅 在 DB2 9.7 for Linux, UNIX, and Windows 上运行 Oracle 应用程序。
使用 PureApplication System 外的远程数据库
在某些用例中,可能需要使用一个部署在 PureApplication System 内的应用程序来访问和链接远程系统上的数据库系统。例如,可能性能 (perhaps performance) 和其他条件将一个特定的数据库工作负载分类到一个任务关键型的数据库类别中,因此需要一个专门的物理系统来托管这样一个数据库系统。
在定义虚拟应用程序模式时,可以将现有的远程数据库组件附加到该模式。这些数据库将位于 PureApplication System 之外,这些组件的配置属性将定义该远程数据库的连接参数。
有了上述信息后,以下是为 PureApplication System 中一个关联的应用程序选择数据库部署的简化的过程:
- 在默认情况下,会先使用 DB2 数据库工作负载模式。这些模式已将最佳实践指南合并到它们的 DB2 实现中。如果需要,可以创建并引用一个新数据库工作负载标准,将配置中的更改应用到关联的应用程序。
- 如果(由于性能或其他条件)您选择将数据库放在 PureApplication System 之外,那么可以使用一个适当的接口将现有的远程数据库组件附加到虚拟应用程序模式中。
- 如果 DB2 数据库工作负载模式具有只能使用一个应用程序的严格限制,那么您可以使用一种 DB2 虚拟系统模式。这使您能够更灵活地控制这个中间件环境。
在 PureApplication System 中部署 DB2 的最佳实践
本节将介绍如何在 PureApplication System 内创建 DB2 虚拟系统和数据库模式。这些说明还包含如何调整 DB2 虚拟系统或数据库模式,以便使用可用于创建表、填充数据和预先调节数据库的脚本包来操作这些资源的配置。
当使用 DB2 虚拟系统模式时,通常会创建一个脚本包来更改 DB2 虚拟系统的某些特征,满足关联应用程序的需求。在下面的示例中,我们创建了一个脚本包,以便能够创建一个数据库并更新数据库参数 LOGBUFSZ
。然后,将脚本包上传到 PureApplication System,并将它用于 DB2 虚拟系统模式中。
创建和上传脚本包
脚本包通常包含两个脚本文件、一个 JSON 文件和一个 Shell 脚本文件。JSON 文件包含有关脚本需求的结构信息,比如包名称、描述、执行命令和工作目录。Shell 脚本文件包含调用其他文件的命令或脚本。要创建一个示例脚本包,请执行以下操作:
- 打开一个编辑器并创建一个 JSON 文件
cbscript.json
。清单 1 给出了该文件的一个示例。
清单 1. 一个 JSON 文件的示例,cbscript.json
{ "name": "Create Database and Tune ", "version": "1.0.0", "description": "This script package creates a database and update db parameter in a DB2 instance", "command": "/bin/sh /tmp/createDatabase/createDatabase.sh", "log": "/tmp/createDatabase", "location": "/tmp/createDatabase", "timeout": "0", "commandargs": "", "keys": [ { "scriptkey": "DATABASE_NAME", "scriptvalue": "", "scriptdefaultvalue": "" } ] }
- 保存并退出此文件。
- 使用先前在 JSON 文件中定义的名称创建一个 Shell 脚本文件,例如
createDatabase.sh
。在文件中输入以下代码行,如清单 2 所示。
清单 2. 包中的 Shell 脚本示例
echo "DB2INSTANCE=db2inst1" >> /etc/virtualp_w_picpath.properties source /etc/virtualp_w_picpath.properties export DB2INSTANCE=$DB2INSTANCE su db2inst1 -c "/opt/ibm/db2/V9.7/bin/db2 CREATE DATABASE $DATABASE_NAME" su db2inst1 -c "~/sqllib/bin/db2 connect to $DATABASE_NAME;~/sqllib/bin/ db2 update db cfg using logbufsz 1000;~/sqllib/bin/db2 terminate;"
- 保存并退出 Shell 脚本文件。
- 将这两个文件压缩到一个 zip 包中,确保包名称与 JSON 文件中定义的相同。例如,在
cbscript.json
文件中,如果字段位置的值为/tmp/createDatabase/
,那么包名称应该为createDatabase.zip
。该文件被提取到文件夹/tmp/createDatabase/
中。 - 以管理员身份登录到 PureApplication System,导航到 Catalog,然后导航到 Script packages 页面。
- 单击左上角的 New 图标添加一个新脚本包。
- 输入包名称并单击 OK。确保它与
cbscript.json
文件中定义的名称相同,例如Create Database and Tune
(参见图 1)。
图 1. 包名称对话框
- 在 “Create Database and Tune” 页面上,单击 Script package files 旁边的输入框。选择刚刚创建的脚本包并单击 Upload。
- 上传和编译该程序包需要一定的时间,具体时间取决于包大小。结束这个过程之后,
cbscript.json
文件中定义的参数会加载到页面上,如图 2 所示。
图 2. 上传的程序包的信息网页
- 仔细检查这些参数,确保它们能够满足需求。
脚本包已上传到 PureApplication System,现在可以在虚拟系统模式中使用它了。
本节将介绍如何创建包含一个 DB2 Enterprise 数据库服务器的虚拟系统模式,以及如何使用刚刚上传的脚本包。要创建虚拟系统模式,请执行以下操作:
- 打开虚拟系统模式页面,方法是单击 Patterns,然后从菜单中选择 Virtual Systems。
- 单击左上角的 New 图标创建一个新虚拟系统模式。
- 输入模式的名称和描述,如图 3 所示。单击 OK 继续操作。
图 3. 虚拟系统模式名称对话框
- 在刚刚创建虚拟系统模式的详细信息页面上,单击右上角的 Pencil 图标调出模式编辑器。
- 在模式编辑器页面上,从左侧菜单选择 Parts 部分以展开它,然后将 DB2 Enterprise 项拖放到右侧面板上。
- 单击左侧菜单中的 Scripts 部分以展开它。将刚刚创建的脚本包 Create Database and Tune 拖放到 DB2 Enterprise 上,如图 4 所示。
图 4. 将包附加到虚拟系统模式
- 单击 DB2 Enterprise 部分上的 Edit 并输入有关系统的必要信息,如图 5 所示。单击 OK 继续操作。
图 5. DB2 虚拟系统模式配置对话框
- 单击脚本报上的 Edit 并输入脚本所需的 DATABASE_NAME,如图 6 所示。单击 OK 继续。
图 6. 数据库名称对话框
- 单击右上角的 Done editing 保存和退出模式编辑器。
- 在 “VSpattern” 页面上,单击右上角的 Deploy,从此模式部署一个虚拟系统。
- 单击 Instances,然后从顶部菜单选择 Virtual Systems。这一页显示了虚拟系统的部署状态,如图 7 所示。完成部署后,可以从此页面获取连接信息。
图 7. DB2 虚拟系统模式的网页部署状态
本节将介绍如何在 PureApplication System 上使用数据库模式。有一项名为 “数据库工作负载标准” 的功能支持管理员创建工作负载标准,并配置数据库的大部分内容。本节中的说明包括如何创建示例工作负载标准,使用它部署一个数据库和更新参数。有关数据库工作负载标准的更多信息,请参阅 IBM Workload Deployer 信息中心。
创建数据库工作负载标准
数据库工作负载标准是一个 zip 文件,包含以下 5 个一级目录。每个目录包含一个入口脚本,该脚本还可以调用其他脚本或文件。create_db 目录和它的入口脚本 create_db.sh 是强制性的。其他所有目录都是可选的。
以操作系统用户 “db2inst1” 的身份执行这些脚本,并按表 1 中所示的顺序调用它们。
目录 | 入口脚本 |
tune_inst | tune_inst.sh |
post_start_inst | post_start_inst |
create_db | create_db.sh(强制性) |
tune_db | tune_db.sh |
init | init.sh |
示例工作负载标准包含两个目录 “create_db” 和 “tune_db”。每个目录仅拥有入口脚本 create_db.sh 和 tune_db.sh。脚本 create_db.sh 使用用户输入的数据库名称创建数据库。脚本 tune_db.sh 在创建数据库后更新数据库参数。有关参数和脚本的其他需求的更多信息,请参阅 IBM Workload Deployer 信息中心。
创建工作负载标准:
- 创建一个名为 “create_db” 的目录,在此目录下,创建一个名为 “create_db.sh” 的 Shell 脚本文件。此文件的内容类似于清单 3。
清单 3. create_db.sh 脚本示例
#!/bin/sh inst_name=$1 db_name=$2 outStr=$(db2 "CREATE DATABASE ${db_name} ON /home/${inst_name} USING CODESET UTF-8 TERRITORY US COLLATE USING SYSTEM PAGESIZE 8192") if [ $? -ne 0 ] ; then echo "database creation failed, aborting: ${outStr}" exit -1 else exit 0 fi
- 保存文件并退出。
- 创建另一个名为 “tune_db” 的目录,在此目录下创建一个名为 “tune_db.sh” 的 Shell 脚本文件。此文件的内容类似于清单 4。
清单 4. tune_db.sh 脚本的示例
#!/bin/sh db_name=$2 db2 connect to ${db_name} db2 UPDATE DB CFG USING LOGBUFSZ 1000 db2 terminate
该脚本将数据库参数
LOGBUFSZ
更新为 1000。您可以根据需要添加更多命令。 - 保存文件并退出。
- 将两个目录压缩到一个 zip 文件中,例如 WLDstandard.zip。
上传数据库工作负载标准
创建包之后,将它上传到 PureApplication System。
- 以管理员身份登录。
- 选择 Catalog,然后从顶部菜单选择 Database Workload Standards,以便打开工作负载标准页面。
- 单击页面上的 New 图标创建一个新工作负载标准。输入所有必要的字段并上传刚刚创建的 zip 包,如图 8 所示。
图 8. 数据库工作负载标准配置对话框
- 单击 Save 保存此标准并退出。
创建一个数据库模式并部署它
将数据库工作负载标准上传到 PureApplication System 后,使用此标准创建一个数据库模式。要从一个数据库模式创建和部署,请执行以下操作:
- 以管理员身份登录。
- 单击 Patterns,然后从顶部菜单选择 Database Patterns。
- 单击 New 图标,创建一个新数据库模式。
- 输入所有必要的字段并选择刚刚创建的工作负载标准,如图 9 所示。
图 9. 使用自定义数据库工作负载标准部署 DB2 数据库模式
- 单击 Save 保存模式并退出。
- 单击刚刚创建的模式 Dev DB Pattern 打开模式页面。
- 单击 Deploy 调出部署窗口。输入数据库名称,比如
mydb
,选择要部署的云分组或环境配置文件,如图 10 所示。
图 10. 数据库模式配置对话框
- 单击 OK 开始部署,转到 Instances> Databases 页面来检查部署状态。
- 部署完成后,可以在 “My databases” 页面上获取连接信息,如图 11 所示。
图 11. 部署的数据库模式状态网页
- 通过执行清单 5 中所示的命令,在本地数据库目录上对此数据库进行编目。
清单 5. 对远程 DB2 节点和数据库进行编目的命令
db2 catalog tcpip node <node name> remote <Host IP address> server <Port number> db2 catalog db <Database name> at node <Node name>
例如:db2 catalog tcpip node rnode remote 9.26.167.36 server 50000 db2 catalog db mydb at node rnode
执行清单 6 中所示的命令来获取数据库参数
LOGBUFSZ
的值。
清单 6. 连接远程数据库并获取 LOGBUFSZ 配置参数
db2 connect to mydb user appdba using <appdba password> db2 get db cfg | grep LOGBUFSZ
清单 7 显示了相关输出。
清单 7. LOGBUFSZ 配置参数的示例输出
Log buffer size (4KB) LOGBUFSZ) = 1000
LOGBUFSZ
的默认值为 256。它依据 tune_db.sh 脚本中的定义更改为了 “1000”。
本文介绍了 IBM DB2 数据库软件和它在 IBM PureApplication System 中的应用。DB2 为 PureApplication System 用户提供了一个可免费使用的集成的关系数据库系统,为关联的应用程序提供了一种安全且强大的应用程序数据存储解决方案。因为可通过多种方式在 PureApplication System 中部署 DB2 数据库,所以建议首先从一个 DB2 数据库模式开始,如果有必要,可以使用一个自行定义的数据库工作负载标准来应用配置更改。做出选择之后,请按照本文中的说明完成 DB2 在 PureApplication System 中的部署。