• 沒有找到結果。

第三章 系統建構

3.1 軟體環境

主機 軟體版本 作業系統

WebServer主機 Tomcat4.1.29 + MailServer FreeBSD 4.9Stable Database主機 Sybase ASE SQL-Server Debian Linux 30r1

表六

3.2 硬體環境

採用分散式架構,因為 FreeBSD 的 Thread 是 Process 的 Thread,

我們並不考慮把 Database 裝在 FreeBSD,而是裝在 Linux。Linux 的 User Thread 能幫我們減輕很多 Database Server 的 throughput

主機 主機配件

WebServer 主機 中央處理器:Pentium II 200MHz 記憶體:256 Mb SDRAM

乙太網路卡:D-Link TX530 程式:JDK1.4.1 + lex

Database 主機 中央處理器:Pentium I 133MHz 記憶體:128 Mb SDRAM

乙太網路卡:D-Link TX530 表七

軟體與環境

3.3 FreeBSD系統最佳化

3.3.1 安裝cvsup

# cd /usr/ports/net/cvsup

# make install clean

3.3.2 使用cvsup 得到最新的source tree和ports tree a) source tree

把default host改成cvsup2.tw.FreeBSD.org (此為離我們較近的 Server)

# vi /usr/share/examples/cvsup/stable-supfile 取得最新的原始碼(STABLE version)

# cvsup /usr/share/examples/cvsup/stable-supfile

(or Edit /etc/make.conf, then, cd /usr/src; make update)

b) ports tree

vi /usr/share/examples/cvsup/ports-supfile

把default host改成cvsup2.tw.FreeBSD.org (此為離我們較近的 Server)

cvsup -g -L 2 /usr/share/examples/cvsup/ports-supfile

更新完ports-tree的畫面如下:

圖五

3.3.3 開始更新系統

編譯所有的系統程式

# make buildworld 編譯並安裝新的核心

# make buildkernel KERNCONF=MySetup;make installkernel KERNCONF=MySetup

安裝新的系統程式

# make installworld 更新系統設定檔

# mergemaster

flush disk cache AND reboot

# sync ; sync ; sync ; reboot 重開後看系統版本

# uname -a

圖六

嗯,已經是現行FreeBSD的最新stable分支版本了!

3.3.4 系統中文化

如果要在Console下(機器面前)使用中文的環境,必須安裝big5con 軟體才可。我們使用ports安裝

# cd /usr/ports/Chinese/big5con

# make install clean

安裝完再rehash完後,就可以使用b5c來使用像DOS那樣的中文璄境

圖七

因為作業方便,有時我們會用到xwindow,jdk的環境也須要用到 xwindow。我們可以用pkg_tree來看jdk所須要的package。

圖八

所以我們開始進行x-window的中文化

Step1. 先用/stand/sysinstall裝好x-windows Step2. 安裝中文化字型

如果要在x window中看到中文的選單,必須先裝中文字型kcfont

(國喬字型)及arphicttf(文鼎字型),及中文訊息檔(i18n)

# cd /usr/ports/chinese/kcfonts

# make install clean

# cd /usr/ports/Chinese/arphicttf

# make install clean

# cd /usr/ports/Chinese/kde3-i18n-zh_TW

# make install clean

Step3. 產生設定檔

# XFree86 -configure

# mv ~/XF86Config.new /etc/X11/XF86config

接著編輯/etc/X11/XF86config,很多人在這個檔上都會遇到挫折

,我們的設定檔請見<附錄E>

我們的中文化KDE

圖九

3.4 Sybase資料庫最佳化

3.4.1 Mail Table

因為Table的Size太大,請見<附錄F>

3.4.2 ER Model

圖十

3.4.3 建Database的SQL Script

use master go

/* ISEC Database master device */

create database ISEC on default = 100 go

sp_addlogin 'isecuser','??????','ISEC' go

use ISEC go

sp_changedbowner isecuser go

print '1.M_MAIN_IN' /* SETUSER 'dbo' */

go

create table dbo.M_MAIN_IN ( FROM_ID varchar(16) not null, FROM_NAME varchar(20) not null, TO_LIST TEXT not null, CC_LIST TEXT not null, BCC_LIST TEXT not null, SUBJECT varchar(255) not null, DATE varchar(50) not null, MESSAGE_ID varchar(20) not null,

BODY TEXT not null,

ATTACH TEXT null,

SIZE int not null,

MISSION_ID varchar(3) not null )

go

print '2.M_RECEIVER' /* SETUSER 'dbo' */

go

create table dbo.M_RECEIVER ( MESSAGE_ID varchar(20) not null,

OWNER_ID varchar(10) not null, OWNER_NAME varchar(10) not null, SEVER_ID varchar(20) not null,

COPY bit not null,

create table dbo.M_MAIN_OUT ( FROM_MAIL varchar(40) not null, TO_LIST TEXT not null, CC_LIST TEXT not null, BCC_LIST TEXT not null, SUBJECT varchar(255) not null, DATE varchar(50) not null, MESSAGE_ID varchar(50) not null,

BODY TEXT not null,

create table dbo.M_SERVER(

SEVER_ID varchar(3) not null, SEVER_DNS varchar(20) not null, SEVER_NAME varchar(20) not null, SERVICE_ID varchar(2) not null )

go

第四章 系統實做

(Java + jconnector)

工作時間表

月份 工作

1 月 ~ 2 月 資料收集

2 月 ~ 3 月 資料收集、系統分析

3 月 ~ 4 月 分析發展工具

4 月 ~ 5 月 軟體的架設

5 月 ~ 6 月 Email parser、Sybase資料庫處理 6 月 ~ 7 月 Email parser、Sybase資料庫處理 7 月 ~ 8 月 Email parser、Sybase資料庫處理 8 月 ~ 9 月 Email parser、Sybase資料庫處理 9 月 ~ 10 月 C shell、Webmail的撰寫 10 月 ~ 11 月 系統整合、測試

11 月 ~1 2 月 書面報告

表九

4.2 系統測試與流程圖

SERVER_ID= 001 SERVER_NAME= sars

SERVER_DNS= sars.mclab.iecs.fcu.edu.tw // 不合法或有問題的 mail 放置的目錄

dp_scan_ratio= 6

// DP 送往各程式的資料夾, 也就是各程式要來收信的資料夾

db_scan_ratio= 6

// jConnector 和 cParser 做同步用的目錄路徑 db2sg_mail_dir= /usr/local/sgdg/db/db_to_file sg2db_mail_dir= /usr/local/sgdg/db/file_to_db db2sg_tmp_dir= /usr/local/sgdg/db/db_to_file/temp sg2db_tmp_dir= /usr/local/sgdg/db/file_to_db/temp // Java 的 DB Driver 所要用的各參數

db.addr= 140.134.25.98 db.port= 5000

db.dbName= ISEC db.username= isecuser db.password= ??????

// cParser 和 jConnector 中間的中間檔的所有 Header, 格式 db.TableName

db.M_MAIN_IN= FROM_ID, FROM_NAME, TO_LIST, CC_LIST, BCC_LIST, SUBJECT, DATE, MESSAGE_ID, SIZE, MISSION_ID, OWNER_ID, OWNER_NAME, SEVER_ID, COPY, TRASHCAN, PERUSE

db.M_MAIN_OUT= FROM_MAIL, TO_LIST, CC_LIST, BCC_LIST, SUBJECT, DATE, MESSAGE_ID, BODY, ATTACH, COPY, TRASHCAN, PERUSE

// db->jConnector->cParser->出了 cParser 後的 Mail 的 Header

db.MIME_Header= From, To, Cc, Bcc, Subject, Date, Message-ID, Copy, Trashcan, Peruse, Mission-ID

4.2.2 總體流程圖

圖十一

4.2.3 Cparser 流程圖

圖十二

4.2.4 DP(派送) 流程圖

圖十三

4.2.5 jConnect 流程圖

圖十四

4.3 WebMail 之 JavaMail SMTP 協定寄信

用 text 格式寄信畫面

圖十五

收到信件的畫面

圖十六

用 html 格式寄信畫面

圖十七

收到信件的畫面

圖十八

4.4 cParser 與 jConnect 實作

用所架的 Mail Server 收信至資料庫

Step1. 在把 Mail Server 的 Unix 格式信件 parser 成一封一封的 MIME 格式信件後,的情形

圖十九 Step2. 看看 cparser 的 parser 情形 偵測到有新進的 mail

圖二十

開始進行 parser

圖二十一

Dispatcher 派送,因該信含有要寄給此 Web Server 的使用者和非此 Server 的使用者,所以派送也確實有往二邊送

圖二十二

看看 DB 和 MS 的資料夾收到派送 relay 的 mail

圖二十三

圖二十四

回到原來新進郵件的地方看,郵件 parser 完已被 DP 轉送到到準備讓 jConnector 進行存入資料的資料夾

圖二十五

看一下,果然資料來到了 jConnector 的地方了,而且還把 BODY 和 ATTACH 的部份獨立出來了呢!

圖二十六

Step3. 再回去看另外的 jConnector 的工作情形 jConnector 也偵測 到了新郵件喔!也成功地把郵件存入了 Sybase Database 囉

圖二十七

我們再看看原來的郵件是否還在,哇~果然不見了呢!

圖二十八

最後,到WebMail收信看看,該使用者也已收到了

圖二十九

4.5 WebServer 的 Througthput 及效能分析

4.5.1 Webalizer網頁記錄分析介紹

在我們將所製作好的網頁放在網頁伺服器之後,我們會想知道每 一個網頁的瀏覽次數,使用者的停留時間等等。在apache的連線記錄 中,可以看到很多使用者瀏覽網頁的記錄,我們可以使用一些工具來 分析記錄檔,讓這些記錄檔能更易於閱讀。我們在這裡要介紹

webalizer這套軟體。Webalizer會讀取apache的log檔,並將分析結 果存成網頁,讓我們可以經由網頁的圖形更輕鬆的了解每一個頁面的 使用情形。由於webalizer所進行的分析是經由讀取log檔,因此log 檔的資料越多,分析出來的結果也就越詳盡。

圖三十

4.5.2 SNMP & MRTG 介紹

MRTG 流量分析,是一個可以從支援 SNMP 網路設備中取得流量 資訊,然後分析這些資訊,繪成網頁格式圖表的工具. 它可以讓網管 人員,很快地藉由流量負載, 來判斷網路或設備發生問題的可能原 因.且要瞭解 MRTG 的運作,就必須瞭解一下 SNMP (Simple Network Management Protocol) 這個協定,因為 MRTG 是透過 SNMP 協定來 監控流量的。

所以,所有的 MRTG 所偵測的裝置都必須符合 SNMP 的協定。那 什麼是 SNMP 呢?簡單的說,就是一種可以提供裝置(主機設備)的 各類資訊的一種協定,諸如:網路流量、主機名稱、CPU用量等等的 資訊都可以藉由此一協定來提供。不過,由於不同廠牌的裝置可能會 有無法相容的情況,因而後來又有所謂 MIB (Management

Information Base) 的協定產生。不論如何,MRTG 就是藉由 SNMP 這 個協定來監測與取得相關的資訊以製作圖表的!

SNMP也有抓取CPU和MEM的資訊,所以我們也可以直接設定取用。

另外也可以使用到系統程式,諸如 systat、netstat …。

4.5.3 webalizer的裝設

1.先到/usr/ports/www/webalizer把軟體make install好 2.再設定把/usr/local/etc/webalizer.conf-dist複製到

# 預設值請見/usr/local/etc/webalizer.conf-dist

######################################################

# 設定Apache連線記錄檔的位置

LogFile /var/log/httpd-access。log

# 在網頁根目錄建好traffic的資料夾, 放置分析資料的位置 OutputDir /usr/local/www/data-dist/traffic

# 由於我們可能會設定某一段時間自動將Apache的log壓縮或刪除。而Incremental這

# 個變數可以讓我們在產生分析資料時,只更新增加的部份,

# 而分析過的資料就不再分析,以免覆蓋了舊有的資料 Incremental yes

# PageType可以讓你設定何種副檔名結尾的頁面要加入分析資料。 因為在log檔中有一些圖片,

# 而這些圖片我們並不希望加入分析資料中,或者我們也可以增加php頁面的分析資料。

#PageType phtml

#PageType php3

#PageType pl

# 定時執行

Quiet yes

# 設定顯示每日分析資料 DailyGraph yes DailyStats yes

# 設定顯示每小時分析資料 HourlyGraph yes HourlyStats yes

# 設定顯示圖表的格線數量,我們設到最多 GraphLines 20

接著在/etc/crontab裡加入:

10 * * * * root /usr/local/bin/webalizer

讓系統每小時的第10分執行一次webalizer

4.5.4 SNMP的裝設

用ports裝snmp

安裝完成後,我們必須先新增一個可以讀取SNMP資訊的

community name。所謂community name是一個明碼的字串,我們可以 將它視為management station和agent之間的密碼,是MRTG和

net-SNMP溝通時必須要先傳送的字串。

我們可以依不同的網域或主機給予不同的權限,依community name的設定來決定不同權限。一個網路元件可以有多個community name,一般SNMP Agent所預設公開的community name 是public。我 們不一定要將community name設定為public,因為public是一般SNMP 的預設值,為了安全問題,我們不將它設為public。

這裡我們設定community name為mrtg,而且只有read only的權 限。

要設定community name就要先新增一個文字檔 /usr/local/share/snmp/snmpd.conf並加入下列設定:

上面的設定中,mrtg為唯讀的community name,Your_Host_Name 是你機器所在的位置,而syscontact所接的字串是你的E-mail。

rocommunity mrtg

syslocation Your_Host_Name syscontact mrtg@localhost

# cd /usr/ports/net/net-snmp

# make install clean

另外我們還須在/etc/rc.conf中加入

啟動snmp

net_snmp_enable="YES"

/usr/local/etc/rc.d/snmpd.sh start

4.5.5 v的裝設

用ports裝mrtg

產生mrtg設定檔在/home/mrtg/public_html資料夾

接著在設定檔/usr/local/etc/mrtg/mrtg.cfg 裡加入我們要的設 定,如中文化、用 byte 或 bit 統計 … 等等。

我們的設定檔請見<附錄 F>

接著把MRTG的一些圖片複製到mrtg的目錄裡

最後,啟動mrtg

# cd /usr/ports/net/mrtg

# make install clean

# cfgmaker --global "WorkDir:

/home/mrtg/public_html" \

--global "Options[_]: growright" \ --ifref=nr mrtg@localhost >

/usr/local/etc/mrtg/mrtg.cfg

# cd /usr/ports/net/mrtg/work/mrtg*

# cd images

# cp * /home/www/mrtg/

# /usr/local/bin/mrtg /usr/local/etc/mrtg/mrtg.cfg

MRTG所分析的cpu使用量可以分為 每日 圖表 (5 分鐘 平均)

圖三十一

每週 圖表 (30 分鐘 平均)

圖三十二

每月 圖表 (2 小時 平均)

圖三十三 每年 圖表 (1 天 平均)

圖三十四

MRTG所分析的Memory使用量可以分為

每日 圖表 (5 分鐘 平均)

圖三十五

每週 圖表 (30 分鐘 平均)

圖三十六

每月 圖表 (2 小時 平均)

圖三十七

每年 圖表 (1 天 平均)

圖三十八

那我們以每日 圖表 (5 分鐘 平均)來看一下分析,在圖中可以 有最大.平均.目前的流量分析並以藍.綠色來分辨user和 Idle CPU 狀態圖,當使用者在使用cpu時,cpu不一定會忙碌中,且和在free memory中的圖比較一下,一定可以發現使用cpu時free memory必大大 降低,所以為了讓cpu在閒置的後能多做些些事情,在每週 圖表 (30 分鐘 平均),可以看出每日user使用cpu負荷直飆上漲,

那時候正在整合程式與測試信件的效能所以cpu的資源吃的非常兇,

因為本系統中因為隨時保有3個程式在執行(cparser 與 jconnect與

因為本系統中因為隨時保有3個程式在執行(cparser 與 jconnect與

相關文件