WebServer
Apache Setting
- module enable
LoadModule watchdog_module modules/mod_watchdog.so LoadModule xml2enc_module modules/mod_xml2enc.so LoadModule proxy_html_module modules/mod_proxy_html.so LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule proxy_express_module modules/mod_proxy_express.so LoadModule proxy_hcheck_module modules/mod_proxy_hcheck.so LoadModule slotmem_shm_module modules/mod_slotmem_shm.so LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so LoadModule userdir_module modules/mod_userdir.so LoadModule rewrite_module modules/mod_rewrite.so
LoadModule remoteip_module modules/mod_remoteip.so 이것은 확인 후에 적용
- Port 변경
80 --> 9180
- mkdir /data/homeplus/XXXX(4자리)
- mkdir /logs/weblog/service/XXXX(4자리)
- httpd-vhosts.conf (httpd-ssl.conf 동일)
<VirtualHost *:9180> ServerAdmin webmaster@homeplus.co.kr DocumentRoot "/data/homeplus/madm" ServerName service_name.homeplus.co.kr ServerAlias service_name.homeplus.co.kr ErrorLog "|/app/apache24/bin/rotatelogs /logs/weblog/service/madm/error.%Y-%m-%d.log 86400 540" CustomLog "|/app/apache24/bin/rotatelogs /logs/weblog/service/madm/access.%Y-%m-%d.log 86400 540" combined LogLevel warn ProxyRequests Off ProxyPreserveHost On <Proxy *> Order deny,allow Allow from all </Proxy> Header add Set-Cookie "ROUTEID=route.%{BALANCER_WORKER_ROUTE}e; path=/;" env=BALANCER_ROUTE_CHANGED <Proxy "balancer://cluster"> BalancerMember "http://10.10.21.48:8180" route=node1 BalancerMember "http://10.10.21.49:8280" route=node2 ProxySet lbmethod=byrequests ProxySet stickysession=ROUTEID </Proxy> ProxyPassMatch ^/(.*\.gif|.*\.jpg|.*\.jpeg|.*\.png|.*\.js|.*\.css|.*\.swf|.*\.html|.*\.htm)$ ! ProxyPass "/" "balancer://cluster/" <Location /> Require all granted </Location> </VirtualHost>
-
WebServerStaticDeploy
-
#!/bin/sh # /data/scm/homeplus-club-admin/homeplus-club-admin-web echo echo '##### START DEPLOY #####' echo echo '##### Set Env #####' ##### JAVA ##### WEBROOT=/data/homeplus/padm export JAVA_HOME=/app/java/java8 export PATH=$PATH:$JAVA_HOME/bin/ export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/tools.jar export Finalbackupfiles=5 export DeleteDate=3 PATH=$PATH:$HOME/bin export PATH echo " > JAVA_HOME=" $JAVA_HOME echo " > Final Backup File count=" $Finalbackupfiles echo " > DeleteDate=" $DeleteDate "day before" echo " > WEBROOT=" $WEBROOT echo echo '1. Backup & Stop' export NOW=`date +%Y%m%d` export OLDDAY=$((NOW -$DeleteDate)) export NOWTIME=`date +%H%M` echo ' > Today = ' $NOW$NOWTIME cd $WEBROOT find $WEBROOT -xdev | grep -v 'nas' > $WEBROOT/achiving.list tar -cf /data/homeplus/backup/homeplus-club-admin/homeplus-club-admin-web/$NOW$NOWTIME.tar -T $WEBROOT/achiving.list echo ' > Backup file : ' /data/homeplus/backup/homeplus-club-admin/homeplus-club-admin-web/$NOW$NOWTIME.tar echo '2. Delete ' $DeleteDate ' day ago = ' $OLDDAY ', but must remain ' $Finalbackupfiles ' files on the backup folder' Totalbackupfiles=`find /data/homeplus/backup/homeplus-club-admin/homeplus-club-admin-web/ -name "*.tar" | wc -l` echo ' > Total backupfiles(all files) = ' $Totalbackupfiles echo ' > Final backup files count = ' $Finalbackupfiles Targetdeletebackupfiles=`expr $Totalbackupfiles - $Finalbackupfiles` echo ' > Total backup files - Final backup files =' $Targetdeletebackupfiles BackupAllFiles=(`find /data/homeplus/backup/homeplus-club-admin/homeplus-club-admin-web/ -name "*.tar" -mtime +$DeleteDate -printf "%f\n" | sort -n`) cnt=1 echo ' > ' $DeleteDate ' day before delete target file list' for i in "${BackupAllFiles[@]}" do if [ $Targetdeletebackupfiles -ge $cnt ] then echo " " $i " , " $cnt " DELETEed !" rm /data/homeplus/backup/homeplus-club-admin/homeplus-club-admin-web/$i else echo " " $i " , " $cnt " SKIPed !" fi let cnt=cnt+1 done echo '3. Delete Web ROOT' cd $WEBROOT ls $WEBROOT | grep -v nas | grep -v export | grep -v achiving.list | grep -v somethingspecial | xargs rm -rf echo ' > Check Web ROOT = '$WEBROOT echo ' > list ' `ls $WEBROOT` echo '4. Copy tar to '$WEBROOT echo ' > cp OOT-jar.tar.gz to '$WEBROOT cp /data/scm/homeplus-club-admin/homeplus-club-admin-web/target/ROOT-jar.tar.gz $WEBROOT echo '5. Decompress TAR.GZ' echo ' > tar -zxvf '$WEBROOT'/ROOT-jar.tar.gz' cd $WEBROOT tar -zxf $WEBROOT/ROOT-jar.tar.gz -C $WEBROOT/ --strip-components=1 echo '6. Clear ' echo ' > Delete ROOT-jar.tar.gz and achiving.list in Web ROOT' cd $WEBROOT rm -rf $WEBROOT/ROOT-jar.tar.gz rm -rf $WEBROOT/achiving.list echo echo '##### FINISH DEPLOY #####' echo 'Bye'
-
WebServer용량
-
Was 담당자 배국태입니다.
어떤 웹서버인가요? 웹서버의 성격에 따라 달리 구성해야 할 것으로 판단됩니다.
그룹웨어형 서비스인지, 포탈형 서비스 인지, 트래픽 폭주형 서비스인지 구분을 해야 합니다.
서버 ip 등 관련 정보를 부탁 드립니다.
일단, 간략하게 말씀드리면
사용하는 개념(서버) 이 달라 혼동이 올만합니다StartServers = 3
4이상으로 설정 (최초 기동시 만들어지는 child 프로세스 수, *child 프로세스가 실제로 서비스를 담당합니다.)ThreadsPerChild = 25
60 정도로 상향 조정 (하나의 차일드 프로세스가 가질 수 있는 하위 스레드의 수)* ServerLimit = 16
이 항목은 선언되어 있을 수도 없을 수도 있습니다.
여기서 말하는 서버가 차일드 프로세스 (실제로 서비스하는 개체) 입니다.
증설한다면 보통 50정도 설정. 즉 차일드 프로세스를 50개까지 만들 수 있음MaxRequestWorkers = 400
3000 정도로 상향 조정
워커 하나당 처리하는 request를 말함 (워커 = 워킹스레드)MaxRequestWorkers 가 위의 “ServerLimit” 와 “ThreadsPerChild” 를 곱하여 나오는 값으로 이 값이 Active user에 대응 됩니다(정확히는 리퀘스트 숫자임).
권장값을 대입해 계산해 보면
ServerLimit(50) X ThreadsPerChild(60) = MaxRequestWorkers(3000)
그리고 웹서버가 3대면 3000 X 3 = 9000
지금 22주년 기념 행사 관계로 모바일플랫폼팀에 총력지원(!?)을 하다보니 ….
일단, 지금은 시간이 없어서요
자세한 내용은 다음주 화요일 날 나누는 것으로 하겠습니다.
양해 부탁 드립니다.
From: 류현수
Sent: Wednesday, March 20, 2019 7:57 PM
To: 배국태; 이남준
Cc: 송민수; 김민아[Mina]; 임원진; 김민우; 김힘참
Subject: [Club Online TA] 서버 설정 문의안녕하십니까 Club Online Project의 TA IBM 류현수입니다.
배국태 차장님 문의드릴 내용이 있어서 메일 드립니다.
하기와 같이 서버 설정이 되어 있습니다.
제가 계산한 것이 맞는지 문의를 드립니다.
계산 상으로는 Active user 수가 너무 적은 수치가 나오네요 적어도 웹 서버 하나 당 1,000 Active user( like TPS)는 수용이 가능해야 하는데
Active user 수가 75 정도여서 잘못 계산되었거나, 설정에 문제가 아닌가 싶습니다. 운영 서버라면 웹서버 4대에 max가 300 Active Users가 되네요
설정 내용
웹서버 설정
TimeOut = 60초
MaxKeepAliveRequest = 100 동접자의 최대 요청 수
KeepAliveTimeout = 5초 (5초 동안 요청이 없으면 socket 타임 아웃. 길면 socket handshake 시간을 save할 수 있어 성능은 좋아지나 동접이 준다) 동접이냐 응답속도냐
event MPM 모듈인 mpm_event_module를 사용하고 (worker 방식, fork방식 아님)
StartServers: initial number of server processes to start = 3 (초기 프로세스) 현재 개발 서버는 4개가 동작 합니다.
MinSpareThreads: minimum number of worker threads which are kept spare = 75
MaxSpareThreads: maximum number of worker threads which are kept spare = 250
ThreadsPerChild: constant number of worker threads in each server process = 25 (3 서버 x 25 threads = 총 Max 75 thread ) 그럼 초기에 thread 준비하는 초기 값이 max ?, 250 thread는 도달 불가 ?
MaxRequestWorkers: maximum number of worker threads = 400 thread 여기는 언감생심 ?
MaxConnectionsPerChild: maximum number of connections a server process serves before terminating = 0 (unlimited) 연결은 모두 허용
MaxMemFree : The maximum number of free Kbytes per thread, without calling free() = 100 kbytes ( Max 75x100 = 7,500kbytes ) 7.5Mbytes
결론
단일 서버 최대 접속자 : unlimited client, (제한이 필요하지 않나 싶습니다. Active User 에 pending user add하여 약 1.5배 정도 정의하는 것이 맞지 않을까 합니다. 장애 시에 접속자들이 모두 대기자로 몰려서 정상화 후 바로 또 죽음 ㅠ,.ㅠ 아예 장애 시에는 정당히 대기 시켜야 하지 않을까요)
최대 Active user 75 client (좀 늘려야 하지 않나?), 약 1,000 client로 해야 web에서는 pending되지 않을 듯 싶습니다.
최대 메모리 사용량 7.5Mbytes검증은 성능테스트 시에 임계 테스트에서 확인 해 보겠습니다.
Seller API는 상기한 내용이 맞다면 사용량이 많지 않아서 늘릴 필요는 없을 것 같은데 TimeOut(wait time)이 60chaus 충분할까요 ?
Long transaction의 경우 얼마나 유지하는 것이 맞는지 의견 요청합니다.제가 설정 값을 가지고 게산 한번 해 보았는데, 저도 좀 이상하다는 생각이 듭니다 ㅎㅎ 배국태 차장님 의견 요청드립니다.
감사합니다.
류현수 드림