歡迎您光臨本站 註冊首頁

求助apache關於集群的方案.

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

求助apache關於集群的方案.

請大家幫忙提供一些apache集群方案給我
問過身邊的朋友大概了解了一些,如squid和lvs
請問還有哪些方案做apache集群的呢?
《解決方案》

apache+tomcat+mysql 負載平衡和集群技術
公司開發了一個網站,估計最高在線人數是3 萬,併發人數最多100 人。開發的網站是否能否承受這個壓力,如何確保網站的負荷沒有問題,經過研究決定如下:    (1 )採用負載平衡和集群技術,初步機構採用Apache+Tomcat 的機群技術。
    (2 )採用壓力測試工具,測試壓力。工具是Loadrunner.
   
    硬體環境搭建:
    為了能夠進行壓力測試,需要搭建一個環境。剛開始時,測試在公司區域網內進行,但很快發現了一個問題,即一個腳本的壓力測試結果每次都不一樣,並且差別很大。原來是受公司網路的影響,於是決定搭建一個完全隔離的區域網測試。搭建后的區域網配置如下:
   (1) 網路速度:100M
   (2) 三台伺服器:
    負載伺服器 :操作系統windows2003,
    Tomcat伺服器:操作系統windows2000 Professional
    資料庫伺服器:操作系統windows2000 Professional
    三台機器的cpu 2.4 G, 內存 1G。
    軟體環境搭建:
    軟體的版本如下:
    Apache 版本:2.054,
    Tomcat5.0.30,
    mysql :4.1.14.
    JDK1.5
    壓力測試工具:Loadrunner7.8。
    負載平衡方案如下:
    一台機器(操作系統2003)安裝apache,作為負載伺服器,並安裝tomcat作為一個worker;一個單獨安裝tomcat,作為第二個worker;剩下的一台單獨作為資料庫伺服器。
    Apache和tomcat的負載平衡採用JK1.2.14(沒有採用2.0,主要是2.0不再維護了)。
    集群方案:
    採用Tomcat本身的集群方案。在server.xml配置。
    壓力測試問題:
    壓力測試后,發現了一些問題,現一一列出來:
   (1) 採用Tocmat集群后,速度變得很慢。因為集群后,要進行session複製,導致速度較慢。Tomcatd的複製,目前不支持application複製。複製的作用,主要用來容錯的,即一台機器有故障后,apache可以把請求自動轉發到另外一個機器。在容錯和速度的考慮上,我們最終選擇速度,去掉了Tomcat集群。
   (2) 操作系統最大併發用戶的限制:
    為了採用網站的壓力,我們開始的時候,僅測試Tomcat的最大負載數。Tomcat伺服器安裝的操作系統是windows2000 Professional。當我們用壓力測試工具,併發測試時,發現只要超過15個併發用戶,會經常出現無法連接伺服器的情況。經過研究,發現是操作系統的問題:windows2000 Professional 支持的併發訪問用戶有限,默認的好像是15個。於是我們把操作系統全部採用windows2003 server版本。
   (3) 資料庫連接池的問題:
    測試資料庫連接性能時,發現資料庫連接速度很慢。每增加一些用戶,連接性能就差了很多。我們採用的資料庫連接池是DBCP,默認的初始化為50個,應該不會很慢吧。查詢資料庫的連接數,發現初始化,只初始化一個連接。併發增加一個用戶時,程序就會重新創建一個連接,導致連接很慢。原因就在這裡了。如何解決呢?偶爾在JDK1.4下的Tomcat5.0.30下執行資料庫連接壓力測試,發現速度很快,程序創建資料庫連接的速度也是很快的。看來JDK1.5的JDBC驅動程序有問題。於是我們修改 JDK的版本為1.4.
   (4) C3P0和DBCP
    C3P0是Hibernate3.0默認的自帶資料庫連接池,DBCP是Apache開發的資料庫連接池。我們對這兩種連接池進行壓力測試對比,發現在併發300個用戶以下時,DBCP比C3P0平均時間快1秒左右。但在併發400個用戶時,兩者差不多。
    速度上雖然DBCP比C3P0快些,但是有BUG:當DBCP建立的資料庫連接,因為某種原因斷掉后,DBCP將不會再重新創建新的連接,導致必須重新啟動Tomcat才能解決問題。DBCP的BUG使我們決定採用C3P0作為資料庫連接池。
    調整后的方案:
    操作系統Windows2003 server版本
    JDK1.4
    Tomcat 5.0.30
    資料庫連接池C3P0
    僅採用負載平衡,不採用集群。
    軟體的配置:
    Apache配置:主要配置httpd.conf和新增加的文件workers.properties
    Httpd.conf:
    #一個連接的最大請求數量
    MaxKeepAliveRequests 10000
    #NT環境,只能配置這個參數來提供性能
    <IfModule mpm_winnt.c>
    #每個進程的線程數,最大1920。NT只啟動父子兩個進程,不能設置啟動多個進程
    ThreadsPerChild 1900
    每個子進程能夠處理的最大請求數
    MaxRequestsPerChild 10000
    </IfModule>
    # 載入mod_jk
    #
    LoadModule jk_module modules/mod_jk.so
    #
    # 配置mod_jk
    #
    JkWorkersFile conf/workers.properties
    JkLogFile logs/mod_jk.log
    JkLogLevel info
    #請求分發,對jsp文件,.do等動態請求交由tomcat處理
    DocumentRoot "C:/Apache/htdocs"
    JkMount /*.jsp loadbalancer
    JkMount /*.do loadbalancer
    JkMount /servlet/* loadbalancer
    #關掉主機Lookup,如果為on,很影響性能,可以有10多秒鐘的延遲。
    HostnameLookups Off
   #緩存配置
    LoadModule cache_module modules/mod_cache.so
    LoadModule disk_cache_module modules/mod_disk_cache.so
    LoadModule mem_cache_module modules/mod_mem_cache.so
    <IfModule mod_cache.c>
    CacheForceCompletion 100
    CacheDefaultExpire 3600
    CacheMaxExpire 86400
    CacheLastModifiedFactor 0.1
    <IfModule mod_disk_cache.c>
    CacheEnable disk /
    CacheRoot c:/cacheroot
    CacheSize 327680
    CacheDirLength 4
    CacheDirLevels 5
    CacheGcInterval 4
    </IfModule>
    <IfModule mod_mem_cache.c>
    CacheEnable mem /
    MCacheSize 8192
    MCacheMaxObjectCount 10000
    MCacheMinObjectSize 1
    MCacheMaxObjectSize 51200
    </IfModule>
    </IfModule>
    worker. Properties文件
    #
    # workers.properties ,可以參考
    http://jakarta.apache.org/tomcat/connectors-doc/config/workers.html
    # In Unix, we use forward slashes:
    ps=
    # list the workers by name
    worker.list=tomcat1, tomcat2, loadbalancer
    # ------------------------
    # First tomcat server
    # ------------------------
    worker.tomcat1.port=8009
    worker.tomcat1.host=localhost
    worker.tomcat1.type=ajp13
    # Specify the size of the open connection cache.
    #worker.tomcat1.cachesize
    #
    # Specifies the load balance factor when used with
    # a load balancing worker.
    # Note:
    # ----> lbfactor must be > 0
    # ----> Low lbfactor means less work done by the worker.
    worker.tomcat1.lbfactor=900
    # ------------------------
    # Second tomcat server
    # ------------------------
    worker.tomcat1.port=8009
    worker.tomcat1.host=202.88.8.101
    worker.tomcat1.type=ajp13
    # Specify the size of the open connection cache.
    #worker.tomcat1.cachesize
    #
    # Specifies the load balance factor when used with
    # a load balancing worker.
    # Note:
    # ----> lbfactor must be > 0
    # ----> Low lbfactor means less work done by the worker.
    worker.tomcat1.lbfactor=2000
    # ------------------------
    # Load Balancer worker
    # ------------------------
    #
    # The loadbalancer (type lb) worker performs weighted round-robin
    # load balancing with sticky sessions.
    # Note:
    # ----> If a worker dies, the load balancer will check its state
    # once in a while. Until then all work is redirected to peer
    # worker.
    worker.loadbalancer.type=lb
    worker.loadbalancer.balanced_workers=tomcat1,tomcat2
    #
    # END workers.properties
    #
    Tomcat1配置:
    <!--配置server.xml
    去掉8080埠,即註釋掉如下代碼:-->
    <Connector
    port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
    enableLookups="false" redirectPort="8443" acceptCount="100"
    debug="0" connectionTimeout="20000"
    disableUploadTimeout="true" />
    <!--配置8009埠如下:-->
    <Connector port="8009"
    maxThreads="500" minSpareThreads="400" maxSpareThreads="450"
    enableLookups="false" redirectPort="8443" debug="0"
    protocol="AJP/1.3" />
    <!--配置引擎-->
    <Engine name="Catalina" defaultHost="localhost" debug="0" jvmRoute="tomcat1">
    啟動內存配置,開發configure tomcat程序即可配置:
    Initial memory pool: 200 M
    Maxinum memory pool:300M
    Tomcat2配置:
    配置和tomcat1差不多,需要改動的地方如下:
    <!--配置引擎-->
    <Engine name="Catalina" defaultHost="localhost" debug="0" jvmRoute="tomcat2">
    啟動內存配置,開發configure tomcat程序即可配置:
    Initial memory pool: 512 M
    Maxinum memory pool:768M
    Mysql配置:
    Server類型:Dedicated MySQL Server Machine
    Database usage:Transational Database Only
    併發連接數量:Online Transaction Processing(OLTP)
    字符集:UTF8
    資料庫連接池的配置:
    我們採用的是spring 框架,配置如下:
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
    <prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop>
    <prop key="hibernate.connection.url">jdbc:mysql://202.88.1.103/db</prop>
    <prop key="hibernate.connection.username">sa</prop>
    <prop key="hibernate.connection.password"></prop>
    <prop key="hibernate.show_sql">false</prop>
    <prop key="hibernate.use_sql_comments">false</prop>
    <prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
    <prop key="hibernate.max_fetch_depth">2</prop>
    <prop key="hibernate.c3p0.max_size">200</prop>
    <prop key="hibernate.c3p0.min_size">5</prop>
    <prop key="hibernate.c3p0.timeout">12000</prop>
    <prop key="hibernate.c3p0.max_statements">50</prop>
    <prop key="hibernate.c3p0.acquire_increment">1</prop>
    </props>
    </property>
    其他的沒有額外配
《解決方案》

如果是動態的集群,有點麻煩,因為數據得一致,還是弄個GFS或者NFS!
這裡是ipvs的發源地,linux內核里ipvs的模塊就是他寫的,是個中國人
www.linuxvirtualserver.org

[火星人 ] 求助apache關於集群的方案.已經有572次圍觀

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