您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 Code iProcess 课程 认证 咨询 工具 火云堂 讲座吧   成长之路  
会员   
 
   
 
  
每天15篇文章
不仅获得谋生技能
更可以追随信仰
 
 
     
   
 订阅
  捐助
在集群下配置 Informix 数据仓库加速器
 
火龙果软件    发布于 2014-07-18
1446 次浏览     评价:      
 

正如我们前边所介绍的,我们可以将用户数据集市的数据装载到IWA中来极大地加速数据查询的效率。但是,我们前边介绍的,都是将用户的数据集市数据装载到一台物理机器中,如果用户数据集市的数据非常大,一台物理机器的内存可能不能满足要求,这时,我们可以将用户数据集市的数据装载到集群的环境,将数据分布到多台物理机器中来满足大数据量的需求。从Informix Ultimate Warehouse Edition 11.7FC4开始, IWA支持集群特性。在集群环境下,我们需要配置$IWA_INSTALL_DIR/dwa/etc/cluster.conf文件来指定集群所包含的节点信息,该文件中的第一个节点会作为协调节点(coordinator node),其他节点会作为工作者节点(worker node),这样,我们可以将IWA的协调节点及工作节点分布在不同的物理机器上来支持大数据量的数据集市应用。如下图所示:

图 1. IWA安装在集群环境下,Informix及管理客户端安装在不同的机器上

配置集群环境下IWA的方法同单机环境下IWA的配置方法基本类似,但有些不同之处。在集群环境下,我们需要配置SSH, 保证root用户可以在集群中的各个节点之间不需要输入密码就可以运行Secure Shell (SSH)网络协议。另外,我们需要在集群中配置共享集群文件系统,比如GPFS,GFS等,并在该集群文件系统上创建加速器存储目录(accelerator storage directory),集群中的各个节点都需要能够以相同的目录名称来访问该目录。针对集群环境,IWA还增加了cluster.conf配置文件来指定集群中的各个节点信息,并在dwainst.conf配置文件中增加了CLUSTER_INTERFACE 配置参数来指定集群节点间通信的网络设备名称。

下边,我们以一个配置示例来具体介绍一下集群环境下IWA的配置方法,希望能够对大家有所帮助。

集群环境下配置IWA的基本方法包括如下步骤:

1.配置SSH, 保证root用户可以在集群中的各个节点之间不需要输入密码就可以运行Secure Shell (SSH)网络协议。

2.配置共享集群文件系统,比如GPFS,GFS等。

3.配置Informix数据仓库加速器IWA实例,包括配置Informix 到数据仓库加速器的网卡设置,在集群文件系统上创建storage directory,编辑dwainst.conf配置文件,创建cluster.conf配置文件,并启动IWA实例。

4.配置Informix 到IWA加速器的连接。

5.创建数据集市。

6.部署数据集市。

7.装载数据到数据集市。

我们本次示例的运行环境是两个独立的Vmware,分别运行Suse Linux 11, 其中,informixva机器上运行Informix 11.7FC4,同时安装了IWA,IWA的协调节点也运行在该机器上,另外一台机器iwa1,安装了IWA,IWA的一个工作者节点运行在该机器上。

两台机器的网络设置基本相同,都配置了eth0及eth1网络设备,其中,eth0作为DRDA_INTERFACE参数值负责Informix同IWA之间的通信,eth1作为CLUSTER_INTERFACE参数负责IWA集群节点间的通信。Informixva及iwa1机器的网络设置信息如下:

清单 1. Informixva及iwa1机器的网络设置信息

在informixva机器:
root@informixva[demo_on]:/opt/IBM/informix/dwa/etc# ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:0C:29:F6:16:E6
inet addr:192.168.179.100 Bcast:192.168.179.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1132 errors:0 dropped:0 overruns:0 frame:0
TX packets:61434 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:90210 (88.0 Kb) TX bytes:82897027 (79.0 Mb)

eth1 Link encap:Ethernet HWaddr 00:0C:29:F6:16:F0
inet addr:192.168.179.101 Bcast:192.168.179.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:25354 errors:0 dropped:0 overruns:0 frame:0
TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4926678 (4.6 Mb) TX bytes:1547 (1.5 Kb)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:3146 errors:0 dropped:0 overruns:0 frame:0
TX packets:3146 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:308582 (301.3 Kb) TX bytes:308582 (301.3 Kb)
在iwa1机器:
root@iwa1[demo_on]:/opt/IBM/informix/dwa/etc# ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:0C:29:72:88:ED
inet addr:192.168.179.102 Bcast:192.168.179.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:336 errors:0 dropped:0 overruns:0 frame:0
TX packets:24223 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:34256 (33.4 Kb) TX bytes:4818872 (4.5 Mb)

eth1 Link encap:Ethernet HWaddr 00:0C:29:72:88:E3
inet addr:192.168.179.103 Bcast:192.168.179.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:60997 errors:0 dropped:0 overruns:0 frame:0
TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:82857485 (79.0 Mb) TX bytes:378 (378.0 b)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:2273 errors:0 dropped:0 overruns:0 frame:0
TX packets:2273 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:184010 (179.6 Kb) TX bytes:184010 (179.6 Kb)

下边,我们具体讲述一下集群环境下IWA配置的具体步骤:

1. 配置SSH

在集群环境下配置IWA,我们需要配置SSH, 保证root用户可以在集群中的各个节点之间不需要输入密码就可以运行Secure Shell (SSH)网络协议。我们可以通过如下命令来配置informixva同iwa1之间的SSH通信:

在informixva机器上,我们以root用户登录,并执行如下命令:

清单 2. 在informixva机器上设置方法

ssh-keygen -b 1024 -t rsa -f ~/.ssh/id_rsa
cd ~/.ssh/id_rsa
cat id_rsa.pub>>authorized_keys
scp id_rsa.pub root@iwa1:~/.ssh/pub1
cat pub2>>authorized_keys

在iwa1机器上,我们以root用户登录,并执行如下命令:

清单 3. 在iwa1机器上设置方法

ssh-keygen -b 1024 -t rsa -f ~/.ssh/id_rsa
cat id_rsa.pub>>authorized_keys
scp id_rsa.pub root@informixva:~/.ssh/pub2
cat pub1>>authorized_keys

我们可以通过执行如下命令,测试SSH的连通性:

清单 4. 测试SSH的连通性

在informixva机器:
root@informixva[demo_on]:~/Desktop# ssh iwa1
Last login: Sat Nov 26 04:11:21 2011 from console
root@iwa1[demo_on]:~#

在iwa1机器:
root@iwa1[demo_on]:~/Desktop# ssh informixva
Last login: Sat Nov 26 04:09:24 2011 from console
root@informixva[demo_on]:~#

2. 配置共享集群文件系统GPFS

集群环境下的IWA需要配置共享集群文件系统,并在该文件系统上创建存储目录(storage directory)。IWA支持主流的集群文件系统,比如GPFS,GFS等。本次示例,我们采用GPFS集群文件系统。

GPFS允许使用者共享分布在多个节点和多个磁盘上的文件。它允许并行的应用程序同时从GPFS 节点组(nodeset)中的任何节点访问相同或不同的文件(节点组 nodeset 被定义为一组运行相同版本GPFS的节点)。GPFS文件系统的设计目标是使数据分布在一个集群中的所有节点上,允许应用程序通过标准的UNIX/Linux文件系统接口来访问数据。大多数的UNIX/Linux文件系统被设计在单一服务器环境下使用,在这一环境下, 增加文件服务器也不会提高特定的文件存取的性能。 GPFS 被设计成通过将I/O分布在多个硬盘提高性能,通过日志和复制的方式提高可靠性,并通过增加节点的方式提高系统的可扩展性。

配置GPFS集群文件系统主要涉及以下几个步骤:

2.1 安装GPFS

首先,我们需要在Suse linux 11系统上安装GPFS软件。

GPFS软件包主要包括如下安装包:

清单 5. GPFS软件包

gpfs.base-3.3.0-0.x86_64.rpm
gpfs.docs-3.3.0-0.noarch.rpm
gpfs.gpl-3.3.0-0.noarch.rpm
gpfs.gui-3.3.0-0.x86_64.rpm
gpfs.msg.en_US-3.3.0-0.noarch.rpm

我们可以通过执行如下命令来安装上述安装包:

清单 6. 安装GPFS软件包

rpm –ivh *rpm

同时,我们安装了如下补丁包:

清单 7. GPFS补丁包

gpfs.base-3.3.0-3.x86_64.update.rpm
gpfs.docs-3.3.0-3.noarch.rpm
gpfs.gpl-3.3.0-3.noarch.rpm
gpfs.gui-3.3.0-3.x86_64.rpm
gpfs.msg.en_US-3.3.0-3.noarch.rpm

我们通过执行如下命令来安装上述补丁包:

清单 8. 安装GPFS补丁包

rpm –Uvh *rpm

我们还可以执行如下命令,检查GPFS是否安装正确:

清单 9. 检查GPFS软件包

root@iwa1[demo_on]:/data/fp# rpm -qa|grep gpfs
gpfs.gui-3.3.0-3
gpfs.base-3.3.0-3
gpfs.docs-3.3.0-3
gpfs.gpl-3.3.0-3
gpfs.msg.en_US-3.3.0-3

2.2 在linux内核中建立GPFS可移植层

我们可以执行下述命令在linux内核中建立GPFS可移植层:

清单 10. 在linux内核中建立GPFS可移植层

cd /usr/lpp/mmfs/src
make Autoconfig
make World
make InstallImages

2.3 使用mmcrcluster命令创建GPFS Cluster

本次示例中,我们需要在informixva及iwa1两台linux服务器上创建GPFS 集群。首先,我们在informixva机器上创建/tmp/gpfs.node文件,并指定如下信息:

清单 11. 配置GPFS Cluster节点

cat /tmp/gpfs.node
informixva:quorum-manager
iwa1:quorum-manager

gpfs.node文件中有两行内容,每行内容的第一项为所使用机器的主机名,第二项为配置项,包括quorum节点的指定和manager节点的指定。
接下来执行如下命令来创建GPFS集群:

清单 12. 创建GPFS 集群

#mmcrcluster -n /tmp/gpfs.node -p informixva -s iwa1 -r /usr/bin/ssh -R /usr/bin/scp
Tue Nov 8 11:42:04 EST 2011: mmcrcluster: Processing node informixva
Tue Nov 8 11:42:04 EST 2011: mmcrcluster: Processing node iwa1
mmcrcluster: Command successfully completed
mmcrcluster: Warning: Not all nodes have proper GPFS license designations.
Use the mmchlicense command to designate licenses as needed.
mmcrcluster: Propagating the cluster configuration data to all
affected nodes. This is an asynchronous process.
root@informixva[demo_on]:/usr/lpp/mmfs/src#

mmcrcluster命令的各选项意义:-N指定gpfs.node文件,-C指定集群名称,-p指定主NSD服务器,-s指定备NSD服务器,-r指定两台机器之间的连接方式,-R指定两台机器之间文件传输的方式。

我们可以使用mmlscluster命令查看所建cluster的相关信息:

清单 13. 查看GPFS 集群

./mmlscluster

GPFS cluster information
========================
GPFS cluster name: informixva
GPFS cluster id: 13882543094768425948
GPFS UID domain: informixva
Remote shell command: /usr/bin/ssh
Remote file copy command: /usr/bin/scp
GPFS cluster configuration servers:
-----------------------------------
Primary server: informixva
Secondary server: iwa1
Node Daemon node name IP address Admin node name Designation
------------------------------------------------------------------------
1 informixva 192.168.179.100 informixva quorum-manager
2 iwa1 192.168.179.102 iwa1 quorum-manager
root@informixva[demo_on]:/var/mmfs/gen#

由于之前没有接受license,所以我们需要执行如下命令来接受license:

清单 14. 接受GPFS license

root@informixva[demo_on]:/usr/lpp/mmfs# mmchlicense server --accept -N  informixva
The following nodes will be designated as possessing GPFS server licenses:
informixva
mmchlicense: Command successfully completed
mmchlicense: Warning: Not all nodes have proper GPFS license designations.
Use the mmchlicense command to designate licenses as needed.
mmchlicense: Propagating the cluster configuration data to all
affected nodes. This is an asynchronous process.
root@informixva[demo_on]:/usr/lpp/mmfs#mmchlicense server --accept -N iwa1
The following nodes will be designated as possessing GPFS server licenses:
iwa1
mmchlicense: Command successfully completed
mmchlicense: Propagating the cluster configuration data to all
affected nodes. This is an asynchronous process.

2.4 启动GPFS 集群

我们可以执行如下命令启动GPFS集群:

清单 15. 启动GPFS集群

./ mmstartup -a

同时,我们可以通过执行如下命令观察GPFS集群情况:

清单 16. 查看GPFS集群情况

root@informixva[demo_on]:/data# mmgetstate -Lsa

Node number Node name Quorum Nodes up Total nodes GPFS state Remarks
-------------------------------------------------------------------------------
1 informixva 2 2 2 active quorum node
2 iwa1 2 2 2 active quorum node

Summary information
---------------------
Number of nodes defined in the cluster: 2
Number of local nodes active in the cluster: 2
Number of remote nodes joined in this cluster: 0
Number of quorum nodes defined in the cluster: 2
Number of quorum nodes active in the cluster: 2
Quorum = 2, Quorum achieved
root@informixva[demo_on]:/var/mmfs/gen#

我们也可以通过检查/var/adm/ras/mmfs.log.latest日志文件查看GPFS集群执行状态信息:

清单 17. 查看日志信息

root@informixva[demo_on]:/data# cat /var/adm/ras/mmfs.log.latest
Tue Nov 8 12:03:32 EST 2011: runmmfs starting
Removing old /var/adm/ras/mmfs.log.* files:
/bin/mv: cannot stat `/var/adm/ras/mmfs.log.previous': No such file or directory
Unloading modules from /lib/modules/2.6.27.39-0.3-default/extra
Loading modules from /lib/modules/2.6.27.39-0.3-default/extra
Module Size Used by
mmfs26 1499720 0
mmfslinux 300776 1 mmfs26
tracedev 32560 2 mmfs26,mmfslinux
Tue Nov 8 12:03:36.839 2011: mmfsd initializing.
{Version: 3.3.0.3 Built: Dec 3 2009 14:45:03} ...
Tue Nov 8 12:03:40.082 2011: Connecting to 192.168.179.101 iwa1
Tue Nov 8 12:03:41.017 2011: Accepted and connected to 192.168.179.101 iwa1
Tue Nov 8 12:03:45.602 2011: This node (192.168.179.100 (informixva))
is now Cluster Manager for informixva.
Tue Nov 8 12:03:45.792 2011: mmfsd ready
Tue Nov 8 12:03:45 EST 2011: mmcommon mmfsup invoked. Parameters:
192.168.179.100 192.168.179.100 all
root@informixva[demo_on]:/data#

2.5 使用mmcrnsd命令创建nsd盘

我们现在有两台机器,每台机器上都已经安装了GPFS软件,但由于两台机器都只有系统盘,而GPFS需要独立分区来支持文件系统,所以我们接下来要在这两台机器上使用dd命令来建立虚拟的磁盘(用文件模拟磁盘):

清单 18. 使用dd命令来建立虚拟磁盘

在informixva机器上创建/data/disk1
dd if=/dev/zero of=/data/disk1 bs=1M count=1000 # 1G
在iwa1机器上创建/data/disk2
dd if=/dev/zero of=/data/disk2 bs=1M count=1000 # 1G

接下来,我们在informixva机器上创建/tmp/disk1.node文件,包含如下信息:

清单 19. /tmp/disk1.node文件

/data/disk1:informixva::dataAndMetadata:1:nsd1:

并执行如下命令,创建NSD1:

清单 20. 创建NSD1

mmcrnsd -F /tmp/disk1.node -v no
mmcrnsd: Processing disk /data/disk1
mmcrnsd: Propagating the cluster configuration data to all
affected nodes. This is an asynchronous process.
root@informixva[demo_on]:/data#

同样,我们在iwa1机器上创建/tmp/disk2.node文件,包含如下信息:

清单 21. /tmp/disk2.node文件

/data/disk2:iwa1::dataAndMetadata:1:nsd2:

并执行如下命令,创建NSD2:

清单 22. 创建NSD2

mmcrnsd -F /tmp/disk2.node -v no
mmcrnsd: Processing disk /data/disk2
mmcrnsd: Propagating the cluster configuration data to all
affected nodes. This is an asynchronous process.
root@informixva[demo_on]:/data#

我们可以通过执行如下命令查看NSD相关信息:

清单 23. 查看NSD信息

root@informixva[demo_on]:/data# mmlsnsd -m

Disk name NSD volume ID Device Node name Remarks
----------------------------------------------------------------------------------
nsd1 C0A8B3644EB95F78 /data/disk1 informixva server node
nsd2 C0A8B3644EB95FBF /data/disk2 iwa1 server node

2.6 使用mmcrfs命令建立GPFS文件系统

首先,我们在informixva机器上创建挂载点:mkdir /gpfs1,并创建/tmp/nsdfile文件,包含我们刚才创建的NSD磁盘信息:

清单 24. /tmp/nsdfile文件

cat /tmp/nsdfile
nsd1
nds2

接下来,我们可以执行如下命令来创建GPFS文件系统:

清单 25. 创建GPFS文件系统

# mmcrfs /gpfs1 /dev/gpfs1 -F /tmp/nsdfile -A yes -B 512k -m 1 -M 2 -r 1 -R 2

The following disks of gpfs will be formatted on node informixva:
nsd1: size 1024000 KB
nsd2: size 1024000 KB
Formatting file system ...
Disks up to size 29 GB can be added to storage pool 'system'.
Creating Inode File
Creating Allocation Maps
Clearing Inode Allocation Map
Clearing Block Allocation Map
Formatting Allocation Map for storage pool 'system'
Completed creation of file system /dev/gpfs.
mmcrfs: Propagating the cluster configuration data to all
affected nodes. This is an asynchronous process.

其中,mmcrfs 命令的参数含义如下:

1./gpfs1:文件系统 mount 点名称

2./dev/gpfs1: 指定文件系统 lv 名称

3.-F 指定 NSD 的文件名

4.-A 自动 mount 选项为 yes

5.-B 块大小为512K

此时,可以在informixva机器上使用cat /etc/fstab命令查看当前操作系统内的文件设备:

清单 26. informixva机器上/etc/fstab文件


cat /etc/fstab
/dev/sda1 swap swap defaults 0 0
/dev/sda2 / ext3 acl,user_xattr 1 0
/dev/sdb1 /data ext3 acl,user_xattr 1 0
proc /proc proc defaults 0 0
sysfs /sys sysfs noauto 0 0
debugfs /sys/kernel/debug debugfs noauto 0 0
usbfs /proc/bus/usb usbfs noauto 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
# Beginning of the block added by the VMware software
.host:/ /mnt/hgfs vmhgfs defaults,ttl=5 0 0
# End of the block added by the VMware software
/dev/gpfs1 /gpfs1 gpfs rw,mtime,atime,dev=gpfs1,autostart 0 0

同样,可以在iwa1机器上使用cat /etc/fstab命令查看当前操作系统内的文件设备:

清单 27. iwa1机器上/etc/fstab文件

cat /etc/fstab

/dev/sda1 swap swap defaults 0 0
/dev/sda2 / ext3 acl,user_xattr 1 0
/dev/sdb1 /data ext3 acl,user_xattr 1 0
proc /proc proc defaults 0 0
sysfs /sys sysfs noauto 0 0
debugfs /sys/kernel/debug debugfs noauto 0 0
usbfs /proc/bus/usb usbfs noauto 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
# Beginning of the block added by the VMware software
.host:/ /mnt/hgfs vmhgfs defaults,ttl=5 0 0
# End of the block added by the VMware software
/dev/gpfs1 /gpfs1 gpfs rw,mtime,atime,dev=gpfs1,autostart 0 0

2.7 挂载文件系统

在informixva机器上,通过如下命令挂载gpfs1文件系统:

清单 28. 在informixva机器上挂载gpfs1文件系统

mount /gpfs1

我们可以在informixva或iwa1机器上执行如下命令查看GPFS集群的状态信息:

清单 29. 查看GPFS集群的状态信息

root@informixva[demo_on]:/# mmlsconfig
Configuration data for cluster informixva:
------------------------------------------
clusterName informixva
clusterId 13882543094768425948
autoload no
minReleaseLevel 3.3.0.2
dmapiFileHandleSize 32
adminMode central

File systems in cluster informixva:
----------------------------------
/dev/gpfs1

3. 配置Informix数据仓库加速器IWA实例

首先,我们需要合理配置Informix 到数据仓库加速器的网卡设置。正如上边所介绍的,本次示例中的informixva及iwa1两台机器的网络设置基本相同,都配置了eth0及eth1网络设备,其中,eth0作为DRDA_INTERFACE参数值负责Informix同IWA之间的通信,eth1作为CLUSTER_INTERFACE参数负责IWA集群节点间的通信。

接下来,我们需要在共享集群文件系统上为IWA创建存储目录。加速器存储目录主要用来存储加速器元数据信息、数据集市内存数据的磁盘镜像、日志信息以及跟踪信息等。由于数据集市数据的磁盘镜像要保存在该目录中,而且数据量会不断增加,因此,该目录要有足够的空间,也不建议将该目录创建在IWA安装目录下。同时,集群中的各个节点都需要能够以相同的目录名称来访问该目录。

我们可以使用dwainst.conf配置文件中的DWADIR配置参数来指定存储路径的位置。如下边所示,在本次示例中,我们在/gpfs1/demo目录下创建了加速器存储目录。

清单 30. 在/gpfs1/demo目录下创建加速器存储目录

root@informixva[demo_on]:/gpfs1# mkdir demo
root@informixva[demo_on]:/gpfs1# cd demo

在创建完加速器存储目录后,我们要配置dwainst.conf 加速器配置文件及cluster.conf集群配置文件。dwainst.conf 加速器配置文件用于对IWA进行设置,cluster.conf集群配置文件用于配置集群节点信息。我们要在运行ondwa setup命令之前对这两个文件进行设置。

dwainst.conf加速器配置文件默认安装在$IWA_INSTALL_DIR/dwa/etc目录下。该文件配置参数和单机环境下IWA基本相同,集群环境下IWA的特殊参数如下:

表 1. dwainst.conf 集群配置参数:

如下边所示,在本次示例中,我们对dwainst.conf配置文件进行了如下设置:

清单 31. dwainst.conf配置文件

# DWA storage directory
# Stores the catalog, marts, logs, traces etc.
DWADIR=/gpfs1/demo

# Starting port number
# Grows to START_PORT-1+DEFAULT_NUMBER_ENTITLED_NODES*4 .
START_PORT=21020

# Number of DWA_CM processes
NUM_NODES=2

# Worker shared memory
# SHM (in Megabyte) for all worker nodes.
# Minimum value is 1 percent of physical memory.
WORKER_SHM=520

# Coordinator shared memory
# SHM (in Megabyte) for all coordinator nodes.
# Minimum value is 1 percent of physical memory.
COORDINATOR_SHM=250
# DRDA network interface
# For running the accelerator on a separate computer ask the system
# administrator for the network interface (e.g. eth0) that the Informix
# database server should connect to or run the ifconfig command to find the
# network interface.
DRDA_INTERFACE=eth0
CLUSTER_INTERFACE=eth1
CORES_FOR_LOAD_THREADS_PERCENTAGE=100
CORES_FOR_REORG_THREADS_PERCENTAGE=25
CORES_FOR_SCAN_THREADS_PERCENTAGE=100

同时,我们需要在$IWA_INSTALL_DIR/dwa/etc目录下创建cluster.conf 文件来保存集群节点主机名或IP地址。在cluster.conf 文件中,每一个集群节点占用一行,该文件中的第一个节点会作为IWA协调节点(coordinator node),其他节点会作为IWA工作者节点(worker node)。文件中集群节点的顺序就是ondwa start 或ondwa stop命令启动或停止节点的顺序。在本次示例中,我们对cluster.conf配置文件进行了如下设置:

清单 32. cluster.conf配置文件

informixva
iwa1

接下来,我们要运行“ondwa setup”命令来创建Informix数据仓库加速器IWA实例运行时所需要的文件及子目录。我们可以在集群中的任意一个节点上运行ondwa命令来设置或启动IWA实例。ondwa命令会在cluster.conf 文件所定义的集群节点上运行该命令。

如下边所示,我们以root用户执行“ondwa setup”命令,该命令将读取dwainst.conf及cluster.conf配置文件来对IWA实例进行配置, 并在加速器存储目录下创建如下结构:

1.IWA节点间共享目录(shared)

2.包含节点私有路径的目录(local)

3.对于每一个节点:

1)节点私有目录: local/#node#

2)节点配置文件: #node#.conf

3)– 指向DWA_CM 可执行文件的链接: DWA_CM_#node#

在本次示例中,我们为IWA实例指定了2个节点,因此,IWA分配了1个协调者节点node0和1个工作者节点node1,并在local目录下创建了node0及node1节点私有目录及相应的node0.conf和node1.conf 2个节点配置文件,创建了DWA_CM_node0及DWA_CM_node1指向IWA可执行文件的链接。

清单 33. 执行ondwa setup命令

root@informixva[demo_on]:/gpfs1/demo # ondwa setup
root@informixva[demo_on]:/gpfs1/demo# ls -l
total 64
DWA_CM_node0 -> /opt/IBM/informix/dwa/bin/dwa/DWA_CM
DWA_CM_node1 -> /opt/IBM/informix/dwa/bin/dwa/DWA_CM
drwxr-xr-x 4 informix informix 16384 2011-11-13 11:22 local
-r--r--r-- 1 informix informix 916 2011-11-13 11:22 node0.conf
-r--r--r-- 1 informix informix 916 2011-11-13 11:22 node1.conf
drwxr-xr-x 2 informix informix 16384 2011-11-13 11:22 shared

我们就可以通过执行”ondwa start”命令来启动IWA实例。如下面所示,我们在informixva机器上以root用户运行”ondwa start”来启动IWA实例,该命令将启动IWA所有的节点,并将节点启动信息记录在每个节点的日志文件中,如node0.log, node1.log。当”ondwa start”命令执行成功后,IWA实例就可以使用了。

清单 34. 启动IWA实例

root@informixva[demo_on]:/gpfs1/demo# ondwa start
Starting DWA_CM_node0 on informixva: started
Starting DWA_CM_node1 on iwa1: started

我们可以运行如下命令查看IWA实例运行状况:

清单 35. 查看IWA实例运行状况

root@informixva[demo_on]:/gpfs1/demo# ondwa status
ID | Role | Cat-Status | HB-Status | Hostname | System ID
-----+-------------+-------------+--------------
0 | COORDINATOR | ACTIVE | Healthy | informixva | 1
1 | WORKER | ACTIVE | Healthy | iwa1 | 2

Cluster is in state : Fully Operational
Expected node count : 1 coordinator and 1 worker nodes
root@informixva[demo_on]:/gpfs1/demo#

同时,我们还可以在informixva及iwa1机器上运行如下命令查看IWA进程信息:

清单 36. 查看IWA进程

在informixva机器上:
root@informixva[demo_on]:/gpfs1/demo# ps -ef|grep DWA
informix 19294 1 0 11:23 ? 00:00:00 ./DWA_CM_node0 --no-console
root 19322 1 0 11:23 ? /bin/bash /opt/IBM/informix/dwa/etc/DWA_watchdog -daemon 0
root@informixva[demo_on]:/gpfs1/demo#

在iwa1机器上:
root@iwa1[demo_on]:/opt/IBM/informix/dwa/etc# ps -ef|grep DWA
informix 17787 1 0 11:23 ? 00:00:00 ./DWA_CM_node1 --no-console
root 17815 1 0 11:23 ? /bin/bash /opt/IBM/informix/dwa/etc/DWA_watchdog -daemon 1
root 18049 5389 0 11:25 pts/0 00:00:00 grep DWA
root@iwa1[demo_on]:/opt/IBM/informix/dwa/etc#

通常,在集群环境下的IWA,我们建议在每一个集群节点上运行一个IWA协调节点或工作者节点,同样,我们也可以在一个集群节点上运行多个工作者节点。比如,我们可以指定在informixva机器上运行一个协调者节点及一个工作者节点,在iwa1机器上运行一个工作者节点,这样,我们需要在dwainst.conf配置文件中指定:

清单 37. dwainst.conf文件

# Number of DWA_CM processes
NUM_NODES=3

在cluster.conf配置文件中进行如下设置:

清单 38. cluster.conf文件

informixva
informixva
iwa1

这样,当我们启动IWA实例后,在informixva机器上,将运行一个协调者节点及一个工作者节点,在iwa1机器上将运行一个工作者节点,如下边所示:

清单 39. IWA实例状态信息

root@informixva[demo_on]:/opt/IBM/informix/dwa/etc# ondwa status
ID | Role | Cat-Status | HB-Status | Hostname | System ID
-----+-------------+-------------+--------------+-------
0 | COORDINATOR | ACTIVE | Healthy | informixva | 1
1 | WORKER | ACTIVE | Healthy | informixva | 2
2 | WORKER | ACTIVE | Healthy | iwa1 | 3

Cluster is in state : Fully Operational
Expected node count : 1 coordinator and 2 worker nodes

同时,我们也可以在informixva及iwa1机器上查看IWA进程信息:

清单 40. IWA实例进程信息

在informixva机器上:
root@informixva[demo_on]:/opt/IBM/informix/dwa/etc# ps -ef|grep DWA
informix 27803 1 0 11:04 ? 00:00:00 ./DWA_CM_node0 --no-console
root 27828 1 0 11:04 ? /bin/bash /opt/IBM/informix/dwa/etc/DWA_watchdog -daemon 0
informix 28141 1 0 11:04 ? 00:00:00 ./DWA_CM_node1 --no-console
root 28160 1 0 11:04 ? /bin/bash /opt/IBM/informix/dwa/etc/DWA_watchdog -daemon 1
root 28395 25297 0 11:04 pts/1 00:00:00 grep DWA

在iwa1机器上:
root@iwa1[demo_on]:/opt/IBM/informix/dwa/etc# ps -ef|grep DWA
informix 26905 1 0 11:04 ? 00:00:00 ./DWA_CM_node2 --no-console
root 26929 1 0 11:04 /bin/bash /opt/IBM/in
formix/dwa/etc/DWA_watchdog -daemon 2 root 27100 6819 99 11:04 pts/0 00:00:00 grep DWA

4. 配置Informix到加速器的连接

首先,我们需要运行“ondwa getpin”命令来获取数据仓库加速器的IP地址, 端口号及PIN号码。如下面所示,我们以root用户运行 “ondwa getpin”命令获取到IWA当前的IP地址, 端口号及PIN号码为:192.168.179.100 21022 4028。

清单 41. 获取数据仓库加速器IP地址, 端口号及PIN号码

root@informixva[demo_on]:~/Desktop# ondwa getpin
192.168.179.100 21022 4028
root@informixva[demo_on]:~/Desktop#

接下来,我们需要在Informix数据仓库加速器管理工具IBM Smart Analytics Optimizer Studio 中创建同Informix数据库的连接ds2,并为ds2数据库创建一个新的加速器。如下图所示,我们为ds2数据库创建了IWADEMO加速器:

图 2. 为ds2数据库创建IWADEMO加速器

并输入了如下信息:

Name: IWADEMO
Paring code: 4028
IP-address: 192.168.179.100
Port: 21022

5. 创建数据集市

首先,我们需要设计一个高效的数据集市。在本次示例中,我们设计了IWAMart数据集市,它包括了salecost事实表及shop、goods维表。

设计好数据集市之后,我们需要在Informix数据仓库加速器管理工具IBM Smart Analytics Optimizer Studio 中创建数据集市的定义。数据集市定义信息保存在XML文件中,它描述了数据集市中定义的表、字段以及表和表之间的关系。XML文件只保存数据集市的定义信息,但不包含用户实际数据。 当部署数据集市时,数据集市定义信息被传送给IWA,数据集市成功部署后,IWA会将数据集市定义信息以SQL语句形式返回给Informix数据库并在Informix数据库系统表中创建accelerated query table or AQT,当用户发出查询请求后,Informix优化器会将用户查询语句同AQT进行匹配,满足条件的查询语句会被重路由到IWA中来加快查询速度。

首先,我们要在IBM Smart Analytics Optimizer Studio中创建一个accelerator 工程。如下图所示,在本次示例中,我们创建了IWADEMO工程。

图 3. 创建IWADEMO工程

接下来,我们在IWADEMO工程中使用New Data Mart wizard 创建IWAMart数据集市,如下图所示。

图 4. 创建IWAMart数据集市

并添加salecost事实表及shop、goods维表到IWAMart数据集市,如下图所示,我们选择salecost作为事实表,并自己定义数据集市中事实表以及维表之间的连接。

图 5. 添加事实表及相关维表到IWAMart数据集市

在定义好数据集市后,我们需要对创建的数据集市定义进行完整性验证,我们在IWAMart数据集市上点击右键选择Validate对IWAMart数据集市进行完整性验证。

6. 部署并装载数据集市

当我们生成好XML形式的数据集市定义信息后,我们需要将其部署到IWA中。当部署数据集市时,数据集市定义信息被传送给IWA,数据集市成功部署后,IWA会将数据集市定义信息以SQL语句形式返回给Informix数据库并在Informix数据库系统表中创建accelerated query table or AQT来匹配用户的查询语句。我们可以采用IBM Smart Analytics Optimizer Studio工具或java CLI来部署数据集市。

当数据集市成功部署后,数据集市处于LOAD PENDING状态,并且不可用,直到数据装载完成后,该数据集市才可以使用。

如下图所示,我们在IBM Smart Analytics Optimizer Studio工具中的Data Source Exploer选择IWADEMO加速器实例,在其属性栏中,选择Data Marts,并点击Deploy按钮来部署并装载数据集市:

图 6. 部署及装载数据集市

7. SQL查询语句加速

当数据集市装载成功后,我们就可以利用数据集市来加速数据查询。Informix数据库优化器会根据该统计信息来评估用户查询语句的事实表是否和AQT中的事实表相同,如果不相同,该查询语句就不会重定向到IWA中去运行。接下来,我们需要设置PDQPRIORITY变量,这样,Informix优化器将会考虑star join plan,并且可以正确选择事实表。我们还需要设置use_dwa变量。我们可以通过设置use_dwa变量来告诉Inforix优化器是否使用IWA来加速数据查询。如果我们将use_dwa参数设为0,或者不进行设置,用户的查询语句将不会重定向到IWA来加速。如果将use_dwa变量设置为1,用户的查询语句将被重定向到IWA来加速。

如下边所示,在本次示例中,我们通过set environment use_dwa '1'命令设置该变量,并允许查询语句被重定向到IWA来加速查询。为了能够更好地查看用户查询语句是否被重定向到IWA,在示例中,我们对执行的SQL语句收集其执行计划。这样,我们可以通过查看SQL语句的执行计划来检查SQL语句是否被重定向到IWA来加速查询。

清单 42. query1_iwa.sql查询语句

informix@informixva[demo_on]: cat query1_iwa.sql
set explain file to '/tmp/query1_iwa.out';
set explain on;
set environment use_dwa '1';
set PDQPRIORITY 100;
select a.ShopID,b.Name ShopName,a.DeptID,sum(a.Qty) Qty,sum(a.SaleValue) SaleValue,
sum(a.SaleValue-a.DiscountValue+a.ExDiscValue) RealValue,
sum((a.SaleValue-a.DiscountValue+a.ExDiscValue)/(1+a.saletaxrate/100)) NTRealValue,
sum(a.Qty*a.Cost) CostValue,sum(a.Qty*a.Cost/(1+a.saletaxrate/100)) NTCostValue,
sum(a.DiscountValue) DiscountValue,sum(a.ExDiscValue) ExDiscValue,
sum(a.SaleValue-a.DiscountValue+a.ExDiscValue-a.Qty*a.Cost) MarginValue,
sum((a.SaleValue-a.DiscountValue+a.ExDiscValue-a.Qty*a.Cost)/
(1+a.saletaxrate/100)) NTMarginValue,
case sum(a.SaleValue-a.DiscountValue+a.ExDiscValue) when 0 then 0 else
sum(a.SaleValue-a.DiscountValue+a.ExDiscValue-a.Qty*a.Cost)*100/decode(
sum(a.SaleValue-a.DiscountValue+a.ExDiscValue),0,NULL,
sum(a.SaleValue-a.DiscountValue+a.ExDiscValue)) end MarginRate,
sum(case a.MarginRate when 100 then 0 else (a.Qty*a.Cost/
decode (1-a.MarginRate, 0, NULL, 1-a.MarginRate )/100) end) PlanSaleValue,
sum(case a.MarginRate when 100 then 0 else (a.Qty*a.Cost/decode
(1-a.MarginRate, 0, NULL, 1-a.MarginRate )/100)/
(1+a.saletaxrate/100) end) NTPlanSaleValue
from SaleCost a,Shop b,Goods c
where a.ShopID=b.ID and a.VgNo=c.VgNo and a.SDate
between '2010-01-01' and '2010-12-31' and c.ZYFlag=0
group by ShopID,ShopName,a.DeptID;
set explain off;

通过查看该查询语句的执行计划,如下边所示,我们可以看到,QUERY: DWA executed:(OPTIMIZATION TIMESTAMP: 11-20-2011 10:45:15),也就意味着该查询语句被重定向到IWA来加速查询。

清单 43. query1_iwa.sql执行计划

informix@informixva[demo_on]:/tmp$ cat query1_iwa.out 

QUERY: DWA executed:(OPTIMIZATION TIMESTAMP: 11-20-2011 10:45:15)
------
select a.ShopID,b.Name ShopName,a.DeptID,sum(a.Qty) Qty,sum(a.SaleValue) SaleValue,
sum(a.SaleValue-a.DiscountValue+a.ExDiscValue) RealValue,
sum((a.SaleValue-a.DiscountValue+a.ExDiscValue)/(1+a.saletaxrate/100)) NTRealValue,
sum(a.Qty*a.Cost) CostValue,sum(a.Qty*a.Cost/(1+a.saletaxrate/100)) NTCostValue,
sum(a.DiscountValue) DiscountValue,sum(a.ExDiscValue) ExDiscValue,
sum(a.SaleValue-a.DiscountValue+a.ExDiscValue-a.Qty*a.Cost) MarginValue,
sum((a.SaleValue-a.DiscountValue+a.ExDiscValue-a.Qty*a.Cost)/
(1+a.saletaxrate/100)) NTMarginValue,
case sum(a.SaleValue-a.DiscountValue+a.ExDiscValue) when 0 then 0 else
sum(a.SaleValue-a.DiscountValue+a.ExDiscValue-a.Qty*a.Cost)*100/decode(
sum(a.SaleValue-a.DiscountValue+a.ExDiscValue),0,NULL,
sum(a.SaleValue-a.DiscountValue+a.ExDiscValue)) end MarginRate,
sum(case a.MarginRate when 100 then 0 else (a.Qty*a.Cost/
decode (1-a.MarginRate, 0, NULL, 1-a.MarginRate )/100) end) PlanSaleValue,
sum(case a.MarginRate when 100 then 0 else (a.Qty*a.Cost/decode
(1-a.MarginRate, 0, NULL, 1-a.MarginRate )/100)/
(1+a.saletaxrate/100) end) NTPlanSaleValue
from SaleCost a,Shop b,Goods c
where a.ShopID=b.ID and a.VgNo=c.VgNo and a.SDate
between '2010-01-01' and '2010-12-31' and c.ZYFlag=0
group by ShopID,ShopName,a.DeptID;

Estimated Cost: 94109
Estimated # of Rows Returned: 7304
Maximum Threads: 0

ds2@IWADEMO:dwa.aqt6c910b46-edc4-440c-addc-d2202154dc42: REMOTE PATH
Remote SQL Request:
{QUERY {FROM dwa.aqt6c910b46-edc4-440c-addc-d2202154dc42}
... ...

QUERY: IDS FYI:(OPTIMIZATION TIMESTAMP: 11-20-2011 10:45:15)
------
select a.ShopID,b.Name ShopName,a.DeptID,sum(a.Qty) Qty,sum(a.SaleValue) SaleValue,
sum(a.SaleValue-a.DiscountValue+a.ExDiscValue) RealValue,
sum((a.SaleValue-a.DiscountValue+a.ExDiscValue)/(1+a.saletaxrate/100)) NTRealValue,
sum(a.Qty*a.Cost) CostValue,sum(a.Qty*a.Cost/(1+a.saletaxrate/100)) NTCostValue,
sum(a.DiscountValue) DiscountValue,sum(a.ExDiscValue) ExDiscValue,
sum(a.SaleValue-a.DiscountValue+a.ExDiscValue-a.Qty*a.Cost) MarginValue,
sum((a.SaleValue-a.DiscountValue+a.ExDiscValue-a.Qty*a.Cost)/
(1+a.saletaxrate/100)) NTMarginValue,
case sum(a.SaleValue-a.DiscountValue+a.ExDiscValue) when 0 then 0 else
sum(a.SaleValue-a.DiscountValue+a.ExDiscValue-a.Qty*a.Cost)*100/decode(
sum(a.SaleValue-a.DiscountValue+a.ExDiscValue),0,NULL,
sum(a.SaleValue-a.DiscountValue+a.ExDiscValue)) end MarginRate,
sum(case a.MarginRate when 100 then 0 else (a.Qty*a.Cost/
decode (1-a.MarginRate, 0, NULL, 1-a.MarginRate )/100) end) PlanSaleValue,
sum(case a.MarginRate when 100 then 0 else (a.Qty*a.Cost/decode
(1-a.MarginRate, 0, NULL, 1-a.MarginRate )/100)/
(1+a.saletaxrate/100) end) NTPlanSaleValue
from SaleCost a,Shop b,Goods c
where a.ShopID=b.ID and a.VgNo=c.VgNo and a.SDate
between '2010-01-01' and '2010-12-31' and c.ZYFlag=0
group by ShopID,ShopName,a.DeptID;

Estimated Cost: 94109
Estimated # of Rows Returned: 7304
Maximum Threads: 0
Temporary Files Required For: Group By
1) informix.a: SEQUENTIAL SCAN

... ...

2) informix.c: INDEX PATH

Filters: informix.c.zyflag = 0

(1) Index Name: informix. 154_493
Index Keys: vgno (Parallel, fragments: ALL)
Lower Index Filter: informix.a.vgno = informix.c.vgno
NESTED LOOP JOIN

3) informix.b: INDEX PATH

(1) Index Name: informix. 155_535
Index Keys: id (Parallel, fragments: ALL)
Lower Index Filter: informix.a.shopid = informix.b.id
NESTED LOOP JOIN

总结

通过上述介绍,我们对集群环境下配置、使用IWA的基本方法及步骤有了一个比较深刻的了解。通过使用IWA,特别是集群环境下的IWA,可以极速加快大数据量数据集市的查询请求,为企业业务优化、辅助决策提供更好的帮助。

   
1446 次浏览  评价: 差  订阅 捐助
相关文章 相关文档 相关课程



我们该如何设计数据库
数据库设计经验谈
数据库设计过程
数据库编程总结
数据库性能调优技巧
数据库性能调整
数据库性能优化讲座
数据库系统性能调优系列
高性能数据库设计与优化
高级数据库架构师
数据仓库和数据挖掘技术
Hadoop原理、部署与性能调优
 

MySQL索引背后的数据结构
MySQL性能调优与架构设计
SQL Server数据库备份与恢复
让数据库飞起来 10大DB2优化
oracle的临时表空间写满磁盘
数据库的跨平台设计
更多...   


并发、大容量、高性能数据库
高级数据库架构设计师
Hadoop原理与实践
Oracle 数据仓库
数据仓库和数据挖掘
Oracle数据库开发与管理


GE 区块链技术与实现培训
航天科工某子公司 Nodejs高级应用开发
中盛益华 卓越管理者必须具备的五项能力
某信息技术公司 Python培训
某博彩IT系统厂商 易用性测试与评估
中国邮储银行 测试成熟度模型集成(TMMI)
中物院 产品经理与产品管理
更多...   
 
 
 
 
 
每天2个文档/视频
扫描微信二维码订阅
订阅技术月刊
获得每月300个技术资源
 
 

关于我们 | 联系我们 | 京ICP备10020922号 京公海网安备110108001071号