Skip to main content

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의 경우 얼마나 유지하는 것이 맞는지 의견 요청합니다. 

    제가 설정 값을 가지고 게산 한번 해 보았는데, 저도 좀 이상하다는 생각이 듭니다 ㅎㅎ 배국태 차장님 의견 요청드립니다. 

    감사합니다. 
    류현수 드림