a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 153|回复: 2

[综合辅导] Linux考试辅导:apache+tomcat+mysql负载平衡和集群技术

[复制链接]
发表于 2012-8-4 12:07:07 | 显示全部楼层 |阅读模式
公司开发了一个网站,估计最高在线人数是3 万,并发人数最多100 人。开发的网站是否能否承受这个压力,如何确保网站的负荷没有问题,经过研究决定如下:     (1 )采用负载平衡和集群技术,初步机构采用Apache+Tomcat 的机群技术。
' }% C. M: n7 s! d" z    (2 )采用压力测试工具,测试压力。工具是Loadrunner.
5 E" X2 L+ z/ W: g, ^    * R. [' N3 W+ a- d+ |: I
    硬件环境搭建:  _' S* J" ]! T, O5 s& x
    为了能够进行压力测试,需要搭建一个环境。刚开始时,测试在公司局域网内进行,但很快发现了一个问题,即一个脚本的压力测试结果每次都不一样,并且差别很大。原来是受公司网络的影响,于是决定搭建一个完全隔离的局域网测试。搭建后的局域网配置如下:" C9 y2 B1 _& k
   (1) 网络速度:100M3 F, `5 l+ O7 m
   (2) 三台服务器:
3 i- T0 z, B% j/ z; w) O4 m( o    负载服务器 :操作系统windows2003,
5 c& q. I$ n. ~+ x( V! m- Z    Tomcat服务器:操作系统windows2000 Professional/ F6 X( s/ {# }4 s  S. U  G8 h& @
    数据库服务器:操作系统windows2000 Professional
& n  r' L. a+ u- B1 h2 J# \    三台机器的cpu 2.4 G, 内存 1G。0 u4 D" I( Q6 ?5 h+ c# L
    软件环境搭建:
% k; p6 Y0 p, M: i& ~! D) b    软件的版本如下:
: C& |% t& b3 k5 S$ i* e. t    Apache 版本:2.054,+ r3 X4 p5 x8 V
    Tomcat5.0.30,
7 u/ n' ]0 @+ w- O" M4 S    mysql :4.1.14.  i1 ^( V' d; R: G# o7 `- u
    JDK1.59 I7 f9 P4 s5 |( ~- Y0 f
    压力测试工具:Loadrunner7.8。
5 ~+ {2 U4 F0 g( N1 N    负载平衡方案如下:4 n) V1 e0 W# |4 p9 J
    一台机器(操作系统2003)安装apache,作为负载服务器,并安装tomcat作为一个worker;一个单独安装tomcat,作为第二个worker;剩下的一台单独作为数据库服务器。
* M" }) w" a8 Q' ?6 u. n    Apache和tomcat的负载平衡采用JK1.2.14(没有采用2.0,主要是2.0不再维护了)。
# E3 I) U; l0 H& [% y! g0 I# a4 n    集群方案:# K! H) t' C: j8 k9 B6 C& z
    采用Tomcat本身的集群方案。在server.xml配置。. A* G/ p% b4 `" ]$ [9 [
    压力测试问题:
" i; R) G7 _- K' F7 D* T+ g    压力测试后,发现了一些问题,现一一列出来:) U. F) w* Z9 i/ S) F
   (1) 采用Tocmat集群后,速度变得很慢。因为集群后,要进行session复制,导致速度较慢。Tomcatd的复制,目前不支持application复制。复制的作用,主要用来容错的,即一台机器有故障后,apache可以把请求自动转发到另外一个机器。在容错和速度的考虑上,我们最终选择速度,去掉了Tomcat集群。5 D; a# @# c5 E  X" ?
   (2) 操作系统最大并发用户的限制:  C) Y; o7 u, x, o; t. a& t
    为了采用网站的压力,我们开始的时候,仅测试Tomcat的最大负载数。Tomcat服务器安装的操作系统是windows2000 Professional。当我们用压力测试工具,并发测试时,发现只要超过15个并发用户,会经常出现无法连接服务器的情况。经过研究,发现是操作系统的问题:windows2000 Professional 支持的并发访问用户有限,默认的好像是15个。于是我们把操作系统全部采用windows2003 server版本。& h+ d  B1 z) r9 E4 y
   (3) 数据库连接池的问题:# J. V7 z1 E! e, i" t
    测试数据库连接性能时,发现数据库连接速度很慢。每增加一些用户,连接性能就差了很多。我们采用的数据库连接池是DBCP,默认的初始化为50个,应该不会很慢吧。查询数据库的连接数,发现初始化,只初始化一个连接。并发增加一个用户时,程序就会重新创建一个连接,导致连接很慢。原因就在这里了。如何解决呢?偶尔在JDK1.4下的Tomcat5.0.30下执行数据库连接压力测试,发现速度很快,程序创建数据库连接的速度也是很快的。看来JDK1.5的JDBC驱动程序有问题。于是我们修改 JDK的版本为1.4.. }% c9 g7 M4 j2 |
   (4) C3P0和DBCP  C7 S8 ^0 O8 l' Q
    C3P0是Hibernate3.0默认的自带数据库连接池,DBCP是Apache开发的数据库连接池。我们对这两种连接池进行压力测试对比,发现在并发300个用户以下时,DBCP比C3P0平均时间快1秒左右。但在并发400个用户时,两者差不多。
/ |# q1 g% T% d2 s  q; H+ ]7 h    速度上虽然DBCP比C3P0快些,但是有BUG:当DBCP建立的数据库连接,因为某种原因断掉后,DBCP将不会再重新创建新的连接,导致必须重新启动Tomcat才能解决问题。DBCP的BUG使我们决定采用C3P0作为数据库连接池。
回复

使用道具 举报

 楼主| 发表于 2012-8-4 12:07:08 | 显示全部楼层

Linux考试辅导:apache+tomcat+mysql负载平衡和集群技术

调整后的方案:     操作系统Windows2003 server版本) U# F' r2 p/ H, e1 P2 H* Z2 O
    JDK1.4( \; X3 X# L( z( j0 a. L; h
    Tomcat 5.0.30% F2 Q& j+ R4 Q
    数据库连接池C3P09 A2 `& a3 }( e& |
    仅采用负载平衡,不采用集群。0 j  y4 q5 W. D, x9 v" O# a7 h! M1 j
    软件的配置:
2 Y6 E9 o, z# n! G1 I7 {3 C    Apache配置:主要配置httpd.conf和新增加的文件workers.properties" o9 E) b. F3 f0 d$ M% I; k. E
    Httpd.conf:
; o  d9 L6 r% A% n) [    #一个连接的最大请求数量
$ m! [8 @* d: ^: r3 x    MaxKeepAliveRequests 100009 e5 ^) a; {* y+ E+ S) B
    #NT环境,只能配置这个参数来提供性能; O9 j  Y3 i# k" E( a9 Q3 S9 t9 Q- B
   
  ^2 v( W$ a+ W( N& x- L" p    #每个进程的线程数,最大1920。NT只启动父子两个进程,不能设置启动多个进程
& I3 g$ D% e5 @3 o2 N  M% C6 v    ThreadsPerChild 1900  z" G' r& k, \9 k. u
    每个子进程能够处理的最大请求数
! w, S( Q) n1 [5 P" c    MaxRequestsPerChild 10000* p0 Y, `* J& h' p, C/ F" {
   
6 i) `1 ^3 @9 i) R1 ~; E    # 加载mod_jk
$ G! ~7 M5 y% f8 \; }2 s; C+ J    #
: T- R! E: K4 S" Y% A- K0 ^    LoadModule jk_module modules/mod_jk.so
/ u, i/ t6 f6 D1 F4 l    #- d* x4 ~8 L8 k+ y9 g
    # 配置mod_jk
2 S: @1 c: n$ L' q" ~" T    #; L  G! d1 B4 n0 Y4 p. p/ p2 f! O
    JkWorkersFile conf/workers.properties
* G8 r" I. `# b( S5 S    JkLogFile logs/mod_jk.log# q7 S) E" y# e) J8 n* g3 B$ K
    JkLogLevel info/ k; V; [! M: z! |; o; v7 V
    #请求分发,对jsp文件,.do等动态请求交由tomcat处理
1 p+ \9 Q$ T4 f: O6 P    DocumentRoot "C:/Apache/htdocs"4 {" J' S1 O( G: G$ |' i7 c% K
    JkMount /*.jsp loadbalancer: w2 s+ M/ W/ B1 f4 O( L$ Z
    JkMount /*.do loadbalancer4 o6 `8 G: q9 W1 `6 @
    JkMount /servlet/* loadbalancer( H% x' M5 r9 M" a1 }/ I
    #关掉主机Lookup,如果为on,很影响性能,可以有10多秒钟的延迟。
& i9 l( r+ l' D    HostnameLookups Off#缓存配置" _% {1 _( k# R, G1 ^7 Q' L
    LoadModule cache_module modules/mod_cache.so  O& T# h1 F1 J. _$ Z( I
    LoadModule disk_cache_module modules/mod_disk_cache.so5 o1 q5 A7 m- k
    LoadModule mem_cache_module modules/mod_mem_cache.so: O. F* o# e0 }( ?+ i
    ; k- D& L/ U& n
    CacheForceCompletion 100
" q+ O  X7 K7 x, S' g% x& v8 A3 @! I    CacheDefaultExpire 3600; n3 _% D; `8 p0 j% y  J8 H, d
    CacheMaxExpire 86400
4 v  `; ]: Q$ r' h' |( k7 j' F7 L    CacheLastModifiedFactor 0.1
) g% Z! T+ r; y# ~   
7 B# b4 E) d! ?9 y+ n: l( ~- n    CacheEnable disk /% \9 i$ ~9 o0 t4 L* z' y% O) {
    CacheRoot c:/cacheroot! {. j" i0 e. y: G
    CacheSize 3276807 w- a' [5 x  J
    CacheDirLength 49 |6 k; n7 Y+ P1 |* _! B
    CacheDirLevels 5) |1 R9 M2 }2 b+ P0 J6 S
    CacheGcInterval 4! n1 Q* m6 F: }/ ^6 }! t8 K% M$ K
   
8 e8 A4 g* h+ R# ?1 P" k3 V. r( ?   
, e0 w- j' `# C; Q" h# v/ ?8 Q    CacheEnable mem /1 A' H' M3 \6 i8 X# J9 U5 H
    MCacheSize 8192
3 ^5 D1 L! ~  n. E& a    MCacheMaxObjectCount 100009 x# ~* |1 X. X3 a
    MCacheMinObjectSize 1
/ B2 w9 E$ m! D8 i    MCacheMaxObjectSize 51200
' }0 a7 s8 x, a% A: X   
9 a( F/ D, @/ [, Z   
1 c2 r$ G' Y4 W    worker. Properties文件
) y, C/ ]4 k" k0 w6 I. `6 k/ ?    #
) y& L: d5 G1 h' ]$ b1 `" f$ P    # workers.properties ,可以参考
9 u* r2 {$ D9 d" w, ]# @) t* s    http://jakarta.apache.org/tomcat/connectors-doc/config/workers.html* U# V) j" n' S
    # In Unix, we use forward slashes:  l7 p7 F2 c6 C& {$ H$ o5 R4 c* }
    ps=9 r; b8 ^" v1 Q9 j. Z; M
    # list the workers by name  S; a2 U; Z5 D0 v, C
    worker.list=tomcat1, tomcat2, loadbalancer! i9 }+ k: g- V7 z  u8 ]1 f* z3 t
    # ------------------------
* b( k- {) A! v" b: z' o    # First tomcat server
6 T1 T: w& _5 |    # ------------------------1 ]7 y' C, ~/ K1 o8 I3 R
    worker.tomcat1.port=8009
3 y  ]" O7 ~$ m2 ]  v8 ~3 X    worker.tomcat1.host=localhost8 W  q6 G" H$ ?- W+ z9 E* H
    worker.tomcat1.type=ajp13
( F# k  E1 |- V4 x8 n* t& G    # Specify the size of the open connection cache.
6 n) E1 ]2 U+ U8 G" T3 H    #worker.tomcat1.cachesize. C" q7 P5 c2 |9 ?, ]" L; G
    #
! g5 g8 s/ o% f; Z& ~1 R# b    # Specifies the load balance factor when used with( v' W7 h( D* J% I0 Z! g; ?# H  I
    # a load balancing worker.
: @  s6 n( q4 ^& t3 r    # Note:
/ ]( x) H7 u* e- x4 l0 F$ p0 T    # ----> lbfactor must be > 0. s8 W- v2 M3 r# C6 |; n
    # ----> Low lbfactor means less work done by the worker.
+ u/ @' Z* c5 P    worker.tomcat1.lbfactor=900- Q6 H. ~* ~% Z6 E  ^/ s2 D
    # ------------------------
: m+ p) L; r3 N; B" e/ ?; J2 ~    # Second tomcat server
' B% ~$ X/ `; T5 p% n+ x    # ------------------------% q: H, K0 s* Z* N: ]" {' ]
    worker.tomcat1.port=8009: @4 d/ g  _: i7 ~  |
    worker.tomcat1.host=202.88.8.101
. j- a8 C* m6 M1 J, U; I& E' Q    worker.tomcat1.type=ajp13
3 v& h2 f# i' o$ A' w. L    # Specify the size of the open connection cache.2 n9 y" V% y9 X. i: Y
    #worker.tomcat1.cachesize3 P3 V0 h1 x' \% N
    #
' {  n9 B1 k1 K6 H2 p    # Specifies the load balance factor when used with
1 }, L1 [$ U5 D8 k$ f8 q    # a load balancing worker.6 Q( n9 K2 k( j. U2 Y4 N
    # Note:3 D8 W; C! C4 g; Y+ K, h* r5 |& D
    # ----> lbfactor must be > 0, T& b- [2 Q" k8 j, [
    # ----> Low lbfactor means less work done by the worker.
8 K. i0 @% i) d6 r+ s0 d6 U( N7 v    worker.tomcat1.lbfactor=2000. k- H0 _$ `7 e4 r" Z3 a+ _
    # ------------------------/ Q  @3 z0 Z5 \8 U' u# h5 d
    # Load Balancer worker( r6 j. ], L7 `' a6 G' ^$ k8 ~
    # ------------------------
1 w) V$ X$ n6 Y3 f/ b* u* _( ]# m    #
( Q8 x3 }# ~* F" o1 W" R    # The loadbalancer (type lb) worker performs weighted round-robin  q9 s- u3 m( B1 M0 O9 i$ c
    # load balancing with sticky sessions., _+ [$ p1 b. l. S! u4 O
    # Note:
0 g* `0 o% H/ ?" C    # ----> If a worker dies, the load balancer will check its state
9 j. ]9 w5 m7 J1 Y& L    # once in a while. Until then all work is redirected to peer( B* r. S& E& @
    # worker.9 z4 z- Y( \1 z/ R
    worker.loadbalancer.type=lb
$ k; w; Z$ d0 q# a. Z- T    worker.loadbalancer.balanced_workers=tomcat1,tomcat2/ P- j3 p) F6 |. l
    #
2 b( m; |6 n+ @/ a/ l    # END workers.properties
2 l4 n- T" V; q    #
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-4 12:07:09 | 显示全部楼层

Linux考试辅导:apache+tomcat+mysql负载平衡和集群技术

Tomcat1配置:     1 g/ K% A  D& }+ O
    9 b$ w, f- G8 P7 [; P, s9 e) D
   
. A' j+ ?, E' E& X& B   
% S8 H6 p: |4 y1 k   
* F9 T$ P5 d/ m4 t8 x   
' p! k0 l  M* o- N. y+ l( n0 m    启动内存配置,开发configure tomcat程序即可配置:
& R3 y8 v: d7 L2 w0 [- ]8 N" S    Initial memory pool: 200 M$ M, m2 W5 J/ m3 g. H! S
    Maxinum memory pool:300M5 e, Z% k5 i% d- g3 i  G% A
    Tomcat2配置:
5 o7 W' D  B$ N! i    配置和tomcat1差不多,需要改动的地方如下:# Q5 F. I3 |, ^0 i8 E. w
   
% X* E6 \* g% \0 B- n0 ?& j5 v8 p6 u   
  N/ e/ _- b( P' T5 Z    启动内存配置,开发configure tomcat程序即可配置:
# R  Q, F" @: y    Initial memory pool: 512 M+ n, M8 a! T* i) h6 ^
    Maxinum memory pool:768M* b4 F: ?2 _5 K; I
    Mysql配置:  H3 l7 G$ S2 b! w6 Z
    Server类型:Dedicated MySQL Server Machine
$ k% f% r9 U; q3 X1 o$ {' k    Database usage:Transational Database Only& A8 H( z1 ~  g; ?1 a) Z: d" C1 A# b
    并发连接数量:Online Transaction Processing(OLTP)
; f& k' S* t$ ]- M    字符集:UTF8+ D) Z' j# X' l' j5 E) u* f2 V
    数据库连接池的配置:4 a9 @7 _. T" i  \
    我们采用的是spring 框架,配置如下:" _. u8 @( w( C5 x/ p
    " k/ E4 X: e4 z  P  R  G+ m6 j
   
% a% }" n- Z( E5 l; n* s- t    org.hibernate.dialect.MySQLDialect; M7 U4 D' a& X! g. q9 b
    com.mysql.jdbc.Driver
6 ?" b% R6 _- y8 M, s% F( H    jdbc:mysql://202.88.1.103/db
: C/ q& H0 y# ^    sa% z) p) n5 I1 m! \3 d, t0 S
   
- Z2 b; K/ {0 r3 G+ |( C    false9 A  ^+ m( U$ [4 ?
    false
8 Y6 u# h( T+ }2 K3 Q& w    true2 M$ z. K  n2 ~+ O
    2
; S2 G1 B) K* h$ [1 ~    200
/ M; O- c. i; ^5 D' M    52 ]2 z/ O; |8 ?# ~. Q# c
    12000' O. t- j: f/ e2 [# ~1 k+ o& @
    507 m9 ~1 U7 R; @  z
    1* c' a8 v. t  b! Y4 r! m5 ~
    3 p$ b4 k; f$ W( v  s( r
   
1 w8 J6 H" ~; V2 \, X& d% Y2 ~    其他的没有额外配
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-21 13:45 , Processed in 0.225478 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表