用Apache + Imart(Resine) + RAC做集群實驗 .

火星人 @ 2014-03-03 , reply:0


用Apache + Imart(Resine) + RAC做集群實驗 .

用Apache + Imart(Resine) + RAC做集群實驗 .






1.     前言
目前的項目越做越大。進項目的測試人員也越來越多。

最早的將DB和AS部署在一台2G內存的機器上已經吃不消了。

而公司也沒有多餘的好機器。為此,我決定嘗試做集群環境。

2.    集群所需資源
我考慮用如下圖製作集群架構



簡單的說起來,

1.    前端http伺服器我考慮用Apache 2.2來使用,性能穩定並且開源

2.    LoadBlance最好的還是用LVS。 不過,因為我們這次的AS本身已經提供了round robin的功能。所以方便期間,我沒有再新設。

3.    AS,這次客戶選用的是imart,一個基於resine的應用伺服器。我分別部署了兩台。

4.    DB,我找了兩台很爛的機器做rac.

綜上所述,我所需要的資源是:一台2G用來做前台伺服器,兩台2G用來做AS集群,兩個2G用來做RAC



3.     集群安裝的順序


首先先安裝imart到兩台AS上,然後分別修改imart的http.xml文件如下:



view plaincopy to clipboardprint?01.<server address="127.28.1.1" id="APP:127.28.1.1:8080">  
02.      <cluster-port port="6800" secure="false"/>  
03.      <http port="8080" secure="false"/>  
04.    </server>  
05.    <server address="127.28.1.21" id="APP:127.28.1.2:8080">  
06.      <cluster-port port="6800" secure="false"/>  
07.      <http port="8080" secure="false"/>  
08.    </server>  
<server address="127.28.1.1" id="APP:127.28.1.1:8080">
      <cluster-port port="6800" secure="false"/>
      <http port="8080" secure="false"/>
    </server>
    <server address="127.28.1.21" id="APP:127.28.1.2:8080">
      <cluster-port port="6800" secure="false"/>
      <http port="8080" secure="false"/>
    </server>同時,為了session的共享。放開以下的配置:

view plaincopy to clipboardprint?01.<session-config>  
02.          <use-persistent-store>true</use-persistent-store>  
03.          <always-save-session>true</always-save-session>  
04.          <save-mode>after-request</save-mode>  
05.        </session-config>  
<session-config>
          <use-persistent-store>true</use-persistent-store>
          <always-save-session>true</always-save-session>
          <save-mode>after-request</save-mode>
        </session-config>注意,imart的集群之間是通過DB來共享session。所以需要為session專門建個DB
view plaincopy to clipboardprint?01.<resin:if test="${resin.professional}">  
02.      <persistent-store type="jdbc">  
03.        <init>  
04.          <data-source>jdbc/sessionDB</data-source>  
05.        </init>  
06.      </persistent-store>  
07.    </resin:if>  
<resin:if test="${resin.professional}">
      <persistent-store type="jdbc">
        <init>
          <data-source>jdbc/sessionDB</data-source>
        </init>
      </persistent-store>
    </resin:if>2.    接著安裝Apache和imart的WebConnector
Imart的WebConnector是類似於LVS的loadBlancer工具。不過他的分發是根據時間段,而沒有那麼複雜的配置可能。
Apache2.2安裝完成之後,要在httpd.conf中如下追加:
view plaincopy to clipboardprint?01.<IfModule ssl_module>  
02.SSLRandomSeed startup builtin  
03.SSLRandomSeed connect builtin  
04.</IfModule>  
05.Alias /imart "C:/imart_web"  
06.<Directory "C:/imart_web">  
07.  Order allow,deny  
08.  Allow from all  
09.</Directory>   
10.  
11.LoadModule caucho_module C:/imart_web/round_robin/win32/apache2.2/mod_caucho.dll  
12.  
13.ResinConfigServer 172.28.1.1 6800  
14.ResinConfigServer 172.28.1.2 6800  
15.#<Location /caucho-status>  
16.#  SetHandler caucho-status  
17.#</Location>  
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
Alias /imart "C:/imart_web"
<Directory "C:/imart_web">
  Order allow,deny
  Allow from all
</Directory>

LoadModule caucho_module C:/imart_web/round_robin/win32/apache2.2/mod_caucho.dll

ResinConfigServer 172.28.1.1 6800
ResinConfigServer 172.28.1.2 6800
#<Location /caucho-status>
#  SetHandler caucho-status
#</Location>3.    RAC的安裝
由於這裡的網路教程很多,就不多說了。
有關於RAC的AS設定如下,在imart的http.xml中如下修改:
view plaincopy to clipboardprint?01.<database>  
02.<jndi-name><%データソース參照名%></jndi-name>  
03.<driver>  
04.<type>oracle.jdbc.pool.OracleConnectionPoolDataSource</type>  
05.<url>jdbc:oracle:thin:@(DESCRIPTION=  
06.(ADDRESS_LIST=  
07.(FAILOVER=ON)  
08.(LOAD_BALANCE=ON)  
09.(ADDRESS = (PROTOCOL = TCP)(HOST = Node_A)(PORT = 1521))  
10.(ADDRESS = (PROTOCOL = TCP)(HOST = Node_B)(PORT = 1521))  
11.)  
12.(CONNECT_DATA = ( SERVICE_NAME=rac ) )  
13.)  
14.</url>  
15.<user>DB 接続ユーザ名</user>  
16.<password>DB 接続ユーザのパスワード</password>  
17.</driver>  
18.<prepared-statement-cache-size>8</prepared-statement-cache-size>  
19.<max-connections>20</max-connections>  
20.<max-idle-time>30s</max-idle-time>  
21.<ping>true</ping>  
22.<ping-table>dual</ping-table>  
23.<ping-interval>60s</ping-interval>  
24.</database>  
<database>
<jndi-name><%データソース參照名%></jndi-name>
<driver>
<type>oracle.jdbc.pool.OracleConnectionPoolDataSource</type>
<url>jdbc:oracle:thin:@(DESCRIPTION=
(ADDRESS_LIST=
(FAILOVER=ON)
(LOAD_BALANCE=ON)
(ADDRESS = (PROTOCOL = TCP)(HOST = Node_A)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = Node_B)(PORT = 1521))
)
(CONNECT_DATA = ( SERVICE_NAME=rac ) )
)
</url>
<user>DB 接続ユーザ名</user>
<password>DB 接続ユーザのパスワード</password>
</driver>
<prepared-statement-cache-size>8</prepared-statement-cache-size>
<max-connections>20</max-connections>
<max-idle-time>30s</max-idle-time>
<ping>true</ping>
<ping-table>dual</ping-table>
<ping-interval>60s</ping-interval>
</database>4.    集群中的session failvor
Imart集群中對session failvor的方法是在DB中存一個表:view plaincopy to clipboardprint?
01.CREATE TABLE persistent_session (  
02.id VARCHAR(64) NOT NULL,  
03.data BLOB,  
04.access_time int(11),  
05.expire_interval int(11),  
06.PRIMARY KEY(id)  
07.)  
CREATE TABLE persistent_session (
id VARCHAR(64) NOT NULL,
data BLOB,
access_time int(11),
expire_interval int(11),
PRIMARY KEY(id)
)Imart會定時的的保存session數據到這個表中,當一台機器掛掉的時候,別的機器就會自動去找session消息,然後接著操作。

不過缺點是,這個表的數據需要自己手動清空。   5. 其他補充 為了自動同步和發布基線庫的代碼,我還寫了一個同步工具。從SVN的指定分支上拉代碼部署編譯上線 為了方便測試人員監控系統,我用了Splunx來監控所有AS上的日誌。  這樣搞完,基本上算是搞出了個能夠模擬真實環境的可負載的高強度測試環境。




[火星人 via ] 用Apache + Imart(Resine) + RAC做集群實驗 .已經有278次圍觀

http://www.coctec.com/docs/service/show-post-1678.html