4.1、 jdk安装(server62、server63、server5)
[root@localhost ~]# chmod u+x jdk-1_5_0_22-linux-i586.bin
[root@localhost ~]# ./ jdk-1_5_0_22-linux-i586.bin #进行解压操作,接受软件许可条款

[root@localhost ~]# mv jdk1.5.0-22 jdk1.5 #修改解压的文件名称
[root@localhost ~]# mv jdk1.5 /usr/local/ #移到/usr/local目录下
[root@localhost ~]# vim /etc/profile #使用vim修改环境变量
在/etc/profile最后加入以下内容

[root@localhost ~]# source /etc/profile #使环境变量在当前进程下成效
[root@localhost ~]# mv jdk1.5 /usr/local/ #移到/usr/local目录下
[root@localhost ~]# java –version #查看jdk版本信息

这样就完成了jdk的安装。
4.2、jboss安装(server62、server63、server5)
[root@localhost ~]# unzip jboss-3.2.7.zip #解压文件
[root@localhost ~]# mv jboss-3.2.7 /usr/local/
[root@localhost ~]# vim /etc/profile #使用vim修改环境变量

[root@localhost ~]# source /etc/profile #使环境变量在当前进程下成效
启动jboss,查看是否已经安装成功
[root@localhost ~]# cd /usr/local/jboss-3.7.2/bin
[root@localhost ~]# ./run.sh #启动jboss
jboss运行所需的环境变量信息


上图看到已经成功了jboss,
[root@localhost ~]# netstat –napl | grep “8080” #查看jboss是否已经启动

在浏览器中访问

关闭jboss
[root@localhost ~]# ./shutdown –S #关闭jboss
[root@localhost ~]# ./shutdown #查看shutdown.sh 脚本的使用方法

至此jboss已经安装完成。
4.3、apache安装(server61)
在CentOS6.4的安装镜像中已经含有apache的rpm安装文件了,
为了解决rpm之间的依赖关系,我使用yum的安装凡是,
同时这里介绍怎样配置yum的本地源以及使用yum安装软件。
4.3.1 首先配置本地源
首先将我们的安装镜像放入光驱中,然后将该镜像文件挂载到/media/cdrom目录下
[root@localhost ~]# mount –l #查看当期已经挂载的文件系统

#挂载iso9660文件系统到/media/cdrom目录下
[root@localhost ~]# mount /dev/cdrom /media/cdrom

上图提示已经以只读方式挂载成功。

挂载iso9660文件系统后,然后修改我们的yum本地源。

修改本地源的目录
[root@localhost ~]# vim CentOS-Media.repo

4.3.2 安装httpd软件和httpd-devel
检验我们是否已经安装了httpd软件
[root@localhost ~]# rpm –qa | grep “httpd”
如果为空就说明我们目前还没后安装httpd软件,如果出现以下

就说明我们已经安装了
然后我们使用yum方式安装apache
[root@localhost ~]# yum install httpd #安装httpd软件,安装到默认目录
[root@localhost ~]# yum install httpd-devel #安装apxs
使用yum安装软件非常简单,这里就不多说了。apxs是apache的一个辅助工具软件
,它通常用来为apache安装扩展模块,甚至可以直接将.c的源程序自动编译成.so程序,
并能自动配置httpd.conf文件,将新安装的扩展添加到配置文件中启用。
CentOS下安装httpd的时候,默认是没有这个工具的。要安装apxs其实也简单,
只需要安装httpd-devel就可以了:yum install httpd-devel,
httpd-devel安装完成之后,apxs工具默认会安装在目录:/usr/sbin/ 里面。
查看httpd-devel安装的软件相关路径:rpm -ql httpd-devel。apxs会在安装jk时使用到了。
启动和关闭httpd

查看是否已经启动了httpd

Apache默认的页面是放在/var/www/html目录下的,这样我们自己编译一个简单的页面测试是否已经安装成功吧。

然后进行访问该页面

apache已经安装成功。
4.4、jk安装(server61)及集群配置
4.4.1安装编译器
在对源码进行编译时需要使用到gcc编译器,如果没有安装
,就要进行安装,不然在./cofigre检测安装环境时就会提示找不到gcc编译器。
使用yum安装方式,这时你就的连接到Internet上。安装gcc,g++,make。
[root@localhost ~]# yum install gcc gcc-c++ kernel-devel
4.4.2安装jk
#解压tomcat-connectors-1.2.37-src.tar.gz文件
[root@localhost ~]# tar –zxvf tomcat-connectors-1.2.37-src.tar.gz
[root@localhost ~]# mv tomcat-connectors-1.2.37-src tomcat-con
#执行编译操作
[root@localhost ~]# cd tomcat-con/native
[root@localhost native]# ./configure --with-apxs=/usr/sbin/apxs
[root@localhost native]# make
#将编译生成的动态链接库文件mod.jk.so移到httpd的使用的动态链接库目录下
[root@localhost native]# cp apache-2.0/mod.jk.so /etc/httpd/modules
4.4.3配置jk
httpd的默认配置文件存放目录是/etc/httpd/conf,
我们在这个目录下新建mod_jk.conf、workers.properties、uriworkermap.properties三个文件
修改httpd.conf,在该文件最后一行中加入“Include conf/mod_jk.conf”即可。

mod_jk.conf文件

workers.properties文件

uriworkermap.properties文件(功能:请求处理分配)

此时在/etc/httpd/conf内的文件如下:

4.4.4配置jboss(server62和server63)
(1)增加这个属性jmvRoute="node1"
/usr/local/jboss-3.2.7/server/default/deploy/jbossweb-tomcat55.sar/server.xml修改为:
<Engine name="jboss.web" defaultHost="localhost" jvmRoute="node1">
请注意,jmvRoute的值必须和mod_jk中的节点名字正确对应,否则无法正确路由。
不配置这个属性,粘性session不会起作用,因为负载均衡器会按照这个名称记录当前的 session是属于那个节点的。
(2)AJP连接配置
<Connector port="8009" address="${jboss.bind.address}"
emptySessionPath="true" enableLookups="false" redirectPort="8443"
protocol="AJP/1.3"/>
这个一般就有的,只要看一下端口号就行了,这个端口号对于workers.properties 中的配置:worker.node1.port=8009,
然后将修改address为address=”0.0.0.0”。
(3)打开JK 开关
/usr/local/jboss-3.2.7/server/default/deploy/jbossweb-tomcat55.sar/jboss-service.xml
<attribute name="UseJK">true</attribute>
(4)server62下server.xml配置如下:

Serve63下server.xml配置如下:

4.4.5 SELinux影响
还记得在4.2.2安装jk吗,当时我们最后一个是将编译mod.jk.so移动到/etc/httpd/modules目录下了。
接下来让我们看看/etc/httpd/modules目录下的文件的安全上下文。至于什么是安全上下文呢??
哈哈,如果不懂SELine的话,那就先学习一下吧,我可以花了近两个星期学习的啊。
#使用ls –Z查看/etc/httpd/modules下的安装上下文,
[root@localhost native]# ls –Z /etc/httpd/modules


我们会发现原来就在/etc/httpd/modules目录下的文件的安全上下文都是:
system_u:object_r:httpd_modules_t:s0
而mod.jk.so的安全上下文是:
unconfined_u:object_r:admin_home_t:s0
可以看出两个文件的身份标示和类型是不同的。其中类型是最重要的,因为admin_home_t是不能被httpd进程访问的,
所以在selinux进行安全上下文检查时,就会决绝httpd进程访问mod.jk.so动态链接库,如果我们启动http,
就会出现拒绝访问的错误,如下图:

没错吧,怎样解决呢?很简单,有两种方法,
一种是关闭SELinux,不进行SELinux的安全策越检测;
二种是修改mod.jk.so文件的安全上下文中类型为httpd_modules_t。
方法一:
最简单的是在系统加载内核时,禁用SELinux。直接在命令行加入参数selinux=0即可,这样在启动Linux内核时,就会关闭SELinux。
直接在grub的配置文件grub.conf中加入selinux=0,如下图:

上图就是server61中grub的配置文件,可以看出在加载内核时,有很多的参数,如:
ro : 以只读的当时挂载/文件系统
KEYTABLE:键盘布局
LANG=zh_CN.UTF-8:指定环境变量LANG的值
selinux=0:禁用selinux
等等,至于为什么要加到这里?那你就的知道Linux的启动过程,不然理解这里就有点困难了,
我也打算总结一下自己对Linux启动过程认识。可以参见后面编写Linux启动过程认识一文。
然后从新启动就可以启动httpd了。
方法二:
修改mod.jk.so文件的安全上下文中类型为httpd_modules_t不就可以让httpd进程读取了,这样不很跟简单。
[root@localhost conf]# chcon –t httpd_modules_t:s0 mod.jk.so
[root@localhost conf]# ls –Z mod.jk.so

可以看到mod.jk.so文件的安全上下文中类型已经被修改成了httpd_modules_t了。
4.4.6 测试有server61+server62+server63组成的apache+jboss集群
首先我们查看一下server61下uriworkermap.properties文件,该文件内容如下:

改配置表明,除了”.gif”、”.jpg”、”.png”、”.bmp”、”.swf”的图片和”.html”有apache响应,别的请求全部转发到节点中去处理。
这样的配置我们应该可以访问到server61下的/var/www/html/index.html页面。
在pc50下去访问,截图如下:

是可以访问的,事实证明我们是对的。
然后修改uriworkermap.properties文件,修改为:

改配置表明,除了”.gif”、”.jpg”、”.png”、”.bmp”、”.swf”的图片有apache响应,别的请求全部转发到节点中去处理。
这样的配置我们应该不可以访问到server61下的/var/www/html/index.html页面,这样就会将请求转发到jboss中去处理,
到底转发到server62还是server63,这就不确定了。但是一定会转发到其中一台中,我们实际测试如下:

竟然访问到了jboss的默认页面,但是Jboss的logo图片有没了。
我们直接server62中jboss的默认界面,使用http://192.168.3.62:8080/或http://192.168.3.62:8080/index.html如下:


原因就是在apache下的uriworkermap.properties文件,我们再次看一下这个文件,

这里已经说明了,将”.html”转发给节点去处理,所以当我们使用http://192.168.3.61/index.html去访问index.html页面时,
测试apache就会将这个请求转发给节点server62或server63,
也就是相当于http://192.168.3.63:8080/index.html或http://192.168.3.62:8080/index.html
就会访问server62或server63的首页,也就是我们上面看到的页面,
又因为所有的”.gif”、”.jpg”、”.png”、”.bmp”、”.swf”的图片有apache响应,
我们查看一下jboss的index.html的源码,可以发现jboss的logo图片就是”.gif”格式的,如截图:

在apache的/var/www/html目录下并没有logo.gif文件,所以这张图片被apache回应的客户端的浏览器中,
如果我们在/var/www/html目录下放置一张名为logo.gif的图片,
不就可以显示了吗,我就在/var/www/html下随便放置了一张图片tpc-w的logo,

再次使用http://192.168.3.61/index.html访问,结果如下:

是吧,看来我们搭建的apache+jboss的集群已经成功了啊。^_^^_^
4.4.7 apache+jboss的集群处理客户请求
在这里解释出apache+jboss的集群处理客户请求流程图:

Loader-balancer会根据uriworkermap.properties文件判断该请求是交个node处理,还是有apache处理。最后给出响应。
至此我们的apache+jboss的集群已经配置完成了。
4.5、ant安装(server5)
配置server5,使其连接Internet。
1、运行:
root@ub-virtual-machine:~# sudo apt-get install ant
2、查看成够安装否
root@ub-virtual-machine:~# ant -version #查看ant版本
Apache Ant(TM) version 1.8.2 compiled on August 19 2011
root@ub-virtual-machine:~# ant #使用ant
Buildfile: build.xml does not exist!
Build failed
若出现以上信息信息,则代表成够安装。
4.6、配置mysql(server5)
4.6.1安装mysql
1、添加用户组
#> groupadd mysql
2、添加用户
#>useradd -r -g mysql mysql
3、切换目录
#> cd /usr/local
4、解压(mysql-5.5.22-linux2.6-i686.tar.gz已经复制到/usr/local下)
#> tar zxvf mysql-5.5.22-linux2.6-i686.tar.gz
5、创建软链接
#> ln -s mysql-5.5.22-linux2.6-i686 mysql
6、删除压缩包(可操作)
#> rm mysql-5.5.22-linux2.6-i686.tar.gz
7、进入mysql目录
#> cd mysql
8、改变用户权限和组权限
#> chown -R mysql . #注意这里的”.”,表示当前目录
#> chgrp -R mysql . #注意这里的”.”,表示当前目录
9、初始化数据库
<1> 保证在/etc/目录下面没有my.cnf、mysql文件夹,如果有请删除
<2> 安装libaio1.so 执行sudo apt-get install libaio1 安装了则跳过
#> scripts/mysql_install_db --user=mysql
初始化成功则出现如下提示:
Installing MySQL system tables...
OK
Filling help tables...
OK
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
./bin/mysqladmin -u root password 'root'
./bin/mysqladmin -u root -h VWmare password 'new-password'
Alternatively you can run:
./bin/mysql_secure_installation
which will also give you the option of removing the test
databases and anonymous user created by default. This is
strongly recommended for production servers.
See the manual for more instructions.
You can start the MySQL daemon with:
cd . ; ./bin/mysqld_safe &
You can test the MySQL daemon with mysql-test-run.pl
cd ./mysql-test ; perl mysql-test-run.pl
Please report any problems with the ./bin/mysqlbug script!
10、修改权限
#> chown -R root .
#>chown -R mysql data
11、复制配置文件
#>cp support-files/my-medium.cnf /etc/my.cnf
#> cp support-files/mysql.server /etc/init.d/mysql.server
12、启动数据库
#> bin/mysqld_safe --user=mysql &
13、查看是否有3306端口启动
#> netstat –nat
14、设置密码
#> ./bin/mysqladmin -u root password 'new-password'
或者
#> ./bin/mysql_secure_installation
15、使用mysql
#> cd bin
#> ./mysql -u root –p
16、设置开机自动启动
#> cd /etc/init.d/
sudo update-rc.d mysql.server defaults
17、设置默认编码为UTF8
登录MySQL,执行编码显示:
show variables like 'character%';
QUOTE:
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
sudo vi /etc/mysql/my.cnf
找到[client] 添加:
default-character-set=utf8
找到[mysqld] 添加:
character_set_server = utf8
init_connect='SET NAMES utf8'
修改好后,重新启动mysql 即可.
sudo/etc/init.d/mysql.server restart
若启动异常则把[mysqld]处修改为
default-character-set=utf8
init_connect='SET NAMES utf8'
查询一下show variables like 'character%';
QUOTE:
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
4.6.2设置mysql
允许远程连接mysql和配置mysql的最大连接数
它们都不难,方法很多,如修改允许远程连接就有两种方法(我所知道的),一种修改mysql数据库的user,
另一种是修改权限。而且网上有很多文章,所以这里我就不讲怎样去配置了,
我们最后做到server50中的数据库要允许远程连接,而且允许的最大连接数修改为1000,
默认好像是100。这样才能满足我们的要求。
4.7、部署TPC-W服务端(server5)
现在server5中已经安装了jdk1.5,ant,mysql,jboss3.2.7,
这样满足了编译TPC-W的条件了,接下来就在server5中编译TPC-W服务端。
4.7.1检测当前环境
环境变量如下:

查看jdk,ant

查看当前msyql中的数据库

检查jboss是否已经安装

上图已经有tpcw数据库了,这是应为我已经成功生成了tpc-w服务端所需的数据库了。
接下来我会使用别的数据名称来进行再次生成tpc-w服务端所需的数据库。
我们的jdk、ant、mysql、jboss都已将安装好了,接下来就开始了。
4.7.2 tpcw-nyu-uva内文件作用说明
解压tpcw-nyu-uva.tar.gz
#注意在ubuntu和CentOS下tar的使用时不同的
root@lk-vm:~# tar zxvf tpcw-nyu-uva.tar.gz
#将解压出来的tpcw-nyu-uva移至/usr/local/
root@lk-vm:~# mv tpcw-nyu-uva /usr/local/
/usr/local/tpcw-nyu-uva目录下的文件如下:

下面给文件的功能和文件夹的内容:
(1)文件夹:
docroot: 存放web应用程序的主页(docroot/index.html)和配置文件(docroot/WEB-INF/web.xml和docroot/
WEB-INF/jboss-web.xml)这些文件在编译时,会被包含到tpcw.war的文件中下,具体位置如下:
docroot-+-
- index.html
- WEB-INF-+-
- web.xml
- jboss-web.xml
将docroot换成tpcw.war即可,截图如下:

docs: 在其中放置了两个文件,分别是LICENSE.TXT和README.TXT,这两个文件就是说明许可协议和使用说明。
ImageGen:该目录下放置了三个文件,分别是image_gen.bat、last.exe、USAGE.TXT,
image_gen.bat用于生成图片的一个pe脚本(只能在windows下使用),USAGE.TXT说明怎样使用,
last.exe是在image_gen.bat内部调用生成图片使用的。
META-INF:存放web的配置文件,里面含有三个文件,分别是ejb-jar.xml、jboss.xml、jbosscmp-jdbc.xml,
编译结束后,它们将被包含到tpcwEjb.jar文件中,如图:

src:就是存放web应用程序的源码
wgen:不知道干嘛用的,里面有一些说明性的文件,作用应该也不大。
(2)文件:
build.sh/build.bat-->build.xml : build.sh/build.bat分别是Linux和windows写的pe文件,
它们的功能就是配置环境变量,然后调用ant来进行编译工作。

build.xml就是ant的配置文件,ant就是根据这个文件去进行编译工作的。到build.xml所在目录下,
直接执行ant就可以编译了工作了(当我们执行ant命令时,就会在当前目录下查找build.sh文件,
然后ant根据build.sh文件的内容去进行编译工作,关于ant编译器,我也是很早之前学的,
现在都忘得也差不多了,打开这个build.xml都看不能完全读懂了,记得在配置tpc-w1.0时,
我还将那里的build.xml通读了一遍,而且修改里面的错误,但是现在既然忘得这么快,好可怜啊。)。
populate.sh/populate.bat:这个文件时用来在tpcw数据库创建数据表,然后向数据表中填充数据
。执行populate.sh后,原本没有任何数据的tpcw数据库就会被填写的满满的。
其实populate.sh内是执行java edu.nyu.pdsg.tpcw.populate.Populate。
tpcw-mysql-ds.xml:配置数据库连接参数,如连接url,username,passwd等。
application.xml:配置该web应用程序的模块信息。
4.7.3 编译
(1)修改mysql连接参数
修改/usr/local/tpcw-nyu-uva/src/edu/nyu/pdsg/tpcw/util中得Constants.java中得dbName变量:

修改为:

(2) 运行tpcw-nyu-uva的build.sh
a.首先修改build.sh的权限,使得可以执行;
b. 运行:./build.sh如果出现BUILDSUCCESSFUL则表示编译成功。如果编译不成功,
请检查环境变量:JAVA_HOME,JBOSS_DIST,一般都是环境变量没有导致编译失败。

编程成功后,会在tpcw-nyu-uva目录下生成一个build目录,该目录下还有如下文件:

这样就编译成功了。
4.7.4 填充tpcw数据库
(1)建立tpcw数据库
mysql> create database tpcw ;
(2)修改tpcw-nyu-uva目录下面的populate.sh文件:

(3)执行./populate.sh:
执行结果如下:
root@lk-vm:~/tpcw-nyu-uva#./populate.sh
Beginning TPC-W database population...
Opening database connection...
Opening: done
Deleting tables... #删除数据表,因不能找的响应的数据表,所以出现异常信息了
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown table 'address'
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1051)
##这里省略了异常信息
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown table 'author'
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1051)
##这里省略了异常信息
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown table 'cc_xacts'
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1051)
##这里省略了异常信息
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown table 'country'
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1051)
##这里省略了异常信息
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown table 'customer'
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1051)
##这里省略了异常信息
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown table 'item'
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1051)
##这里省略了异常信息
at edu.nyu.pdsg.tpcw.populate.Populate.main(Populate.java:38)
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown table 'order_line'
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1051)
##这里省略了异常信息
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown table 'orders'
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1051)
##这里省略了异常信息
com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown table 'recent_orders'
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1051)
##这里省略了异常信息
Deleting tables: done
Creating tables...
Created table ADDRESS
Created table AUTHOR
Created table COUNTRY
Created table CUSTOMER
Created table ITEM
Created table ORDER_LINE
Created table ORDERS
Created table CC_XACTS
Created table RECENT_ORDERS
Creating tables: done
Populating COUNTRY TABLE with 92 countries...
COUNTRY table: done
Populating ADDRESS table with 172800 addresses...
Complete (in 1000's): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
ADDRESS table: done
Populating AUTHOR table with 250 authors...
Complete (in 1000's):
AUTHOR table: done
Populating CUSTOMER table with 86400 customers...
Complete (in 1000's): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
CUSTOMER table done
Populating ITEM table with 1000 items...
Complete (in 1000's):
ITEMS table done
Populating ORDERS, ORDER_LINE, CC_XACTS with 77760 orders
Complete (in 1000's): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
ORDERS, ORDER_LINE, CC_XACTS tables done
RECENT_ORDERS table: done
Adding indexes...
Adding indexes: done
Population: done!
Closing database connection: done
|
执行结果也就是主要也就分了三部分,删除数据表,然后在创建数据表,最后填充数据表。
但是由于我们使用的是一个新创建的数据库,里面没有任何数据表,所以在删除数据表时就提示了Unknown table 'address'的异常信息,这是正常的,当我们在执行一次时,就不会出现这样的异常了,因为上面已经创建了数据表,而且填充了数据。
root@lk-vm:~/tpcw-nyu-uva#./populate.sh
Beginning TPC-W database population...
Opening database connection...
Opening: done
Deleting tables... #删除数据表,不会出现异常信息了
Dropped table: address
Dropped table: author
Dropped table: cc_xacts
Dropped table: country
Dropped table: customer
Dropped table: item
Dropped table: order_line
Dropped table: orders
Dropped table: recent_orders
Deleting tables: done
Creating tables... #创建数据表
Created table ADDRESS
Created table AUTHOR
Created table COUNTRY
Created table CUSTOMER
Created table ITEM
Created table ORDER_LINE
Created table ORDERS
Created table CC_XACTS
Created table RECENT_ORDERS
Creating tables: done
Populating COUNTRY TABLE with 92 countries... #填充数据表
COUNTRY table: done
Populating ADDRESS table with 172800 addresses...
Complete (in 1000's): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
ADDRESS table: done
Populating AUTHOR table with 250 authors...
Complete (in 1000's):
AUTHOR table: done
Populating CUSTOMER table with 86400 customers...
Complete (in 1000's): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
CUSTOMER table done
Populating ITEM table with 1000 items...
Complete (in 1000's):
ITEMS table done
Populating ORDERS, ORDER_LINE, CC_XACTS with 77760 orders
Complete (in 1000's): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
ORDERS, ORDER_LINE, CC_XACTS tables done
RECENT_ORDERS table: done
Adding indexes...
Adding indexes: done
Population: done!
Closing database connection: done #操作结束,关闭和数据库的连接
|
4.7.5 生成图片
还记得我在介绍tpcw-nyu-uva/ImageGen的作用吗?就是生成图片使用的,
但是在ImageGen中只提供了image_gen.bat,也就是windows下的pe文件,
所以我们得将ImageGen内的文件都拿到windows下来生成图片,我就拿到了pc50下了,
我们就是用image_gen.bat脚本去生成图片,关于image_gen.bat内的内容,
这里就不介绍了,因为我多windows的bat语法不是很懂,哈哈,
不过我们也没有必要去了解读懂它,我们只需要使用它生成图片就行了。
(1)修改image_gen.bat内的NUM_IMAGES变量的值,就是定义我们要生成图片的数量,修改为1000。
(2)打开命令终端,到ImageGen目录下,执行image_gen.bat即可在ImageGen目录下生成不同种类的图片各1000张。
(3) ImageGen目录下建立文件夹:ImageGen/tpcw/images/items/,
然后将刚才生成的图片移至ImageGen/tpcw/images/items/目录下,
再找到tpc的logo等图片(这些图片我再tpcw1.8之下并没有找到这些图片,
但是我再1.0下就有这些图片)放到ImageGen/tpcw/images目录下,最后目录如下:

这样就OK了
4.7.6 发布
(1)在jboss下发布
a.修改server50中tpcw-nyu-uva中的tpcw-mysql-ds.xml中的连接参数配置
修改如下:

b.在jboss下发布需要三个文件,分别是:tpcw-nyu-uva/tpcw-mysql-ds.xml、
tpcw-nyu-uva/tpcw.ear、mysql-connector-java-5.1.25-bin.jar。将这三个文件分别移到server62和server63的下,即:
server50 |
server62/server63 |
tpcw-nyu-uva/tpcw-mysql-ds.xml |
/usr/local/jboss-3.2.7/server/default/deploy/ |
tpcw-nyu-uva/tpcw.ear |
/usr/local/jboss-3.2.7/server/default/deploy/ |
mysql-connector-java-5.1.25-bin.jar |
/usr/local/jboss-3.2.7/server/default/lib/ |
这样就在jboss下发布就完成了,但是这样访问是没有图片的,我们直接访问server61 、server62、server63:
访问server61使用http://192.168.3.61/tpcw/home

访问server63使用http://192.168.3.63:8080/tpcw/home

(2)在apache下部署所需的图片
也就是讲我们在pc50生成的图片移至server61中,即:
pc50 |
server61 |
ImageGen/tpcw |
/var/www/html/ |
在server61就是这样:

这样就完成了全部的发布任务。
4.7.7 测试及请求处理
接下来就测试是否我们已经发布成功
在pc50中访问server61,使用http://192.168.3.61/tpcw/home

看到图片了吧,就这样我就完成了tpc-w的编译和发布工作了。
整个处理过程如下:

说明:这些都是自己总结的,如果有误请一定告诉我,那就太感谢,^_^
至此,tpc-w服务端我们已经安装部署完成了。
4.8、部署TPC-W客户端(server5)
比起部署tpc-w服务端,部署tpc-w客户端就简单多了。
4.8.1 介绍tpc-uva-client目录下各个文件作用
root@lk-vm:~# tar zxvf tpc-uva-client.tar.gz #解压tpc-uva-client.tar.gz文件
在tpc-uva-client目录下有以下文件

reb目录:该目录放置的就是tpc-w的客户端源码。
dist目录:该目录下只有一个文件tpcw_reb.jar,就有reb中的源码编译成的jar文件,你可以打开这个jar看一下就知道了。
matlab目录:matlab我们应该知道这个功能超级强大的IDE吧,matlab目录下方的就是我们将来要在matlab下有测试数据转化为图形所需要的m文件(都是函数文件)。
build.xml文件:ant的配置文件,用于编辑tpc-w客户端
COPYIGHT文件:就是许可说明文件。
README文件:使用说明文件(在Linux系统下,一般README文件都是软件或工具的使用说明文件,
我们通过阅读它就可以很好的使用相应的软件和工具,这个很重要的啊。)
4.8.2 编译和测试
解压后,就可以进行编译了。
root@lk-vm:~/tpcw-uva-client# ant #编译客户端
但是出现错误,错误如下:

上面错误显示在EBWAdminCofTrans.java 81行的reb.stats.error(“Unable to find I_D in admin confirm page”,”???”);
有问题,问题是:
error(String,String,String)不能被应用到error(String,String),说白了,就是参数个数不匹配。
查看EBWAdminCofTrans.java文件的81行是:

这句代码就是调用EBStats.java文件的error方法,但是在EBStats.java文件的error方法是这样的:

EBStats.java文件的error方法只有三个参数,而EBWAdminCofTrans.java
81行调用时给了两个参数,这就导致我们在编译时出现上面我们释出的问题,
为什么出现这样的问题?毕竟这是从官网下载的源码啊,怎么出现问题呢?
这一点我也很郁闷,不知道为什么?
我就在EBStats.java文件对error方法进行了重载,
自己添加了一个error方法,参数修改为两个,如下:

然后在进行编译操作

这些编译成功了。
编译成功后,就会在tpcw-uva-client生成一个build目录,在该目录下就是对.java文件编译生成的.class文件。
然后进入到build目录,就可以进行测试了。

至于上面的-EB,-OUT等参数的含义,在<<基于TPC-W1.8的测试分析>>一文中在做介绍。
4.8.3修改后的tpc-w客户端
上面的编译和测试我们看到其实就是将”.java”文件编译为”.class”文件,
而且上面在测试时有的每次手动的输入测试参数,很麻烦,因为tpc-w客户端是开源的,
在reb目录下就是源码,所以本人就对这个客户端进行了修改,添加了一个图形界面,
在图形界面中设置测试参数,同时动态的显示测试的各个阶段,
我自己给他分为了”未进行测试-->初始化时期-->RU时期-->MI时期-->RD时期-->记录测试数据-->测试完全结束”。
截图如下:

至此,我们的软件安装就全部结束了。^_^