JDK, JDBC, JRE 설치하기

리눅스/APACHE|2015. 1. 16. 16:47
반응형

jdbc 는 mysql 연결 방식으로 설명 드립니다.

설명에 나오는 각 버전은 현재 날짜(2011. 01. 27)의 최신버전입니다.

 

설치파일 버전

- JDK 1.6.0_23

- JRE 1.6.0_23

- JDBC 5.1.14

 

1. 다운로드

최신버전을 아래 URL 에서 다운받으시면 됩니다.

그리고 서버에 upload 하여 설치 준비를 합니다.

 

JDK : http://www.oracle.com/technetwork/java/javase/downloads/index.html

JRE : http://www.oracle.com/technetwork/java/javase/downloads/index.html

JDBC : http://dev.mysql.com/downloads/connector/j/

 

 

2. 설치

파일이 위치한 디렉토리로 이동합니다.

 

1) JDK

[root@sysdocu ~]# sh jdk-6u23-linux-i586-rpm.bin

 

2) JRE

[root@sysdocu ~]sh jre-6u23-linux-i586-rpm.bin

 

3) JDBC

[root@sysdocu ~]tar xvzf mysql-connector-java-5.1.14.tar.gz

[root@sysdocu ~]cp mysql-connector-java-5.1.14/mysql-connector-java-5.1.14-bin.jar /usr/java/jdk1.6.0_23/jre/lib/ext

   (mysql-connector-java-5.1.14-bin.jar 파일을 java 홈디렉토리로 복사합니다.)

 

 

3. 기타 설정

/etc/profile 을 열어 아래 내용을 추가합니다.

 

1) JDK

JAVA_HOME=/usr/java/jdk1.6.0_23
PATH=$PATH:$JAVA_HOME/bin:/usr/local/php/bin
export JAVA_HOME
export PATH=$PATH:/usr/local/bin:/usr/local/tomcat/bin    // tomcat 이 설치되어 있을 경우 tomcat 부분 추가
export JAVA_HOME=/usr/java/jdk1.6.0_23
export CATALINA_HOME=/usr/local/tomcat    // tomcat 이 설치되어 있을 경우 추가
 

2) JRE

추가사항 없습니다.

 

3) JDBC

export CLASSPATH=$CLASSPATH:/usr/java/jdk1.6.0_23/jre/lib/ext/mysql-connector-java-5.1.14-bin.jar

 

추가 후 아래 명령어를 이용하여 적용해줍니다.

[root@sysdocu ~]source /etc/profile

 

반응형

댓글()

다른 도메인 세션 저장 (DB) - 세션 공유

리눅스/APACHE|2015. 1. 16. 16:47
반응형

이전의 방법은 php.ini 를 일일이 수정해 줘야 하기땜에 손이 많이 갑니다


나아진점은 
1. 세션값을 디폴트는 /tmp 밑에 저장하는데 이걸 mysql 을 이용합니다... 
   이렇게 하면 속도도 빨라지고 혹시 서버가 별개이어도 mysql 만 접근이 가능하면 문제

가 되지 않습니다. 
2. php.ini 는 전혀 수정하실 필요 없습니다. (소스상에서 설정 다 바꾸어 줍니다)

머 이정도네요....


설명 들어갑니다...

1. 먼저 아래처럼 session.inc 라는 파일이 있습니다..


[session.inc]

<? 
/* ------------------------------------------------------------------------ 
* Create a new database in MySQL called "sessions" like so: 

* CREATE TABLE sessions ( 
*      sesskey char(32) not null, 
*      expiry int(11) unsigned not null, 
*      value text not null, 
*      PRIMARY KEY (sesskey) 
* ); 
*/

$SESS_DBH = ""; 
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");

function sess_open($save_path, $session_name) 

global $SESS_DBH;

$SESS_DBH = mysql_pconnect("localhost", "heal", "moga33") or die("Can't connect to

SQL Server"); 
mysql_select_db("heal", $SESS_DBH) or die("Can't connect to SQL Server");

return true; 
}

function sess_close() 

return true; 
}

function sess_read($key) 

global $SESS_DBH, $SESS_LIFE;

$qry = "SELECT value FROM sessions WHERE sesskey = '$key' AND expiry > " . time(); 
$qid = mysql_query($qry, $SESS_DBH);

if (list($value) = mysql_fetch_row($qid)) { 
return $value; 
}

return false; 
}

function sess_write($key, $val) 

global $SESS_DBH, $SESS_LIFE;

$expiry = time() + $SESS_LIFE; 
$value = addslashes($val);

$qry = "INSERT INTO sessions (sesskey,expiry,value) VALUES ('$key', $expiry,

'$value')"; 
$qid = mysql_query($qry, $SESS_DBH);

if (! $qid) { 
$qry = "UPDATE sessions SET expiry = $expiry, value = '$value' WHERE sesskey =

'$key' AND expiry > " . time(); 
$qid = mysql_query($qry, $SESS_DBH); 
}

return $qid; 
}

function sess_destroy($key) 

global $SESS_DBH;

$qry = "DELETE FROM sessions WHERE sesskey = '$key'"; 
$qid = mysql_query($qry, $SESS_DBH);

return $qid; 
}

function sess_gc($maxlifetime) 

global $SESS_DBH;

$qry = "DELETE FROM sessions WHERE expiry < " . time(); 
$qid = mysql_query($qry, $SESS_DBH);

return mysql_affected_rows($SESS_DBH); 
}

session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write",

"sess_destroy", "sess_gc"); 
session_set_cookie_params(0, "/", ".url.com");

session_start();

?>



이 파일이 젤 중요한데요... 
요걸 세션을 쓰는곳마다 (그니까 session_start() 가 쓰이는 곳) 마다 첨부시켜주세요.... 
젤 위부분에 보면 테이블이 있습니다. 이거 mysql 에 만들어 주세요. 세션이 저장될 테이

블입니다. 
글구 젤 밑에서 두번째 줄에 보면 
session_set_cookie_params(0, "/", ".url.com"); 
이게 있는데여 요걸 그쪽 도메인에 맞게 수정해 주세요...



2. 그리구 테스트 해보는 파일....

[session.php]

<?

include "session.inc";

if ($mode == 'login') 
{

if ( $logid=='toughing' && $passwd=='aaaa' ) 

echo(" 
Login OK....<br> 
");

$_logid = $logid; 
$_passwd = $passwd; 
session_register("_logid"); 
session_register("_passwd");

echo(" <meta http-equiv='Refresh' content='1; URL=session1.php'> "); 

else 

echo("Login Failure....<br>");

echo(" <meta http-equiv='Refresh' content='3; URL=$PHP_SELF'> "); 
}

exit; 

else if ($mode == 'logout') 

session_unregister("_logid"); 
session_unregister("_passwd");

echo(" <meta http-equiv='Refresh' content='0; URL=$PHP_SELF'> "); 
}

//sess_gc(1); 
echo(" 
  <form name='log' action='$PHP_SELF' method='post'> 
<input type=hidden name=mode value=login> 
아이디 <input type=text size=10 name='logid' style='border : 1 solid #666666;

font-family : 돋움'><br> 
암호 <input type=password size=10 name='passwd' style='border : 1 solid #666666;

font-family : 돋움'><br> 
<input type=submit value='확인'> 
  </form> 
");

?>



[session1.php]

<? 
include "session.inc";

if ($_logid && $_passwd) 

echo(" 
이 페이지는 로그인을 한 사람만 볼 수 있당..<br> 
<a href='test.php'>갈은 도메인</a> 
<a href='http://www.hul.com/test.php?$SID'>다른 도메인</a> 
<form name='log' action='session.php' method='post'> 
<input type=hidden name=mode value=logout> 
<input type=submit value='로그아웃'> 
</form> 
"); 
$ss = session_get_cookie_params(); 
echo("^$ss[lifetime]^$ss[path]^$ss[domain]^"); 
exit; 
}


echo("아무나 다 보는 페이지..<br>");

?> 

 

[출처] 바게의 열린공간 | BAGE (http://blog.bagesoft.com/197)

반응형

댓글()

스마트캐싱 (squid 3.2.0.3) 설정

리눅스/APACHE|2015. 1. 16. 16:47
반응형

본 매뉴얼은 웹서버포트 8080, squid 포트 80을 기준으로 작성하였습니다.

웹서버에 사용하는 도메인이 많은 가운데 한개의 도메인만 squid 적용하고 싶을 경우

웹서버를 80으로, squid 포트를 8080 (또는 3128)으로 변경하여 적용 하시기 바랍니다.

 

 

1. 다운로드

    http://squid-cache.org

 

위 URL 에서 최신 버전을 다운로드 받습니다. (2010.12.23 현재 버전 : 3.2.0.3)

squid 3.2.0.3 바로 받기 : ftp://mirror.aarnet.edu.au/pub/squid/archive/3.2/squid-3.2.0.3.tar.gz

새로운 버전을 다운로드 받아서 ftp로 업로드 시키거나 위에 기재된 버전을 wget을 이용하여 아래와같이 다운받습니다.

 

cd /usr/local/src

wget ftp://mirror.aarnet.edu.au/pub/squid/archive/3.2/squid-3.2.0.3.tar.gz

 

 

2. 설치

tar xvzf squid-3.2.0.3.tar.gz

cd squid-3.2.0.3

./configure --prefix=/usr/local/squid

make

make install

 

 

3. 설정 

사용자, 그룹 생성 및 소유자 변경

groupadd -g 3128 squid
adduser -u 3128 -g squid -d /usr/local/squid/var squid    // 홈 디렉토리가 이미 있어서 파일을 복사하지 않는다고 나옵니다.

passwd squid    // squid 계정의 패스워드를 입력합니다.

chown squid.squid -R /usr/local/squid

 

squid 설정 파일을 아래 내용으로 대체하고 도메인 및 포트는 적절하게 수정합니다.

vi /usr/local/squid/etc/squid.conf

 

hierarchy_stoplist cgi-bin ?
acl apache rep_header Server ^Apache
 

# 홈페이지 소스 (또는 특정 단어)는 캐시서버에 저장하지 않음

acl QUERY urlpath_regex cgi-bin ? php php3 htm html jsp js css asp aspx

cache deny QUERY    (이부분 포함되는지 안되는지 확인 필요)

 

# 디스크에 저장할 객체를 대체하는 방식

cache_swap_low 90

cache_swap_high 95

 

memory_replacement_policy lru
emulate_httpd_log on
log_ip_on_direct on
log_mime_hdrs off
log_fqdn off
quick_abort_min 16 KB
quick_abort_max 16 KB
quick_abort_pct 95
negative_ttl 60 seconds
connect_timeout 60 seconds
read_timeout 1 minutes
request_timeout 1 minutes
client_lifetime 1 day
half_closed_clients off
pconn_timeout 60 seconds
shutdown_lifetime 60 seconds
acl BLOCK_URI urlpath_regex -i ../ ... .. .ida .IDA .cnf .dll passwd boot .exe cmd  default.ida XXXXXX /bin/sh  wget
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
acl SSL_ports port 443
acl Safe_ports port 8080    # http
acl Safe_ports port 21      # ftp
acl Safe_ports port 443     # https
acl Safe_ports port 1025-65535  # unregistered ports
acl CONNECT method CONNECT
http_access allow all
http_access allow manager localhost
http_access deny BLOCK_URI
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
 

# ★사용자 계정과 설정한 패스워드를 입력합니다.

cache_mgr squid
cachemgr_passwd sysdocu!@#$ all    # 여기서 sysdocu!@#$ 가 패스워드입니다.
 

# squid 데몬을 실행할 사용자
cache_effective_user squid

cache_effective_group squid

 

# 사용할 도메인 등록

visible_hostname img.sysdocu.com
 

# 캐시에 저장될 파일 크기
maximum_object_size 15 MB

minimum_object_size 10 KB


cache_access_log /usr/local/squid/var/logs/access.log
cache_log /usr/local/squid/var/logs/cache.log
cache_store_log /usr/local/squid/var/logs/store.log
pid_filename /var/run/squid.pid

 

# 캐시 메모리로 잡을 메인 메모리 (1GB 식으로 해도 됌)
cache_mem 2048 MB

 

logfile_rotate 1
memory_pools on
memory_pools_limit 0
client_db off
always_direct allow all
error_directory /usr/local/squid/share/errors/ko
uri_whitespace deny
high_response_time_warning 1500

 

# 서버IP 및 웹서버 포트(8080)

cache_peer 115.68.39.11 parent 8080 0

 

# squid 가 사용할 포트(80) 및 웹서버 포트(8080)
http_port 80 accel defaultsite=img.sysdocu.com:8080

 

 

스왑디렉토리를 초기화 합니다. (추후 초기화 할때는 squid 를 중지 후 초기화 하세요.)

/usr/local/squid/sbin/squid -z

squid 를 구동합니다.

/usr/local/squid/sbin/squid

[참고]

종료방법 : pkill -9 squid

 

아래와 같이 squid 가 사용하는 포트를 확인할 수 있습니다.

netstat -nltp | grep squid

tcp        0      0 0.0.0.0:80                0.0.0.0:*                   LISTEN      1943/(squid-1)

 

※ 해당 포트번호(80) 를 iptables 에 등록하여 접근 허용하도록 합니다.

    웹서버도 허용이 되어있나 다시 확인합니다.

 

 

4. 확인

웹브라우저로 이미지 파일을 열어봅니다.

 

예) http://img.sysdocu.com/images/love.jpg

 

이미지가 뜬것을 확인했습니다.

그럼 서버내 이미지 파일 love.jpg 파일을 삭제(또는 파일명 변경)하고

위 URL 로 다시 접속해 봅니다.

 

이미지가 뜨면 성공입니다!

파일이 해당 위치에 없는데도 나타나는것은 서버 HDD에서 이미지를 읽지않고

메모리에서 읽어오기 때문입니다. 수고하셨습니다. ^^

반응형

댓글()

Apache 2.3.8 + Tomcat 6.0.0 + JAVA 연동

리눅스/APACHE|2015. 1. 16. 16:46
반응형

Apache 2.3.8, Tomcat 6.0.0 및 JAVA는 이미 설치되어 있다고 가정하고

연동 방법을 설명 드립니다.

 

1. JK connectors 다운로드

현재 최신버전은 jk 1.2.31 입니다. (2010.12.06 기준)

그리고 JK2 는 현재 개발이 되지 않고 있다는 소문이 들리기도 합니다.

 

jk 1.2.31 다운로드

cd /usr/local/src

wget www.apache.org/dist/tomcat/tomcat-connectors/jk/source/jk-1.2.31/tomcat-connectors-1.2.31-src.tar.gz

 

※ 신버전 안내 페이지 : http://tomcat.apache.org/connectors-doc/

 

 

2. JK connectors 설치

tar xvzf tomcat-connectors-1.2.31-src.tar.gz

cd tomcat-connectors-1.2.31-src/native

sh buildconf.sh

./configure --with-apxs=/usr/local/apache/bin/apxs

make

make install

 

※ httpd 2.x 이면 --with-apxs2 라고 생각이 들어도 막상 해보면 에러나는것을 보실 수 있습니다.

    apache 1.x 이나 httpd 2.x 에 관계없이 --with-apxs 라고 옵션을 줍니다.

 

mod_jk.so 가 설치된것이 확인됩니다.

ll /usr/local/apache/modules/mod_jk.so
-rwxr-xr-x 1 root root 874537 12월  6 10:36 /usr/local/apache/modules/mod_jk.so

 

 

3. 설정 및 파일 생성

각 설정파일을 열어 jk 연동 설정(파란색 부분)을 합니다.

 

vi /usr/local/apache/conf/httpd.conf

 

LoadModule jk_module modules/mod_jk.so

 

DirectoryIndex index.html index.jsp

 

<IfModule mod_jk.c>
    JkWorkersFile /usr/local/apache/conf/workers.properties
    JkShmFile /usr/local/apache/logs/mod_jk.shm
    JkLogFile /usr/local/apache/logs/mod_jk.log
    JkLogLevel info
    JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
</IfModule>

------------------------------------------------------------

vi /usr/local/apache/conf/extra/httpd-vhosts.conf

 

<VirtualHost *:80>
    DocumentRoot /home/sysdocu/public_html
    ServerName sysdocu.com

    ServerAlias www.sysdocu.com

    <Directory />
        Options FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
JkMount /*.jsp default
</VirtualHost>

------------------------------------------------------------

vi /usr/local/apache/conf/workers.properties    // 파일생성

 

workers.tomcat_home=/usr/local/tomcat

workers.java_home=/usr/java/jdk1.6.0_22

worker.list=default

worker.default.type=ajp13

worker.default.host=localhost

worker.default.port=8009

worker.default.lbfactor=1

worker.default.connection_pool_timeout=600

worker.default.socket_keepalive=1

 

------------------------------------------------------------

vi /usr/local/tomcat/conf/server.xml

파일을 열어 각 부분에 사용할 도메인 및 DocumentRoot 디렉토리를 입력합니다.

 

       <Host name="sysdocu.com" appBase="/home/sysdocu/public_html"

       unpackWARs="true" autoDeploy="true"

       xmlValidation="false" xmlNamespaceAware="false">

       <Context path="" docBase="/home/sysdocu/public_html" crossContext="true" debug="0" reloadable="true"/>

       <Alias>www.sysdocu.com</Alias>

       </Host>


 

 

4. 적용하기

아래 순서로 웹서버를 재시작하고 DocumentRoot 디렉토리에 jsp 소스파일을 만들어 확인합니다.

 

tomcat 중지 > apache 재시작 > tomcat 시작

반응형

댓글()

홈페이지 한글 깨짐(다이아몬드 모양) 현상 해결

리눅스/APACHE|2015. 1. 16. 16:46
반응형

* 본 내용은 rpm 패키지 httpd-2.2.3 에서 확인 하였습니다.

 

홈페이지에서 한글이 네모 형태로 깨져보이는것은

/etc/sysconfig/i18n 하고 상관없이

httpd.conf 에서 캐릭터셋 설정 수정만 하면 됩니다.

AddDefaultCharset euc-kr
 

문자로는 'Add' 로 되어있지만 한개만 세팅해놓아야 사용이 가능합니다.

이렇게 하면 UTF-8 로 저장한 문서도 잘보이고 ANSI (euckr) 로 저장한 파일도 잘보입니다.

 

이렇게 해도 안되는 경우가 있는데, php 를 사용한다면 php.ini 옵션 설정으로 해결이 가능합니다.default_charset = "EUC-KR"

 

 

반응형

댓글()

JAVA 파일 (J2SE) 다운로드 바로 하기

리눅스/APACHE|2015. 1. 16. 16:45
반응형

http://java.sun.com/products/archive/j2se/5.0_06/index.html

 

위 URL 중 5.0_06 은 버전 1.5.0_06 을 말합니다.

버전을 바꿔서 접속 후 다운로드 하시면 됩니다.

반응형

댓글()

Apache MPM 방식 Prefork / Worker

리눅스/APACHE|2015. 1. 16. 16:45
반응형

원문 : http://www.camelrichard.org/apache-prefork-vs-worker
참고 : http://dakrink.tistory.com/45


Prefork는 일반적으로 Single CPU 또는 Dual CPU에서 성능이 좋고 Worker는 일반적으로 멀티 CPU 시스템에서 성능이 좋다.

 

Prefork
<IfModule mpm_prefork_module>
      StartServers                   5
      MinSpareServers            5
      MaxSpareServers          10
      MaxClients                  150
      MaxRequestsPerChild     0
 </IfModule>


Worker
<IfModule mpm_worker_module>
       StartServers                 2
       MaxClients               150
       MinSpareThreads       25
       MaxSpareThreads      75
       ThreadsPerChild         25
       MaxRequestsPerChild   0
</IfModule>

 


Apache MPM 이란? 
MPM (Multi-Processing Module) : 다중 처리 모듈
☞ apache 가 받아들인 요청을 처리하기 위해 "자식 process" 에게 분배하는 방식이다.

 

종류 : 여러가지 종류가 있으나 대표적인 prefork 방식과 Worker 방식만 소개 하겠습니다.

 

Prefork 
실행중인 프로세스 복제하여 실행 ( 메모리 영역까지 같이 복제) 
프로세스가 소비하는 메모리가 많음. 
응답프로세스를 미리 띄워놓고 클라이언트 요청시 자식 프로세스가 반응하게 되는 방식.

 

prefork MPM ( --with-mpm=profork) 컴파일
Prefork 방식은 일반적으로 single CPU 또는 Dual CPU에서 성능이 좋고


Worker 
worker MPM ( --with-mpm=worker) 컴파일
Worker 방식은 일반적으로 멀티 CPU 시스템에서 성능이 좋다.
요청을 thread 단위로 처리 ( 최대 64개의 thread 처리 가능 ) 
지정된 만큼의 프로세스와 각 스레드를 준비하여 클라이언트의 요청을 받아들이는 설정


Prefork 방식과 Worker 방식의 차이점 
(1)  Worker가 Prefork에 비해 적은 메모리 사용한다. 
(2)  Worker : 통신량이 많은 서버에 적절한 형태를 가진다.
(3)  Prefork : 안전하지 않은 제 3자가 만든 모듈을 사용할 수 있다. 
(4)  Prefork : 디버깅이 빈약한 플랫폼에서 쉽게 디버깅 할 수 있다.
(5)  ‘Worker‘ 와 ‘Prefork‘ 의 속도는 비슷하다.
(6)  apache MaxClient : Prefork 방식일 경우 최대 256 까지 변경 가능하다.

 

 

prefork 의 구동 방식은 child 프로세스를 똑같이 복사하면서 access를 처리하여, 이로인해 메모리도 똑같이 복사하게 되며 당연히 메모리를 많이 소비합니다.

 

이러한 단점을 극복하고자 나온게 httpd-2x.x 부터는 mpm 중에서 worker 가 추가되어 나왔으며, 모든 access 를 하나의 쓰레드로 처리하여, 결론적으로 메모리 소비에는 어느 정도 효과가 있으나, 하나의 쓰레드가 문제가 생기면 해당 쓰레드에 access 중인 모든 프로세스에 문제가 발생됩니다.

 

결론적으로 복제된 프로세스만 영향을 받는 prefork 에 비해서 굉장히 불안해 집니다.

 

대안으로 하나의 쓰레드가 처리하는 access 프로세스를 64개로 기본적으로 제한하고, 또는 수정할 수 있게되어 있으나, 이 부분도 더 개선이 되어야겠습니다.

 

[출처] SYSTEM Engineer 깽애니네 (리눅스, 윈도우, 보안, DDOS, 네트워크, 프로그래밍) - http://mojily.pe.kr/bbs/board.php?bo_table=B19&wr_id=91

 

반응형

댓글()

다수 웹서버에서 PHP 세션 공유

리눅스/APACHE|2015. 1. 16. 16:45
반응형

L4, LVS, DNS RR 등으로 여러대의 웹서버를 운영하다보면
늘 고민하게 되는게 세션 공유일 것 같다.

물론 L4의 Metric 중에 Hash를 이용하면 어느정도 해결 될 수 있는 문제이지만,
가끔 클라이언트가 다른 서버로 세션이 할당되는 경우를 볼 수 있다.

나 또한 이 문제로 많은 고민을 했고, 여러 많은 HOW를 보았지만 썩 마음에 드는것이 없었다.
아마 세션 공유를 위해서 사용되는 방법은 아래의 3가지가 가장 보편적이지 않을까 싶다.

1. NFS, Samba
특정 서버의 디렉토리를 다수의 웹서버에서 Network를 통해 공유하는 것이다.
그럼 한곳의 디렉토리에 모든 세션 파일이 존재할 것이고 문제는 해결이 된다.
그렇지만 NFS나 Samba는 Write 효율성이 상당히 떨어지는 데몬이다.
세션은 그 특성상 read/write가 매우 빈번히 일어나기 때문에 효율성 면에서는 좋지 않다.
(개인적으로 이 방법을 사용하다가 피본적이 있다-_-;;)

2. DBMS
세션 데이터를 DBMS와 연동하여 DB에 저장하는 방식이다.
보편적으로 주로 사용되는 방법이지만, 접속자가 매우 많은 환경에서는
DB서버에 부하가 늘어날 수 밖에 없는 구조이다.
또한 DBMS에서 생기는 lock도 무시못할 변수로 떠오를 수 있다.

3. Daemon
말 그대로 데몬을 이용하여 세션을 공유하는 방식이다.
세션서버를 따로 구축하기에 제일 적절한 방법이 아닐까 싶다.

늘 그렇지만.. 난 언제나 서론이 참 길다.
오늘은 sharedance 라는 데몬을 소개하고자 한다.
지인의 소개로 알게된 데몬인데..
약 2년정도를 15대의 웹서버에 적용해서 사용하고 계신다는데.. 별 문제는 없으시다고 한다.
그래서 현재 우리 회사에서도 적용중인 데몬이다.

1. 세션 서버 구성
이 데몬은 세션 서버로 사용될 서버에만 설치해주면 된다. 웹서버에는 설치할 필요가 없다.
sharedance의 최신버전은 http://sharedance.pureftpd.org/ 여기서 구할 수 있으며,
RPM으로 구하고 싶다면 http://rpm.pbone.net/ 에서 sharedance로 검색하면 된다.

1-1. RPM 설치

설치 끝났다. 참 쉽다. -_-

1-2. config 설정
sharedance의 환경설정 파일은 /etc/sysconfig/sharedance 에서 해주면 된다.
설정할 내용이 많은 것도 아니고, 달랑 2개면 된다.

SHAREDANCE_DIR="/var/lib/sharedance"
SHAREDANCE_OPTIONS="--expiration=1800 --timeout=1800"

SHAREDANCE_DIR 은 세션 파일이 저장될 디렉토리를 의미한다.
SHAREDANCE_OPTIONS 는 데몬을 시작할때 사용할 옵션을 지정해주는 것이다.
어떤 옵션들이 있는지 보고 싶다면 sharedanced --help 라고 치면 나온다.

1-3. sharedance 시작

[root@localhost]# /etc/init.d/sharedance start

이제 sharedance 사용 준비가 모두 완료 되었다.


2. Client 설정 (웹서버)
웹서버는 크게 설정하거나 설치할 내용이 없다.
단순히 php.ini에서 sharedance의 handler 파일만 호출해주도록 설정하면 된다.

2-1. handler 파일 준비
이 파일을 직접 만들 필요는 없고, sharedance 에서 제공하는 파일을 그대로 가져다 쓰면 된다.
세션서버에서 sharedance를 RPM으로 설치했다면,
/usr/share/doc/sharedance-0.6/php/ 에 핸들러 파일이 존재할 것이다.

[root@localhost]# ls /usr/share/doc/sharedance-0.6/php
session_handler.php  sharedance.php  test_session.php  test_sharedance.php

필요한 파일은 session_handler.php와 sharedance.php 파일이다.
이 2개의 파일을 웹서버로 전송한다.

2-2. handler 파일 복사 및 설정
세션서버에서 전송받은 핸들러 파일을 적당한곳에 잘 복사해두면 된다.
필자는 편의상 서버 운영에 필요한 파일을 한곳에 몰아서 관리하고 있기 때문에
/etc/sadmin/httpd/sharedance 에 복사를 했다.

핸들러 파일이 세션서버를 이용할 수 있도록, 핸들러 파일을 약간 수정해야 된다.
그렇지만 그리 어려운 내용은 아니기 때문에 쉽게 수정할 수 있다.

[root@localhost]# vi /etc/sadmin/httpd/sharedance/session_handler.php
define('SESSION_HANDLER_HOST', '192.168.0.100');

이 부분은 세션서버를 지정해주는 부분이다.
만약 세션서버가 같은 서버에서 돌고 있다면 localhost로 지정하면 될 것이고,
다른 서버에서 돌고 있다면 그 서버의 ip 혹은 host를 적어주면 된다.

[root@localhost]# vi /etc/sadmin/httpd/sharedance/sharedance.php
define('SHAREDANCE_DEFAULT_PORT', 1042);
define('SHAREDANCE_DEFAULT_TIMEOUT', 10);

이 부분은 세션서버의 listening port와 timeout 시간을 설정해주는 부분이다.
만약 세션서버에서 데몬의 포트가 다르게 설정되어 있다면 이곳에서 수정을 해주면 된다.

2-3. php.ini 설정
이제 모든 준비가 끝났으므로 웹서버의 PHP에서 session을 이용할때
sharedance의 핸들러를 통해 세션서버와 통신하도록 설정해주기만 하면 된다.

[root@localhost]# vi /etc/php.ini
...
auto_prepend_file = /etc/sadmin/httpd/sharedance/session_handler.php
...
session.save_handler = user

php.ini 수정이 모두 끝났으면 웹서버를 재시작하여 변경된 php.ini의 내용을 reload 시킨다.

3. sharedance 확인
모든 설정과 준비가 끝났다.
세션서버에 세션파일이 잘 생성 되는지 확인을 해보자.

[root@localhost]# ls /var/lib/sharedance
01c6hof0u872jp3grka4ifo3u4  4u44789jq4vtjt7l2fp3t1ime6  e7d6nq244j27l8bllif792pp25
...
...

위와 같이 세션파일이 생성이 된다면, 정상적으로 웹서버와 세션서버가 통신하고 있는 것이다.

 

[출처] Tini's real life story (http://blog.tini4u.net/99)

반응형

댓글()

웹서버 스트레스 테스트

리눅스/APACHE|2015. 1. 16. 16:44
반응형

웹서버 스트레스 테스트

 

방법 1.
    

    - ab 사용법 
         -n requests 요청을 수행할 개수 
         -c concurrency 요청을 만들 개수로 동시 사용자 개념  
         -v verbosity 얼마나 자세한 정보를 화면에 출력해 줄 것인지 결정 
         -w HTML 문서형식으로 테이블로 만들어 결과를 화면에 출력 
         -k HTTP 프로토콜의 지속연결 (KeepAlive) 기능을 사용 
 
        ./ab -n 100 -c 10 http://www.xxxxx.com:80/ 
        10 명의 유저가 동시에 http://www.xxxxx.com/index.html 을 요청 
        각각의 시뮬레이트 유저는 요청을 10 번씩 하게 됩니다. 
 
        ab -n 1500 -c 50 http://www.xxxxx.com:80/ 
        요청을 30 x 50 (50 명의 사용자가, 각각 30 번의 요청)

 

방법 2.


     가끔 네트웍 카드를 테스트 해야 할 경우가 있는데, 이 때 최대로 트래픽을 주는 방법입니다. 
     우선 순수하게 네트웍 트래픽만을 이용하여 부하를 줘야 하기 때문에 disk나 기타 다른 IO장 
     치의 영향을 최소화 해야 합니다. 이를 위하여 /dev/zero와 /dev/null 가상 장치를 이용 합니다. 
 
     우선 테스트 할 기계를 A라고 하고 그 상대로 B라는 기계를 준비 합니다. 물론 B는 A보다 적어도 
     많은 밴드위스를 지원하는 네트웍 카드가 장착 되어 있어야 하겠죠.

 

    1. A와 B 모두 rsh이 가능 하도록 .rhost등을 설정 합니다. 
 
    2. B로 root로긴 하여 다음 명령을 실행 합니다. 
 
          # dd if=/dev/zero | rsh A dd of=/dev/null &

         최대의 부하를 주기 위해 위 명령을 두 세번 반복 합니다.

 

    3. A로 로긴 하여 netstat -i 명령으로 트래픽을 확인 하실 수 있습니다. 
 
         # netstat -i 1 
         input le0 output input (Total) output 
         packets errs packets errs colls packets errs packets errs colls 
         825933 0 606554 0 0 853023 0 633644 0 0 
         730 0 366 0 0 730 0 366 0 0 
         848 0 427 0 0 848 0 427 0 0 
         815 0 413 0 0 815 0 413 0 0 
         849 0 425 0 0 849 0 425 0 0 
         868 0 436 0 0 868 0 436 0 0 
         862 0 432 0 0 862 0 432 0 0 
 
     위의 결과 10Mbps 인터페이스인 le0 의 in + out 패킷은 초당 평균 약 1300개 정도이고 
     이것은 1300 * 1500Bytes (MTU) = 1.95MBytes/s 가 되겠네요. 이를 다시 bps로 바꾸면 
     15.6Mbps 가 되고 full duplex이므로 괜찮은 throughput 이라고 할 수 있습니다. 
 
     4. 확인이 끝났으면 B에 실행 되고 있던 백그라운드 작업을 kill 명령으로 종료 시킵니다. 


방법3 (프로그램 툴사용) siege

 

    시즈의 특징 
 
     '시즈’라는 이름은 이 툴의 모든 것을 말한다. 서버를 에워싸 서버가 어떤 이유로 문제를 
     일으켰는지를 보여주는 것이다. 유닉스 기반의 명령행 기반 툴인 시즈는 GNU GPL 오픈소스 
     라이선스를 따르기 때문에 사용, 수정, 배포가 모두 무료다. 
 
     시즈는 단일 URL의 부하 테스트는 물론 많은 URL을 메모리로 불러들여 사용자가 설정한 
     시뮬레이션 유저만큼의 부하를 동시에 테스트할 수 있다. 또한 기록된 총히트수와 전송된 
     바이트수, 반응시간, 병행성(Concurrency), 리턴 상태 등을 보여주며, HTTP 1.0/1.1 프로토콜, 
     GET/POST 디렉티브, 쿠키, 트랜잭션 로깅, 기본적인 인증 등을 지원한다
 
     builder.com 사이트에서 다운로드

     tar zxvf siege-latest.tar.gz
     ./configure
     make
     make install

 

    - 실행하기 
 
     시즈는 웹서버를 테스트하는 다양한 옵션을 제공한다. 가장 간편한 실행 방법은 단일 URL 
     테스트다. 이것은 특정 페이지가 대량 트래픽에 어떻게 반응하는지를 잘 보여준다. 이때 
     중요한 옵션 두 가지가 동시 접속자수(-c 옵션, 디폴트는 10)와, 반복 쿼리수 혹은 시간으로 
     표현되는 테스트 기간(-t)이다. 예를 들어 25명이 동시에 1분간 접속하는 환경이라면 다음과 
     같이 실행하면 된다. 
 
     $ siege -c25 -t1M [테스트될 주소](www.naver.com)

 

 

[출처] 잡동사니 | 풍운아 (http://blog.paran.com/bandi2030/21544231)

반응형

댓글()

mod_rewrite 를 이용한 주소 단축

리눅스/APACHE|2015. 1. 16. 16:44
반응형

DocumentRoot 디렉토리에 .htaccess 파일을 생성하여 아래내용을 삽입합니다.
- 또는 apache 의 httpd.conf 에 추가해도 됩니다. (모든 사이트 적용)

- virtualhost 안에 설정도 가능합니다. (개별적 사이트 적용)

 

예1) http://sysdocu.tistory.com/11 입력시 http://sysdocu.tistory.com/aa/bb/11 의 페이지가 보이게 설정

 

        RewriteEngine on
        RewriteRule ^([a-zA-Z0-9_-]+)$ /aa/bb/$1 [L]

 

예2) http://sysdocu.tistory.com/11 입력시 http://sysdocu.tistory.com/list.php?action=search&search_type=id&search+word=11 의 페이지가 보이게 설정
 

        RewriteEngine on
        RewriteRule ^([a-zA-Z0-9_-]+)$ /list.php?action=search&search_type=id&search_word=$1 [L]

 

- 위 두개 예의 룰은 같은 형식입니다.

- 위 룰을 적용시키면 /11 뿐만 아니라 /abc 등 아무 문자가 와도 입력한 문자를 따라갑니다.

- 주소창에 입력하였던 주소는 변하지 않습니다.

- httpd.conf 에 반드시 AllowOverride 항목이 All 로 되어있어야 합니다.

  None 상태일 경우 별도 파일인 .htaccess 에서 작동이 되지 않습니다.

반응형

댓글()

아파치 user, group 을 root 권한으로 설정

리눅스/APACHE|2015. 1. 16. 16:43
반응형

일반적으로 아파치는 User, Group 을 nobody 권한으로 이용하나,

관리자 root 계정으로 가동할 경우 에러메세지를 보이며 실행이 되지 않습니다.

본래 아파치가 그렇게 정의되어있으며, 이를 무시하고 root 권한으로 가동하고자 할 경우 재컴파일이 필요합니다.

 

우선 설정복구가 쉽도록 아파치 설정파일을 백업해놓고

소스폴더로 이동하여 재컴파일 합니다.

 

1. 백업 및 삭제

여러 백업방법이 있으나 간단한 cp 명령을 이용하여 백업합니다.

[root@sysdocu ~]# cd /usr/local

[root@sysdocu local]# cp -arp apache apache.bak.100610

 

백업하였으면 설치되어있던 아파치를 삭제합니다.

[root@sysdocu local]# rm -rf /usr/local/apache

 

 

2. 컴파일

아파치 소스폴더로 이동하여 재컴파일 합니다.

 

[root@sysdocu local]# cd /usr/local/src/httpd-2.2.11

[root@sysdocu httpd-2.2.11]export EXTRA_CFLAGS="-DBIG_SECURITY_HOLE"
[root@sysdocu httpd-2.2.11]# ./configure --prefix=/usr/local/apache --enable-modules=so --enable-mods-shared=all --enable-modules=shared --enable-ssl --enable-rewrite

[root@sysdocu httpd-2.2.11]# make

[root@sysdocu httpd-2.2.11]# make install

 

이제 httpd.conf 에서 User, Group 항목을 root 로 변환 후 아파치 재시작이 가능합니다.

 

반응형

댓글()