블로그 이미지
OSSW(Open Source System SoftWare

calendar

            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            

Notice

redis geo... 명령어들


redis에서 지리 정보를 다루는 것은 딱 좌표(2차원 점)에 대한 것만이다.


여러 지리 정보를 다루는 다른 소프트웨어에 비교하면, 참 단순하다.


공식 홈페이지의 이 관련 명령어는

https://redis.io/commands#geo

페이지를 살펴보면 된다.


국내 홈페이지인 redisgate에는 아직 다루고 있지 않는다.

그나마 joinc에서 간략하게 다루긴 한다.

https://www.joinc.co.kr/w/man/12/REDIS/geo



geoadd

좌표 추가

geopos

추가한 좌표 보기

geodist

좌표간(점들 사이) 거리 구하기

georadius... 명령어들

주변 좌표 찾기


실무에서 쓰일 예제 이야기는 다음에.

- posted by 김상기


'1. 미들웨어이야기 > 06. redis' 카테고리의 다른 글

지리정보와 redis  (0) 2018.07.30
rdb 테이블을 redis로  (0) 2018.06.16
posted by 김상기 ioseph

관계형 테이터베이스 테이블을 redis로 옮기기


1. redis 자료형

  • 문자열, String: 일반적인 key - value, hash로 보면 된다. range, between 이런 것 없다. 그냥 오직 그 key
  • 목록, List: 그냥 배열, push & pop 용, 순서가 색인, 중복된 value, 목록 이름이 key. 하나의 목록을 샤딩할 수는 없다.
  • 집합, Set:: 중복된 value를 가질 수 없는 집합 - RDB 인덱스의 value가 된다. insert = sadd, delete = srem , index key update = smove
  • 해시, hash: RDB의 테이블, key가 테이블이름, field가 Primary Key, value가 json 칼럼들값들, 하나의 해시는 샤딩할 수 없다.
  • 정렬된 집합, sorted set: btree 인덱스 구현용, 하나의 집합을 샤딩할 수 없다. 아래에서 설명
여기서 보듯이 scale out 관점에서 문자열 자료형(key-value)을 제외하고는 모두 scale out에 유연하지 않다. 즉, 문자열 자료형을 외 자료형을 사용한다면, 분산 처리는 응용프로그램에서 독자적으로 구현해야한다. 이 부분에 대해서는 좀 더 고민해 보고 다음 글에서 다루기로 하겠다.

2. RDB 테이블을 redis로.

위에서 살펴 보았듯이, 하나의 테이블은 하나의 해시로 만들면 된다.

문제는 하나의 해시는 redis 서버에서 안쓰면 버린다는 expire 설정을 하는 것도 비효율적이다. 버렸는데, 다시 필요하다면, RDB 에서 테이블 전체를 다시 가져와야하기 때문이다.
즉, 어느 테이블을 redis 서버로 가져올 것인가는 결국 그 redis 서버에서 사용할 수 있는 메모리 크기와 직접적으로 관련된다. swap 메모리를 사용해 가면서까지 굳이 RDB 테이블을 모두 redis로 가져오겠다는 생각은 안하는 것이 좋을 것이다. 

여기서는 커뮤니티 게시판을 서비스를 대상으로 rdb를 redis로 옮기는 것을 살펴보고자 한다.

기존 rdb의 erd는 다음과 같다.


2.1. 사용자들 테이블

사용자들 테이블은 그룹들 테이블과 M:M 관계이다. redis와 같은 key-value 형태의 데이터베이스에서는 이런 다대다 관계는 문자열 키로 값은 그냥 json array로 푸는 것이 제일 편하다.

SET 사용자들:1 '{"로그인ID": "gildong", "이름": "홍길동", "비밀번호": sha256(passwd), "이메일": "user@gmail.com", "사용여부": "Y", "groups"=[1,2,3]}'

그룹들 테이블은 단순하게,

SET 그룹들:1 관리자
SET 그룹들:2 일반사용자
SET 그룹들:3 공동저자
....
이런 형태로 문자열 키로 지정할 수도 있고,

HSET 그룹들 1 관리자
HSET 그룹들 2 일반사용자
....
이런 형태의 hash 테이블 형태로 구현할 수도 있다.

redis 서버의 key 관리 측면에서는 hash 테이블 형이 유용하겠지만, 훗날 분산환경을 위해서는 위의 문자열 키 형태가 더 유용하다.

한편, 관리 차원에서 전체 회원수를 알기 위해서,

SCAN 0 MATCH "사용자들:*" count 100000000000

이런 형태의 명령을 사용하는 것은 정말 위험한 짓이다. 이런 경우를 대비에서 "totalcount::사용자들" 같은 문자열 키를 하나 할당하고, 그 값으로 전체 사용자 수를 기록하고 있는 것이 바람직하다. 이 값은 회원 가입이 있을 때, INCR, 탈퇴할 때, DECR 명령을 이용해서 증,차감 하면 될 것이다.

2.1.1. 사용자들 테이블의 인덱스들

redis에서 그 키에 대한 값을 구할 때, '=' 연산만 가능하다.
즉 >, < , between 같은 연산이 필요하다면, 하나의 정렬된 집합 키(RDBMS의 인덱스가 된다)를 만들고, ZRANGE 명령을 이용해야 한다.

사용자들 테이블에는 총 3개의 인덱스가 정의되어있다.

하나는 기본키이며, 이 키를 사용해서는 오직
= 연산으로만 검색하겠다고 결정해서, 사용자들:1, 사용자들:2... 같은 문자열키를 사용했다.
즉,
SELECT * FROM 사용자들 WHERE 사용자번호 BETWEEN 100 AND 200
같은 쿼리를 사용하지 않겠다는 것이 전제 되어 있다.

두번째 인덱스는 로그인ID에 대한 유니크 인덱스이다.
로그인ID로 검색하는 것을 오직 = 연산만 허용하겠다면,
앞에서 언급한 HSET을 이용한 hash 테이블로도 충분하다.

HSET 사용자들_로그인ID_색인 a@emai.com 1

이 hash 테이블의 키는 email, 값은 사용자 번호가 될것이다.

즉,
SELECT * FROM 사용자들 WHERE 이메일 = 'a@email.com'
형태의 쿼리 작업을 redis로 푼다면,

다음 절차를 거친다.
  1. HGET 사용자들_로그인ID_색인 a@email.com
  2. GET 사용자들:1
한편,
SELECT * FROM 사용자들 WHERE 이메일 like 'a@email%'
형태의 쿼리를 인덱스를 사용해서 처리하고자 한다면,
상황은 좀더 복잡해진다.

이것을 구현하려면, redis 정렬된 집합을 사용해야한다.

ZADD 사용자들_이메일_색인 1 a@email.com
형태로 색인자료를 만드며, email 값 앞에 있는 1은 사용자번호다.

그리고, 이 색인의 범위검색을 하려면, '[', '(' 문자를 추가해서 범위 검색을 한다.
ZRANGEBYLEX 사용자들_이메일_색인 '[a@email' '(a@emaim'
형태로 사용한다.
SQL 구문으로 바꾸면,
WHERE 이메일 >= 'a@email' and 이메일 < 'a@emiam'
이 될것이다.
즉, 이메일 like 'a@email%' 는 위와 같이 변환해서 사용해야한다.

찾으려고 하는 값인 한글인 경우는 좀 더 복잡해진다.

where 이름 like '대한민%'
이라면, '[대한민' '(대한믽' 이 될것이다. 
마지막 한 글자의 unicode 다음 글자다. 어떻게 구하는지는 스스로 공부를.

이렇게 해서, 정렬된 집합을 이용한 색인 검색이라면, 다음 절차를 거친다.
  1. ZRANGE|ZRANGEBYSCORE|ZRANGEBYLEX 사용자들_이메일_색인 최소값 최대값
  2. 위명령 결과의 배열로 해서,
    for 값 in 값배열
        ZSCORE 사용자들_이메일_색인 값
    형태로 또 사용자 번호 배열을 만들고,
  3. for 사용자번호 in 사용자번호배열
       GET 사용자들:사용자들번호
형태의 복잡한 작업을 해야한다.
물론 2번 작업을 단순화 하기 위해서, 앞에서 이야기한 이메일 기준 hash 테이블도 만들고, 그것을 조회하는 것도 한 방법일 것이다.

세번째 인덱스인 로그인ID에 대한 유니크 인덱스다.
이 인덱스도 email 인덱스 처리방식과 똑같다.

2.2 게시판 테이블

게시판 테이블도 사용자 테이블과 크게 다르지 않기 때문에 설명은 생략하고,
여기서는 드디어 작성일시 기준 비유니크 인덱스를 구현해야 한다.
즉, 같은 작성일시에, 여러개의 게시물이 존재할 수 있음을 가정한 것이다.

(쓸데 없이 옆길로 샌 이야기: 단일 redis 서버를 사용하고, 위 모델링을 실재 구현한다면,
게시물의 작성일시는 절대로 같을 수 없다. 왜냐하면, redis 서버는 단일 프로세스 단일 쓰레드로 사용자 명령을 처리하기 때문에, 모든 명령이 직렬화 된다. 즉 같은 시간이 있을 수 없다. 하지만 사용자 편의를 위해 작성일시를 초단위까지만 사용하겠다면, 충분히 같은 작성일시에 여러개의 게시물이 있을 수 있다)

이렇게 비유니크 인덱스도 정렬된 집합을 사용해서 구현한다.

2.2.1. 게시물 작성일시 색인

redis에서는 시간자료형이 없다. 작성일시 값은 결국 문자나 숫자로 저장되어야한다.
2018-07-01 12:30:25 형태의 문자로 저장하든가, 이 시간의 unixtimestamp 값으로 저장한다.

문자로 저장한다면, ZRANGEBYLEX로 범위검색을 할것이고, 숫자로 저장한다면,
ZRANGEBYSCORE로 검색하면 된다.

작성일시를 문자열로 처리하는 경우
ZADD 게시판_작성일시_색인 1 '2018-07-01 12:30:25'
형태가 될것이고, 앞에서 다룬 것과 똑같이 1은 게시판 기본키인 게시물번호다.

작성일시를 숫자로 처리한다면,
ZADD 게시판_작성일시_색인 1530621697 1
형태가 될 것이고, 1530621697 숫자는 unixtimestamp 값이고, 뒤에 1은 게시물번호가 된다.

이 색인을 이용한 =, >, <, >=, <=, between 연산은 직접 구현해야한다.


2.3 태그 테이블

태그 테이블은 단순하게 생각하면, 집합을 사용하면 된다.

SADD 태그:서울 1
SADD 태그:서울 5
SADD 태그:서울 100
....
서울이라는 태그를 지정한 모든 게시물 번호를 찾으려면,
SMEMBERS 태그:서울
형태로 게시물 번호를 요소로 하는 배열을 만들고,
그 배열의 각 요소를 기본키로해서 게시판:게시물번호 문자열 키에 대한 값을 구하면 된다.

여기서 중요한 것은 SMEMBERS는 현재, limit offset count 기능이 아직까지는 구현되지 않았기에,
한 태그의 값인 게시물번호를 모두 찾아 응용프로그램에게 넘겨준다.
그렇기 때문에, 한 키에 대한 SMEMBERS의 결과값이 많으면 많을수록 이 명령의 성능이 더 떨어진다.

3. 마무리

INSERT INTO t VALUES (.....)
=> SET t:pk 'json'

SELECT * FROM t where pk_column = pk_value
=> GET t:pk_value

SELECT * FROM t WHERE int_column >= start_value and int_column <= end_value
=> ZRANGEBYSCORE t_int_column_index start_value end_value
     loop primary_keys
        GET t:pk_value

SELECT * FROM t WHERE text_column LIKE 'find_str%'
=> ZRANGEBYLEX t_text_column_index '[find_str' '(find_sts'
     loop primary_keys
       GET t:pk_value

SELECT t.* FROM t, tags WHERE t.pk = tags.pk_value AND tags.tag = 'tag_value'
=> SMEMBERS tags tag_value
     loop pk_values
       GET t:pk_value


- posted by 김상기

'1. 미들웨어이야기 > 06. redis' 카테고리의 다른 글

지리정보와 redis  (0) 2018.07.30
rdb 테이블을 redis로  (0) 2018.06.16
posted by 김상기 ioseph

Name-Based VirtualHosts and SSL

하나의 Apache 웹서버에 동일한 포트로 다양한 SSL을 사용하는 서비스를 하기 위해서는 다음과 같은 방법을 사용하면 됩니다.

1. 가상호스 사용
    - ServerName을 달리 설정한다. 
    - 각 가상호스트마다 SSL 인증서를 설정한다.

2. NameVirtualHost 지시어 사용

설정 예제 참고하십시오.
Listen 192.168.1.1:443

LoadModule ssl_module   modules/mod_ssl.so

SSLPassPhraseDialog     builtin
AcceptMutex             flock
SSLSessionCache         shmcb:/var/cache/httpd/mod_ssl/ssl_scache(512000)
SSLSessionCacheTimeout  300
SSLMutex                default
SSLRandomSeed           startup /dev/urandom  256
SSLRandomSeed           connect builtin

NameVirtualHost 192.168.1.1:443

<VirtualHost 192.168.1.1:443>
        SSLEngine on
        SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP

        SSLCertificateFile      /etc/ssl/star.example.com.crt
        SSLCertificateKeyFile   /etc/ssl/star.example.com.key

        ServerName      "one.example.com"
        DocumentRoot    "/var/www/html/one"

        CustomLog       "/var/log/httpd/one-access.log" combined
        ErrorLog        "/var/log/httpd/one-error.log"

        <Directory /var/www/html>
                AllowOverride none

                Order Allow,Deny
                Allow from all
        </Directory>
</VirtualHost>

<VirtualHost 192.168.1.1:443>
        SSLEngine on
        SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP

        SSLCertificateFile      /etc/ssl/star.example.com.crt
        SSLCertificateKeyFile   /etc/ssl/star.example.com.key

        ServerName      "two.example.com"
        DocumentRoot    "/var/www/html/two"

        CustomLog       "/var/log/httpd/two-access.log" combined
        ErrorLog        "/var/log/httpd/two-error.log"

        <Directory /var/www/html>
                AllowOverride none

                Order Allow,Deny
                Allow from all
        </Directory>
</VirtualHost>

by hyeons 1월

'1. 미들웨어이야기 > 02. Apache' 카테고리의 다른 글

Apache Name-Based VirtualHosts and SSL  (0) 2015.01.06
apache redirectmatch  (0) 2014.12.03
Apache 로그 파일 관리  (0) 2014.12.03
Apache 설치  (0) 2014.12.03
알아두면 유용한 apache httpd실행 옵션  (0) 2014.12.03
apache graceful restart  (0) 2014.12.03
posted by lovelywas

아파치에서 설정한 도메인으로 접속한 모든 사용자에 대해 

모두 특정 url로 보내고 싶을때(서비스 잠시 문닫아 서비스 안내공지 페이지로 보낸다던가...)

RedirectMatch 옵션을 사용할 수 있습니다.


RedirectMatch (.*) http://aaa.com/pp.html




이와는 약간 다르게...뒤에 주소를 그대로 가지고 가면서 도메인만 변경되는 경우

도메인이 변경되어 뒤에 주소는 동일하나 도메인만 변경된 주소로 변경하여 Redirect 시킬 경우


Redirect http://aaa.com


'1. 미들웨어이야기 > 02. Apache' 카테고리의 다른 글

Apache Name-Based VirtualHosts and SSL  (0) 2015.01.06
apache redirectmatch  (0) 2014.12.03
Apache 로그 파일 관리  (0) 2014.12.03
Apache 설치  (0) 2014.12.03
알아두면 유용한 apache httpd실행 옵션  (0) 2014.12.03
apache graceful restart  (0) 2014.12.03
posted by LE07

 

*  Apache 로그 파일 관리

 

1. 로그 rotation 적용

 - 설명 : 아파치 rotatelogs를 이용하여 일자별 로그 생성

 - 설정방법 :  CustomLog "/usr/sbin/rotatelogs logs/access_%Y%m%d.log 86400" common


2. 로그 포맷 변경

- 설명 : 아파치 로그 출력을 아래의 항목으로 변경

- 설정방법 : LogFormat "%h - %t \"%r\" %s>s %b" common

항목

설명 

%A (지역화된) 완전한 요일 이름
%a (지역화된) 3-문자 요일 이름
%B (지역화된) 완전한 달 이름
%b (지역화된) 3-문자 달 이름
%c (지역화된) 날짜와 시간
%d 2-자리 일
%H 2-자리 시간 (24 시간 시계)
%I 2-자리 시간 (12 시간 시계)
%j 3-자리 날짜수
%M 2-자리 분
%m 2-자리 달
%p (지역화된) 12 시간 시계의 am/pm
%S 2-자리 초
%U 2-자리 주일수 (주의 첫번재 날은 일요일)
%W 2-자리 주일수 (주의 첫번재 날은 월요일)
%w 1-자리 요일수 (주의 첫번째 날은 일요일)
%X (지역화된) 시간
%x (지역화된) 날짜
%Y 4-자리 연도
%y 2-자리 연도
%Z 시간대 이름
%% 문자그대로 `%'

 

 

by. 현주희 (11월)

 

'1. 미들웨어이야기 > 02. Apache' 카테고리의 다른 글

Apache Name-Based VirtualHosts and SSL  (0) 2015.01.06
apache redirectmatch  (0) 2014.12.03
Apache 로그 파일 관리  (0) 2014.12.03
Apache 설치  (0) 2014.12.03
알아두면 유용한 apache httpd실행 옵션  (0) 2014.12.03
apache graceful restart  (0) 2014.12.03
posted by DB,MW,OS OSSW(Open Source System SoftWare

 


* Apache 설치

 

설치 및 운영을 위한 계정(apache) 구성

apache@a-virtual-machine:~$ id

uid=1003(apache) gid=1003(apache) 그룹들=1003(apache)

 

apache@a-virtual-machine:~$ pwd

/apache

 

apache@a-virtual-machine:~$ vi .profile

# ~/.profile: executed by the command interpreter for login shells.

# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login

# exists.

# see /usr/share/doc/bash/examples/startup-files for examples.

# the files are located in the bash-doc package.

 

# the default umask is set in /etc/profile; for setting the umask

# for ssh logins, install and configure the libpam-umask package.

#umask 022

 

# if running bash

if [ -n "$BASH_VERSION" ]; then

    # include .bashrc if it exists

    if [ -f "$HOME/.bashrc" ]; then

             . "$HOME/.bashrc"

    fi

fi

 

# set PATH so it includes user's private bin if it exists

if [ -d "$HOME/bin" ] ; then

    PATH="$HOME/bin:$PATH"

fi

 

#### Edit ENV ####

set -o vi

stty erase ^H

alias ll='ls -l'

 

 

### Apache alias ###

alias webstart='/apache/apache-2.2.21/bin/apachectl start'

alias webstop='/apache/apache-2.2.21/bin/apachectl stop'

alias alog='cd /ap_log'

alias acfg='cd /apache/apache-2.2.21/conf'

 

export TMOUT=0

 


 

 

apache 2.2.21 설치

1. apache 2.2.21 설치를 위해 httpd-2.2.21.tar.gz의 압축을 풀어 설치 준비

 

 

2. apache 설치 (prefix) - config

apache@a-virtual-machine:/install/apache/httpd-2.2.21$ ./configure --

prefix=/apache/apache-2.2.21

Configuring Apache Portable Runtime library ...

Configuring APR library

Checking for libraries...

Checking for Threads...

APR will use threads

Checking for Shared Memory Support...

Checking for DSO...

Checking for Processes...

Checking for Locking...

Checking for File Info Support...

Checking for OS UUID Support...

Checking for Time Support...

Checking for Networking support...

Checking for IPv6 Networking support...

Restore user-defined environment settings...

Configuring Apache Portable Runtime Utility library...

Configuring Apache httpd ...

Applying OS-specific hints for httpd ...

Restore user-defined environment settings...

Construct makefiles and header files...

 

3. apache 설치 (prefix) - compile

apache@a-virtual-machine:/install/apache/httpd-2.2.21$ make

 

4. apache 설치 (prefix) - install

apache@a-virtual-machine:/install/apache/httpd-2.2.21$ make install

 

 

 

 

apache 설치 확인

apache@a-virtual-machine:~/apache-2.2.21$ ls -al

합계 68

drwxr-xr-x 15 apache apache  4096 2013-03-19 13:20 .

drwxr-xr-x  4 apache apache  4096 2013-03-19 13:19 ..

drwxr-xr-x  2 apache apache  4096 2013-03-19 13:19 bin

drwxr-xr-x  2 apache apache  4096 2013-03-19 13:20 build

drwxr-xr-x  2 apache apache  4096 2013-03-19 13:19 cgi-bin

drwxr-xr-x  4 apache apache  4096 2013-03-19 13:19 conf

drwxr-xr-x  3 apache apache  4096 2013-03-19 13:19 error

drwxr-xr-x  2 apache apache  4096 2011-09-09 23:25 htdocs

drwxr-xr-x  3 apache apache  4096 2013-03-19 13:19 icons

drwxr-xr-x  2 apache apache  4096 2013-03-19 13:19 include

drwxr-xr-x  3 apache apache  4096 2013-03-19 13:19 lib

drwxr-xr-x  2 apache apache  4096 2013-03-19 13:19 logs

drwxr-xr-x  4 apache apache  4096 2013-03-19 13:20 man

drwxr-xr-x 14 apache apache 12288 2011-09-09 23:29 manual

drwxr-xr-x  2 apache apache  4096 2013-03-19 13:19 modules

 

 

 

by. 현주희(11월)


 

'1. 미들웨어이야기 > 02. Apache' 카테고리의 다른 글

apache redirectmatch  (0) 2014.12.03
Apache 로그 파일 관리  (0) 2014.12.03
Apache 설치  (0) 2014.12.03
알아두면 유용한 apache httpd실행 옵션  (0) 2014.12.03
apache graceful restart  (0) 2014.12.03
httpd 실행 옵션  (0) 2014.12.03
posted by DB,MW,OS OSSW(Open Source System SoftWare

httpd는 아파치의 데몬 실행파일 입니다.

옵션을 통해 유용한 정보를 얻어 봅시다.


[아파치 conf파일 바꿔 기동하기]

./httpd -f /usr/local/apache/conf/httpd.conf

./httpd -f /usr/local/apache/conf/httpd_abc.conf

보통 기본 위치에 존재하는 httpd.conf를 이용하여 아파치를 실행하나,

두개 이상의 설정 파일을 두고 서비스마다 따로 띄운다거나 등에 사용할 때 유용합니다.

./httpd -f /usr/local/apache/conf/httpd.conf

root     32170     1  0 21:35 ?        00:00:00 ./httpd -f /usr/local/apache/conf/httpd.conf

nobody   32171 32170  0 21:35 ?        00:00:00 ./httpd -f /usr/local/apache/conf/httpd.conf

nobody   32172 32170  0 21:35 ?        00:00:00 ./httpd -f /usr/local/apache/conf/httpd.conf

nobody   32173 32170  0 21:35 ?        00:00:00 ./httpd -f /usr/local/apache/conf/httpd.conf

./httpd -f /usr/local/apache/conf/httpd_abc.conf

root     32170     1  0 21:35 ?        00:00:00 ./httpd -f /usr/local/apache/conf/httpd_abc.conf

nobody   32171 32170  0 21:35 ?        00:00:00 ./httpd -f /usr/local/apache/conf/httpd_abc.conf

nobody   32172 32170  0 21:35 ?        00:00:00 ./httpd -f /usr/local/apache/conf/httpd_abc.conf

nobody   32173 32170  0 21:35 ?        00:00:00 ./httpd -f /usr/local/apache/conf/httpd_abc.conf



[아파치 버전정보 확인]

[apache@abc:/apache/apache/bin]# ./httpd -V

Server version: Apache/2.2.24 (Unix)

Server built:   Jul  5 2013 15:26:13

Server's Module Magic Number: 20051115:31

Server loaded:  APR 1.2.7, APR-Util 1.2.7

Compiled using: APR 1.2.7, APR-Util 1.2.7

Architecture:   64-bit

Server MPM:     Prefork



[아파치 사용가능 모듈 확인]

[apache@abc:/apache/apache/bin]# ./httpd -l

Compiled in modules:

  core.c

  mod_authn_file.c

  mod_authn_default.c

  mod_authz_host.c

  mod_authz_groupfile.c

  mod_authz_user.c

  mod_authz_default.c

  mod_auth_basic.c

  mod_include.c

  mod_filter.c

  mod_log_config.c

  mod_env.c

  mod_setenvif.c


[설정된 가상호스트 확인]

[apache@abc:/apache/apache/bin]# ./httpd -S

VirtualHost configuration:

wildcard NameVirtualHosts and _default_ servers:

*:443                  is a NameVirtualHost

         default server aa.bbb..com (/apache/apache/conf/extra/httpd-ssl.conf:16)

         port 443 namevhost aa.bbb..com (/apache/apache/conf/extra/httpd-ssl.conf:16)

         port 443 namevhost bbb.ccc.com (/apache/apache/conf/extra/httpd-ssl.conf:39)

*:80                   is a NameVirtualHost

         default server aa.bbb..com (/apache/apache/conf/extra/httpd-vhosts.conf:3)

         port 80 namevhost aa.bbb..com (/apache/apache/conf/extra/httpd-vhosts.conf:3)

         port 80 namevhost bbb.ccc.com (/apache/apache/conf/extra/httpd-vhosts.conf:18)

Syntax OK


[conf파일 syntax 체크]

[apache@abc:/apache/apache/bin]# ./httpd -t

Syntax OK


[apache help옵션 확인]

[apache@abc:/apache/apache/bin]# ./httpd -h

Usage: ./httpd [-D name] [-d directory] [-f file]

               [-C "directive"] [-c "directive"]

               [-k start|restart|graceful|graceful-stop|stop]

               [-v] [-V] [-h] [-l] [-L] [-t] [-T] [-S]

Options:

  -D name            : define a name for use in <IfDefine name> directives

  -d directory       : specify an alternate initial ServerRoot

  -f file            : specify an alternate ServerConfigFile

  -C "directive"     : process directive before reading config files

  -c "directive"     : process directive after reading config files

  -e level           : show startup errors of level (see LogLevel)

  -E file            : log startup errors to file

  -v                 : show version number

  -V                 : show compile settings

  -h                 : list available command line options (this page)

  -l                 : list compiled in modules

  -L                 : list available configuration directives

  -t -D DUMP_VHOSTS  : show parsed settings (currently only vhost settings)

  -S                 : a synonym for -t -D DUMP_VHOSTS

  -t -D DUMP_MODULES : show all loaded modules 

  -M                 : a synonym for -t -D DUMP_MODULES

  -t                 : run syntax check for config files

  -T                 : start without DocumentRoot(s) check


'1. 미들웨어이야기 > 02. Apache' 카테고리의 다른 글

Apache 로그 파일 관리  (0) 2014.12.03
Apache 설치  (0) 2014.12.03
알아두면 유용한 apache httpd실행 옵션  (0) 2014.12.03
apache graceful restart  (0) 2014.12.03
httpd 실행 옵션  (0) 2014.12.03
apache ab를 이용한 부하테스트  (0) 2014.12.03
posted by LE07

운영중인 서비스의 httpd.conf등의 conf파일을 수정하고,

해당 conf파일을 읽어서 apache가 새로 시작시킬 수 있는 방법이다.


현재 접속된 커넥션은 그대로 유지하고 그외 http 모든 프로세스를 종료시키고 재시작 시그널을 보낸다

서비스의 세션 및 연결 종료없이 conf설정 파일 불러서 재실행

단, 모듈 추가 등의 apache 내에 삽입되어야 하는 작업들은 반드시 restart를 해주셔야 합니다.



<아래 글 출처 : http://httpd.apache.org>

점잖은 재시작

        시그널: USR1

     apachectl -k graceful

USR1이나 graceful 시그널을 부모에게 보내면 부모 프로세스는 자식들에게 현재 요청을 처리한후 종료하라고 (혹은 현재 아무것도 처리하지 않다면 즉시 종료하라고조언한다. 부모는 설정파일을 다시읽고 로그파일도 다시 연다. 자식이 죽을때마다 부모는 죽은 자식대신 새로운 설정 세대 기초한 자식을 실행하여 즉시 요청을 처리하게 한다.

점잖은 재시작(graceful restart)으로 USR1 사용할 없는 플래폼에서는 대신 (WINCH 같은) 다른 시그널을 사용할 있다apachectl graceful 플래폼에 알맞은 시그널을 보낸다.

점잖은 재시작은 항상 MPM 프로세스 조절 지시어 설정을 고려하여, 재시작동안 클라이언트를 서비스하는 프로세스나 쓰레드가 적당한 수를 유지하도록 설계되었다. 게다가 StartServers, 일초 최소한 StartServers만큼 새로운 자식이 안만들어지면 자식이 StartServers 개가 되도록 새로 만든다. , 프로그램은 서버의 현재 부하에 알맞은 자식의 개수를 유지하며StartServers 파라미터로 지정한 당신의 기대를 존중한다.

mod_status 사용자는 USR1 받을때 서버 통계가 0 되지 않음을 봤을 것이다. 서버는 새로운 요청을 (운영체제는 이들을 큐에 담아서 어떤 경우에도 잃어버리지 않는다) 처리하지 못하는 시간을 최소화하고 당신의 튜닝 파라미터를 존중하도록 만들어졌다. 이를 위해 세대간 모든 자식을 기록하는 scoreboard 유지한다.

status 모듈은 또한 점잖은 재시작 전에 시작하여 아직도 요청을 처리하고 있는 자식을 G 알려준다.

현재로는 USR1 사용하는 로그순환 스크립트가 재시작전에 모든 자식이 로그작성을 마쳤는지 있는 방법이 없다. 우리는 USR1 시그널을 보내고 적당한 시간이 지난후 이전 로그를 다루도록 제안한다. 예를 들어 낮은 대역폭 사용자의 경우 접속 대부분이 마치는데 10분이 안걸린다면, 이전 로그를 다루기전에 15 기다린다.

설정파일에 오류가 있다면 재시작시 부모는 재시작하지 않고 오류를 내며 종료한다. , 점잖은 재시작의 경우 종료할때 자식이 실행되도록 놔둔다. (자식들은 자신의 마지막 요청을 처리하고 "점잖게 종료한다".) 이는 서버를 재시작할때 문제가 된다. 서버는 자신이 기다릴 포트에 연결하지 못한다. 재시작전에 -t 명령행 옵션(httpd 참고)으로 설정파일 문법을 검사할 있다. 그러나 이런 검사도 서버가 올바로 재시작할지를 보장하지 못한다. 설정파일의 문법이 아닌 의미를 검사하려면 root 아닌 사용자로 httpd 시작해볼 있다. root 아니기때문에 (아니면 현재 포트를 사용하는 httpd 실행되기때문에) 오류가 없다면 소켓과 로그파일을 열려고 시도하는 과정에서 실패할 것이다. 다른 이유때문에 실패한다면 아마도 설정파일에 오류가 있을 것이다. 점잖은 재시작을 하기전에 오류를 고쳐야한다.

USR1이나 graceful 시그널을 부모에게 보내면 부모 프로세스는 자식들에게 현재 요청을 처리한후 종료하라고 (혹은 현재 아무것도 처리하지 않다면 즉시 종료하라고조언한다. 부모는 설정파일을 다시읽고 로그파일도 다시 연다. 자식이 죽을때마다 부모는 죽은 자식대신 새로운 설정 세대 기초한 자식을 실행하여 즉시 요청을 처리하게 한다.

점잖은 재시작(graceful restart)으로 USR1 사용할 없는 플래폼에서는 대신 (WINCH 같은) 다른 시그널을 사용할 있다apachectl graceful 플래폼에 알맞은 시그널을 보낸다.

점잖은 재시작은 항상 MPM 프로세스 조절 지시어 설정을 고려하여, 재시작동안 클라이언트를 서비스하는 프로세스나 쓰레드가 적당한 수를 유지하도록 설계되었다. 게다가 StartServers, 일초 최소한 StartServers만큼 새로운 자식이 안만들어지면 자식이 StartServers 개가 되도록 새로 만든다. , 프로그램은 서버의 현재 부하에 알맞은 자식의 개수를 유지하며StartServers 파라미터로 지정한 당신의 기대를 존중한다.

mod_status 사용자는 USR1 받을때 서버 통계가 0 되지 않음을 봤을 것이다. 서버는 새로운 요청을 (운영체제는 이들을 큐에 담아서 어떤 경우에도 잃어버리지 않는다) 처리하지 못하는 시간을 최소화하고 당신의 튜닝 파라미터를 존중하도록 만들어졌다. 이를 위해 세대간 모든 자식을 기록하는 scoreboard 유지한다.

status 모듈은 또한 점잖은 재시작 전에 시작하여 아직도 요청을 처리하고 있는 자식을 G 알려준다.

현재로는 USR1 사용하는 로그순환 스크립트가 재시작전에 모든 자식이 로그작성을 마쳤는지 있는 방법이 없다. 우리는 USR1 시그널을 보내고 적당한 시간이 지난후 이전 로그를 다루도록 제안한다. 예를 들어 낮은 대역폭 사용자의 경우 접속 대부분이 마치는데 10분이 안걸린다면, 이전 로그를 다루기전에 15 기다린다.

설정파일에 오류가 있다면 재시작시 부모는 재시작하지 않고 오류를 내며 종료한다. , 점잖은 재시작의 경우 종료할때 자식이 실행되도록 놔둔다. (자식들은 자신의 마지막 요청을 처리하고 "점잖게 종료한다".) 이는 서버를 재시작할때 문제가 된다. 서버는 자신이 기다릴 포트에 연결하지 못한다. 재시작전에 -t 명령행 옵션(httpd 참고)으로 설정파일 문법을 검사할 있다. 그러나 이런 검사도 서버가 올바로 재시작할지를 보장하지 못한다. 설정파일의 문법이 아닌 의미를 검사하려면 root 아닌 사용자로 httpd 시작해볼 있다. root 아니기때문에 (아니면 현재 포트를 사용하는 httpd 실행되기때문에) 오류가 없다면 소켓과 로그파일을 열려고 시도하는 과정에서 실패할 것이다. 다른 이유때문에 실패한다면 아마도 설정파일에 오류가 있을 것이다. 점잖은 재시작을 하기전에 오류를 고쳐야한다.




'1. 미들웨어이야기 > 02. Apache' 카테고리의 다른 글

Apache 설치  (0) 2014.12.03
알아두면 유용한 apache httpd실행 옵션  (0) 2014.12.03
apache graceful restart  (0) 2014.12.03
httpd 실행 옵션  (0) 2014.12.03
apache ab를 이용한 부하테스트  (0) 2014.12.03
Apache 상태 확인 페이지 설정  (0) 2014.12.02
posted by LE07

JBoss에서 디렉토리 검색 기능을 제거

EAP버전: ${JBOSS)HOME}/deployers/jbossweb.deployer/web.xml

커뮤니티버전: /jboss/jboss-6.1.0.Final/server/default/deploy/jbossweb.sar/web.xml

 

<servlet>

<servlet-name>default</sevlet-name>

<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>

 

<init-param>

<param-name>debug</param-name>

<param-value>0</param-value>

</init-param>

<init-param>

<param-name>listings</param-name>

<param-value>false</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

 

by. 강수현(9월)

'1. 미들웨어이야기 > 03. JBoss' 카테고리의 다른 글

JBoss 디렉토리 검색기능제거  (0) 2014.12.03
JBoss Session 튜닝-2  (0) 2014.12.03
JBoss Session 튜닝  (0) 2014.12.03
jboss connection pool  (0) 2014.12.03
Jboss EAP 6 튜닝의포인트  (0) 2014.12.02
JBoss EAP5.X 에서 JSP 변경시 재컴파일 방법‏  (0) 2014.12.02
posted by lovelywas
httpd 실행 옵션

httpd -h로 확인가능

-d serverroot
ServerRoot 지시어의 기본값을 serverroot로 설정한다. 설정파일에서 ServerRoot지시어를 사용하여 이 값을 수정할 수 있다. 기본값은/usr/local/apache2이다.
-f config
시작할때 config 파일에 있는 지시어를 사용한다.config가 /로 시작하지 않으면 ServerRoot에 상대경로이다. 기본값은conf/httpd.conf이다.
-k start|restart|graceful|stop
httpd를 시작, 재시작, 중단한다. 더 자세한 정보는아파치 중단하기를 참고하라.
-C directive
설정파일을 읽기전에 directive 지시어를 처리한다.
-c directive
설정파일을 읽기전에 directive 지시어를 처리한다.
-D parameter
서버 시작 혹은 재시작시 선택적으로 명령어를 처리하기위해 설정파일의 <IfDefine>섹션에 사용할 parameter를 설정한다.
-e level
서버가 시작하는동안 LogLevellevel로 설정한다. 이는 시작중 문제를 찾기위해 잠시 더 자세한 오류문을 얻을때 유용하다.
-E file
서버가 시작하는동안 file로 오류문을 보낸다.
-R directory
서버를 SHARED_CORE 규칙을 사용하여 컴파일한 경우 공유오브젝트파일 directory를 지정한다.
-h
사용할 수 있는 명령행 옵션들의 짧은 요약을 출력한다.
-l
서버에 같이 컴파일한 모듈 목록을 출력한다. LoadModule 지시어를 사용하여 동적으로 읽어들이는 모듈은 출력하지 않는다.
-L
지시어 목록을 지시어가 받는 아규먼트와 지시어 사용장소와 같이 출력한다.
-M
읽어들인 정적 모듈과 공유 모듈 목록을 출력한다.
-S
설정파일에서 읽어들인 설정을 보여준다 (현재는 가상호스트 설정만을 보여준다).
-t
설정파일의 문법검사만 한다. 프로그램은 문법을 검사한후(문법이 올바른 경우) 0이나 (문법에 문제가 있는 경우) 0이 아닌 종료코드로 즉시 종료한다. -D DUMP_VHOSTS을 사용하면 가상호스트 설정을 자세히 출력한다. -DDUMP_MODULES를 사용하면 읽어들인 모듈 목록을 출력한다.
-v
httpd의 버전을 출력하고 종료한다.
-V
httpd의 버전과 컴파일 파라미터를 출력하고 종료한다.
-X
디버그 상태로 웹서버를 실행한다. 오직 한 프로세스나 쓰레드로만 서비스하고, 서버는 콘솔에서 떨어지지 않는다.

다음 아규먼트는 Windows플래폼에서만 사용할 수 있다:

-k install|config|uninstall
아파치를 Windows NT 서비스로 설치한다; 아파치 서비스의 시작 옵션을 수정한다; 아파치 서비스 설치를 지운다.
-n name
아파치 서비스의 name.
-w
오류가 발생하면 콘솔창을 열어서 오류문을 보여준다.

출처: http://httpd.apache.org/docs/2.4/ko/programs/httpd.html

by. 강수현(9월)

'1. 미들웨어이야기 > 02. Apache' 카테고리의 다른 글

알아두면 유용한 apache httpd실행 옵션  (0) 2014.12.03
apache graceful restart  (0) 2014.12.03
httpd 실행 옵션  (0) 2014.12.03
apache ab를 이용한 부하테스트  (0) 2014.12.03
Apache 상태 확인 페이지 설정  (0) 2014.12.02
L4의 부하 분산 방법  (0) 2014.12.02
posted by lovelywas

Session 튜닝

파일명: application/WEB-INF/jboss-web.xml

<replication-trigger> : JBoss 에서 지원하는 세션 변경 여부 판단 기준.

 SET

 setAttribute() 시 세션이 변경된 것으로 간주

 SET_AND_NON_PRIMITIVE_GET

 setAttribute() 뿐만 아니라 변경 가능한 object에 대한 getAttribute() 시 세션이 변경된 것으로 간주. 디폴트 설정

 SET_AND_GET

 setAttribute() 뿐만 아니라 getAttribute() 시에도 세션이 변경된 것으로 간주

 ACCESS

 HTTP 요청이 있을 때마다 session이 변경된 것으로 간주

 

<replication-granularity>: JBoss에서 3가지 복제 단위를 지원합니다.  

SESSION 

 세션을 통째로 복제

 ATTRIBUTE

 세션에서 변경된 attribute만을 복제

 FIELD

 Attribute object의 변경된 필드만을 복제

SESSION-->ATTRIBUTE-->FIELD 순으로 복제단위는 더 세분화 됩니다.

허나, 복제 단위를 세분화 하는데 따르는 오버헤드가 있기 때문에 단순히 세분화할수록 좋은 것은 아니니 시스템 환경에 맞게 설정하시면 됩니다.

by. 강수현(11월)

 

'1. 미들웨어이야기 > 03. JBoss' 카테고리의 다른 글

JBoss 디렉토리 검색기능제거  (0) 2014.12.03
JBoss Session 튜닝-2  (0) 2014.12.03
JBoss Session 튜닝  (0) 2014.12.03
jboss connection pool  (0) 2014.12.03
Jboss EAP 6 튜닝의포인트  (0) 2014.12.02
JBoss EAP5.X 에서 JSP 변경시 재컴파일 방법‏  (0) 2014.12.02
posted by lovelywas
  • Session time-out

JBoss의 기본 세션시간은 30분으로 측정되어 있습니다.

벼경을 원하실 경우 아래 web.xml 을 참고로 수정하시면 됩니다. ( restart는 필수)

파일명: web.xml

파일 경로: /jboss/jboss-6.1.0.Final/server/default/deploy/jbossweb.sar

 

 

<!-- ======================Default Session Configuration ================ -->

<!-- You can set the default session timeout ( in minutes) for all newly -->

<!-- created sessions by modifying the value below -->

<sessoin-config>

<session-timeout>30</session-timeout>

</session-config>

 

 

  • 세션 변경 여부 기준

JBoss Clustering 세션관리자는 HTTP 요청 처리 후 변경된 세션을 클러스터를 구성하는 각 노드로 복제합니다.

파일명: application/WEB-INF/jboss-web.xml

 

 <jboss-web>

<replication-config>

<replication-trigger>SET</replication-trigger>

<replication-granularity>SESSION</replication-granularity>

</replication-config>

</jboss-web>

-by 강수현(11월)

 

'1. 미들웨어이야기 > 03. JBoss' 카테고리의 다른 글

JBoss 디렉토리 검색기능제거  (0) 2014.12.03
JBoss Session 튜닝-2  (0) 2014.12.03
JBoss Session 튜닝  (0) 2014.12.03
jboss connection pool  (0) 2014.12.03
Jboss EAP 6 튜닝의포인트  (0) 2014.12.02
JBoss EAP5.X 에서 JSP 변경시 재컴파일 방법‏  (0) 2014.12.02
posted by lovelywas