http://centos.server-manual.com/centos5_repository.html

CentOS에서 대부분의 경우 버전업의 문제나 공식적으로 지원하는 패키지에는 없어서 추가적으로 필요한 패키지를 위하여 RPMForge EPEL Remi 를 추가하는 방법입니다.

우선 아래와 같이 yum-priorities 를 설치하여야 패키지간의 설치 우선 순위를 조정할수 있습니다.

[root@centos ~]# yum -y install yum-priorities
CentOS-Base.repo 수정
[root@centos ~]# vi /etc/yum.repos.d/CentOS-Base.repo
[base]
priority=1 ←추가
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#released updates
[updates]
priority=1 ←추가
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#packages used/produced in the build but not released
[addons]
priority=1 ←추가
name=CentOS-$releasever - Addons
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=addons
#baseurl=http://mirror.centos.org/centos/$releasever/addons/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#additional packages that may be useful
[extras]
priority=1 ←추가
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
priority는 우선 순위입니다. 1 ~ 99까지이고 값이 낮을수록 우선 순위가 높습니다. (설정되지 않은 경우는 99)
RPMforge 저장소 설치
[root@centos ~]# rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
[root@centos ~]# rpm -ivh http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.5.2-2.el5.rf.i386.rpm ←i386(32bit)의 경우
[root@centos ~]# rpm -ivh http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm ←x86_64(64bit)의 경우
EPEL 저장소 설치
[root@centos ~]# rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-5
[root@centos ~]# rpm -ivh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm ←i386(32bit)의 경우
[root@centos ~]# rpm -ivh http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm ←x86_64(64bit)의 경우
Remi 저장소 설치
[root@centos ~]# rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
[root@centos ~]# rpm -ivh http://rpms.famillecollet.com/enterprise/5/remi/i386/remi-release-5-8.el5.remi.noarch.rpm ←i386(32bit)의 경우
[root@centos ~]# rpm -ivh http://rpms.famillecollet.com/enterprise/5/remi/x86_64/remi-release-5-8.el5.remi.noarch.rpm ←x86_64(64bit)의 경우
rpmforge.repo 수정
[root@centos ~]# vi /etc/yum.repos.d/rpmforge.repo
### Name: RPMforge RPM Repository for RHEL 5 - dag
### URL: http://rpmforge.net/
[rpmforge]
name = RHEL $releasever - RPMforge.net - dag
baseurl = http://apt.sw.be/redhat/el5/en/$basearch/rpmforge
mirrorlist = http://apt.sw.be/redhat/el5/en/mirrors-rpmforge
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge
enabled = 1 ←enabled=1을 확인
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1

[rpmforge-extras]
name = RHEL $releasever - RPMforge.net - extras
baseurl = http://apt.sw.be/redhat/el5/en/$basearch/extras
mirrorlist = http://apt.sw.be/redhat/el5/en/mirrors-rpmforge-extras
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge-extras
enabled = 0
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1

[rpmforge-testing]
name = RHEL $releasever - RPMforge.net - testing
baseurl = http://apt.sw.be/redhat/el5/en/$basearch/testing
mirrorlist = http://apt.sw.be/redhat/el5/en/mirrors-rpmforge-testing
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge-testing
enabled = 0
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1
epel.repo 수정
[root@centos ~]# vi /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 5 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/5/$basearch
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch
failovermethod=priority
enabled=1 ←enabled=1을 확인
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL

[epel-debuginfo]
name=Extra Packages for Enterprise Linux 5 - $basearch - Debug
#baseurl=http://download.fedoraproject.org/pub/epel/5/$basearch/debug
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-debug-5&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
gpgcheck=1

[epel-source]
name=Extra Packages for Enterprise Linux 5 - $basearch - Source
#baseurl=http://download.fedoraproject.org/pub/epel/5/SRPMS
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-source-5&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
gpgcheck=1
rpmforge과 epel 우선 순위를 낮게 (priority 설정되지 않은 (99))하여 활성화 (enabled = 1)로 설정합니다.
remi.repo 수정
[root@centos ~]# vi /etc/yum.repos.d/remi.repo
[remi]
priority=1 ←추가
name=Les RPM de remi pour Enterprise Linux $releasever - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/$releasever/remi/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/$releasever/remi/mirror
enabled=0 ←enabled=0을 확인
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
failovermethod=priority

[remi-test]
name=Les RPM de remi en test pour Enterprise Linux $releasever - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/$releasever/test/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/$releasever/test/mirror
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
remi 필요한 경우에만 사용하기 때문에 우선 순위를 높게 (priority = 1)하고 해제 (enabled = 0)로 설정합니다.

http://blog.chibiegg.net/2011/11/17_10_616.htm

(아마도) 일반적인 Web 서버인 Apache 복잡한 설정도 가능하고 편리한니다만, 그만큼 무거운 것입니다.

어떻게 무거운가하면, Apache는 하나의 프로세스가 하나의 HTTP 요청을 동기화에서 처리해 있기 때문에 그 동안 다른 작업을하지 않습니다. 그래서 동시 액세스 수가 증가하면 Apache 프로세스를 계속적 생성합니다.(또는 나중에 온 요청을 기다리게)

그래서, 액세스 수가 증가하면 급격히 성능이 떨어진다는 문제가 있습니다. (이외에도 프로세스 ID가 부족한 아무리 자원이있어도 최대 프로세스 ID로 제한되어 버린다)

, 최근 화제의 고성능 Web 서버 nginx (엔진 엑스)입니다.

nginx는 하나의 프로세스에서 여러 요청을 비동기적으로 동시에 처리합니다. 그래서, 액세스 수가 증가해도 성능이 떨어지고 어렵다는 특성이 있습니다. 특히 정적 파일의 경우 대부분의 작업이 I / O 대기 때문에 효과가 큽니다.

그래서 PHP거나 SVN이나 설정이 귀찮은 것은 Apache에 맡겨두고, 정적 파일만 nginx 처리시켜 보면, Apache에 요청 수가 급감하는 것입니다.

예를 들어이 블로그의 홈​​페이지의 경우 PHP에서 생성되는 HTML 한 개에 대해서, CSS와 이미지 등의 정적 파일이 20 개 가까이 있습니다. 단순 계산으로 21 개의 요청 중 1 개만 Apache에서 처리되므로 Apache에 대한 요청은 약 95 % 감소됩니다.

에서 설정하자. OS는 Ubuntu Server 10.04 (64bit)입니다. Apache는 이미 설치되어 운용되고 있다고합니다.설정 후 nginx가 포트 80에서 기다리고, Apache는 포트 8080에서 수신 대기하는 것을합니다.

(기사의 마지막에 캐시 파일을 RAM에 둔다는 것도 해 보겠습니다)

nginx 설치

그냥 aptitude 설치하면 0.7.65이 설치되어 버리므로, nginx의 PPA를 추가하고 설치합니다.

1
2
3
$ sudo add-apt-repository ppa:nginx/stable
$ sudo apt-get update
$ sudo install nginx

설정 파일은 / etc / nginx /에 있습니다. sites-enable이나 Apache와 비슷한 구조로되어 있습니다.

리버스 프록시 설정

에서는이 sites-enabled/default을 이와 같이 설정합시다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
upstream backend {
    server 127.0.0.1:8080;
}
server {
    listen   80;
    server_name _;
    location / {
        proxy_redirect                         off;
        proxy_set_header Host                $host;
        proxy_set_header X-Real-IP            $remote_addr;
        proxy_set_header X-Forwarded-Host    $host;
        proxy_set_header X-Forwarded-Server    $host;
        proxy_set_header X-Forwarded-For        $proxy_add_x_forwarded_for;
        proxy_pass http://backend;
    }
}

이것은 리버스 프록시에 필요한 설정이다. 모든 액세스를 로컬 Apache에 전달합니다.

Apache 분은 ports.conf에서 수신 포트를 80에서 8080로 변경하고 각 사이트 설정 80에서 8080로 변경하십시오. 그리고 Apache와 nginx를 다시 시작합니다. (Apache 먼저 8080 다음 nginx를 시작한다)

1
2
$ sudo /etc/init.d/apache restart
$ sudo /etc/init.d/nginx restart

이제 브라우저에서 액세스하면 nginx를 통해 Apache가 처리합니다. 그래서 지금까지 변하지 않을 것입니다.

그런데 문제가 있고, Apache 액세스 로그를 보면 액세스하는가 127.0.0.1로되어 버린 것입니다. 이를 해소하기 위해 mod_rpaf를 설치합니다.

1
$ sudo apt-get install libapache2-mod-rpaf

이제 Apache를 다시 시작하면 제대로 액세스하는가 다루어지고있는 것입니다. 사실이 때문에 nginx 설정에 X-Real-IP HTTP 헤더를 추가하는 설정인지 뭔지를 쓰고있는 것입니다. mod_rpaf 프록시 서버가 추가한 X-Real-IP 헤더를 액세스하는으로 처리 모듈입니다.

mod_rpaf은 127.0.0.1 로부터의 액세스에 대해서만 처리를하기 때문에 만약 역방향 프록시가 다른 호스트에있는면 / etc/apache2/mods-enabled/rpaf.conf의 RPAFproxy_ips를 역방향 프록시 서버의 IP 주소로 변경하십시오. (모든 X-Real-IP를 신뢰하면 액세스하는 가장 수 있기 때문입니다)

프록시 캐시

는 원래의 목표였던 정적 파일을 nginx 호스트 설정을합시다. 본래는 nginx 정적 파일을 직접 디스크로부터 가지고 오는 것이 좋습 니다만, nginx이 Apache와 다른 호스트에있는 경우도 생각할 수 있기 때문에 그 경우에도 대응할 수 있도록 정적 파일에 대한 액세스를 캐시하십시오 두 번째 이후의 같은 파일에 대한 액세스는 Apache에 전달하지 않도록 설정하려고합니다.

default를 이렇게 편집 봅니다.

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
31
32
33
34
35
proxy_cache_path /var/cache/nginx/static_file_cache levels=1:2 keys_zone=cache_static_file:128m inactive=7d max_size=512m;
proxy_temp_path /var/cache/nginx/temp;
upstream backend {
    server 127.0.0.1:8080;
}
server {
    listen   80;
    server_name _;
    location / {
        proxy_redirect                         off;
        set $do_not_cache 0;
        if ($request_method != GET) {
            set $do_not_cache 1;
        }
        if ($uri !~* ".(jpg|png|gif|jpeg|css|js|swf|pdf|html|htm)$") {
            set $do_not_cache 1;
        }
        proxy_no_cache     $do_not_cache;
        proxy_cache_bypass $do_not_cache;
        proxy_cache cache_static_file;
        proxy_cache_key $scheme$host$uri$is_args$args;
        proxy_cache_valid  200 2h;
        proxy_cache_valid  any 1m;
        proxy_set_header Host                $host;
        proxy_set_header X-Real-IP            $remote_addr;
        proxy_set_header X-Forwarded-Host    $host;
        proxy_set_header X-Forwarded-Server    $host;
        proxy_set_header X-Forwarded-For        $proxy_add_x_forwarded_for;
        proxy_pass http://backend;
    }
}

이 설정은 메모리 128M 파일 최대 512M, 7 일 캐시 파일을 / var / cache / nginx / static_file_cache 작성합니다.

그리고 do_not_cache 변수를 제공하여 0으로 놓고 GET에서 사용하지 않은 경우와 정적 파일이없는 경우에 캐시하지 않도록이 경우 do_not_cache를 1로하여 proxy_no_cache을 사용하고 있습니다. 정적 파일의 판단은 정규식 URL의 확장자를보고 있습니다. (주의하지 않으면 안되는 것이, WordPress 페이지를 영구 링크. html하고있는 경우입니다.이 경우 캐시되지 않도록 분리해야합니다.)

즉, 정적 파일에 GET으로 액세스하는 것만 캐시됩니다.

proxy_cache_valid 어떤 상태 응답을 어느 기간 캐시를 설정하는 항목에서이 경우 200면 2 
시간, 그 이외라면 1 분 캐시하게됩니다.

다음은 / var / cache / nginx / 디렉토리를 만들고 nginx를 다시 시작하면됩니다.

1
2
$ sudo mkdir /var/cache/nginx
$ sudo /etc/init.d/nginx restart

그래서 한동안 브라우져를 보면, 캐쉬 디렉토리의 용량이 증가하는 것입니다.

1
2
3
4
$ sudo du -ch /var/cache/nginx/static_file_cache
(中略)
91M /var/cache/nginx/static_file_cache
91M 合計

정말 Apache 액세스가 줄어들고있는지는, Apache 액세스 로그를보고하십시오.

한 걸음 더

한 걸음 속도 봅시다. 지금 캐시 파일은 / var / cache / nginx에 놓여 있기 때문에 결국 캐시에서 호출을 위해 HDD 액세스하게됩니다. 녀석을 전부 메모리에두고 버립시다.

잘못되거나 문제가 발생하면 시스템에 문제가있을지도 모르기 때문에 모르는 or 불안라면하지 않는 편이 좋습니다.

tmpfs를 사용하면 메모리 영역을 파일 시스템에 마운트할 수 있습니다.

/ etc / fstab에 다음 줄을 추가하여 OS를 다시 시작합니다.

1
tmpfs   /var/cache/nginx    tmpfs   defaults,noatime,mode=1777  0   0

그러면 / var / cache / nginx 디렉토리는 RAM에 배치됩니다.

하지만, 우리 서버는 SSD에 있었기 때문에 효과는 알 수 없습니다. 하지만 SSD의 수명을 연장 효과는 있다고 생각합니다.


$ request-log-analyzer production.log
Request-log-analyzer, by Willem van Bergen and Bart ten Brinke - version 1.12.1
Website: http://railsdoctors.com

production.log: 100% [================================] Time: 00:00:16

Request summary
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Parsed lines: 142586
Skipped lines: 443
Parsed requests: 35677
Skipped requests: 0
Warnings: no_current_request: 443

First request: 2012-05-07 01:01:01
Last request: 2012-05-08 16:36:04
Total time analyzed: 2 days

Request distribution per hour
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
0:00 ┃ 1277 hits/day ┃ ░░░
1:00 ┃ 2585 hits/day ┃ ░░░░░░
2:00 ┃ 1693 hits/day ┃ ░░░░
3:00 ┃ 863 hits/day ┃ ░░
4:00 ┃ 815 hits/day ┃ ░░
5:00 ┃ 761 hits/day ┃ ░░
6:00 ┃ 594 hits/day ┃ ░
7:00 ┃ 392 hits/day ┃ ░
8:00 ┃ 222 hits/day ┃ ░
9:00 ┃ 108 hits/day ┃
10:00 ┃ 56 hits/day ┃
11:00 ┃ 55 hits/day ┃
12:00 ┃ 87 hits/day ┃
13:00 ┃ 86 hits/day ┃
14:00 ┃ 217 hits/day ┃ ░
15:00 ┃ 633 hits/day ┃ ░░
16:00 ┃ 1932 hits/day ┃ ░░░░░
17:00 ┃ 1618 hits/day ┃ ░░░░
18:00 ┃ 1462 hits/day ┃ ░░░░
19:00 ┃ 1372 hits/day ┃ ░░░
20:00 ┃ 1029 hits/day ┃ ░░░
21:00 ┃ 1456 hits/day ┃ ░░░░
22:00 ┃ 1170 hits/day ┃ ░░░
23:00 ┃ 1158 hits/day ┃ ░░░

Most requested
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PinBoardsController#show.HTML ┃ 35240 hits ┃ 98.8% ┃ ░░░░░░░░░░░░
PinBoardsController#show.*/* ┃ 176 hits ┃ 0.5% ┃
#. ┃ 129 hits ┃ 0.4% ┃
HomeController#index.HTML ┃ 42 hits ┃ 0.1% ┃
PinBoardsController#index.HTML ┃ 21 hits ┃ 0.1% ┃
Devise::SessionsController#new.HTML ┃ 14 hits ┃ 0.0% ┃
PinBoardsController#update.HTML ┃ 13 hits ┃ 0.0% ┃
PinBoardsController#edit.HTML ┃ 10 hits ┃ 0.0% ┃
Devise::SessionsController#create.HTML ┃ 8 hits ┃ 0.0% ┃
Devise::RegistrationsController#new.HTML ┃ 7 hits ┃ 0.0% ┃
PinBoardsController#new.HTML ┃ 3 hits ┃ 0.0% ┃
HomeController#index.*/* ┃ 3 hits ┃ 0.0% ┃
Devise::RegistrationsController#create.HTML ┃ 2 hits ┃ 0.0% ┃
Devise::SessionsController#destroy.HTML ┃ 2 hits ┃ 0.0% ┃
Devise::PasswordsController#new.*/* ┃ 2 hits ┃ 0.0% ┃
Devise::RegistrationsController#new.*/* ┃ 2 hits ┃ 0.0% ┃
Devise::SessionsController#new.*/* ┃ 2 hits ┃ 0.0% ┃
PinBoardsController#create.HTML ┃ 1 hits ┃ 0.0% ┃

HTTP methods
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GET ┃ 35650 hits ┃ 99.9% ┃ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
PUT ┃ 14 hits ┃ 0.0% ┃
POST ┃ 11 hits ┃ 0.0% ┃
DELETE ┃ 2 hits ┃ 0.0% ┃

HTTP statuses returned
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
200 ┃ 35292 hits ┃ 99.9% ┃ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
302 ┃ 17 hits ┃ 0.0% ┃
401 ┃ 4 hits ┃ 0.0% ┃
500 ┃ 1 hits ┃ 0.0% ┃

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Request dura ┃ Hits ┃ Sum ┃ Mean ┃ StdDev ┃ Min ┃ Max ┃ 95 %tile
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PinBoardsCon ┃ 34975 ┃ 7m02s ┃ 0.01s ┃ 0.02s ┃ 0.00s ┃ 0.36s ┃ 0.01s-0.09s
PinBoardsCon ┃ 8 ┃ 5.51s ┃ 0.69s ┃ 0.31s ┃ 0.47s ┃ 1.40s ┃ 0.47s-1.42s
PinBoardsCon ┃ 175 ┃ 2.72s ┃ 0.02s ┃ 0.03s ┃ 0.01s ┃ 0.32s ┃ 0.01s-0.09s
#. ┃ 40 ┃ 1.10s ┃ 0.03s ┃ 0.06s ┃ 0.01s ┃ 0.30s ┃ 0.01s-0.30s
Devise::Sess ┃ 8 ┃ 0.98s ┃ 0.12s ┃ 0.08s ┃ 0.00s ┃ 0.23s ┃ 0.00s-0.23s
PinBoardsCon ┃ 20 ┃ 0.59s ┃ 0.03s ┃ 0.04s ┃ 0.00s ┃ 0.15s ┃ 0.00s-0.15s
HomeControll ┃ 41 ┃ 0.44s ┃ 0.01s ┃ 0.02s ┃ 0.00s ┃ 0.13s ┃ 0.00s-0.13s
Devise::Sess ┃ 14 ┃ 0.42s ┃ 0.03s ┃ 0.03s ┃ 0.01s ┃ 0.10s ┃ 0.01s-0.11s
Devise::Regi ┃ 7 ┃ 0.38s ┃ 0.05s ┃ 0.04s ┃ 0.01s ┃ 0.10s ┃ 0.01s-0.10s
Devise::Regi ┃ 1 ┃ 0.35s ┃ 0.35s ┃ 0.00s ┃ 0.35s ┃ 0.35s ┃ 0.35s-0.37s
PinBoardsCon ┃ 10 ┃ 0.34s ┃ 0.03s ┃ 0.03s ┃ 0.01s ┃ 0.12s ┃ 0.01s-0.12s
Devise::Regi ┃ 2 ┃ 0.11s ┃ 0.06s ┃ 0.06s ┃ 0.01s ┃ 0.10s ┃ 0.01s-0.10s
PinBoardsCon ┃ 3 ┃ 0.08s ┃ 0.03s ┃ 0.01s ┃ 0.01s ┃ 0.03s ┃ 0.01s-0.03s
Devise::Sess ┃ 2 ┃ 0.04s ┃ 0.02s ┃ 0.01s ┃ 0.01s ┃ 0.03s ┃ 0.01s-0.03s
PinBoardsCon ┃ 1 ┃ 0.04s ┃ 0.04s ┃ 0.00s ┃ 0.04s ┃ 0.04s ┃ 0.04s-0.04s
Devise::Pass ┃ 2 ┃ 0.04s ┃ 0.02s ┃ 0.02s ┃ 0.01s ┃ 0.04s ┃ 0.01s-0.04s
Devise::Sess ┃ 2 ┃ 0.03s ┃ 0.01s ┃ 0.01s ┃ 0.01s ┃ 0.02s ┃ 0.01s-0.02s
HomeControll ┃ 3 ┃ 0.03s ┃ 0.01s ┃ 0.00s ┃ 0.01s ┃ 0.01s ┃ 0.01s-0.01s

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Request dura ┃ Hits ┃ Sum ┃ Mean ┃ StdDev ┃ Min ┃ Max ┃ 95 %tile
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PinBoardsCon ┃ 8 ┃ 5.51s ┃ 0.69s ┃ 0.31s ┃ 0.47s ┃ 1.40s ┃ 0.47s-1.42s
Devise::Regi ┃ 1 ┃ 0.35s ┃ 0.35s ┃ 0.00s ┃ 0.35s ┃ 0.35s ┃ 0.35s-0.37s
Devise::Sess ┃ 8 ┃ 0.98s ┃ 0.12s ┃ 0.08s ┃ 0.00s ┃ 0.23s ┃ 0.00s-0.23s
Devise::Regi ┃ 2 ┃ 0.11s ┃ 0.06s ┃ 0.06s ┃ 0.01s ┃ 0.10s ┃ 0.01s-0.10s
Devise::Regi ┃ 7 ┃ 0.38s ┃ 0.05s ┃ 0.04s ┃ 0.01s ┃ 0.10s ┃ 0.01s-0.10s
PinBoardsCon ┃ 1 ┃ 0.04s ┃ 0.04s ┃ 0.00s ┃ 0.04s ┃ 0.04s ┃ 0.04s-0.04s
PinBoardsCon ┃ 10 ┃ 0.34s ┃ 0.03s ┃ 0.03s ┃ 0.01s ┃ 0.12s ┃ 0.01s-0.12s
Devise::Sess ┃ 14 ┃ 0.42s ┃ 0.03s ┃ 0.03s ┃ 0.01s ┃ 0.10s ┃ 0.01s-0.11s
PinBoardsCon ┃ 20 ┃ 0.59s ┃ 0.03s ┃ 0.04s ┃ 0.00s ┃ 0.15s ┃ 0.00s-0.15s
#. ┃ 40 ┃ 1.10s ┃ 0.03s ┃ 0.06s ┃ 0.01s ┃ 0.30s ┃ 0.01s-0.30s
PinBoardsCon ┃ 3 ┃ 0.08s ┃ 0.03s ┃ 0.01s ┃ 0.01s ┃ 0.03s ┃ 0.01s-0.03s
Devise::Sess ┃ 2 ┃ 0.04s ┃ 0.02s ┃ 0.01s ┃ 0.01s ┃ 0.03s ┃ 0.01s-0.03s
Devise::Pass ┃ 2 ┃ 0.04s ┃ 0.02s ┃ 0.02s ┃ 0.01s ┃ 0.04s ┃ 0.01s-0.04s
PinBoardsCon ┃ 175 ┃ 2.72s ┃ 0.02s ┃ 0.03s ┃ 0.01s ┃ 0.32s ┃ 0.01s-0.09s
Devise::Sess ┃ 2 ┃ 0.03s ┃ 0.01s ┃ 0.01s ┃ 0.01s ┃ 0.02s ┃ 0.01s-0.02s
PinBoardsCon ┃ 34975 ┃ 7m02s ┃ 0.01s ┃ 0.02s ┃ 0.00s ┃ 0.36s ┃ 0.01s-0.09s
HomeControll ┃ 41 ┃ 0.44s ┃ 0.01s ┃ 0.02s ┃ 0.00s ┃ 0.13s ┃ 0.00s-0.13s
HomeControll ┃ 3 ┃ 0.03s ┃ 0.01s ┃ 0.00s ┃ 0.01s ┃ 0.01s ┃ 0.01s-0.01s

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
View renderi ┃ Hits ┃ Sum ┃ Mean ┃ StdDev ┃ Min ┃ Max ┃ 95 %tile
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PinBoardsCon ┃ 34975 ┃ 2m48s ┃ 0.00s ┃ 0.01s ┃ 0.00s ┃ 0.25s ┃ 0.00s-0.02s
PinBoardsCon ┃ 175 ┃ 1.09s ┃ 0.01s ┃ 0.01s ┃ 0.00s ┃ 0.08s ┃ 0.00s-0.07s
PinBoardsCon ┃ 18 ┃ 0.40s ┃ 0.02s ┃ 0.03s ┃ 0.00s ┃ 0.11s ┃ 0.00s-0.11s
HomeControll ┃ 41 ┃ 0.32s ┃ 0.01s ┃ 0.01s ┃ 0.00s ┃ 0.04s ┃ 0.00s-0.04s
Devise::Sess ┃ 14 ┃ 0.32s ┃ 0.02s ┃ 0.02s ┃ 0.01s ┃ 0.08s ┃ 0.01s-0.08s
#. ┃ 40 ┃ 0.29s ┃ 0.01s ┃ 0.01s ┃ 0.00s ┃ 0.08s ┃ 0.00s-0.08s
Devise::Regi ┃ 7 ┃ 0.28s ┃ 0.04s ┃ 0.03s ┃ 0.01s ┃ 0.10s ┃ 0.01s-0.10s
PinBoardsCon ┃ 10 ┃ 0.21s ┃ 0.02s ┃ 0.03s ┃ 0.01s ┃ 0.09s ┃ 0.01s-0.09s
Devise::Regi ┃ 2 ┃ 0.09s ┃ 0.05s ┃ 0.05s ┃ 0.01s ┃ 0.08s ┃ 0.01s-0.08s
PinBoardsCon ┃ 3 ┃ 0.07s ┃ 0.02s ┃ 0.01s ┃ 0.01s ┃ 0.03s ┃ 0.01s-0.03s
Devise::Sess ┃ 2 ┃ 0.04s ┃ 0.02s ┃ 0.01s ┃ 0.01s ┃ 0.03s ┃ 0.01s-0.03s
Devise::Pass ┃ 2 ┃ 0.04s ┃ 0.02s ┃ 0.02s ┃ 0.01s ┃ 0.03s ┃ 0.01s-0.03s
HomeControll ┃ 3 ┃ 0.02s ┃ 0.01s ┃ 0.00s ┃ 0.01s ┃ 0.01s ┃ 0.01s-0.01s

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
View renderi ┃ Hits ┃ Sum ┃ Mean ┃ StdDev ┃ Min ┃ Max ┃ 95 %tile
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Devise::Regi ┃ 2 ┃ 0.09s ┃ 0.05s ┃ 0.05s ┃ 0.01s ┃ 0.08s ┃ 0.01s-0.08s
Devise::Regi ┃ 7 ┃ 0.28s ┃ 0.04s ┃ 0.03s ┃ 0.01s ┃ 0.10s ┃ 0.01s-0.10s
Devise::Sess ┃ 14 ┃ 0.32s ┃ 0.02s ┃ 0.02s ┃ 0.01s ┃ 0.08s ┃ 0.01s-0.08s
PinBoardsCon ┃ 3 ┃ 0.07s ┃ 0.02s ┃ 0.01s ┃ 0.01s ┃ 0.03s ┃ 0.01s-0.03s
PinBoardsCon ┃ 18 ┃ 0.40s ┃ 0.02s ┃ 0.03s ┃ 0.00s ┃ 0.11s ┃ 0.00s-0.11s
PinBoardsCon ┃ 10 ┃ 0.21s ┃ 0.02s ┃ 0.03s ┃ 0.01s ┃ 0.09s ┃ 0.01s-0.09s
Devise::Sess ┃ 2 ┃ 0.04s ┃ 0.02s ┃ 0.01s ┃ 0.01s ┃ 0.03s ┃ 0.01s-0.03s
Devise::Pass ┃ 2 ┃ 0.04s ┃ 0.02s ┃ 0.02s ┃ 0.01s ┃ 0.03s ┃ 0.01s-0.03s
HomeControll ┃ 41 ┃ 0.32s ┃ 0.01s ┃ 0.01s ┃ 0.00s ┃ 0.04s ┃ 0.00s-0.04s
HomeControll ┃ 3 ┃ 0.02s ┃ 0.01s ┃ 0.00s ┃ 0.01s ┃ 0.01s ┃ 0.01s-0.01s
#. ┃ 40 ┃ 0.29s ┃ 0.01s ┃ 0.01s ┃ 0.00s ┃ 0.08s ┃ 0.00s-0.08s
PinBoardsCon ┃ 175 ┃ 1.09s ┃ 0.01s ┃ 0.01s ┃ 0.00s ┃ 0.08s ┃ 0.00s-0.07s
PinBoardsCon ┃ 34975 ┃ 2m48s ┃ 0.00s ┃ 0.01s ┃ 0.00s ┃ 0.25s ┃ 0.00s-0.02s

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Database tim ┃ Hits ┃ Sum ┃ Mean ┃ StdDev ┃ Min ┃ Max ┃ 95 %tile
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PinBoardsCon ┃ 34975 ┃ 17.91s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.11s ┃ 0.00s-0.00s
PinBoardsCon ┃ 18 ┃ 0.10s ┃ 0.01s ┃ 0.02s ┃ 0.00s ┃ 0.08s ┃ 0.00s-0.08s
PinBoardsCon ┃ 175 ┃ 0.09s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.01s ┃ 0.00s-0.00s
#. ┃ 40 ┃ 0.03s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.01s ┃ 0.00s-0.01s
Devise::Regi ┃ 7 ┃ 0.02s ┃ 0.00s ┃ 0.01s ┃ 0.00s ┃ 0.02s ┃ 0.00s-0.02s
PinBoardsCon ┃ 10 ┃ 0.02s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s-0.00s
HomeControll ┃ 41 ┃ 0.01s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s-0.00s
Devise::Sess ┃ 14 ┃ 0.01s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s-0.00s
Devise::Regi ┃ 2 ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s-0.00s
PinBoardsCon ┃ 3 ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s-0.00s
Devise::Sess ┃ 2 ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s-0.00s
HomeControll ┃ 3 ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s-0.00s
Devise::Pass ┃ 2 ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s-0.00s

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Database tim ┃ Hits ┃ Sum ┃ Mean ┃ StdDev ┃ Min ┃ Max ┃ 95 %tile
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PinBoardsCon ┃ 18 ┃ 0.10s ┃ 0.01s ┃ 0.02s ┃ 0.00s ┃ 0.08s ┃ 0.00s-0.08s
Devise::Regi ┃ 7 ┃ 0.02s ┃ 0.00s ┃ 0.01s ┃ 0.00s ┃ 0.02s ┃ 0.00s-0.02s
PinBoardsCon ┃ 10 ┃ 0.02s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s-0.00s
Devise::Regi ┃ 2 ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s-0.00s
Devise::Sess ┃ 14 ┃ 0.01s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s-0.00s
#. ┃ 40 ┃ 0.03s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.01s ┃ 0.00s-0.01s
PinBoardsCon ┃ 34975 ┃ 17.91s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.11s ┃ 0.00s-0.00s
PinBoardsCon ┃ 175 ┃ 0.09s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.01s ┃ 0.00s-0.00s
HomeControll ┃ 41 ┃ 0.01s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s-0.00s
PinBoardsCon ┃ 3 ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s-0.00s
HomeControll ┃ 3 ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s-0.00s
Devise::Sess ┃ 2 ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s-0.00s
Devise::Pass ┃ 2 ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s-0.00s

Process blockers (> 1 sec duration)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PinBoardsController#update.HTML ┃ 1 hits ┃ 100.0% ┃ ░░░░░░░░░░░░░░░░░░░░░░░░░░░

Parse warnings
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Parsable lines were encountered without a header line before it. It
could be that logging is not setup correctly for your application.
Visit this website for logging configuration tips:

http://github.com/wvanbergen/request-log-analyzer/wikis/configure-logging

Need an expert to analyze your application?
Mail to contact@railsdoctors.com or visit us at http://railsdoctors.com.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Thanks for using request-log-analyzer!

요즘 핀터레스트가 주목받고 있습니다. 솔직히 저는 웹에 사진올려 공유하는걸 개인적으로는 그렇게 자주하는 편이 아니라 인스타그램같은 사진공유 서비스에 대해 큰 매력을 못느꼈습니다만,  계속적으로 사진 이미지를 이용한 웹서비스들이 성공하며 관심있게 볼려고 하는 중입니다.

이번 글의 내용은 갑자기 어떤 웹서비스가 왜 빨리 개발해야되고 언제 얼만큼 수준이 필요한가? 에 대한 내용입니다. 그래서 거창하게 기술적인 내용을 쓸건 없어서 간단히 적습니다. 이런 내용도 적는 이유는 웹서비스의 개발 속도와 오픈 시기라는 것이 얼마나 다른 모든 것들에 비해서 중요한가에 대해 공유하기 위함입니다.

J모 신문사의 한분이 금요일에 트위터를 통해 연락주셨습니다. 핀터레스트의 이미지를 워드프레스 위젯처럼 iFrame 으로 원하는 핀보드와 이미지 크기로 껴넣고 싶다는 것이었습니다. 의뢰 작업만 보면 사실 간단합니다.

하지만, 핀터레스트는 아직 API 를 완전히 오픈하여 제공하지 않습니다. http://tijn.bo.lt/pinterest-api 오픈하고 곧 한다고 하는데 아직은 New App  등록이 안됩니다. 근데, 이미 핀터레스트의 핀이미지들을 갖고와서 위젯처럼 보여주고 싶어하는 곳이 많습니다. 그렇다면 어떻게 해야되는걸까요? RSS Feed 는 각 핀보드별로 제공해서 최근 이미지들 순서로 제공합니다.

그래서 Open API 이용하듯 비슷하게 만드는 것이 가능합니다. 워드프레스 위젯들은 이미 여러개가 그렇게 구현하여 나와있습니다. 근데, 그걸 그냥 독립적으로 자신의 홈페이지에 가져다 쉽게 쓸 서비스는 잘 안보였습니다. 아직 제가 못찾은걸수도 있습니다.

그래서 급히 유저가 원하는 rss feed 를 등록하면 가져와 해당 페이지에 이미지만 나열해 보도록 간단한 웹서비스라고 하기엔 아직은 좀 간단하지만 도메인을 등록하여 올렸습니다. 사실 이런 작업에는 서비스 도메인 생각하고 돈내고 등록하는 작업이 1시간? 걸리고 실제 코드 작업도 1시간정도였습니다. 물론 그후에 셋업하고 테스트해보는 시간도 있긴 합니다.

사실 저에게는 큰일이 아니었고, 그냥 유저 등록과 인증에 rss feed 만 갖고오게 해본 간단한 작업이었습니다만 의뢰하신 분은 해당 신문사 사이트에 적용하며 아주 만족하였습니다. (근데 의뢰했다기보단 돈은 받고 한 작업은 아니므로 그런 서비스를 제안했다는 표현이 맞습니다.)

결론은 웹서비스는 유저가 필요할때 일단 빨리 만들어놓고 쓰라고 한다음에 그후에 좀 더 개선해나가는게 역시 정답이란 것입니다. 나중에 아무리 거창하게 만들어봐야 그때되서 유저가 필요 없다면? 쓸모없는 서비스가 되버리고 마는 것입니다.

Pinterest API 들이 모두 Open 되고 등록이 가능하게되면 필요 없어질수도 있겠지만 계속 유지는 해나갈 생각입니다.

그럼 저는 좀 더 요구사항을 듣고 코드를 추가해나가겠습니다.

아, 혹시 원하시는 분은 리플 남겨주시면 핀터레스트 초대장 드립니다.

http://www.pinterestviewer.com

https://github.com/andrew-kim/pinterestviewer

http://www.pinterestviewer.com/pin_boards/1

http://jejusori.net

$ request-log-analyzer log/development.log
Request-log-analyzer, by Willem van Bergen and Bart ten Brinke - version 1.12.1
Website: http://railsdoctors.com

development.log: 100% [===========================================]
Time: 00:00:06

Request summary
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Parsed lines: 14121
Skipped lines: 2
Parsed requests: 11396
Skipped requests: 0
Warnings: no_current_request: 2, unfinished_request_on_eof: 1

First request: 2012-04-04 12:55:12
Last request: 2012-04-26 02:54:02
Total time analyzed: 22 days

Request distribution per hour
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 0:00 ┃ 19 hits/day ┃ ░░
 1:00 ┃ 22 hits/day ┃ ░░
 2:00 ┃ 27 hits/day ┃ ░░░
 3:00 ┃ 22 hits/day ┃ ░░
 4:00 ┃ 26 hits/day ┃ ░░░
 5:00 ┃ 35 hits/day ┃ ░░░░
 6:00 ┃ 34 hits/day ┃ ░░░░
 7:00 ┃ 33 hits/day ┃ ░░░░
 8:00 ┃ 40 hits/day ┃ ░░░░
 9:00 ┃ 39 hits/day ┃ ░░░░
 10:00 ┃ 22 hits/day ┃ ░░
 11:00 ┃ 8 hits/day ┃ ░
 12:00 ┃ 25 hits/day ┃ ░░░
 13:00 ┃ 62 hits/day ┃ ░░░░░░░
 14:00 ┃ 38 hits/day ┃ ░░░░
 15:00 ┃ 26 hits/day ┃ ░░░
 16:00 ┃ 21 hits/day ┃ ░░
 17:00 ┃ 1 hits/day ┃
 18:00 ┃ 6 hits/day ┃ ░
 19:00 ┃ 5 hits/day ┃
 20:00 ┃ 1 hits/day ┃
 21:00 ┃ 10 hits/day ┃ ░
 22:00 ┃ 6 hits/day ┃ ░
 23:00 ┃ 15 hits/day ┃ ░░

Most requested
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#. ┃ 10340 hits ┃ 90.7% ┃ ░░░░░░░░░░░░░░░░░░░
TweetsController#index.HTML ┃ 451 hits ┃ 4.0% ┃ ░
WelcomeController#index.HTML ┃ 307 hits ┃ 2.7% ┃ ░
SessionsController#create.HTML ┃ 87 hits ┃ 0.8% ┃
TweetsController#get_my_tweets.HTML ┃ 79 hits ┃ 0.7% ┃
SessionsController#destroy.HTML ┃ 47 hits ┃ 0.4% ┃
TweetsController#index.*/* ┃ 36 hits ┃ 0.3% ┃
WelcomeController#index.*/* ┃ 26 hits ┃ 0.2% ┃
TweetsController#dump_csv.HTML ┃ 23 hits ┃ 0.2% ┃

HTTP methods
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GET ┃ 11302 hits ┃ 99.2% ┃ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
HEAD ┃ 88 hits ┃ 0.8% ┃
POST ┃ 6 hits ┃ 0.1% ┃

HTTP statuses returned
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
200 ┃ 842 hits ┃ 80.3% ┃ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
302 ┃ 204 hits ┃ 19.5% ┃ ░░░░░░░░░░░
500 ┃ 2 hits ┃ 0.2% ┃

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Request durat ┃ Hits ┃ Sum ┃ Mean ┃ StdDev ┃ Min ┃ Max ┃ 95 %tile
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
TweetsControl ┃ 71 ┃ 10m46s ┃ 9.10s ┃ 12.29s ┃ 0.31s ┃ 45.73s ┃ 0.37s-40.46s
TweetsControl ┃ 451 ┃ 33.49s ┃ 0.07s ┃ 0.11s ┃ 0.01s ┃ 0.86s ┃ 0.01s-0.44s
WelcomeContro ┃ 307 ┃ 13.11s ┃ 0.04s ┃ 0.11s ┃ 0.01s ┃ 1.82s ┃ 0.01s-0.24s
SessionsContr ┃ 87 ┃ 4.68s ┃ 0.05s ┃ 0.12s ┃ 0.00s ┃ 0.64s ┃ 0.00s-0.57s
TweetsControl ┃ 23 ┃ 3.63s ┃ 0.16s ┃ 0.17s ┃ 0.02s ┃ 0.58s ┃ 0.02s-0.58s
SessionsContr ┃ 47 ┃ 2.19s ┃ 0.05s ┃ 0.13s ┃ 0.00s ┃ 0.60s ┃ 0.00s-0.61s
TweetsControl ┃ 36 ┃ 2.11s ┃ 0.06s ┃ 0.15s ┃ 0.01s ┃ 0.77s ┃ 0.01s-0.77s
WelcomeContro ┃ 26 ┃ 0.45s ┃ 0.02s ┃ 0.02s ┃ 0.01s ┃ 0.09s ┃ 0.01s-0.09s

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Request durat ┃ Hits ┃ Sum ┃ Mean ┃ StdDev ┃ Min ┃ Max ┃ 95 %tile
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
TweetsControl ┃ 71 ┃ 10m46s ┃ 9.10s ┃ 12.29s ┃ 0.31s ┃ 45.73s ┃ 0.37s-40.46s
TweetsControl ┃ 23 ┃ 3.63s ┃ 0.16s ┃ 0.17s ┃ 0.02s ┃ 0.58s ┃ 0.02s-0.58s
TweetsControl ┃ 451 ┃ 33.49s ┃ 0.07s ┃ 0.11s ┃ 0.01s ┃ 0.86s ┃ 0.01s-0.44s
TweetsControl ┃ 36 ┃ 2.11s ┃ 0.06s ┃ 0.15s ┃ 0.01s ┃ 0.77s ┃ 0.01s-0.77s
SessionsContr ┃ 87 ┃ 4.68s ┃ 0.05s ┃ 0.12s ┃ 0.00s ┃ 0.64s ┃ 0.00s-0.57s
SessionsContr ┃ 47 ┃ 2.19s ┃ 0.05s ┃ 0.13s ┃ 0.00s ┃ 0.60s ┃ 0.00s-0.61s
WelcomeContro ┃ 307 ┃ 13.11s ┃ 0.04s ┃ 0.11s ┃ 0.01s ┃ 1.82s ┃ 0.01s-0.24s
WelcomeContro ┃ 26 ┃ 0.45s ┃ 0.02s ┃ 0.02s ┃ 0.01s ┃ 0.09s ┃ 0.01s-0.09s

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
View rendering ┃ Hits ┃ Sum ┃ Mean ┃ StdDev ┃ Min ┃ Max ┃ 95 %tile
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
TweetsControll ┃ 451 ┃ 16.85s ┃ 0.04s ┃ 0.04s ┃ 0.01s ┃ 0.29s ┃ 0.01s-0.19s
WelcomeControl ┃ 306 ┃ 11.10s ┃ 0.04s ┃ 0.10s ┃ 0.01s ┃ 1.72s ┃ 0.01s-0.18s
TweetsControll ┃ 36 ┃ 0.77s ┃ 0.02s ┃ 0.02s ┃ 0.01s ┃ 0.10s ┃ 0.01s-0.10s
WelcomeControl ┃ 26 ┃ 0.43s ┃ 0.02s ┃ 0.02s ┃ 0.01s ┃ 0.08s ┃ 0.01s-0.08s
TweetsControll ┃ 23 ┃ 0.21s ┃ 0.01s ┃ 0.02s ┃ 0.00s ┃ 0.09s ┃ 0.00s-0.09s

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
View rendering ┃ Hits ┃ Sum ┃ Mean ┃ StdDev ┃ Min ┃ Max ┃ 95 %tile
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
TweetsControll ┃ 451 ┃ 16.85s ┃ 0.04s ┃ 0.04s ┃ 0.01s ┃ 0.29s ┃ 0.01s-0.19s
WelcomeControl ┃ 306 ┃ 11.10s ┃ 0.04s ┃ 0.10s ┃ 0.01s ┃ 1.72s ┃ 0.01s-0.18s
TweetsControll ┃ 36 ┃ 0.77s ┃ 0.02s ┃ 0.02s ┃ 0.01s ┃ 0.10s ┃ 0.01s-0.10s
WelcomeControl ┃ 26 ┃ 0.43s ┃ 0.02s ┃ 0.02s ┃ 0.01s ┃ 0.08s ┃ 0.01s-0.08s
TweetsControll ┃ 23 ┃ 0.21s ┃ 0.01s ┃ 0.02s ┃ 0.00s ┃ 0.09s ┃ 0.00s-0.09s

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Database time ┃ Hits ┃ Sum ┃ Mean ┃ StdDev ┃ Min ┃ Max ┃ 95 %tile
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
TweetsControll ┃ 451 ┃ 2.83s ┃ 0.01s ┃ 0.01s ┃ 0.00s ┃ 0.14s ┃ 0.00s-0.03s
WelcomeControl ┃ 306 ┃ 1.22s ┃ 0.00s ┃ 0.01s ┃ 0.00s ┃ 0.11s ┃ 0.00s-0.03s
TweetsControll ┃ 23 ┃ 0.36s ┃ 0.02s ┃ 0.01s ┃ 0.00s ┃ 0.03s ┃ 0.00s-0.03s
WelcomeControl ┃ 26 ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s-0.00s
TweetsControll ┃ 36 ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s-0.00s

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Database time ┃ Hits ┃ Sum ┃ Mean ┃ StdDev ┃ Min ┃ Max ┃ 95 %tile
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
TweetsControll ┃ 23 ┃ 0.36s ┃ 0.02s ┃ 0.01s ┃ 0.00s ┃ 0.03s ┃ 0.00s-0.03s
TweetsControll ┃ 451 ┃ 2.83s ┃ 0.01s ┃ 0.01s ┃ 0.00s ┃ 0.14s ┃ 0.00s-0.03s
WelcomeControl ┃ 306 ┃ 1.22s ┃ 0.00s ┃ 0.01s ┃ 0.00s ┃ 0.11s ┃ 0.00s-0.03s
WelcomeControl ┃ 26 ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s-0.00s
TweetsControll ┃ 36 ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s ┃ 0.00s-0.00s

Process blockers (> 1 sec duration)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
TweetsController#get_my_tweets.HTML ┃ 40 hits ┃ 97.6% ┃ ░░░░░░░░░░░░░░░░░░░░░░░
WelcomeController#index.HTML ┃ 1 hits ┃ 2.4% ┃ ░

Parse warnings
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Parsable lines were encountered without a header line before it. It
could be that logging is not setup correctly for your application.
Visit this website for logging configuration tips:

http://github.com/wvanbergen/request-log-analyzer/wikis/configure-logging

Need an expert to analyze your application?
Mail to contact@railsdoctors.com or visit us at http://railsdoctors.com.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Thanks for using request-log-analyzer!

얼마전에 선관위에서 DDOS 공격을 받아 웹서버가 다운됐다느니 DB연결이 끈어졌다느니 하는 뉴스로 말들이 많았습니다. DDOS 공격이 사실이라해도 부하 분산에 대한 대책이 그정도밖에 안된다는 게 말이 안되기도 하고 당연히 복제(Replication) 되어 분산 서비스해야 할 내부 DB 서버가 외부 공격에 내부 연결이 끈어진다니? 여러모로 엔지니어 입장에서는 말이 안되는거 같지만 그 얘긴 정치로 빠지므로 이만 줄입니다.

그 말많은 부하 분산, 영어로는 로드 밸런스(Load Balance) 라고 합니다. 사실 이런 용어는 꼭 IT기술용어로서뿐 아니라 일상생활에서도 자주 쓰이는 흔한 일입니다. 언제나 우리는 시간을 분산하고 거기에 따라서 일을 분산하여 너무 갑작스럽게 지치지 않게 살고 있습니다.

특히, 지금 시대에 중요한 이슈인 이유가 빅데이터, 소셜네트워크를 비롯하여 모든 인터넷상의 데이터가 어느 한곳으로 모여서 처리되고 데이터가 정보로 만들어지는 것이 바로 가치있는(돈이 되는?) 것으로 되기 때문입니다.

그러면에서 구글이 이 분야의 가장 선도적인 회사이자 대규모, 대용량 처리기술로 성공했다고 할수 있겠고, 페이스북이 그 뒤를 따라간다고 볼수 있습니다. 쉽게 생각해서 엄청난 규모의 서버랙이 들어가있는 IDC센터를 짓는다고 떠올리면 됩니다.

물론 기존의 대기업 마이크로소프트를 비롯하여 야후, 이베이도 선도적인 기술과 많은 투자를 하는 회사입니다. 우리나라 기업들도 투자는 합니다만, 아직 규모와 기술면에서는 많이 부족합니다.

근데, 부하 분산이라는게 넓게 보자면 단순히 웹서비스의 클라이언트 컨넥션을 여러대의 서버로 나눠서 하는 기술이라기보다는 모든 것을 나누고 쪼개고 안정성을 갖추는 것이라 할수 있습니다.

즉, 웹서버의 연결뿐 아니라, DB서버의 복제와 백업, 스토리지의 데이터의 분산과 백업도 포함한다고 할수 있습니다. 왜냐면, 아무리 웹서버만 나눠봐야 그 뒤에 데이터를 가져오는 곳에서 분산이 안되면? 역시나 그곳도 병목현상이 발생하기 때문입니다.

그렇게 웹서버는 받은 데이터만 처리하면 되는게 아니라 보낼 데이터도 있기 때문에 기다려야되므로 생각했던 웹서비스 전체 성능의 향상을 바랄수 없겠습니다. 즉, 어느 하나의 문제가 아닌 상당히 포괄적이고 어느 하나를 해결한다고 되는 것이 아니므로 아주 복잡한 일입니다. 그런 이유로 구글도 그렇고 페이스북도 회사내에서 자체적으로 원하는 기술을 개발해서 적용하고 외부로 공개하기도 합니다.

구글같은 경우는 아예 하드웨어부터 파워, 메인보드 디자인까지 자체적으로 제작해 나가고, OS레벨에서 파일시스템과 데이터베이스까지 모조리 자체적인 인프라 기술 Stack 으로 쌓아 만들어졌으며 페이스북도 최근에는 IDC를 설계도 하고 카산드라와 같은 NoSQL을 개발하고 인프라기술이 거의 구글수준으로 따라가고 있습니다. (당연하지만 페이스북 엔지니어들 상당수가 구글 출신입니다.)

일단, 각설하고 그럼 우리가 원하는 것은 웹서비스에서의 적용입니다. 웹서비스에서는 어떻게 하면 될까요? 사실 베이스는 크게 다르진 않습니다. 단지, 어떤 기술이 더욱 잘맞느냐? 가 관건입니다. 왜냐면, 이미 다양한 방법을 적용하여 구현된 오픈 소스 프로젝트가 많이 존재하기 때문입니다.

그럼, 우리가 간단히 사용할수 있는 오픈소스 기술에 대해서 적습니다. 여기에 필자도 경험해본것도 있지만, 아직 실제 서비스엔 적용안해본 것도 있습니다. 안해본 것은 저도 시도해보며 공부하고 정리해나가겠습니다.

LVS (Linux Virtual Server)

http://www.linuxvirtualserver.org/

펭귄이 여러마리로 분신술을 쓰듯이 리눅스 가상화 기술입니다. 일단 웹서버OS로 리눅스를 쓴다면 이것을 먼저 알아야 합니다. 대부분의 다른 오픈소스프로젝트가 LVS의 기본 베이스로 하는것이기 때문입니다. 또한, 가상화 기술은 대세이므로 꼭 먼저 살펴보셔야 할 프로젝트입니다.

Heartbeat, Pacemaker

http://www.clusterlabs.org/

하트비트(HeartBeat) 는 말그대로 심장박동을 보는 것입니다. 즉, 웹서비스가 죽었나 살았나? 본다고 생각하면 됩니다. 페이스메이커(Pacemaker) 는 얼마전 영화로도 제작된 마라톤에서 우승을 하게 하려는 선수 뒤에서 돈받고 따라서 뛰어주는 프로페셔널 마라토너입니다. 그얘기는 뭐냐면 HeartBeat 가 같이 죽었나 살았나 통신을 모니터링하면 Pacemaker 은 판단하여 제어를 하는 역할을 하는 것입니다.

Keepalived

http://www.keepalived.org/

HAProxy

The Reliable, High Performance TCP/HTTP Load Balancer

http://haproxy.1wt.eu/

VARNISH

https://www.varnish-cache.org

UltraMonkey L7

http://www.ultramonkey.info/

지금 제가 많은 관심갖고 보는 로드 밸런싱 프로젝트입니다. 단순히 하나의 프로그램이 아닌 풀스택으로 위의 모든 로드밸런싱의 기능을 하나로 쌓아올리려는 시도입니다. 우리나라엔 많이 안알려졌지만 일본에서는 아주 활발하게 개발중인 프로젝트로 이미 3.0 으로 넘어가며 안정화와 성능의 검증이 되었습니다. 이미 많은 레퍼런스도 확보되어있어서 상용서비스에 바로 적용해도 문제가 없을거 같습니다. 일본의 오픈소스커뮤니티의 저변과 참여는 정말 예전이나 지금이나 부럽습니다. 여러분도 꼭 한번 적용해보시길 추천합니다.

http://ultramonkey.sourceforge.jp/papers/lvs_tutorial/html/

Linux Virtual Server 자습서

Horms (Simon Horman) – horms@valinux.co.jp

VA Linux Systems Japan 주식 회사 – www.valinux.co.jp

2003 년 7 월 (2004 년 3 월 개정)

http://www.ultramonkey.org/

요약

Linux Virtual Server (LVS) 프로젝트는 레이어 4 스위칭을 이용하여 Web 서버나 메일 서버와 같은 네트워크 서비스의 부하 분산을 가능하게합니다. 이것은 매우 빠른 속도로 이러한 서비스는 수만에서 수십만의 동시 접속에까지 확장해 서비스를 제공할 수 있습니다. 이 연습의 목적은 LVS의 다양한 기능을 이용하여 인터넷 서비스 부하 분산을하는 방법과 heartbeat 및 keepalived 같은 도구를 사용하여 고가용성을 실현하는 방법을 보여줍니다. 또한 고가 용성 환경에서 활성 연결을 유지하거나 활성 피드백을 활용하여 부하를보다 효과적으로 분산시킬 등 최근 개발 테마가있는 고급 항목도 다룹니다.

시작하기

Linux Virtual Server (LVS) 프로젝트는 Linux 커널 레이어 4 스위칭을 구현합니다. 이것은 TCP와 UDP 세션 부하를 여러 실제 서버에 분산 수 있습니다. 즉, 인터넷 서비스를 하나 이상의 호스트로 확장할 수 있도록합니다. 이것은 전자 메일에서 X Window System까지 대부분의 서비스에서 사용할 수 있지만, World Wide Web에 HTTP 및 HTTPS 트래픽을 이용하는 것이 가장 일반적이라고 생각됩니다.

LVS 자체는 Linux에서 작동하지만, 모두가 사용하는 OS에 관계없이 최종 사용자가 실제 서버에 대한 연결을 균형있게 조정할 수 있습니다. 연결이 TCP 또는 UDP 중 하나를 사용하기만하면 LVS를 사용할 수 있습니다.

LVS는 매우 고성능, 최대 10 만 개의 동시 연결을 처리할 수 있습니다. 포화 100M 비트 ethernet 링크를 저렴한 상용 하드웨어를 사용하여 쉽게 부하 분산시킬 수 있습니다. 또한보다 고성능 상용 하드웨어를 사용하면 포화 1G 비트 이상의 링크를 부하 분산시킬 수 있습니다.

LVS의 기본

이 섹션에서는 LVS의 구조, LVS를 구해서 설치하는 방법, 주요 동작 모드의 설정 방법 등 기본적인 정보를 제공합니다. 이 정보에서 TCP와 UDP 서비스의 부하를 분산하도록 LVS를 설정할 수 있습니다.

용어

Linux Director : Linux와 LVS가 설치된 호스트. 최종 사용자의 패킷을 받아 실제 서버로 전송한다.

최종 사용자 : 연결의 기점이되는 호스트.

실제 서버 : 연결 종점이되는 호스트. Apache 등 어떤 데몬을 실행하고있다.

단일 호스트가 위의 중 여러 역할을 동시에 할 수있다.

가상 IP 주소 (VIP) : Linux Director가 취급하는 서비스에 할당된 IP 주소입니다.

실제 IP 주소 (RIP) : 실제 서버의 IP 주소입니다.

레이어 4 스위칭

그림 1 : LVS NAT

레이어 4 스위치는 들어오는 TCP / IP 연결 및 UDP / IP 데이터 그램을 실제 서버에 다중화하는 방식으로 작동합니다. 패킷은 Linux Director를 대신해서 어떤 실제 서버로 전송 여부를 결정합니다. 이것이 결정되면 동일한 연결의 나머지 패킷이 동일한 실제 서버에 보내집니다. 이렇게 연결의 무결성이 유지됩니다.

패킷 전송

Linux Virtual Server는 NAT (Network Address Translation), IP-IP 캡슐화 (터널링), 직접 라우팅 세 가지 방식으로 패킷을 전송할 수 있습니다.

NAT (Network Address Translation) : 원본 / 대상 포트, 패킷의 주소를 조작하는 방법입니다. 이것이 가장 일반적으로 사용되는 것이 IP 마스 커 레이드입니다. IP 마스 커 레이드는 RFC 1918 [2] 사설 네트워크에서 인터넷에 액세스할 수 있도록하는 데 자주 사용되는 방법입니다. 레이어 4 스위칭에서는 최종 사용자가 패킷을 받으면 대상 포트와 IP 주소가 선택된 실제 서버 것에 다시 작성됩니다. 회신 패킷 Linux Director를 지날 때 매핑이 해제되므로 최종 사용자는 예상대로 소스로부터 응답을받을 수 있습니다.
직접 라우팅 : 최종 사용자의 패킷을 직접 실제 서버로 전송하는 방법입니다. IP 패킷은 변경되지 않기 때문에 실제 서버가 가상 서버의 IP 주소에 대한 트래픽을 허용하도록 설정해야합니다. 이를 위해서는 더미 인터페이스를 사용하거나 가상 서버의 IP 주소로 트래픽을 로컬 포트​​로 리디렉션 패킷 필터링합니다. 실제 서버는 사용자에게 직접 응답을 보낼 수 있습니다. 즉, Linux Director를 리턴 경로에 상주할 수 없습니다.
IP-IP 캡슐화 (터널링) : 해당 IP 주소로 패킷을 동일한 네트워 크나 다른 네트워크에있는 다른 주소로 리디렉션할 수 있도록합니다. 레이어 4 스위치에서는이 동작을 직접 라우팅과 유사하지만 패킷을 전송할 때 그냥 ethernet 프레임을 조작하는 것이 아니라, IP 패킷에 캡슐 화하는 점이 다릅니다. 터널링의 주요 장점은 실제 서버가 다른 네트워크에있어도 상관 없다는 것입니다.
그림 2 : LVS 직접 라우팅

가상 서비스

Linux Director는 가상 서비스는 IP 주소와 포트 및 프로토콜 또는 방화벽 마크 정의됩니다. 가상 서비스에는 옵션 지속성 시간을 연결할 수 있습니다. 이것이 설정되고 제한 시간이 경과하기 전에 동일한 IP 주소에서 연결을 수신하면 연결이 원래 연결과 동일한 실제 서버로 전송됩니다.

IP 주소와 포트 및 프로토콜 : 가상 서버는 다음과 같이 지정합니다.
IP 주소 : 최종 사용자가 서비스에 액세스하는 데 사용하는 IP 주소
포트 : 최종 사용자의 연결 포트
프로토콜 : UDP 또는 TCP
방화벽 마크 : 패킷은 ipchains 또는 iptables를 사용하여 32 비트 부호없는 값으로 표시됩니다. Linux Virtual Server는이 마크를 이용하여 가상 서비스로 발송 전달된 패킷을 나열하고 적절하게 라우팅합니다. 이것은 동일한 실제 서버에서 운영하는 IP 기반 가상 서비스가 대량으로 필요하거나 다른 포트 사이에 지속성을 그룹화할 때 유용합니다. 예를 들어 특정 최종 사용자가 HTTP 및 HTTPS에서 동일한 실제 서버에 전송되도록하고 싶은 경우 등입니다.
예약

가상 서비스는 들어오는 연결을 실제 서버에 할당하는 데 사용되는 스케줄링 알고리즘이 할당됩니다. LVS는 스케줄러가 다른 커널 모듈로 구현되어 있습니다. 따라서 LVS 코드를 변경하지 않고도 새로운 스케줄러를 구현할 수 있습니다.

스케줄링 알고리즘은 용도에 따라 여러 가지가 있습니다. 가장 간단한 것은 라운드 로빈과 최소 연결입니다. 라운드 로빈은 각 실제 서버에 순차적으로 연결을 할당합니다. 최소 연결은 가장 연결이 적은 실제 서버에 연결을 할당합니다. 모두 간단한 구조로 작동합니다. 이 스케줄러는 부하에 따라 할당하는 변종도 이러한에서는 실제 서버 부하에 비례하여 연결을 할당합니다. 보다 스펙이 높은 실제 서버에 부하를 많이 설정 해두면 더 많은 연결을 할당하는 구조입니다.

특별한 용도에 대응한 더욱 복잡한 스케줄링 알고리즘도 있습니다. 예를 들어, 같은 IP 주소 요청이 동일한 실제 서버에 전송되도록하는 것은 투명한 프록시로드 균형 조정 LVS를 사용할 때 유용합니다.

LVS 설치

SuSE 등 일부 배포판은 LVS가 컴파일된 커널을 제공합니다. 이 경우 필요한 작업이 제공되고있다 ipvsadm 패키지를 설치하는 것입니다. 본고의 집필 시점에서는 Ultra Monkey은 Debian Sid (불안정 버전), Woody (안정 / 3.0), 그리고 Red Hat 7.3 및 8.0용으로 빌드된 패키지를 준비하고 있습니다. 이러한 패키지를 구해서 설치에 대한 자세한 정보는 www.ultramonkey.org를 참조하십시오. 나중에 소스에서 LVS를 설치하는 방법을 설명합니다. 이것은 LVS의 구조를 이해하는데도 도움이됩니다.

이전 버전의 LVS는 Linux 2.2 시리즈 커널에서 실행했습니다. 이 구현은 커널 소스에 많은 패치를해야했습니다. 따라서 각 버전의 LVS는 커널 버전에 밀접하게 관련이있는 것입니다. 2.4 커널의 일부인 netfilter 패킷 필터링 아키텍처 [4], LVS를 일련의 커널 모듈로 거의 단독으로 구현하는 것이 가능합니다. 이 결과, LVS가 개별 커널 릴리즈에 고정되어 버리는 일이 없습니다. LVS는 커널에 직접 컴파 일할 수 있지만, 여기에서는보다 쉽고 유연한, LVS를 모듈로 사용하는 방법을 다룹니다.

커널 받기 및 압축 풀기
모든 경우에 가장 쉬운 방법은 신선한 커널을 사용하는 것입니다. 이것은 www.kernel.org에서 구할 수 있습니다. 이 예제에서 사용하는 것은 2.4.20 커널입니다.다음 명령을 실행하여 커널을 linux-2.4.20 디렉토리에 압축을 풉니다.

tar-jxvf linux-2.4.20.tar.bz2
LVS 받기 및 압축 풀기
LVS는 www.linuxvirtualserver.org에서 구할 수 있습니다. 이 예제에서는 1.0.9을 사용합니다. 다음 명령을 실행하여 ipvs-1.0.9 디렉토리에 압축을 풉니다.

tar-zxvf ipvs-1.0.9.tar.gz
LVS 패치를 커널에 적용
LVS 모듈을 컴파일하려면, 2 개의 작은 커널 패치가 필요합니다. 이 패치를 적용하려면 다음 명령을 사용합니다.

cd linux-2.4.20 /
patch-pq <.. / ipvs-1.0.9/linuxkernel_ksyms_c.diff
patch-pq <.. / ipvs-1.0.9/linuxnet_netsyms_c.diff
인터페이스를 숨길 수 있도록 3 번째 패치를 적용합니다. 숨어 인터페이스는 ARP 요청에 응답하지 않고, LVS 직접 라우팅과 함께 실제 서버에서 사용됩니다.

patch-pq <.. / ipvs-1.0.9/contrib/patches/hidden-2.4.20pre10-1.diff
커널 구성
먼저 트리가 깨끗하다 확인합니다.

make mrproper
그러면 커널을 구성하고 있습니다. make menuconfig, make xconfig, make config 등 다양한 방법이 있지만 어느 방법이든 최소한 다음 옵션을 포함하여 netfilter 지원하도록 컴파일하도록주의하십시오. 이 옵션은 가능한 모듈로 빌드하는 것이 좋습니다.

Networking options —>
Network packet filtering (replaces ipchains)
<m> IP : tunnelling
IP : Netfilter Configuration —>
<m> Connection tracking (required for masq / NAT)
<m> FTP protocol support
<m> IP tables support (required for filtering / masq / NAT)
<m> Packet filtering
<m> REJECT target support
<m> Full NAT
<m> MASQUERADE target support
<m> REDIRECT target support
<m> NAT of local connections (READ HELP) (NEW)
<m> Packet mangling
<m> MARK target support
<m> LOG target support
커널 빌드와 설치
커널을 다시 구성했으면 빌드 종속성을 다시 구축해야합니다.

make dep
이것이 끝나면 다음 명령을 사용하여 커널과 모듈을 빌드합니다.

make bzImage modules
빌드된 모듈과 커널을 설치하려면 다음 명령을 실행합니다. 이렇게하면 / lib/modules/2.4.20 / 모듈이 설치된 / boot/vmlinuz-2.4.20 커널이 설치됩니다.

make install modules_install
부트 로더 업데이​​트
부트 로더 grub을 사용하는 경우 / etc / grub.conf에 새 항목을 추가할 필요가 있습니다.여기서는 / boot 파티션을 / dev/hda3는 것을 전제로 설명합니다. / etc / grub.conf의 기존 항목을 참고하십시오.

title 2.4.20 LVS
root (hd0, 0)
kernel / vmlinuz-2.4.20 ro root = / dev/hda3
부트 로더가 lilo의 경우 / etc / lilo.conf에 새 항목을 추가합니다. 여기서는 루트 파티션이 / dev/hda2 것을 전제로 설명합니다. / etc / lilo.conf에있는 기존 항목을 참고하십시오.

image = / boot/vmlinuz-2.4.20
label = 2.4.20-lvs
read-only
root = / dev/hda2
/ etc / lilo.conf가 업데이트되면 lilo를 실행합니다.

lilo
Added Linux-LVS *
Added Linux
Added LinuxOLD
시스템을 다시 시작합니다.
부트 로더 프롬프트에서 새로 만든 커널이 부팅되는지 확인합니다.

LVS 빌드 및 설치
LVS를 구축하기위한 명령은 ipvs-1.0.9/ipvs / 디렉토리에서 실행합니다. 빌드 및 설치에 사용하는 명령은 다음과 같습니다. 커널을 빌드한 / kernel/source/linux-2.4.20를 루트 디렉토리로 사용하십시오.

make KERNELSOURCE = / kernel/source/linux-2.4.20 all
make KERNELSOURCE = / kernel/source/linux-2.4.20 modules_install
Ipvsadm 빌드 및 설치
Ipvsadm는 LVS 설정하는 데 사용하는 사용자 공간 도구입니다. 소스 ipvs-1.0.9/ipvs/ipvsadm / 디렉토리에 있습니다. 빌드 및 설치하려면 다음 명령을 사용합니다.

make all
make install
LVS NAT

LVS NAT는 LVS 설정 아마 가장 간단한 방법입니다. 실제 서버에서 패킷을 Linux Director가 수신 대상 IP 주소가 실제 서버의 것으로 다시 작성됩니다. 실제 서버의 응답 패킷의 원본 IP 주소는 실제 서버 것에서 VIP의 것으로 바뀝니다.

그림 3 : LVS NAT의 예

Linux Director

IP 전달 기능을 활성화합니다. 이것은 다음 줄을 / etc / sysctl.conf에 추가하여 sysctl-p를 실행하여합니다.
net.ipv4.ip_forward = 1
eth0 : 0 172.17.60.201를 설정합니다. 이것은 시스템의 네트워크 설정의 일부로하는 것이 가장 좋지만, 수동 수도 있습니다.
ifconfig eth0 : 0 172.17.60.201 netmask 255.255.0.0 broadcast 172.17.255.255
LVS 설정
ipvsadm-A-t 172.17.60.201:80
ipvsadm-a-t 172.17.60.201:80-r 192.168.6.4:80-m
ipvsadm-a-t 172.17.60.201:80-r 192.168.6.5:80-m
실제 서버

회신 패킷 Linux Director를 통해 라우팅되어 있는지 확인하십시오. 일반적으로 서버 네트워크의 VIP를 기본 게이트웨이 설정하여 수행합니다.
원하는대로 데몬이 포트 80을 수신하고 최종 사용자의 연결을 처리할 수 있는지 확인하십시오.
테스트 및 디버깅

테스트 서버 네트워크 외부에서 172.17.60.201:80에 연결합니다.

Linux Director와 실제 서버에서 패킷 추적 도구를 실행하면 디버깅에 매우 유용합니다.연결 경로를 추적하고 모든 단계에서 패킷이 사라지고 있는지 판단하면 설정에 대한 많은 문제를 해결할 수 있습니다. 여기에서는 예로 Tcpdump를 사용하는 방법을 소개하지만, 다양한 OS를위한 여러 가지 도구가 존재합니다.

다음 추적은 최종 사용자 10.2.3.4가 VIP 172.17.60.201 연결을 시작하고이 연결을 실제 서버 192.168.6.5로 전송됩니다. Linux Director가 패킷을 받아 실제 서버로 전송하고 그 반대를하고있는 것을 알 수 있습니다. 실제 서버에 전송된 패킷이 원본 주소로 최종 사용자의 IP 주소를 가지고있는 것에 주목하십시오. Linux Director 변경하는 것은 패킷의 대상 IP 주소입니다. 마찬가지로 실제 서버의 응답에 대상으로 최종 사용자의 주소가 지정되어 있습니다. Linux Director 회신 패킷의 원본 IP 주소만을 VIP되도록 다시 작성합니다.

tcpdump-n-i any port 80
12:40:40.965499 10.2.3.4.34802> 172.17.60.201.80 :
S 2555236140:2555236140 (0) win 5840
<mss 1460,sackOK,timestamp 16690997 0,nop,wscale 0>
12:40:40.967645 10.2.3.4.34802> 192.168.6.5.80 :
S 2555236140:2555236140 (0) win 5840
<mss 1460,sackOK,timestamp 16690997 0,nop,wscale 0>
12:40:40.966976 192.168.6.5.80> 10.2.3.4.34802 :
S 2733565972:2733565972 (0) ack 2555236141 win 5792
<mss 1460,sackOK,timestamp 128711091 16690997,nop,wscale 0> (DF)
12:40:40.968653 172.17.60.201.80> 10.2.3.4.34802 :
S 2733565972:2733565972 (0) ack 2555236141 win 5792
<mss 1460,sackOK,timestamp 128711091 16690997,nop,wscale 0> (DF)
12:40:40.971241 10.2.3.4.34802> 172.17.60.201.80 :
. ack 1 win 5840 <nop,nop,timestamp 16690998 128711091>
12:40:40.971387 10.2.3.4.34802> 192.168.6.5.80 :
. ack 1 win 5840 <nop,nop,timestamp 16690998 128711091>
ctrl-c
활성 연결 수를 표시하려면 ipvsadm-L-n을 사용합니다.

ipvsadm-L-n
IP Virtual Server version 1.0.9 (size = 4096)
Prot LocalAddress : Port Scheduler Flags
-> RemoteAddress : Port Forward Weight ActiveConn InActConn
TCP 172.17.60.201:80 rr
-> 192.168.6.5:80 Masq 1 7 3
-> 192.168.6.4:80 Masq 1 8 4
ipvsadm-L-stats는 초당 전송 및 수신되는 패킷의 수와 바이트 수를 표시합니다.

ipvsadm-L-n – stats
IP Virtual Server version 1.0.9 (size = 4096)
Prot LocalAddress : Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress : Port
TCP 172.17.60.201:80 114 1716 1153 193740 112940
-> 192.168.6.5:80 57 821 567 9464 2 55842
-> 192.168.6.4:80 57 895 586 9909 8 57098
ipvsadm-L-rate는 송수신되는 패킷의 수를 표시합니다.

ipvsadm-L-n – rate
IP Virtual Server version 1.0.9 (size = 4096)
Prot LocalAddress : Port CPS InPPS OutPPS InBPS OutBPS
-> RemoteAddress : Port
TCP 172.17.60.201:80 56 275 275 1873 9 41283
-> 192.168.6.5:80 28 137 137 9344 20634
-> 192.168.6.4:80 28 138 137 9395 20649
ipvsadm-L-zero는 모든 통계 값을 제로로합니다.

LVS 직접 라우팅

그림 4 : LVS 직접 라우팅 예제

LVS 직접 라우팅은 패킷을 변경하지 않고 실제 서버의 MAC 주소로 전달하는 방식으로 작동합니다. 패킷이 변경되지 않기 때문에, VIP 향하는 트래픽을 받아 실제 서버를 설정해야합니다. 이것은 숨겨진 인터페이스를 사용하여 구현되는 것이 일반적입니다.

Linux Director는 들어오는 패킷을 변경하지 않기 때문에, 응답 패킷이 Linux Director를 거칠 필요가 없습니다. 이 덕분에 더 높은 처리량을 제공합니다. 또한 회신 패킷 Linux Director를 통하지 않고 직접 최종 사용자에게 보내지기 때문에 동일한 로컬 네트워크의 최종 사용자에게 서비스의 부하를 분산하는 것이 쉽습니다.

Linux Director

IP 전달 기능을 활성화합니다. 이것은 다음 줄을 / etc / sysctl.conf에 추가하여 sysctl-p를 실행합니다.
net.ipv4.ip_forward = 1
eth0 : 0 172.17.60.201를 설정합니다. 이것은 시스템의 네트워크 설정의 일부로하는 것이 가장 좋지만, 수동 수도 있습니다.
ifconfig eth0 : 0 172.17.60.201 netmask 255.255.0.0 broadcast 172.17.255.255
LVS 설정
ipvsadm-A-t 172.17.60.201:80
ipvsadm-a-t 172.17.60.201:80-r 172.17.60.199:80-g
ipvsadm-a-t 172.17.60.201:80-r 172.17.60.200:80-g
실제 서버는 응답 패킷을 직접 사용자에게 보낼 수 있습니다. Linux Director가 패킷을 변경할 필요가 없습니다. 즉, Linux Director가 실제 서버의 게이트웨이되지 않아도됩니다.
그러나 경우에 따라서는 (Linux Director는 정말 실제 서버의 네트워크 게이트웨 이인 경우) 실제 서버에서 응답 패킷을 Linux Director를 통해 라우팅하는 것이 바람직하다 수 있습니다. 이러한 패킷의 소스 주소는 VIP입니다. 그러나이 VIP는 Linux Director 인터페이스에 속해 있기 때문에, Linux Director는 패킷이 위조되고있는 것으로 간주하고이를 무시하고 버립니다.

이 문제를 해결하는 방법은 여러 가지가 있습니다. 가장 좋은 방법은 Julian Anastasov 제공 커널 패치를 적용하는 것입니다. 이 패치는 인터페이스별로 패킷 삭제 동작을 무효로 할 수있다 proc 항목을 추가합니다. 이 패치는 http://www.ssi.bg/ ~ ja / # lvsgw에서 구할 수 있습니다.

실제 서버

위의 패치를 커널에 적용하지 않는 경우 응답 패킷이 Linux Director를 통해 라우팅되지 않았는지 확인합니다.
최종 사용자의 연결을 처리하는 데몬이 포트 80에서 수신을하고 있는지 확인합니다.
루프백 인터페이스에 172.17.60.201를 설정합니다. 이것은 시스템의 네트워크 설정의 일부로하는 것이 가장 좋지만, 수동 수도 있습니다. Linux에서 다음 명령을 사용하여합니다.
ifconfig lo : 0 172.17.60.201 netmask 255.255.255.255
172.17.60.201이 속한 네트워크의 실제 서브넷 마스크 관계없이 네트 마스크는 255.255.255.255이어야합니다. 이것은 루프백 인터페이스는 넷마 스크가 포함하는 모든 주소가 인터페이스에 바인딩되어 있기 때문입니다. 일반적인 경우는 127.0.0.1 네트 마스크 255.0.0.0로 설정된 루프백 인터페이스가 127.0.0.0 / 8 모든 트래픽을 허용하는 것입니다. 따라서 여기에서는 lo : 0 만 172.17.60.201로 향하는 패킷을받을 수 있도록하고 싶기 때문에, 네트 마스크가 255.255.255.255 여야가 있습니다.

루프백을 숨깁니다. Linux 실제 서버에서 루프백 인터페이스를 숨기고, VIP의 ARP 요청에 응답하지 않도록해야합니다. 이것은 “LVS 설치”섹션에서 소개한 숨어 인터페이스 패치를 적용하여 수 있습니다. 패치를 사용하려면 다음 행을 / etc / sysctl.conf에 추가하고 sysctl-p를 실행합니다.
# 숨겨진 장치를 활성화하는
net.ipv4.conf.all.hidden = 1
# 루프백 인터페이스 숨기기
net.ipv4.conf.lo.hidden = 1
테스트 및 디버깅

테스트는 모든 네트워크에서 172.17.60.201:80에 연결하여 수행할 수 있습니다.

디버깅은 LVS NAT와 마찬가지로 ipvadm 및 패킷 추적을 사용하여 수행할 수 있습니다.그러나 패킷이 전송될 때, 주소 변환이되지 않는 것에 주의해주세요. 또한 회신 패킷이 LVS에 의해 처리되지 않는 경우에도주의가 필요합니다. 실제 서버에서 최종 사용자에게 직접 전송됩니다. 따라서 송신 패킷과 바이트는 제로가됩니다.

LVS 터널

그림 5 : LVS 터널 예 : LVS 직접 라우팅 예제와 동일한 토폴로지

LVS 터널링은 직접 라우팅과 거의 같은 구조입니다. 주요 차이점은 단순히 새로운 ethernet 프레임을 보내는 것이 아니라 IP 캡슐화된 IP를 사용하여 패킷이 실제 서버에 전송되는 것입니다. 이 최대의 장점은 실제 서버가 Linux Director는 다른 네트워크에있어도 상관 없다는 것입니다.

Linux Director

IP 전달 기능을 활성화합니다. 이것은 다음 줄을 / etc / sysctl.conf에 추가하여 sysctl-p를 실행합니다.
net.ipv4.ip_forward = 1
eth0 : 0 172.17.60.201를 설정합니다. 이 경우에도 시스템의 네트워크 설정의 일부로하는 것이 가장 좋지만, 수동 수도 있습니다.
ifconfig eth0 : 0 172.17.60.201 netmask 255.255.0.0 broadcast 172.17.255.255
LVS 설정
ipvsadm-A-t 172.17.60.201:80
ipvsadm-a-t 172.17.60.201:80-r 172.17.60.199:80-i
ipvsadm-a-t 172.17.60.201:80-r 172.17.60.200:80-i
Linux Director를 실제 서버의 게이트웨이 라우터로 사용하려면 (그 필요는 없지만), 커널에 패치를 적용하는 방법을 “직접 라우팅”섹션에서 확인하십시오.
실제 서버

“직접 라우팅 ‘섹션에서 소개 패치를 커널에 적용하지 않는 경우 응답 패킷이 Linux Director를 통해 라우팅되지 않았는지 확인합니다.

원하는 데몬이 포트 80에서 실행되고 최종 사용자의 연결을 받아들일 수 있는지 확인하십시오.
tunl0에 172.17.60.201를 설정합니다. 이 경우에도 시스템의 네트워크 설정의 일부로하는 것이 가장 좋지만, 수동 수도 있습니다.
ifconfig tunl0 172.17.60.201 netmask 255.255.255.255
포워딩을 사용하여 루프백을 숨깁니다. 이것은 / etc / sysctl.conf에 다음 줄을 추가하고 sysctl-p를 실행하여 수행할 수 있습니다.
net.ipv4.ip_forward = 1
# 숨겨진 장치를 활성화하는
net.ipv4.conf.all.hidden = 1
# tunl0 인터페이스 숨기기
net.ipv4.conf.tunl0.hidden = 1
테스트 및 디버깅

테스트는 모든 네트워크에서 172.17.60.201:80에 연결하여 수행할 수 있습니다. 디버깅 LVS 직접 라우팅과 비슷합니다.

고가 용성

LVS는 네트워크 서비스의 부하 분산을 효율적으로하기위한 방법입니다. 일반적으로 여러 서버 (최종 사용자보고) 하나의 서버인 것처럼 작동하는 것을 의미합니다. 불행히도, 시스템의 서버의 수가 증가하면 증가할수록, 그 중 하나에 오류가 일어날 가능성도 높아집니다. 따라서 높은 가용성을 실현하는 기술을 이용하여 1 대의 서버에 장애가 발생해도 가상 서비스가 유지되도록하는 것이 중요합니다.

Heartbeat

Heartbeat는 한 쌍의 Linux Director를 모니터링하는 데 사용되는 모든 시간에 반면에 VIP가 할당된 것을 보장합니다. 이것은 각 호스트가 정기적으로 heartbeat 메시지를 전송하여 작동합니다. 정해진 시간에 heartbeat 메시지가 수신되지 않으면 해당 호스트가 실패로 간주됩니다. 이 경우 리소스를 인계 수 있습니다. Heartbeat는 모듈식 설계가되어 있으며, 모든 리소스를 정의할 수 있습니다.

설명의 형편상 여기서는 IP 주소 리소스합니다. 페일오버가 발생하면 IP 주소 인계라는 방법으로 IP 주소를 검색합니다. 이것은 새로 활성화된 Linux Director가 gratuitous ARP 패킷을 VIP로 전송하여 수행됩니다. 네트워크의 모든 호스트는이 ARP 패킷을 받고 다음 패킷을 새 Linux Director의 VIP로 발송 보냅니다.

Heartbeat는 www.linux-ha.org에서 구할 수 있습니다. 제공되는 패키지를 사용하여 설치하거나 다음 명령을 사용하여 소스에서 빌드합니다.

. / ConfigureMe build
make
make install
예제 구성

그림 6 : Heartbeat 예제

/ etc / ha.d에있는 3 개의 파일을 사용하여 설정합니다.

ha.cf : 통신에 사용 인터페이스, 메시지 전송 빈도 로깅 위치 등 heartbeat의 기본 매개 변수를 설정합니다.

http://sourceforge.jp/projects/ultramonkey-l7/docs/UltraMonkey-L7_HB2_install_manual_v1.0.txt/ja/2/UltraMonkey-L7_HB2_install_manual_v1.0.txt.txt

UltraMonkey-L7 Heartbeat2 환경 설치 설명서 v1.0 [v2.0.0-x (GUI 1.0.0-x) 지원 버전]

변경 내용]
2008.06.04 [v1.0] : 초판

————————————————– ———————-
1 전제 조건
1.1 주요 사양
1.2 사전 준비
2 설치
2.1 사용자 생성, 암호 설정
2.2 본체 설치
2.3 Heartbeat2 추가 패키지 설치
2.4 Heartbeat2 설정 모듈 설치
3 Heartbeat2 설정
3.1 Heartbeat 본체 모듈 스크립트 (/ etc / init.d / heartbeat) 편집
3.2 클러스터의 기본 설정 (/ etc / ha.d / ha.cf) 편집
3.3 클러스터에 대한 자세한 설정 (/ var / lib / heartbeat / crm / cib.xml) 편집
3.4 RA 스크립트 배포
4 Heartbeat2의 동작 확인
4.1 전제 조건
4.2 확인 모니터 시작
4.3 Heartbeat2 시작
4.4 Heartbeat2 상태 확인
4.5 ACT / SBY의 전환 확인

————————————————– ———————-

1 전제 조건
이 안내서가 가정 환경은 다음과 같습니다.

1.1 주요 사양
1.1.1 하드웨어 (권장)
CPU : Xeon2.8GHz x2 해당 메모리 : 2GB 상당, HDD10GB 상당
Ethernet : 1000BASE-T, 1000BASE-SX

1.1.2 주요 소프트웨어
· OS : RedHatEnterpriseLinux 5.1 (kernel2.6.18-xx) x86_64 버전
· OS : RedHatEnterpriseLinux 4.4 (kernel2.6.9-xx) i386 버전
· L7 부하 분산 프레임 워크 (l7vs)
· L7 서버 모니터링 설정 도구 (l7directord)

1.1.3 본 설명서에서 사용하는 소스
· heartbeat-2.1.3-1.rhel5.x86_64.RPMS.tar.gz x86_64 버전
· heartbeat-2.1.3-1.rhel4.i386.RPMS.tar.gz i386 버전
· monitoring-1.0.tar.gz
· ultramonkey-l7-hbra.tar.gz

이 설명서에서는 위의 소스를 사용하기로
설명하고 있습니다.
다른 버전 등을 사용할 때주의 바랍니다.

1.2 사전 준비

1.2.1 종속 패키지 (libtool, sensors) 설치
※ 의존 패키지가 설치되지 않은 경우에 실시한다.
(RedHatEnterpriseLinux 5.1 전용)

# yum-y install libtool-ltdl.x86_64
# yum-y install lm_sensors.x86_64

1.2.2 watchdog 설정
softdog 설정을 추기하는

# cp-p / etc / modprobe.conf {. bak}
# vim / etc / modprobe.conf

options softdog nowayout = 0
2 설치

2.1 사용자 생성, 암호 설정

# groupadd-g 90 haclient
# useradd-u 90-g haclient-c “HA Cluster”-d / home / hacluster-s / bin / bash-m hacluster
# passwd hacluster
New UNIX password : (암호 입력)

2.2 본체 설치

2.2.1 패키지 검색
(패키지 목록)
· heartbeat-2.1.3-1.x86_64.rpm
· heartbeat-gui-2.1.3-1.x86_64.rpm
· pils-2.1.3-1.x86_64.rpm
· stonith-2.1.3-1.x86_64.rpm

※ 상기 패키지는 다음에서 일괄 다운로드 수
(다운로드 위치)

http://www.linux-ha.org/ja/DownloadSoftware_ja

- for RHEL5 (x86_64)
· heartbeat-2.1.3-1.rhel5.x86_64.RPMS.tar.gz
- for RHEL4 (i386)
· heartbeat-2.1.3-1.rhel4.i386.RPMS.tar.gz

2.2.2 패키지 배포
(x86_64 버전)
# tar xfvz / tmp/heartbeat-2.1.3-1.rhel5.x86_64.RPMS.tar.gz

(i386 버전)
# tar xfvz / tmp/heartbeat-2.1.3-1.rhel4.i386.RPMS.tar.gz

2.2.3 설치
(x86_64 버전)
# cd heartbeat-2.1.3-1.rhel5.x86_64.RPMS
# rpm-ivh heartbeat-2.1.3-1.x86_64.rpm heartbeat-gui-2.1.3-1.x86_64.rpm \
pils-2.1.3-1.x86_64.rpm stonith-2.1.3-1.x86_64.rpm

(i386 버전)
# cd heartbeat-2.1.3-1.rhel4.i386.RPMS
# rpm-ivh heartbeat-2.1.3-1.i386.rpm heartbeat-gui-2.1.3-1.i386.rpm \
pils-2.1.3-1.i386.rpm stonith-2.1.3-1.i386.rpm

2.2.4 rpm 확인
# rpm-qa | egrep “heartbeat | stonith | pils”
heartbeat-2.1.3-1
stonith-2.1.3-1
heartbeat-gui-2.1.3-1
pils-2.1.3-1

2.3 Heartbeat2 추가 패키지 설치

2.3.1 추가 패키지 검색
추가 패키지 (monitoring-1.0.tar.gz)을 http://linux-ha.org/ja/monitoring_ja에서 얻은 임의의 디렉토리에 제공

# tar xvzf monitoring-1.0.tar.gz
# cd monitoring-1.0

2.3.2 권한 변경

# chown root : root heartbeat_logmoni.sh
# chown root : root startstop
# chmod 755 heartbeat_logmoni.sh
# chmod 755 startstop
# ls-l heartbeat_logmoni.sh startstop
-rwxr-xr-x 1 root root 5123 Mar 2 10:10 heartbeat_logmoni.sh
-rwxr-xr-x 1 root root 747 Mar 2 10:10 startstop
2.3.3 배치 디렉토리 만들기

# mkdir / etc / ha.d / monitoring

2.3.4 모듈 디렉토리에

# cp-p heartbeat_logmoni.sh / etc / ha.d / monitoring
# cp-p startstop / etc / ha.d / resource.d
2.3.4 배치 모듈의 권한이 2.3.2에서 설명한 바와 같이다는 것을 확인

# ls-l / etc / ha.d / monitoring / heartbeat_logmoni.sh
-rwxr-xr-x 1 root root 5123 5 월 28 3:40 heartbeat_logmoni.sh
# ls-l / etc / ha.d / resource.d / startstop
-rwxr-xr-x 1 root root 747 5 월 28 3:40 startstop

2.3.5 UltraMonkey-L7 리소스 에이전트 검색
SourceForge.jp 더 ultramonkey-l7-hbra.tar.gz을 검색하고 원하는 디렉토리에 제공

# tar xvzf ultramonkey-l7-hbra.tar.gz
# cd ultramonkey-l7-hbra

2.3.6 권한 변경

# chown root : root L7vsd
# chown root : root L7directord
# chown root : root VIPcheck
# chown hacluster : haclient cib.xml-sample
# chmod 755 L7vsd
# chmod 755 L7directord
# chmod 755 VIPcheck
# chmod 600 cib.xml-sample

2.3.7 파일을 해당 디렉토리에 배치

# cp-p L7vsd / usr/lib/ocf/resource.d/heartbeat/L7vsd
# cp-p L7directord / usr/lib/ocf/resource.d/heartbeat/L7directord
# cp-p VIPcheck / usr / lib / ocf / resource.d / heartbeat / VIPcheck
# cp-p cib.xml-sample / var / lib / heartbeat / crm / cib.xml
3 Heartbeat2 설정

3.1 Heartbeat2 구성

다음 문서에 따라 필요한 파일을 설정합니다

http://www.linux-ha.org/ja/GettingStartedRevisedV2_ja

- authkeys
- ha.cf
- logd.cf

(※ 참고 예제 authkeys)
# vim / etc / ha.d / authkeys
auth 1
1 sha1 ClusterKey01

(※ 참고 예제 ha.cf)
# vim / etc / ha.d / ha.cf
crm on
use_logd on

debug 0
udpport (포트 번호) * 1
keepalive 2
warntime 20
deadtime 24
initdead 48

bcast (NIC 이름) * 2

node (LB 서버 이름) * 3
node (LB 서버 이름) * 4
watchdog / dev / watchdog
respawn root / usr/lib64/heartbeat/pingd-m 100-a default_ping_set * 5
ping (IP 주소) * 6
respawn root / etc / ha.d / monitoring / heartbeat_logmoni.sh monitor

* 1 : 상호 통신 포트 번호를 설정
* 2 : 상호 LAN 네트워크 장치 이름 설정 (※ 대향 Node에 직결되는 LAN)
* 3 : Primary LB 서버 이름을 설정
* 4 : Secondary LB 서버 이름을 설정
* 5 : i386 버전의 경우 “/ usr / lib / heartbeat / pingd”
* 6 : ping 모니터링 IP 주소 (※ 기본 게이트웨이)

(※ 참고 예제 logd.cf)
# vim / etc / logd.cf
logfile / var / log / ha-log
debugfile / var / log / ha-debug
logfacility none

3.2 Heartbeat 본체 모듈 스크립트 (/ etc / init.d / heartbeat) 편집

※ -> 추기 부분

# vim / etc / init.d / heartbeat

<편집 전>
· · ·
restart)
sleeptime =`ha_parameter deadtime`
StopHA
Echo
EchoNoNl Waiting to allow resource takeover to complete :
sleep $ sleeptime
sleep 10 # allow resource takeover to complete (hopefully).
echo_success
Echo
StartHA
Echo
;;
· · ·

<편집 후>
· · ·
restart)
sleeptime =`ha_parameter deadtime`
-> RunStartStop “pre-stop”
StopHA
Echo
EchoNoNl Waiting to allow resource takeover to complete :
sleep $ sleeptime
sleep 10 # allow resource takeover to complete (hopefully).
echo_success
Echo
-> RunStartStop “pre-start”
StartHA
Echo
;;
· · ·

3.3 클러스터에 대한 자세한 설정 (/ var / lib / heartbeat / crm / cib.xml) 편집

3.3.1 백 파일 디렉토리 (/ root / hb_def) 만들기
# mkdir-p / root / hb_def

3.3.2 VIPcheck 자원 매개 변수 편집

※ -> 편집 부분

# vim / var / lib / heartbeat / crm / cib.xml
· · ·
<pri​​mitive id=”prmVIPcheck” class=”ocf” type=”VIPcheck” provider=”heartbeat”>
<instance_attributes id=”prmVIPcheck_instance_attrs”>
<attributes>
-> <nvpair id=”~” name=”target_ip” value=”(Virtual-IP)”/> * 1
-> <nvpair id=”~” name=”count” value=”(実行回数)”/> * 2
-> <nvpair id=”~” name=”wait” value=”(wait値)”/> * 3
</ attributes>
· · ·

* 1 : Virtual-IP 설정
* 2 : Virtual-IP 사용량 확인 (ping)하는 횟수 (default : 1)
* 3 : Virtual-IP 사용량 확인 (ping)을 수행 전송 간격 (default : 10)

3.3.3 VIPcheck 자원 매개 변수 편집

※ -> 편집 부분

# vim / var / lib / heartbeat / crm / cib.xml
· · ·
<pri​​mitive id=”prmVIP” class=”ocf” type=”IPaddr2″ provider=”heartbeat”>
<instance_attributes id=”prmVIP_instance_attrs”>
<attributes>
<nvpair id=”~” name=”ip” value=”(Virtual-IP)”/> * 1
<nvpair id=”~” name=”nic” value=”(NIC名)”/> * 2
<nvpair id=”~” name=”cidr_netmask” value=”(넷토마스쿠)”/> * 3
</ attributes>
· · ·

* 1 : Virtual-IP 설정
* 2 : Virtual-IP에 연결된 네트워크 장치 이름
* 3 : 넷마 스크

3.3.4 Primary / Secondary 서버 편집

※ -> 편집 부분

# vim / var / lib / heartbeat / crm / cib.xml

<rsc_location id=”location_node01_200″ rsc=”grpUltraMonkey”>
<rule id=”prefered_location_node01_200″ score=”200″>
-> <expression attribute=”#uname” id=”~” operation=”eq” value=”(LB사바名)”/> * 1
</ rule>
</ rsc_location>
<rsc_location id=”location_node02_100″ rsc=”grpUltraMonkey”>
<rule id=”prefered_location_node02_100″ score=”100″>
-> <expression attribute=”#uname” id=”~” operation=”eq” value=”(LB사바名)”/> * 2
</ rule>
</ rsc_location>

* 1 : Primary LB 서버
* 2 : Secondary LB 서버

3.3.5 편집의 / var / lib / heartbeat / crm / cib.xml 백업 파일 작성

# cp-p / var / lib / heartbeat / crm / cib.xml / root / hb_def / cib.xml.org

3.3.6 불필요한 파일 삭제

/ var / lib / heartbeat / crm 아래에 다른 파일이있는 경우 cib.xml 이외의 불필요한 파일을 삭제

3.3.7 [참고] 각종 설정 정보 네트워크 다이어그램

Virtual-IP
|
+ ————————————————- – +
| |
+ —————— + 인터커넥트 LAN + ——————– +
| Primary LB 서버 | —————————— | Secondary LB 서버 |
+ —————— + + ——————– +
4 Heartbeat2의 동작 확인

4.1 전제 조건

4.1.1 L7vsd를 시작

# / etc/init.d/l7vsd start

4.1.2 L7directord 중지

# / etc/init.d/l7directord stop

4.1.3 / etc / hosts의 설정 확인

/ etc / hosts가 제대로 설정했는지 확인

4.2 확인 모니터 시작
※ 두 Node에서도 가능

4.2.1 모니터 시작 명령을 실행하고 다음이 표시되는지 확인

# crm_mon-i1
Not connected : Refresh in 2s …

4.3 Heartbeat2 시작
※ 두 Node에서 실시

4.3.1 Heartbeat2 시작 명령을 실행하고 다음이 표시되는지 확인

# service heartbeat start
Starting High-Availability services : [OK]

4.3.2 [참고] Heartbeat2를 중지하는 방법은 다음 명령을 실행

# service heartbeat stop
Stopping High-Availability services : [OK]

4.4 Heartbeat2 상태 확인

4.4.1 모니터에서 다음이 표시되는지 확인

* 1) “2 Nodes · · ·”라고 표시되어 있는지 확인
* 2) “1 Resources · · ·”라고 표시되어 있는지 확인
* 3) 2 개의 Node가 “online”으로 표시되고 있는지 확인 (※ 시작하지 않는 경우 OFFLINE)
* 4) prmVIPcheck, prmL7vsd, prmVIP, prmL7directord 4 항목이 Resource Group되어 있는지 확인
* 5) 상기 4 개 항목 Started되어 있는지 확인

Refresh in 1s …

============
Last updated : Fri Dec 28 01:00:00 2007
Current DC : rhplb0201 (97b7cbd5-d650-4601-835f-c5864af74b9d)
2 Nodes configured * 1
1 Resources configured * 2
============

Node : Node 이름 (97b7cbd5-d650-4601-835f-c5864af74b9d) : online – +
Node : Node 이름 (ba9c81d1-f957-4e63-a7df-396a9cfcc045) : online | * 3
- +
Resource Group : grpUltraMonkey
prmVIPcheck (heartbeat :: ocf : VIPvheck) : Started [ACT의 Node 이름 - +
prmL7vsd (heartbeat :: ocf : L7vsd) : Started [ACT의 Node 이름 |
prmVIP (heartbeat :: ocf : IPaddr2) : Started [ACT의 Node 이름 | * 4 * 5
prmL7directord (heartbeat :: ocf : L7directord) : Started [ACT의 Node 이름 |
- +

4.5 ACT / SBY의 전환 확인

4.5.1 ACT (이 예제에서는 Primary Node)의 Heartbeat2를 중지하고 ACT / SBY를 전환

# service heartbeat stop
Stopping High-Availability services : [OK]
4.5.2 모니터에서 다음이 표시되는지 확인

* 1) Secondary Node가 online으로 표시되고 있는지 확인
* 2) Primary Node가 OFFLINE으로 표시되고 있는지 확인
Refresh in 1s …

============
Last updated : Fri Dec 28 02:00:00 2007
Current DC : rhplb0201 (97b7cbd5-d650-4601-835f-c5864af74b9d)
2 Nodes configured.
1 Resources configured.
============

Node : Secondary Node 이름 (97b7cbd5-d650-4601-835f-c5864af74b9d) : online
Node : Primary Node 이름 (ba9c81d1-f957-4e63-a7df-396a9cfcc045) OFFLINE

Resource Group : grpUltraMonkey
prmVIPcheck (heartbeat :: ocf : VIPvheck) : Started [Secondary Node 이름
prmL7vsd (heartbeat :: ocf : L7vsd) : Started [Secondary Node 이름
prmVIP (heartbeat :: ocf : IPaddr2) : Started [Secondary Node 이름
prmL7directord (heartbeat :: ocf : L7directord) : Started [Secondary Node 이름

http://sourceforge.jp/projects/ultramonkey-l7/docs/uml7-administration_manual_v3.2_ja/ja/1/uml7-administration_manual_v3.2_ja.txt

UltraMonkey-L7 관리자 설명서 v3.2 [v3.0.x 대응 판]

==================================================

변경 내용]
2005.10.25 [v1.0] 초판
2005.11.15 [v1.1] 설명서의 결함을 수정
2006.03.02 [v1.2] 옵션에 대한 설명 추가
2006.07.07 [v1.3] 목차 재검토 및 kssl 보충 설명 추가에 따른 수정
2007.01.19 [v1.4] 기능에 따른 수정
2007.02.19 [v1.4.1] l7directord 결함 수정에 따른 URL 지속성 부분 수정
2007.10.12 [v1.4.2] l7vs-0.6.1 공개에 따른 일부 관련 수정
2007.10.12 [v1.5] l7vs-1.0.0 공개에 따른 일부 관련 수정 (구현되지 않음 분 기술 삭제)
2008.1.6 [v1.6] UM-L7 1.0.1-0 버전에 따른 l7directord.cf 샘플 수정
2008.1.6 [v1.7] sessionless 프로토콜 모듈의 예제 구성을 추기
2008.4.13 [v1.8] l7vsd-1.x-lilith-rc-​​1 출시에 따른 수정
2008.5.30 [v1.9] v2.0.0-x 버전에 따른 수정
2008.12.17 [v2.0] v2.1.0-0 릴리스에 따른 수정
2009.01.27 [v2.1] v2.1.1-0 릴리스에 따른 수정 (sslid 모듈 옵션 설명
수정)
2009.03.17 [v2.2] v2.1.2-0 릴리스에 따른 수정 (ip 모듈 옵션 설명)
2009.06.17 [v2.3] v2.1.2-2 출시에 따른 수정 (cinsert, cpassive, crewrite 모듈
콸라룸푸르 관련 기술을 삭제)
2010.08.17 [v3.0] v3.0.0에 따른 수정
2011.03.03 [v3.1] tproxy 해당 커널을 수정
2011.11.22 [v3.2] statistic 짧은 옵션을 수정

================================================== ==============================

1 전제 조건
1.1 프레임 워크 부에 대해서
1.2 프로토콜 처리부에
1.3 일정 부에 대해서
1.4 제어 명령 부에 대해서
1.5 실제 서버 모니터링 처리부에
2 l7vsadm 명령에 대한 설명
2.1 명령 요약
2.2 명령 요약
2.3 명령 형식 목록
2.4 각 명령 설명
2.5 ProtocolModule 옵션 설명
3 l7vsadm 설정 예
3.1 SSL Session ID 모듈의 설정 예
3.2 Sessionless 모듈 구성 예
3.3 IP address 모듈 구성 예
4 L7 서버 모니터링 설정 도구에 대한 설명
4.1 설정 파일 (l7directord.cf) 설명
4.2 l7directord.cf 예제 설명
4.3 샘플
5 Replication 기능
5.1 Replication 기능에 대한 설명
6 UltraMonkey-L7 설정 파일에 대한 설명
6.1 설정 파일 (l7vs.cf) 설명
6.2 l7vs.cf 예제 설명
7 SSL 설정 파일에 대한 설명
7.1 설정 파일 (sslproxy.target.cf) 설명
7.2 sslproxy.target.cf 예제 설명
8 기타
8.1 snmpd 설명
8.2 Transparent Proxy 기능

================================================== ==============================

1 전제 조건
UltraMonkey-L7은 Linux에서 실행되는 Layer7 부하 분산 소프트웨어입니다.

다음과 같은 기능 부로 구성되어 있습니다.

————————————————– ——————————

1.1 프레임 워크 부에 대해서
Layer7 정보를 기반으로 부하 분산의 기본 기능 부분입니다.

이에 ProtocolModule을 결합하여 다양한 프로토콜을 지원하는 부하
분산을 제공합니다.

————————————————– ——————————

1.2 프로토콜 처리부에
각종 프​​로토콜에 대한 Layer7 부하 분산 분류 조건을 결정하는 기능 부분입니다.

프로토콜 처리 부분은 다음 ProtocolModule 있습니다. Client 패킷을
기다리지 않고 RealServer가 선행 응답 프로토콜 (SMTP, FTP 등)로 배분을
하는 경우에는 sessionless 또는 ip 모듈을 사용해야합니다.

· sessionless
RealServer에 배분을 일정 부분에 맡겨 UltraMonkey-L7는 아무것도 실시
없는 Sessionless 모듈
· ip
Client의 IP 주소를 바탕으로 RealServer에 배분하는 모듈.
· sslid
RealServer 측에서 부여된 SSL Session ID를 UltraMonkey-L7하고 관리할 수
에서 세션 관리를 SSL Session ID 모듈

————————————————– ——————————

1.3 일정 부에 대해서
VirtualService에서 RealServer 대해로드 균형 조정 배분의 가중치 조건을 결정
기능 부분입니다.

스케줄링은 다음 방식이 해당 ScheduleModule 손가락
설정하여 최적의 일정 계획을 선택할 수 있습니다.

· rr
사용 가능한 RealServer에 대해 동등하게 요청을 할당하는 라운드 로비
렌 방식
· wrr
RealServer마다 설정된 부하 값은 클라이언트의 요청을 할당
맞출 가중치 배분 방식
· lc
연결된 연결이 가장 적은 RealServer에 요청을 할당
되는 최소 연결 방식

————————————————– ——————————

1.4 제어 명령 부에 대해서
프레임 워크 부분에 VirtualService의 생성 · 삭제 및 배분 대상 서버 설정
UltraMonkey-L7 기능 제어 등을위한 명령을 제공합니다.

————————————————– ——————————

1.5 실제 서버 모니터링 처리부에
실제 서버를 모니터링하는 기능 부분입니다. 제어 명령 부를 통해 각종 설정을
하는 기능도 제공합니다. (자세한 내용은 4 참조)

================================================== ==============================

2 l7vsadm 명령에 대한 설명

————————————————– ——————————

2.1 명령 요약
l7vsadm 명령은 다음과 같은 기본 형식으로 실행합니다.

기본 서식
l7vsadm – 제어 유형 옵션 – 매개 변수 옵션 설정 값 …

l7vsadm 명령 옵션은 어떻게 설정, 제어를 실시하는지 지정하는 제어
종류 옵션과 제어 유형 지원 설정을 지정하는 매개 변수 옵션이 아
수 있습니다.

또한 매개 변수 옵션은 프레임 워크에 다양한 설정 제어를 행
하기위한 옵션 이외에 각 ProtocolModule마다 각종 설정을위한
ProtocolModule 옵션이 있습니다.
(ProtocolModule 옵션 대한 자세한 내용은 2.5 참조)

————————————————– ——————————

2.2 명령 요약
l7vsadm 명령 실행 가능한 명령의 목록은 다음과 같습니다.

(1) List 표시 명령 (자세한 내용은 2.4.1 참조)
프레임 워크의 각종 정보 (VirtualService, RealServer 등록 정보)
내용을 표시하는 명령

(2) VirtualService 설정 명령 (자세한 내용은 2.4.2 참조)
지정된 VirtualService 추가, 삭제 및 지정된 VirtualService에
설정되어있는 파라미터를 변경하는 명령 및 등록되어있는 모든
VirtualService을 일괄 삭제하는 명령

(3) RealServer 설정 명령 (자세한 내용은 2.4.3 참조)
지정된 VirtualService 대한 RealServer 추가, 삭제 및 지정
한 RealServer에 설정되어있는 파라미터를 변경하는 명령

(4) Replication 기능 제어 명령 (자세한 내용은 2.4.4 참조)
Replication 기능에 대한 각종 제어 (Replication 기능 시작 / 정지, 강제로
즉시 Replicate 실행 Replication 데이터의 덤프)하는 명령

(5) 기록 기능 제어 명령 (자세한 내용은 2.4.5 참조)
로그 기능에 대한 각종 제어 (부하 분산 프로세스 작업 로그 레벨 변경)하는
명령

(6) SNMPAgent 제어 명령 (자세한 내용은 2.4.6 참조)
SNMPAgent 관한 각종 제어 (SNMPAgent의 활성화 / 비활성화, MIB 수집 간격 변경
로그 함정 발 기능의 유효 / 무효 로그 함정 발 수준 변경
HTTP 요청 통계 삭제)하는 명령

(7) 변수 관리 기능 제어 명령 (자세한 내용은 2.4.7 참조​​)
변수 관리 기능에 관한 각종 제어 (구성 매개 변수를 다시로드) 할
명령

(8) Help 표시 명령 (자세한 내용은 2.4.8 참조)
명령 형식 및 사용 방법을 표시하는 명령
————————————————– ——————————

2.3 명령 형식 목록
l7vsadm 명령 실행 명령 형식 목록은 다음과 같습니다.
(각 옵션에 대한 설명 및 사용에 대한 자세한 내용은 2.4 참조)

l7vsadm-A-t service-address-m proto-module [module-args]
[-s scheduler] [-u connection-count] [-b sorry-server] [- masq | - tproxy]
[-f sorry-flag] [-Q QoSval-up] [-q QoSval-down] [-z ssl-config-file]
[-O socket-option] [-L access-log-flag]
[-a access-log-file [logrotate-args]
l7vsadm-E-t service-address-m proto-module [module-args]
[-s scheduler] [-u connection-count] [-b sorry-server] [- masq | - tproxy]
[-f sorry-flag] [-Q QoSval-up] [-q QoSval-down] [-L access-log-flag]
l7vsadm-D-t service-address-m proto-module [module-args]
l7vsadm-C
l7vsadm-a | e-t service-address-m proto-module [module-args]
-r server-address [-w weight] [- masq | - tproxy]
l7vsadm-d-t service-address-m proto-module [module-args]
-r server-address
l7vsadm-R-s replication-switch
l7vsadm-R-f
l7vsadm-R-d
l7vsadm-L-c log-category-l log-level
l7vsadm-S [-f snmp-flag] [-i update-interval] [-t log-trap-flag]
[-l log-trap-level]
l7vsadm-S-r [-t service-address-m proto-module]
l7vsadm-P-r reload-parameter
l7vsadm-l [-n]
l7vsadm-V [-n]
l7vsadm-K [-n]
l7vsadm-h

————————————————– ——————————

2.4 각 명령 설명
다음 각 명령 형식 옵션 설명, 사용 방법을 보여줍니다.

지정 필수 매개 변수 옵션은 해당 형식으로 지정해야하는 옵션
이며, 지정 가능한 매개 변수 옵션은 해당 형식으로 지정할 수 있으며, 생략도 가능
옵션임을 나타냅니다.
또한 각 옵션의 괄호 안의 설명은 long 표현 옵션입니다.

2.4.1 List 표시 명령
· 서식
l7vsadm
l7vsadm-l [-n]
l7vsadm-K [-n]
l7vsadm-V [-n]

· 제어 유형 옵션 (필수)
-l (- list) : 구성 정보 list를 표시한다.
-K (- key) : key 정보를 포함하는 구성 정보 list를 표시한다.
-V (- verbose) : 설정에 대한 자세한 list를 표시한다.

· 지정 필수 매개 변수 옵션
없음

· 지정 가능 매개 변수 옵션
-n (- numeric) : Endpoint (IP-Address : port) 이름 확인하​​지 않고 표시
한다.

· 설명
List 표시 명령 옵션에 의해 출력되는 정보는 다음과 같다.

1)-l 지정할 때
· Version 정보 [UltraMonkey-L7의 Version]
· VirtualService 정보 [Protocol, VirtualService의 Endpoint,
ProtocolModule 이름 ScheduleModule 이름
· RealServer 정보 [RealServer의 Endpoint 패킷 전송
Scheduler의 weight 서버 연결 정보

2)-K 지정시
· Version 정보 [UltraMonkey-L7의 Version]
· VirtualService 정보 [Protocol, VirtualService의 Endpoint,
ScheduleModule 이름, SSL 설정 파일 이름
소켓 옵션 액세스 로그 플래그
액세스 로그 파일 이름
액세스 로그 회전 설정 문자열
· RealServer 정보 [RealServer의 Endpoint 패킷 전송
Scheduler의 weight 서버 연결 정보

3)-V 지정할 때
· Version 정보 [UltraMonkey-L7의 Version]
· Log 정보
부하 분산된 프로세스 Log 카테고리
Log 카테고리 동작 Log-Level]
· Replication 정보 [Replication 기능 상태 (모드)
· SNMP 정보 [SNMPAgent 기능 상태 (active / inactive)
로그 트랩 상태 (on / off), 함정 발 로그 수준
[MIB 정보의 최소 수집 간격 SNMPAgent 시작 시간,
마지막 요청 시간, 마지막 트랩 시간]
[GET 요청 수, SET 요청 수, 트랩 총수]
· VirtualService 정보 [Protocol, VirtualService의 Endpoint,
ProtocolModule 이름 Scheduler 이름
ProtocolModule 옵션 문자열
· RealServer 정보
[RealServer의 Endpoint 패킷 전송
Scheduler의 weight 서버 연결 정보
[Sorry Server
SorryServer의 Endpoint 패킷 전송]
[Max Connection 연결 제한 값
[Sorry Flag Sorry 플래그
[SSL Config File SSL 설정 파일
[Access Log 액세스 로그 플래그
[Access Log File 액세스 로그 파일
[Access Log Rotate
액세스 로그 회전 설정 문자열
[TCP_DEFER_ACCEPT ​​enable / disable]
[TCP_NODELAY enable / disable]
[TCP_CORK enable / disable]
[TCP_QUICKACK enable / disable / auto]
[Current Upload / Limit
위 처리량 값 (Mbps) / QoS (위)의 QoS 값 (Mbps)
[Current Download / Limit
내려가는 처리량 값 (Mbps) / QoS (하행)의 QoS 값 (Mbps)
[HTTP Total Requests HTTP 요청 총수]
[HTTP GET Requests HTTP GET 요청 총수]
[HTTP POST Requests HTTP POST 요청 총수]

2.4.2 VirtualService 설정 명령
1) VirtualService 추가
· 서식
l7vsadm-A service-address-m protocol-module [module-args]
[-s schedule-module] [-u connection-count] [-b sorry-server]
[-f sorry-flag] [- masq | - tproxy] [-Q up-stream-QoS-bps]
[-q down-stream-QoS-bps] [-z ssl-config-file] [-O socket-option]
[-L access-log-flag] [-a access-log-file [logrotate-args]

· 제어 유형 옵션 (필수)
-A (- add-service) : VirtualService를 추가합니다.

· 지정 필수 매개 변수 옵션
-t (- tcp-service) : VirtualService의 Endpoint를 지정한다.
(예) IPv4 :-t 10.10.0.1:80
(예) IPv6 :-t [:: 1] : 80
-m (- proto-module) : ProtocolModule 이름을 지정합니다.
(예)-m sessionless
ProtocolModule 이름 뒤에 ProtocolModule 옵션
프로그램 (module-args)를 지정할 수있다.
(예)-m sslid – timeout 100
지정할 수 ProtocolModule 및
ProtocolModule 옵션 대한 자세한 내용은 2.5 참조

· 지정 가능 매개 변수 옵션
-s (- scheduler) : ScheduleModule 이름을 지정합니다.
(예)-s rr-s lc-s wrr
지정할 수 ScheduleModule는 rr (RoundRobin)
wrr (WeightedRoundRobin) lc (LeastConnection)
지정하지 않으면 기본값은 rr이다.
-u (- upper) VirtualService 연결 수의 상한 치를 설정한다.
제한을 초과하는 연결은 SorryServer 접속이된다.
설정 가능한 범위는 0 ~ 100000의 정수로 지정
하지 않으면 기본값은 0 (제한 없음,
SorryServer 연결하지)가된다.
-b (- bypass) : SorryServer의 Endpoint를 지정한다.
(예 :-t sorry01 : http-t 10.10.0.1:80)
0.0.0.0:0을 지정하면 SorryServer의
Endpoint를 지울 수있다.
-f (- flag) : Sorry 상태 설정 플래그를 설정한다.
설정 가능한 값은 0 또는 1로 1을 지정하면
Sorry 상태가 0을 지정하면 Sorry 상태 해석
제외된다.
지정하지 않으면 기본값은 0 (Sorry 상태 해석
제외)이된다.
- masq : SorryServer에 패킷 전송을 Masquarade
방식으로하고, SorryServer에서 UltraMonkey-L7
서버에서 연결 보인다. – tproxy를 지정하지
경우이 방식이 기본이된다.
- tproxy : SorryServer에 패킷 전송을 Transparent
Proxy 방식으로하고, SorryServer에서 Client가 직접
직접 연결하는 것처럼 보인다.
이 기능을 사용하려면 8.2 설정이 필요하다.
-Q (- qos-up) : Client에서 VirtualService 대한 대역폭 제한
를 bps로 설정한다.
설정 가능한 범위는 0부터 999까지의 정수 + 단위 (최대
999K, 999M, 999G)에서 지정하지 않으면 기본값
기본값은 0 (제한 없음)이된다.
단위는 K (킬로), M (메가), G (기가)를 지정
필요가있다.
-q (- qos-down) : RealServer에서 VirtualService 대한 대역폭 제한
한계치를 설정한다.
설정 가능한 범위는 0부터 999까지의 정수 + 단위 (최대
999K, 999M, 999G)에서 지정하지 않으면 기본값
기본값은 0 (제한 없음)이된다.
단위는 K (킬로), M (메가), G (기가)를 지정
필요가있다.
-z (- ssl) : VirtualService에 Client와 SSL 통신
시 SSL 구성 파일을 전체 경로로 설정한다.
설정 경로의 최대 길이는 반각 문자 최대 256 문장
자 지정 가능하다. 이 옵션은 지정된 장소
우 VirtualService와 Client 간의 통신 처리에 문의
있어 SSL 처리 기능을 사용할 수 있도록되어 지정
되지 않은 경우 종래의 움직임을한다.
또한이 옵션을 지정할 때 프로토콜 모듈
모듈로 sslid을 지정하면 에러가된다.
-O (- sockopt) VirtualService 및 RealServer와 연결 사용
소켓 옵션을 설정하도록 지정한다.
가능한 옵션은 다음에서 쉼표로 구분된 손가락
설정 가능.
※ VirtualService 추가 때만 설정할 수 있으며, 변경
수 없습니다.
deferaccept – VirtualService 수신기 소켓
포트에 TCP_DEFER_ACCEPT ​​설정.
설정하면 TCP 연결이 완료되면,
Client에서 데이터 패킷이 도착
때까지 연결 완료로 간주하게된다.
※ 클라이언트에서 연결 후 채용
에스트가 반드시 전송되지
경우 (SMTP, FTP 등)은 지정
하지 마십시오.
nodelay – Client 및 RealServer와 통신
소켓에 TCP_NODELAY를 설정합니다.
설정하면 패킷 전송시 MTU
로 정해져있는 사이즈 (일반적으로 1500
바이트) 미만 않고 즉시 전송
한다.
cork – Client 및 RealServer와 통신
소켓에 TCP_CORK 설정.
설정하면 TCP_NODELAY 반대로
가능한 데이터를 요약 거동을
한다.
quickackon – Client 및 RealServer와 통신
소켓에 TCP_QUICKACK을 항상
로 설정합니다. 설정하면 패킷이 연속
계속 해왔다 경우 하나하나의 경로
패킷에 대해 즉시 ACK를 반환합니다.
quickackoff – Client 및 RealServer와 통신
소켓의 TCP_QUICKACK을 항상
클리어한다. 설정하면 모든
패킷의 지연 ACK 타임
아웃 기다렸다가 ACK를 반환합니다.
-L (- access-log) : 액세스 로그 출력 플래그를 설정한다.
설정 가능한 값은 0 또는 1로 1을 지정하면
액세스 로그를 출력하고, 0을 지정하면 액세스
기록 해제된다.
지정하지 않으면 기본값은 0 (액세스로
아날로그 출력 해제)가된다.
-a (- access-log-name) : 액세스 로그 출력 파일을 지정한다. 액세스
세스로구 출력 플래그를 출력으로 설정했을 경우,
필수 지정 항목입니다. 액세스 로그 회전 구성
설정을 logrotate-args로 설정할 수 있습니다.
logrotate-args를 생략하면, 설정 파일
본 매뉴얼의 기본 설정에서 로테
프로그램을 실시한다.
그러나 이미 추가한 VirtualService에서
지정된 액세스 로그 대상과 동일한 출력을
지정된 경우 액세스 로그 회전
설정을 변경 할 수 없다.
또한 logrotate-args를 생략하면 이미 추가
加 끝난 VirtualService 액세스 로그 로우
테이션 설정 회전한다.
logrotate-args로 설정 가능한 옵션은
이하.
- ac-rotate-type (필수)
회전 타입으로, “date”
“size”, “datesize”어떤을 지정한다.
- ac-rotate-max-backup-index (필수)
백업 파일의 최대 개수를 1 이상 12
이하의 범위에서 지정합니다.
- ac-rotate-max-filesize
(- ac-rotate-type에서 “size”, “datesize”
지정시 필수)
로그의 최대 크기를 지정한다.
설정 가능한 범위는 65535 ~ ULONG_MAX까지
숫자의 정수로 지정 단위는 K (킬로)
M (메가), G (기가)를 지정 가능.
또한, K, M, G를 지정하면 그 값을 바이
트 단위로 변환한 결과가 65535 ~ ULONG_MAX
까지의 값이 아니면 안된다.
- ac-rotate-rotation-timing
(- ac-rotate-type에서 “date”, “datesize”
지정시 필수)
회전하는 타이밍을 “year”
“month”, “week”, “date”, “hour”어떤
이 결정된다.
- ac-rotate-rotation-timing-value
(- ac-rotate-type에서 “date”, “datesize”
지정시 필수)
회전하는 날짜와 시간을 지정한다.
지정 형식은 아래.
- ac-rotate-rotation-timing “year”시 :
“MM / dd hh : mm”(매년 MM 월 dd 일 hh시 mm 분)
- ac-rotate-rotation-timing “month”시 :
“dd hh : mm”(매월 dd 일 hh시 mm 분)
- ac-rotate-rotation-timing “week”시 :
“WEEK hh : mm”(매주 WEEK 요일 hh시 mm 분)
- ac-rotate-rotation-timing “date”시
“hh : mm”(매일 hh시 mm 분)
- ac-rotate-rotation-timing “hour”시
“mm”(시간당 mm 분)
설정 가능한 값은, MM (1 ~ 12), dd (1 ~ 31)
hh (0 ~ 23) mm (0-59), WEEK ( “sun”, “mon”
“tue”, “wed”, “thu”, “fri”, “sat”)
· 설명
-t,-m 지정된 VirtualService을 새로 등록한다.
지정되지 않은 지정 가능한 매개 변수 옵션은 초기 값으로 설정된다.

지정할 수있는 스케줄러의 특징은 다음과 같습니다.
rr – Round Robin (라운드 로빈)
사용 가능한 실제 서버에 균등하게 요청을 할당한다.
wrr – Weighted Round Robin (가중 라운드 로빈)
사용 가능한 실제 서버에 가중치에 따라 요청을 할당
맞춥니다. 가중치는-w 옵션을 지정합니다.
lc – Least-Connection (최소 연결)
연결된 연결이 가장 적은 실제 서버에 대해 리쿠에
파업을 허용한다.

SorryServer 관련 설정 내용은 다음의주의가 필요.
· VirtualService가 서비스 제공 불가 상태 (Sorry 상태)가 된
이를 해결하기 위해 서버의 Endpoint를 설정한다.

서비스 제공 불가 상태 (Sorry 상태)에는 세 가지가있다.
·-u 옵션에서 지정한 연결 수를 초과하는 경우
· 접속 가능한 RealServer가없는 경우
·-f 옵션으로 명시적으로 Sorry 상태로 설정된 경우

(※) 액세스 로그 관련 설정 내용은 다음의주의가 필요.
액세스 로그 출력 파일 설정 (- access-log-name)은 VirtualService
바꾸기 명령으로 변경할 수 없다. 따라서 액세스 로깅
플래그 (- access-log)를 0에서 1로 변경 가능성이있는 경우
미리 VirtualService를 추가할 때 액세스 로그 출력 파일 설정을
하고 둘 필요가있다.

2) VirtualService 삭제
· 서식
l7vsadm-D-t service-address-m proto-module [module-args]

· 제어 유형 옵션 (필수)
-D (- delete-service) : 지정한 VirtualService을 삭제합니다.

· 지정 필수 매개 변수 옵션
-t (- tcp-service) : VirtualService의 Endpoint를 지정한다.
(예) IPv4 :-t 10.10.0.1:80
(예) IPv6 :-t [:: 1] : 80
-m (- proto-module) : ProtocolModule 이름을 지정합니다.
(예)-m sessionless

· 지정 가능 매개 변수 옵션
없음

· 설명
-t,-m 지정된 VirtualService을 삭제합니다.

3) VirtualService의 일괄 삭제
· 서식
l7vsadm-C

· 제어 유형 옵션 (필수)
-C (- flush) : 등록된 모든 VirtualService 일괄
삭제한다.

· 지정 필수 매개 변수 옵션
없음

· 지정 가능 매개 변수 옵션
없음

· 설명
등록되어있는 모든 VirtualService가 삭제됩니다.

4) VirtualService 변경
· 서식
l7vsadm-E-t service-address-m protocol-module [module-args]
[-s schedule-module] [-u connection-count] [-b sorry-server]
[-f sorry-flag] [- masq | - tproxy] [-Q up-stream-QoS-bps]
[-q down-stream-QoS-bps] [-L access-log-flag]

· 제어 유형 옵션 (필수)
-E (- edit-service) : 지정한 VirtualService 구성 정보를 변경
있다.

· 지정 필수 매개 변수 옵션
다음 매개 변수는 변경 이전 VirtualService을 확인하기 위해 지정하고
이러한 매개 변수 변경 사항은 변경 명령​​을 할 수 없기 때문에 변경할
경우 삭제 명령 추가 명령을 할 필요가있다.

-t (- tcp-service) : VirtualService의 Endpoint를 지정한다.
(예) IPv4 :-t 10.10.0.1:80
(예) IPv6 :-t [:: 1] : 80
-m (- proto-module) : ProtocolModule 이름을 지정합니다.
(예)-m sessionless
ProtocolModule 이름 뒤에 ProtocolModule 옵션
프로그램 (module-args)를 지정할 수있다.
(예)-m sessionless – forwarded-for
지정할 수 ProtocolModule 및
ProtocolModule 옵션 대한 자세한 내용은 2.5 참조

· 지정 가능 매개 변수 옵션
다음은 변경 가능한 파라미터이다.

· 지정 가능 매개 변수 옵션
-s (- scheduler) : ScheduleModule 이름을 지정합니다.
(예)-s rr-s lc-s wrr
지정할 수 ScheduleModule는 rr (RoundRobin)
wrr (WeightedRoundRobin) lc (LeastConnection).
지정하지 않으면 기본값은 rr이다.
-u (- upper) VirtualService 연결 수의 상한 치를 설정한다.
제한을 초과하는 연결은 SorryServer 접속이된다.
설정 가능한 범위는 0 ~ 100000의 정수로 지정
않은 경우 기본값은 0 (제한 없음,
SorryServer 연결하지)가된다.
-b (- bypass) : SorryServer의 Endpoint를 지정한다.
(예 :-t sorry01 : http-t 10.10.0.1:80)
0.0.0.0:0을 지정하면 SorryServer의
Endpoint를 지울 수있다.
-f (- flag) : Sorry 상태 설정 플래그를 설정한다.
설정 가능한 값은 0 또는 1로 1을 지정하면
Sorry 상태가 0을 지정하면 Sorry 상태 해석
제외된다.
지정하지 않으면 기본값은 0 (Sorry 상태 해석
제외)이된다.
- masq : SorryServer에 패킷 전송을 Masquarade
방식으로하고, SorryServer에서 UltraMonkey-L7
서버에서 연결 보인다. -tproxy를 지정하지
경우이 방식이 기본이된다.
- tproxy : SorryServer에 패킷 전송을 Transparent
Proxy 방식으로하고, SorryServer에서 Client가 직접
직접 연결하는 것처럼 보인다.
이 기능을 사용하려면 8.1 설정이 필요합니다.
-Q (- qos-up) : Client에서 VirtualService 대한 대역폭 제한
를 bps로 설정한다.
설정 가능한 범위는 0부터 999까지의 정수 + 단위 (최대
999K, 999M, 999G)에서 지정하지 않으면 기본값
기본값은 0 (제한 없음)이된다.
단위는 K (킬로), M (메가), G (기가)를 지정
필요가있다.
-q (- qos-down) : RealServer에서 VirtualService 대한 대역폭 제한
한계치를 설정한다.
설정 가능한 범위는 0부터 999까지의 정수 + 단위 (최대
999K, 999M, 999G)에서 지정하지 않으면 기본값
기본값은 0 (제한 없음)이된다.
단위는 K (킬로), M (메가), G (기가)를 지정
필요가있다.
-L (- access-log) : 액세스 로그 출력 플래그를 설정한다.
설정 가능한 값은 0 또는 1로 1을 지정하면
액세스 로그를 출력하고, 0을 지정하면 액세스로
아날로그 출력 해제된다.

· 설명
-t,-m 지정된 VirtualService 구성 정보를 지정할 수 매개 변수 오
옵션에서 지정한 값으로 변경한다.
지정 필수 매개 변수 옵션의 값을 변경할 수 없다.
등록시 ProtocolModule 옵션 (module-args)를 지정하는 경우
지정해야합니다.
지정되지 않은 지정 가능 매개 변수 옵션의 값은 변경되지 않는다.

지정할 수있는 스케줄러의 특징은 다음과 같습니다.
rr – Round Robin (라운드 로빈)
사용 가능한 실제 서버에 균등하게 요청을 할당한다.
wrr – Weighted Round Robin (가중 라운드 로빈)
사용 가능한 실제 서버에 가중치에 따라 요청을 할당
맞춥니다. 가중치는-w 옵션을 지정합니다.
lc – Least-Connection (최소 연결)
연결된 연결이 가장 적은 실제 서버에 대해 리쿠에
파업을 허용한다.

SorryServer 관련 설정 내용은 다음의주의가 필요.
· VirtualService가 서비스 제공 불가 상태 (Sorry 상태)가 된
이를 해결하기 위해 서버의 Endpoint를 설정한다.

서비스 제공 불가 상태 (Sorry 상태)에는 세 가지가있다.
·-u 옵션에서 지정한 연결 수를 초과하는 경우
· 접속 가능한 RealServer가없는 경우
·-f 옵션으로 명시적으로 Sorry 상태로 설정된 경우

(※) 액세스 로그 관련 설정 내용은 다음의주의가 필요.
액세스 로그 출력 파일 설정 (- access-log-name)은 VirtualService
바꾸기 명령으로 변경할 수 없다. 따라서 액세스 로깅
플래그 (- access-log)를 0에서 1로 변경 가능성이있는 경우
미리 VirtualService를 추가할 때 액세스 로그 출력 파일 설정을
하고 둘 필요가있다.
2.4.3 RealServer 설정 명령
1) RealServer 추가
· 서식
l7vsadm-a-t service-address-m proto-module [module-args]-r
server-address [-w weight] [- masq | - tproxy]

· 제어 유형 옵션 (필수)
-a (- add-server) : 지정한 VirtualService에 RealServer 추가
한다.

· 지정 필수 매개 변수 옵션
-t (- tcp-service) : VirtualService의 Endpoint를 지정한다.
(예) IPv4 :-t 10.10.0.1:80
(예) IPv6 :-t [:: 1] : 80
-m (- proto-module) : ProtocolModule 이름을 지정합니다.
(예)-m sessionless
-r (- real-server) : 추가 RealServer의 Endpoint를 지정한다.
(예) IPv4 :-r 10.10.0.1:80
(예) IPv6 :-r [:: 1] : 80

· 지정 가능 매개 변수 옵션
-w (- weight) : RealServer에 배분하는 데 사용되는 weight 값을
설정한다.
설정 가능한 범위는 0 ~ 100 사이의 정수 값으로 지정해야합니다.
하지 않으면 기본값은 1 (분류 가능)이다.
0을 지정하면, 분류 불가가된다.
- masq : RealServer에 패킷 전송을 Masquarade
방식으로하고, RealServer에서 UltraMonkey-L7
서버에서 연결 보인다. -tproxy를 지정하지
경우이 방식이 기본이된다.
- tproxy : RealServer에 패킷 전송을 Transparent
Proxy 방식으로하고, RealServer에서 Client가 직접
직접 연결하는 것처럼 보인다.

· 설명
-t,-m 지정된 VirtualService에-r로 지정한 RealServer을 새로운
계곡 등록한다.
지정되지 않은 지정 가능한 매개 변수 옵션은 초기 값으로 설정된다.

2) RealServer 삭제
· 서식
l7vsadm-d-t service-address-m proto-module [module-args]-r
server-address

· 제어 유형 옵션 (필수)
-d (- delete-server) : 지정한 VirtualService에서 RealServer을 삭제
제거한다.

· 지정 필수 매개 변수 옵션
-t (- tcp-service) : VirtualService의 Endpoint를 지정한다.
(예) IPv4 :-t 10.10.0.1:80
(예) IPv6 :-t [:: 1] : 80
-m (- proto-module) : ProtocolModule 이름을 지정합니다.
(예)-m sessionless
-r (- real-server) : 추가 RealServer의 Endpoint를 지정한다.
(예) IPv4 :-r 10.10.0.1:80
(예) IPv6 :-r [:: 1] : 80

· 지정 가능 매개 변수 옵션
없음

· 설명
-t,-m 지정된 VirtualService에서-r로 지정한 RealServer을
삭제한다.

3) RealServer 변경
· 서식
l7vsadm-e-t service-address-m proto-module [module-args]-r
server-address [-w weight]

· 제어 유형 옵션 (필수)
-e (- edit-server) : 지정한 VirtualService의 RealServer 정보를
변경한다.

· 지정 필수 매개 변수 옵션
-t (- tcp-service) : VirtualService의 Endpoint를 지정한다.
(예) IPv4 :-t 10.10.0.1:80
(예) IPv6 :-t [:: 1] : 80
-m (- proto-module) : ProtocolModule 이름을 지정합니다.
(예)-m sessionless
-r (- real-server) : 추가 RealServer의 Endpoint를 지정한다.
(예) IPv4 :-r 10.10.0.1:80
(예) IPv6 :-r [:: 1] : 80

· 지정 가능 매개 변수 옵션
-w (- weight) : RealServer에 배분하는 데 사용되는 weight 값을
설정한다.
설정 가능한 범위는 0 ~ 100 사이의 정수 값으로 지정해야합니다.
하지 않으면 기본값은 1 (분류 가능)이다.
0을 지정하면, 분류 불가가된다.

· 설명
-t,-m 지정된 VirtualService에 등록되어있는-r로 지정한
RealServer 구성 정보를 지정할 수 매개 변수 옵션에서 지정한 값으로
변경한다.
지정 필수 매개 변수 옵션의 값을 변경할 수 없다.
지정되지 않은 지정 가능한 매개 변수 옵션은 변경되지 않는다.
2.4.4 Replication 기능 제어 명령
· 서식
l7vsadm-R-s replication-switch
l7vsadm-R-f
l7vsadm-R-d

· 제어 유형 옵션 (필수)
-R (- replication) : Replication 기능 제어 명령을 실행한다.

· 지정 필수 매개 변수 옵션
-s (- switch) : Replication 기능 시작 / 정지를 지정한다.
start를 지정하면 Replication 기능 시작입니다
stop를 지정하면 Replication 기능 정지가된다.
-f (- force) : 데이터를 강제 즉시 복제합니다.
-d (- dump) : Replication 데이터 덤프를 실행한다.

· 지정 가능 매개 변수 옵션
없음

· 설명
Replication 기능 각종 제어 (Replication 기능 시작 / 정지, 강제로
즉시 복제, Replication 데이터의 덤프)를 실시한다.
2.4.5 로그 기능 제어 명령
· 서식
l7vsadm-L-c log-category-l log-level

· 제어 유형 옵션 (필수)
-L (- log) : 로깅 제어 명령을 실행한다.

· 지정 필수 매개 변수 옵션
-c (- category) : l7vsd 출력 로그 수준을 변경하는 경우 변경
l7vsd 로그 범주 문자열을 지정한다.
지정할 수있는 로그 카테고리는 다음 설명을 참조
all을 지정하면 모든 로깅 범주의 로깅 수준
이 일괄 변경됩니다.
-l (- level) : 부하 분산 프로세스의 출력 로그를 지정 동작 로구레베
르로 변경합니다.
지정 가능한 로그 수준은 fatal, error, warn, info,
debug의 5 종류.

· 지정 가능 매개 변수 옵션
없음

· 설명
로깅 각종 제어 (부하 분산 프로세스 작업 로그 레벨 변경)을 실시한다.
로깅 범주 문자열 약어 문자열로 지정하는 것도 가능하다.
로깅 범주 문자열 목록은 다음과 같다.

지정 가능한 로그 범주 문자열 (약어)
l7vsd_network (nw)
l7vsd_network_qos (nw_qos)
l7vsd_network_bandwidth (nw_bw)
l7vsd_network_num_connection (nw_conn)
l7vsd_network_access (nw_acc)
l7vsd_mainthread (mth)
l7vsd_virtualservice (vs)
l7vsd_virtualservice_thread (vs_th)
l7vsd_session (ss)
l7vsd_session_thread (ss_th)
l7vsd_realserver (rs)
l7vsd_sorryserver (sorry)
l7vsd_module (mod)
l7vsd_replication (rep)
l7vsd_replication_sendthread (rep_sth)
l7vsd_parameter (para)
l7vsd_logger (logger)
l7vsd_command (cmd)
l7vsd_start_stop (stastp)
l7vsd_system (sys)
l7vsd_system_memory (sys_mem)
l7vsd_system_endpoint (sys_ep)
l7vsd_system_signal (sys_sig)
l7vsd_system_environment (sys_env)
l7vsd_snmpagent (agent)
l7vsd_protocol (prot)
l7vsd_schedule (sched)
all (약어 없음)
2.4.6 SNMPAgent 제어 명령
· 서식
l7vsadm-S [-f snmp-flag] [-i update-interval]
[-t log-trap-flag] [-l log-trap-level]
l7vsadm-S-r [-t service-address-m proto-module]

· 제어 유형 옵션 (필수)
-S (- snmp) : SNMPAgent 제어 명령을 실행한다.

· 지정 필수 매개 변수 옵션
없음.

· 지정 가능 매개 변수 옵션
-f (- flag) : SNMPAgent 기능 활성화 / 비활성화를 지정합니다.
지정할 수있는 값은 1과 0의 2 종류
1을 지정하면 SNMPAgent 기능 활성화되고 0을 지정하면 SNMPAgent
기능 비활성화되는
-i (- interval) : SNMPAgent 기능 MIB 정보의 최소 수집 간격 (초)을 지정한다.
유효한 값은 0 이상의 정수입니다.
지정된 수집 기간이 0 인 경우 MIB 정보 캐쉬가 무효가된다.
-t (- logtrap) SNMPAgent 로그 함정 발 기능의 활성화 / 비활성화를 지정합니다.
지정할 수있는 값은 1과 0의 2 종류
1을 지정하면 SNMPAgent 로그 트랩 기능 활성화되고
0을 지정하면 SNMPAgent 로그 트랩 기능 무효가된다.
-l (- logtraplevel) SNMPAgent 로그 함정 발 수준을 지정합니다.
지정 가능한 로그 수준은 fatal, error, warn, info, debug의
5 종류.
-r (- refresh) : HTTP 요청 통계를 지웁니다.
-r 옵션에 따라 가상 서비스를 지정할 수있다.
가상 서비스를 지정할 때 해당 가상 서비스의 HTTP 통계
클리어한다.
가상 서비스를 지정하지 않을 때, 모든 가상 서비스의 HTTP 통계
정보를 지웁니다.
HTTP 통계를 클리어했을 때에 서버 연결 정보 (InactConn)도
클리어한다.

· 설명
SNMPAgent 각종 제어 (SNMPAgent 기능 활성화 / 비활성화, MIB 수집 간격 변경
SNMPAgent 로그 함정 발 기능의 유효 / 무효 로그 함정 발 수준 변경
HTTP 요청 통계 삭제)한다.

2.4.7 변수 관리 기능 제어 명령
· 서식
l7vsadm-P-r reload-parameter

· 제어 유형 옵션 (필수)
-P (- parameter) : 변수 관리 기능의 제어 명령을 실행한다.

· 지정 필수 매개 변수 옵션
-r (- reload) : 지정된 구성 매개 변수를 다시로드하고 설정을 반영
한다.
지정할 수있는 구성 매개 변수 문자열은 replication,
logger, snmpagent가 all을 지정한 경우
모든 종류의 구성 매개 변수를 다시로드되고 반영
된다.

· 지정 가능 매개 변수 옵션
없음

· 설명
변수 관리 기능 각종 제어 (구성 매개 변수를 다시로드)를 실시한다.
새로고침 지정할 수있는 구성 매개 변수는 Replication 기능 설정
(replication), 로깅 설정 (logger) SNMPAgent 설정
(snmpagent)이다.
추가 구성 매개 변수를 지정 가능하지만, 미래의 확장용으로 준비하고
때문에 지정해도 아무것도 일어나지 않는다.
지정할 수있는 구성 매개 변수 문자열 목록은 다음과 같다.

지정 가능한 매개 변수 문자열에
all
l7vsd (지정 가능하지만 미대응)
command (지정 가능하지만 미대응)
session (지정 가능하지만 미대응)
virtualservice (지정 가능하지만 미대응)
module (지정 가능하지만 미대응)
replication
logger
l7vsadm (지정 가능하지만 비활성)
snmpagent
ssl (지정 가능하지만 비활성)
2.4.8 Help 표시 명령
· 서식
l7vsadm-h

· 제어 유형 옵션 (필수)
-h (- help) : 명령 사용법을 표시한다.

· 지정 필수 매개 변수 옵션
없음

· 지정 가능 매개 변수 옵션
없음

· 설명
명령 형식 및 각 옵션의 설명이 표시됩니다.

————————————————– ——————————

2.5 ProtocolModule 옵션 설명
ProtocolModule 옵션은 각 ProtocolModule 세션 관리 방식을 지원
설정이며, 옵션의 지정 방법은 각 ProtocolModule 따라 다르지만,
기본적인 형식은 다음과 유사하게됩니다.

기본 서식
- moudule-option module-args

다음 각 ProtocolModule 옵션 옵션 설명 사용 방법을 보여줍니다.
또한 각 옵션의 괄호 안의 설명은 생략 표현의 옵션입니다.

(1) Session less 모듈 옵션
RealServer에 배분을 일정 부분에 맡겨 UltraMonkey-L7는 아무것도 줄
원 않는 ​​모듈
(UltraMonkey-L4와 거의 같은 동작을하는 모듈)

- forwarded-for (-F)
Client의 IP 주소를 X-Forwarded-For 헤더 필드에 삽입
하도록 지시한다.
기본 (지정하지 않으면) 동작은 삽입하지 않는다.

- sorry-uri URI 문자열 (-S)
SorryServer 연결 시에 취득하는 URI를 단일 따옴표 ( ‘)로 묶어야
이 결정된다.

- statistic (-c)
· HTTP 요청 수를
· HTTP GET 요청 총수
· HTTP POST 요청 총수
위의 세 가지 통계 통계하도록 지정한다.
설정 가능한 값은 0 또는 1로 1을 지정하면 정보를 통계하여 0을 지정하면
정보를 통계하지 않는다. 지정하지 않으면 기본값은 0이된다.
(2) IP 모듈 옵션
Client의 IP 주소를 바탕으로 RealServer에 배분하는 모듈

- timeout 숫자 (-T)
UltraMonkey-L7에서 세션 정보를 관리하는 기간 (초)을 설정한다.
설정 가능한 범위는 0 ~ INT_MAX 정수로 지정하지 않으면 기본값
기본값은 3600 (1 시간)이다. 0을 지정하면 관리 기간은 무제한 마라
있다.

- forwarded-for (-F)
Client의 IP 주소를 X-Forwarded-For 헤더 필드에 삽입
하도록 지시한다.
기본 (지정하지 않으면) 동작은 삽입하지 않는다.

- reschedule (-R)
세션 유지 실패시 재조정하도록 지정한다.
지정하지 않으면 기본값은 – no-reschedule된다.

- no-reschedule (-N)
세션 유지 실패시 다시 예약을하지 않도록 지정한다.

- sorry-uri URI 문자열 (-S)
SorryServer 연결 시에 취득하는 URI를 단일 따옴표 ( ‘)로 묶어야
이 결정된다.

- statistic (-c)
· HTTP 요청 수를
· HTTP GET 요청 총수
· HTTP POST 요청 총수
위의 세 가지 통계 통계하도록 지정한다.
설정 가능한 값은 0 또는 1로 1을 지정하면 정보를 통계하여 0을 지정하면
정보를 통계하지 않는다. 지정하지 않으면 기본값은 0이된다.

(3) SSL Session ID 모듈 (sslid) 옵션
RealServer 측에서 부여된 SSL Session ID를 UltraMonkey-L7에서 관리하는이
와 세션 관리를하는 모듈입니다.

- timeout (-T) 수치
UltraMonkey-L7 v2까지 사용하는 옵션이며, 호환성
위해 유치하고있다. 지정해도 효과가 없다.

- maxlist (-M) 수치
UltraMonkey-L7에서 세션 정보 (SSL Session ID)를 관리하는 것이 다람쥐
포트 수를 설정한다.
설정 가능한 범위는 0 ~ INT_MAX의 정수로 지정하지 않으면 기본값
기본값은 1024이다.
0을 지정하면 목록 수는 기본값 1024이된다.

- reschedule (-R)
세션 유지 실패시 재조정하도록 지정한다.
지정하지 않으면 기본값은 – no-reschedule된다.

- no-reschedule (-N)
세션 유지 실패시 다시 예약을하지 않도록 지정한다.
================================================== ==============================

3 l7vsadm 설정 예
각 ProtocolModule 대한 설정 예는 다음과 같습니다.

————————————————– ——————————

3.1 Sessionless 모듈 구성 예
Sessionless 모듈의 사용은 필수 옵션은 없습니다.

# l7vsadm-A-t 192.168.8.100:80-m sessionless-s rr
# l7vsadm-a-t 192.168.8.100:80-m sessionless-r 192.168.16.11:80
# l7vsadm-a-t 192.168.8.100:80-m sessionless-r 192.168.16.12:80

이상의 설정에서 각 RealServer에 배분합니다.
IPv6를 이용한 경우는 다음과 같습니다.

# l7vsadm-A-t [xxxx : xxxx : xxxx :: : 80-m sessionless-s rr
# l7vsadm-a-t [xxxx : xxxx : xxxx :: : 80-m sessionless-r yyyy : yyyy : yyyy ::: 80
# l7vsadm-a-t [xxxx : xxxx : xxxx :: : 80-m sessionless-r 192.168.16.12:80
※ 주소 끝의 []는 선택 사항입니다. IPv4와 혼합 가능. IP address 모듈
SSL SessionID 모듈에서도 IPv6 주소의 이용 방법은 동일합니다.

————————————————– ——————————

3.2 IP address 모듈 구성 예
세션 관리 기간을 지정하고 Client의 IP 주소를 X-Forwarded-For
필드에 삽입하는 경우에는 다음과 같이 설정합니다.

# l7vsadm-A-t 192.168.8.100:80-m ip – timeout 7200 – forwarded-for-s rr
# l7vsadm-a-t 192.168.8.100:80-m ip-r 192.168.16.11:80
# l7vsadm-a-t 192.168.8.100:80-m ip-r 192.168.16.12:80

이상의 설정에서 각 RealServer에 배분합니다.

————————————————– ——————————

3.3 SSL Session ID 모듈의 설정 예
SSL Session ID를 관리하는 목록 수를 지정하는 설정입니다.

# l7vsadm-A-t 192.168.8.100:80-m sslid – maxlist 512-s rr
# l7vsadm-a-t 192.168.8.100:80-m sslid-r 192.168.16.11:80
# l7vsadm-a-t 192.168.8.100:80-m sslid-r 192.168.16.12:80

이상의 설정에서, 512 개의 SSL Session ID를 관리합니다.

================================================== ==============================

4 L7 서버 모니터링 설정 도구에 대한 설명

————————————————– ——————————

4.1 설정 파일 (l7directord.cf) 설명

UltraMonkey-L7은 2에 표시된 명령 기반의 설정 방법과 l7directord에
따라 구성 파일을 사용한 설정 방법이 있습니다.
여기서는 설정 파일이다 l7directord.cf 설명합니다. 자세한 내용은
l7directord (1)를 참조 바랍니다.

————————————————– ——————————

4.2 l7directord.cf 설정 항목
설정 파일의 샘플은 / etc/ha.d/conf/l7directord.cf.sample에 설치
르됩니다. 환경에 맞추어 편집한 후 / etc/ha.d/conf/l7directord.cf 또는
/ etc/ha.d/l7directord.cf에 저장하고 l7directord를 시작하면 분류 설정
l7vsd에 반영됩니다.
4.2.1 전체 설정
구성 파일 시작 부분에 설정 항목 이름이 적혀있는 것은 전체에 관련된 설정
설정 항목에서 모든 VirtualService에 효과가 있습니다.
VirtualService하여 설정을 바꾸려면 일부 설정 항목만 아래의
VirtualService마다 설정 덮어쓸 수 있습니다.

4.2.1.1 RealServer 모니터링 설정
RealServer 모니터링에 대한 시간과 횟수에 대한 설정

(1) checktimeout (기본값 : 5)
Ping 모니터링 포트 모니터링이 설정 초 미만으로 성공적인 응답을 얻을 수 없다
경우 모니터 실패로 감시 실패 횟수를 1 증가시킵니다.

(2) negotiatetimeout (기본값 : 5)
서비스 모니터링이 설정 초 미만으로 성공적인 응답을 얻을 수없는 경우
감시 실패로 감시 실패 횟수를 1 증가시킵니다.

(3) checkinterval (기본값 : 10)
이 설정 초 간격으로 모니터링을 실시합니다.

(4) retryinterval (기본값 : 5)
감시 실패하면이 설정 초 간격으로 모니터링을 실시합니다. checkinterval
다음 초 단위로 설정하는 것으로, 이상 감지 시간을 단축할 수 있습니다.

(5) checkcount (기본값 : 3)
모니터 실패 횟수가이 설정 횟수에 도달하면 대상 서버를 이상과 판
절단하고 l7vsd에서 분리합니다.

서버 이상하다고 판단하는 시간에 대한 예를 들면

checktimeout = 5 (또는 negotiatetimeout = 5)
retryinterval = 1
checkcount = 3

위의 설정에서 서버에 이상이 감시가 항상 시간 초과하면
첫 번째 모니터링을 시작 5 초 후에 시간 초과 (실패 1 차), 1 초 후에
다음 모니터링을 시작 5 초 후에 시간 초과 (실패 2 번째), 1 초간 기다렸다가
다음 모니터링을 시작 5 초 후에 시간 초과 (실패 3 번째)하여 서버 이상
판단되고 분류에서 제외된다. 즉, 모니터링 시작 17 초 후
서버 이상이된다. (5 + 1 + 5 + 1 + 5 = 17)
그러나 여기에 제시된 초는 모두 타임 아웃했을 경우이기 때문에 이상
판단있는 최대 시간 (초)이되고, 예를 들어 서비스 모니터링 서버
서비스를 제공하는 프로세스가 다운 있었을 경우는 특정 포트에 연결
실패하기 때문에 모니터링 시작 후 즉시 실패로 판단된다. 따라서 위의
예라면 약 2 초 후에 3 번 모니터링 실패하고 서버 이상으로 판단된다.
(0 + 1 + 0 + 1 + 0 = 2)

서버 정전 후 모니터링에 성공하면 자동으로 l7vsd의 배분 대상으로
추가된다.

4.2.1.2 로깅 설정
l7directord 로깅에 대한 설정

(1) logfile (기본값 : / var/log/l7vs/l7directord.log)
l7directord 로그 대상을 지정합니다. 절대 경로로 작성 (시작가 /)
경우 해당 파일에 출력하고, 그렇지 않으면 syslog에 나와
힘이됩니다. syslog에 기록될 설정치가 설비되어 있습니다
합니다.
(예 : logfile = / var/log/l7vs/l7directord.log, logfile = local0)

(2) supervised
이 설정을 한 경우 l7directord 프로세스가 데몬이되지 않고 동
로운 로그를 표준 출력, 표준 오류에 출력한다.
설정 항목 중 supervised에만 뒤에 값을 취하지 않고 (= 1 등은 필요 없어
있습니다) supervised로 작성하면된다.
이 설정은 외부 도구로 daemontools 데몬 모니터링을 할 때 유
유효합니다.

4.2.1.3 RealServer 이상시 설정
모니터 이상시 동작에 대한 설정

(1) quiescent (기본값 : yes)
RealServer 이상시 l7vsd의 배분에서 제외되지만, 그 제외
방법에 관한 설정입니다. 이 설정을 사용하면 이상하다고 판단되는
한 RealServer은 l7vsd에서 제거되지 않고, 무게 (weight)가 0으로 설정
설정되는 것으로, 배분 대상에서 제외됩니다. 사용하지 않는 경우, l7vsd
에서 제거됩니다.

(2) fallback
VirtualService에 속하는 RealServer가 모두 이상이 어떤
RealServer에 배분 수 없게 된 경우에 자동으로 추가되는
대체 RealServer 설정입니다. IP 주소와 포트 번호를 지정합니다.
이 설정은 추가된 fallback 서버는 RealServer가 회복
성공적으로 배분을 할 수있게되었을 때 자동으로 삭제됩니다.
(예 : fallback = 127.0.0.1:80)

4.2.1.4 설정 파일 모니터링 설정
설정 파일의 변경을 모니터링하는 설정
l7directord는 설정 파일을 정기적으로 모니터링하고 변경 사항이 발생하면 간다
무덤의 동작을 일으킬 수 있습니다. 설정 파일 모니터링에서는 구성 파일
파일의 MD5 체크섬이 변화하면, 내용이 변경된 것으로 판단하고
있으며, 파일 업데이트 시간만이 변화하는 경우는 무시됩니다.

(1) configinterval (기본값 : 10)
설정 파일의 변경을 모니터링하는 초 간격을 지정합니다.
(예 : configinterval = 5)

(2) autoreload (기본값 : no)
설정 파일이 변경되었다는 것을 감지하면 그 변경된 내용을
프로세스에 반영할지 여부를 설정합니다.

(3) callback
이 설정에 절대 경로로 실행 파일을 지정하면 설정 파일
르의 변화를 감지했을 때 구성 파일을 인수로 실행합니다. 이
설정 autoreload 설정과 관계없이 autoreload이 no의 경우도 실행
됩니다.
4.2.2 VirtualService마다 설정
virtual 행 다음으로 선두에 들여쓰기가 놓여져 설정 항목 이름이 적혀있다
것은 그 virtual에 대해서만 작용하는 설정입니다.

4.2.2.1 VirtualService 정의

(1) virtual
VirtualService의 IP 주소와 포트 번호를 지정한다.
이 설정 항목만 줄의 시작 부분에 쓸 필요가있다
(예 : virtual = 192.168.0.2:80, virtual = [:: 1] : 80)

(2) module (기본값 : sessionless)
VirtualService 설정 프로토콜 모듈과 필요한 경우 그
옵션을 지정한다. 현재 구성 가능한 프로토콜 모듈은 다음의
3.
sessionless, ip, sslid
(예 : module = sessionless – forwarded-for)

(3) scheduler (기본값 : rr)
VirtualService 설정 일정 모듈을 지정합니다. 현재 손가락
설정 가능한 일정 모듈은 세 가지.
rr, wrr, lc
(예 : scheduler = lc)

(4) so​​rryserver
VirtualService이 sorry 상태가되었을 때 할당되는 Sorry 선생님
서버의 IP 주소, 포트 번호, 패킷 전송 방식을 지정한다.
패킷 전송은 masq 또는 tproxy을 지정하고 기본값은 masq 설정
설정된다. 또한 tproxy 설정을 사용하려면 8.1 설정이 필요합니다.
(예 : sorryserver = 192.168.1.101:80 tproxy)

(5) maxconn (기본값 : 0)
VirtualService 당 최대 동시 연결 수를 지정합니다. 이것 이상의 연결
이 경우, Sorry 서버에 배분된다. 0을 지정하면
제한 없음이다.
(예 : maxconn = 1000)

(6) qosup (기본값 : 0)
VirtualService 당 허용 처리량 (업스트림)를 지정한다. 이
설정 이상의 처리량하는 경우에는 패킷의 전송이 지연됩니다
있다. 0을 지정하면 제한 없음이된다.
(예 : qosup = 200K)

(7) qosdown (기본값 : 0)
VirtualService 당 허용 처리량 (하행 방향)을 지정한다. 이
설정 이상의 처리량하는 경우에는 패킷의 전송이 지연됩니다
있다. 0을 지정하면 제한 없음이된다.
(예 : qosdown = 100M)

(8) sslconfigfile
VirtualService가 Client와 통신시 SSL 통신을하는 경우 SSL
설정 파일의 경로를 지정한다.
(예 : sslconfigfile = / etc/l7vs/sslproxy/sslproxy.target.cf)

(9) socketoption
VirtualService (TCP)에서 사용하는 소켓 옵션을 지정한다.
(예 : socketoption = deferaccept, nodelay, quickackoff)

(10) accesslog
액세스 로그 출력 여부를 yes, no로 설정한다.
(예 : accesslog = yes)

(11) accesslogfile
액세스 로깅되는 로그 파일 이름의 전체 경로를 지정한다.
(예 : accesslogfile = / var/log/l7vs/l7vsd_conn.log)

(12) accesslog_rotate_type
회전 타입으로, date, size, datesize 어떤을
지정한다.
(예 : accesslog_rotate_type = datesize)

(13) accesslog_rotate_max_backup_index
백업 파일의 최대 개수를 지정한다.
(예 : accesslog_rotate_max_backup_index = 2)

(14) accesslog_rotate_max_filesize
로그의 최대 크기를 지정한다. K (킬로), M (메가), G (기가)의 지정도
가능.
(예 : accesslog_rotate_max_filesize = 100M)

(15) accesslog_rotate_rotation_timing
회전하는 타이밍을 year, month, week, date, hour
어떤 지정한다.
(예 : accesslog_rotate_rotation_timing = month)

(16) accesslog_rotate_rotation_timing_value
회전하는 날짜와 시간을 지정한다.
(예 : accesslog_rotate_rotation_timing_value = “1 23:59″)

4.2.2.2 RealServer 정의 및 모니터링 설정

(1) real
RealServer의 IP 주소와 포트 번호를 지정한다. 옵션으로
패킷 전송 가중치 (weight) 아래의 request, receive를
RealServer마다 개별적으로 설정할 수있다. 또한 패킷 전송 방식은 masq,
tproxy가 지정할 수 있습니다. 또한 IP 주소는 ->를 끼고 범위 지정할
수도 있습니다. 또한 tproxy 설정을 사용하려면 8.1 설정
필요합니다.
(예 : real = 192.168.0.11:80,
real = 192.168.0.11:80 masq 100 index.html ‘Test Page’,
real = 192.168.0.11-> 192.168.0.15:80 tproxy)

(2) checkport
RealServer를 모니터링할 때 real에서 지정한 포트 번호와 다른
포트 모니터링 요청을 보낼 때 사용할 포트 번호를 설정합니다.

(3) checktype (기본값 : negotiate)
RealServer 모니터링 방법을 지정합니다. 다음의 6 종류에서 선택합니다.
negotiate : 서비스 모니터링을
connect : 포트 모니터링하는
ping : Ping 모니터링하는
숫자 : 서비스 모니터링 및 포트 감시를 병용하는
custom : 사용자 정의 모니터링하는
off : 감시없이 항상 서버 이상하다고 판단되는
on : 감시없이 항상 서버 정상으로 판단
negotiate의 경우 아래의 설정을 할 필요가 있습니다. 수치의 경우는,
설정한 수치 횟수 포트 모니터링 및 1 회 서비스 모니터링을 반복합니다.
서비스 모니터링에 의한 부하가 큰 경우에 유용합니다. custom의 경우 아래
의 customcheck 설정을해야합니다.

(4) service (기본값 : none)
서비스 모니터링시 모니터링 서비스를 지정합니다. 다음의 13 종류에서 선택
합니다.

1) http
HTTP 연결하고 문서 루트에 요청 보내기 응답
확인합니다. 응답 코드가 4xx, 5xx의 경우는 감시 실패와
결정됩니다. 아래의 request, receive, httpmethod, virtualhost
옵션으로 설정할 수 있습니다.

2) https
HTTPS 연결하고 모니터링합니다. 다른 사람은 http와 동일.

3) smtp
SMTP 연결하고 서버가 정상적인 SMTP 응답을 확인한다.

4) pop
POP3로 접속하여 서버가 정상적인 POP3 응답을 확인한다.
아래의 login, passwd를 옵션으로 설정 가능.

5) imap
IMAP에 연결하고 서버가 정상적인 IMAP 응답을 확인한다.
아래의 login, passwd를 옵션으로 설정 가능.

6) ftp
FTP로 접속하여 login, passwd 설정 값으로 로그인할 수
확인한다. 아래의 request, receive를 옵션으로 설정 가능.

7) ldap
LDAP에 연결하고 서버가 정상적인 LDAP 응답을 확인한다.
아래의 request, receive를 옵션으로 설정 가능.

8) dns
DNS 서버에 연결하고 이름 확인이 성공적으로 수행할 것을 확인한다. 아래
의 request, receive를 설정할 필요가있다.

9) nntp
NNTP 연결하고 서버가 정상적인 NNTP 응답 (상태 코드 2xx)
를 반환하는지 확인한다.

10) pgsql
지정된 PostgreSQL 데이터베이스 (database 항목에서 지정)에 접속
수 있는지 확인한다. 아래의 request, receive를 옵션으로
て 설정할 수 있습니다.

11) mysql
지정된 MySQL 데이터베이스 (database으로 지정)에 연결할 수
확인한다. 아래의 request, receive를 옵션으로 설정
가능.

12) sip
SIP 서버에 연결하고 지정된 Call ID 정상적인 응답 (상태
코드 200)을 반환하는지 확인한다. 아래의 login을 참조.

13) none
아무것도하지 않고 서버 정상으로 판단한다.

(5) request
다음과 같이 service의 설정에 따라 동작이 다르다.

i) http, https
모니터링을위한 URL을 http:// 안에 지정 또는 URI로 지정한다. 지정
하면 해당 URL을 검색하는 요청 (GET 또는 HEAD)를
전송한다. URI의 경우, 선두의 / 붙여도 붙이지 않아도 상관 없어
있다.
(예 : request = http://192.168.0.2/foo/bar/index.html,
request = / doc / manual.html,
request = favicon.ico)

ii) ftp
모니터링을위한 파일을 지정한다. FTP 모니터링은 로그인 후 /로 이동합니다
하기 위해 /에서 상대 경로로 작성해도 절대 경로로 작성
수 있었다. 지정하면 해당 파일이 GET 수 있는지 확인
있다.
(예 : request = / etc / passwd,
request = etc / hosts)

iii) ldap
LDAP 검색시 BaseDN를 지정한다. 지정된 경우 BaseDN
을 범위 base 필터 (objectClass = *) 검색하여 찾을이
지 확인한다.
(예 : request = dc = my-domain, dc = com)

iv) dns
DNS 이름 확인하​​기위한 요청을 지정한다. 지정된 요청
를 정방향 또는 역방향 수 있는지 확인한다. 아래의 receive도 설정
설정해야합니다.
(예 : request = www.example.com,
request = 127.0.0.1)

v) pgsql, mysql
데이터베이스 연결 후 전송하는 쿼리를 지정합니다. 결과가 0 행
경우 모니터링 실패 판단된다.
(예 : request = ‘select * from test’,
request = ‘insert into test values​​ (1)’,
request = ‘delete from test where test = 1′)

(6) receive
다음과 같이 service의 설정에 따라 동작이 다르다. 모두
request 설정이 필수적이다.

i) http, https
검색된 URL의 데이터에 여기서 지정하는 문자열이 존재하는가
확인된다. 항상 Perl의 정규식 확인하므로 ‘.’등의 글을
글자는 주의할 필요가있다.
(예 : receive = “DOCTYPE HTML PUBLIC”
receive = “2009 \. [01] [0-9] \ [0-3] [0-9]“)

ii) ftp
검색된 파일의 데이터에 여기서 지정하는 문자열이 있는지
이 확인된다. 항상 Perl의 정규식 확인하므로 ‘.’등의
문자는 주의할 필요가있다.
(예 : receive = “root * \ / bin \ / bash”
receive = “127 \ .0 \ .0 \ .1″)

iii) ldap
LDAP 검색 결과에 여기서 지정하는 문자열이 있는지 확인되지
있다. 항상 Perl의 정규식 확인하므로 ‘.’등의 문자주의
필요가있다.
(예 : receive = ‘dc = my-domain, dc = com’,
receive = ‘^ dc = [^,] +, dc = [^,] + $’)

iv) dns
DNS에서 request로 설정 값을 이름 확인 결과를 지정합니다.
(예 : receive = ’192 .168.0.101 ‘
receive = ‘localhost’)

v) pgsql, mysql
request에 지정된 쿼리를 처리 결과의 행수를 1 이상으로 지정
합니다.
(예 : receive = 1)

(7) login
service에 따라 약간 동작이 다르다.

i) pop, imap, ftp, pgsql, mysql
로그인 이름으로 사용된다. passwd 설정도 필요.
(예 : login = postgres)

ii) sip
Call ID로 사용된다.

(8) passwd
service가 pop, imap, ftp, pgsql, mysql 때 로그인 암호
드 사용된다.
(예 : passwd = password)

(9) httpmethod (기본값 : GET)
service가 http, https시로 요청 방법을 지정
있습니다. GET 또는 HEAD 지정할 수 있습니다.
(예 : httpmethod = HEAD)

(10) virtualhost
service가 http, https 자에게 요청의 Host 필드
를 지정합니다.
(예 : virtualhost = www.example.net)

(11) database
service가 pgsql, mysql 때 연결하려는 데이터베이스 이름을 지정합니다
합니다.
(예 : database = template1)

(12) realdowncallback
RealServer 이상을 감지했을 때 실행할 파일을 지정합니다. 손가락
설정되면 이상 서버의 IP 주소를 인수로 파일을 실행
됩니다.
(예 : realdowncallback = / usr / local / bin / down_notify.sh)

(13) realrecovercallback
RealServer 복구를 감지했을 때 실행할 파일을 지정합니다. 손가락
설정되면 이상에서 복구 서버의 IP 주소를 인수로
파일이 실행됩니다.
(예 : realrecovercallback = / usr / local / bin / recover_notify.sh)

(14) customcheck
checktype에 custom을 지정했을 때, RealServer 모니터로 실행
명령을 지정합니다. 명령 실행 결과가 0이면 감시 성공, 그
되지 않은 경우는 감시 실패합니다. 명령 문자열의 _IP_ 모니터링
대상 RealServer의 IP 주소로 _PORT_ 포트 번호로 대체
수 있습니다.
(예 : customcheck = wget-q-O / dev / null http://_IP_:_PORT_/)

4.2.2.3 덮어쓸 수있는 전체 설정 항목
다음 전체 설정은 VirtualService마다 설정에 작성할 수 있
온,이 경우 전체 설정 항목 설정을 무시하고 그 VirtualService
만의 고유한 설정으로 취급된다.

· checkcount
· checkinterval
· retryinterval
· checktimeout
· negotiatetimeout
· quiescent
· fallback
4.3 샘플

예를 들어, 기대하는 기능을 갖게하기 ​​위해 설정 패턴을 몇 가지 든다.
각각에 대해 언급하지 않는 정의 값에 대해서는 디폴트 값을 사용하여야한다.

1) 두 RealServer에 배분 Ping 모니터링하는

virtual = xxx.xxx.xxx.xxx : 80
real = 192.168.1.2:80
real = 192.168.1.3:80
checktype = ping

2) 두 RealServer에 각각 가중치를 2:3로 바꾸고, 가중치의 배분
한다. 또한 서비스 모니터링하고 Apache의 mod_status를 사용하여 유휴
상태 worker가 있는지 확인한다.

virtual = xxx.xxx.xxx.xxx : 80
real = 192.168.1.2:80 2
real = 192.168.1.3:80 3
scheduler = wrr
service = http
request = / server-status
receive = “[1-9] [0-9]? idle workers”

3) 두 RealServer에 배분 sslid 모듈을 사용하여 클라이언트
세션을 유지한다.

virtual = xxx.xxx.xxx.xxx : 443
real = 192.168.1.2:443
real = 192.168.1.3:443
module = sslid

4) IPv6 구성 예
주소 끝의 []는 선택 사항입니다. IPv4와 혼합 가능.

virtual = xxxx : xxxx : xxxx :: : 80
real = 192.168.1.2:80
real = [:: 1] : 80
virtual = xxxx : xxxx : xxxx ::: 8080
real = :: 1:80
================================================== ==============================

5 Replication 기능

————————————————– ——————————

5.1 Replication 기능에 대한 설명

Replication 기능은 Heartbeat2의 이중화 구성시, MASTER 서버와
SLAVE 서버 사이에서 SSL 세션 ID 정보 VirtualService의 QoS 정보
Sorry 플래그 정보를 동기화하는 데 사용하는 기능입니다.

Replication 기능은 이중화 구성 및 기능 수행 상황에 따라 다음 상태
(Replication Mode)에서 작동합니다.
현재 상태는 “l7vsadm-V”명령으로 확인할 수 있습니다.

SINGLE : 비 중복 구성에서 Replication이 작동하지 않는 상태
MASTER : 이중화 구성으로 Replication가 MASTER 서버로 실행 (동기
원)의 상태
SLAVE : 이중화 구성으로 Replication이 SLAVE 서버로 실행 (동기
대상)이있는 상태
MASTER_STOP : MASTER (원본)에서 명령은 Replication 기능 중지
상태
SLAVE_STOP : SLAVE (대상)에서 명령은 Replication 기능 중지
상태

위의 MASTER ⇔ MASTER_STOP, SLAVE ⇔ SLAVE_STOP 상태 전환은 Replication
기능 제어 명령 “l7vsadm-R-s stop”, “l7vsadm-R-s start”으로 할
수 있습니다.

Replication 기능 설정 (대향 서버 정보 사용 구성 요소 정보는
UltraMonkey-L7 설정 파일에서 replication 섹션에 설명합니다.
설정 방법에 대한 자세한 내용은 6 UltraMonkey-L7 설정 파일의 설명을 참조

또한 Replication 기능 제어 명령은 강제로 현재 Replication 데이터
를 SLAVE 서버에 반영시키고, 현재 Replication 데이터를 덤프하는
수 있습니다.

Replication 기능 제어 명령 자세한 내용은 2.4.4 Replication 기능 제어 명령을
참조

================================================== ==============================

6 UltraMonkey-L7 설정 파일에 대한 설명

————————————————– ——————————

6.1 설정 파일 (l7vs.cf) 설명
UltraMonkey-L7 관한 각종 설정을 작성할 수 있습니다.
설정 가능한 항목은 logger] [l7vsadm] [l7vsd] [virtualservice]
[replication] [session]의 6 종류로, 각각의 섹션별로 설명합니다.

[logger]
· UltraMonkey-L7을 구성하는 각 프로세스 (l7vsd/l7vsadm/SNMPAgent) 로그
출력에 대한 설정 (로그 파일, 로그 순환 로그 수준)
을 설명합니다.

[l7vsadm]
· l7vsadm 명령에 대한 설정 (이중 부팅 검사, l7vsd 연결 검사의
등)을 설명합니다.

[replication]
· Replication 기능 설정 (대향 서버 정보 사용 구성 요소 정보
)을 작성합니다.

[l7vsd]
· l7vsd 프로세스에 대한 설정 (파일 열기 최대 수)를 작성합니다.

[vitrualservice]
· VitrualService 관한 설정 (세션 처리량 산출 간격 등)
기술합니다.

[replication]
· Replication 기능 설정 (대향 서버 정보 사용 구성 요소 정보의
등)을 설명합니다.

[snmpagent]
· SNMPAgnet에 대한 설정을 설명합니다.

[session]
세션에 관한 설정 (수신 버퍼 크기 등)을 설명합니다.

————————————————– ——————————

6.2 l7vs.cf 예제 설명

# 로거 섹션
[logger]

# l7vsd 출력 로그 파일
l7vsd_log_filename = “/ var/log/l7vs/l7vsd.log”

# 로그 회전 방법
# 크기 “size”날짜 “date”, 날짜 + 사이즈 “datesize”를 지정할 수 있습니다
l7vsd_rotation = “size”

# 순환의 백업 파일 생성 수
# 1에서 12으로 지정할 수 있습니다
l7vsd_max_backup_index = “10″

# 크기의 회전시의 파일 크기
# 65535에서 ULONG_MAX를 지정할 수 있습니다
# K (킬로), M (메가), G (기가)의 지정도 가능합니다
l7vsd_max_filesize = “10M”

# 액세스 로그 회전 방법
# 크기 “size”날짜 “date”, 날짜 + 사이즈 “datesize”를 지정할 수 있습니다
l7vsd_accesslog_rotate_type = “size”

# 액세스 로그 회전에 의한 백업 파일 생성 수
# 1에서 12으로 지정할 수 있습니다
l7vsd_accesslog_rotate_max_backup_index = “10″

# 접근 로그 크기에 따라 회전시의 파일 크기
# 65535에서 ULONG_MAX를 지정할 수 있습니다
# K (킬로), M (메가), G (기가)의 지정도 가능합니다
l7vsd_accesslog_rotate_max_filesize = “10M”

# 로그 카테고리 l7vsd_network의 기본 로그 수준
# debug, info, warn, error, fatal 지정할 수 있습니다
l7vsd_network = “warn”

l7vsd_network_qos = “warn”
l7vsd_network_bandwidth = “warn”
l7vsd_network_num_connection = “warn”
l7vsd_network_access = “warn”
l7vsd_mainthread = “warn”
l7vsd_virtualservice = “warn”
l7vsd_virtualservice_thread = “warn”
l7vsd_session = “warn”
l7vsd_session_thread = “warn”
l7vsd_realserver = “warn”
l7vsd_sorryserver = “warn”
l7vsd_module = “warn”
l7vsd_replication = “warn”
l7vsd_replication_sendthread = “warn”
l7vsd_parameter = “warn”
l7vsd_logger = “warn”
l7vsd_command = “warn”
l7vsd_start_stop = “warn”
l7vsd_system = “warn”
l7vsd_system_memory = “warn”
l7vsd_system_endpoint = “warn”
l7vsd_system_signal = “warn”
l7vsd_system_environment = “warn”
l7vsd_snmpbridge = “warn”
l7vsd_protocol = “warn”
l7vsd_schedule = “warn”

# l7vsadm 출력 로그 파일
l7vsadm_log_filename = “/ var/log/l7vs/l7vsadm.log”

# 로그 회전 방법
l7vsadm_rotation = “date”

# 순환의 백업 파일 생성 수
l7vsadm_max_backup_index = “10″

# 날짜별로 순환시 타이밍 (주기)
# 매년 “year”매월 “month”매주 “week”매일 “date”매시 “hour”가
# 수 있습니다
l7vsadm_rotation_timing = “month”

# 날짜별로 순환시 타이밍 (전환 시간)
# 매시 “hour”예 -> “30″
# 매일 “date”예 -> “10:30″
# 매주 “week”예 -> “tue 10:30″
# 매월 “month”예 -> “15 10:30″
# 매년 “year”지정시 예 -> “5 / 15 10:30″
# ※ 회전 타이밍은 최대 매년주기 (1 년마다)의 사양으로하고있다
# 때문에 윤년 2 / 29는 예외 세월로 설정해도 에러가된다.
l7vsadm_rotation_timing_value = “1 12:01″

# 로그 카테고리 l7vsadm_parse의 기본 로그 수준
# debug, info, warn, error, fatal 지정할 수 있습니다
l7vsadm_parse = “warn”

l7vsadm_operate = “warn”
l7vsadm_config_result = “warn”
l7vsadm_common = “warn”
l7vsadm_logger = “warn”
l7vsadm_parameter = “warn”
l7vsadm_module = “warn”
l7vsadm_protocol = “warn”
l7vsadm_schedule = “warn”

# snmpagent 출력 로그 파일
snmp_log_filename = “/ var/log/l7vs/snmpagent.log”

# 로그 회전 방법
snmp_rotation = “datesize”

# 순환의 백업 파일 생성 수
snmp_max_backup_index = “10″

# 크기의 회전시의 파일 크기
snmp_max_filesize = “30M”

# 날짜별로 순환시 타이밍 (주기)
snmp_rotation_timing = “week”

# 날짜별로 순환시 타이밍 (전환 시간)
snmp_rotation_timing_value = “wed 23:59″

# 로그 카테고리 snmpagent_start_stop의 기본 로그 수준
# debug, info, warn, error, fatal 지정할 수 있습니다
snmpagent_start_stop = “warn”

snmpagent_manager_receive = “warn”
snmpagent_manager_send = “warn”
snmpagent_l7vsd_receive = “warn”
snmpagent_l7vsd_send = “warn”
snmpagent_logger = “warn”
snmpagent_parameter = “warn”
snmpagent_system = “warn”
snmpagent_system_memory = “warn”
snmpagent_system_endpoint = “warn”
snmpagent_system_signal = “warn”
snmpagent_system_environment = “warn”

# l7vsadm 섹션
[l7vsadm]

# l7vsadm 명령 이중 부팅 검사시 재시도 간격 (초)
cmd_interval = 1

# l7vsadm 명령 이중 부팅 검사시 재시도 횟수 (회)
cmd_count = 10

# l7vs 연결 확인시 재시도 간격 (초)
con_interval = 1

# l7vs 연결 확인시 재시도 횟수 (회)
con_count = 10

# l7vsd 섹션
[l7vsd]

# 파일 열기 리소스 제한
maxfileno = 65535

# virtualservice 섹션
[virtualservice]

# 세션 스레드 풀 크기
session_thread_pool_size = 32

# 처리량을 계산하는 간격
throughput_calc_interval = 500

# VirtualService가 관리하는 세션이 사용할 CPU 개수
num_of_core_uses = 0

# replication 섹션
[replication]

# 데이터 대상 (SLAVE)의 IP 주소
# 호스트 이름으로 작성할 수 있습니다
# IPv6 형식으로 작성할 수 있습니다
# (IPv6 설정 예 : ip_addr = “[fe80 :: 1]“)
ip_addr = “192.168.0.254″

# MASTER에서 데이터를 수신 port 번호
# 서비스 이름으로 작성할 수 있습니다
service_name = “40000″

# MASTER로부터 데이터를 수신하는 IP 주소
# IPv6 형식으로 작성할 수 있습니다
# (IPv6 설정 예 : ip_addr = “[fe80 :: 1]“)
recv_ip_addr = “192.168.0.253″

# 데이터 (1 블록 = 512 byte)의 송신 간격 (uS)
# 10에서 10000으로 지정할 수 있습니다
interval = 1000

# 강제 Replication 명령을 실행할 때 데이터
# (1 블록 = 512 byte)의 송신 간격 (mS)
# 4 400으로 지정할 수 있습니다
compulsorily_interval = 40

# Replication 기능의 구성 요소 이름
# 구성 요소 ID (cmponent_id_xx)는 통번에서 0에서 99까지 지정
cmponent_id_00 = “virtualservice”

# 구성 요소를 사용하는 블록 크기
# (1 블록 = 512 byte)입니다
# 구성 요소 ID (cmponent_id_xx)와 쌍으로 지정하고 0에서 100000
# 지정할 수 있습니다
cmponent_size_00 = 64

cmponent_id_01 = “sslid”
cmponent_size_01 = 222

# snmpagent 섹션
[snmpagent]
# SNMPAgent 기능 활성화 또는 비활성화
# true 또는 false를 지정할 수 있습니다
enable = “false”

# MIB 정보의 최소 수집 간격 (s)
# 0에서 2147483647까지 지정할 수 있습니다
cache_update_interval = 1

# 로그 함정 발 기능 활성화 또는 비활성화
# true 또는 false를 지정할 수 있습니다
logtrap = “false”

# TRAP 발 로깅 수준
# debug, info, warn, error, fatal 지정할 수 있습니다
logtrap_level = “warn”

# 위 QoS 경고 경고 임계값
# 1에서 100까지 지정할 수 있습니다
qos_up_alert_on = 85

# 위 QoS 경고 경고 취소 한계
# 1에서 100까지 지정할 수 있습니다
qos_up_alert_off = 50

# 내려가는 QoS 경고 경고 임계값
# 1에서 100까지 지정할 수 있습니다
qos_down_alert_on = 85

# 내려가는 QoS 경고 경고 취소 한계
# 1에서 100까지 지정할 수 있습니다
qos_down_alert_off = 50

# 나머지 세션 경고 경고 임계값
# 1에서 2147483647까지 지정할 수 있습니다
sessionpool_alert_on = 85

# 나머지 세션 경고 경고 취소 한계
# 1에서 2147483647까지 지정할 수 있습니다
sessionpool_alert_off = 50

# 트랩 큐 폴링 간격 (nS)
# 1에서 1000000000까지 지정할 수 있습니다
trap_queue_polling_interval = 100000000

# 트랩 큐 최대값
# 1에서 2147483647까지 지정할 수 있습니다
trap_queue_max_size = 1000

# session 섹션
[session]

# 세션 업스트림 Socket 버퍼 ​​크기
upstream_buffer_size = 8192

# 세션 하행 방향 Socket 버퍼 ​​크기
downstream_buffer_size = 8192

================================================== ==============================

7 SSL 설정 파일에 대한 설명

————————————————– ——————————

7.1 설정 파일의 설명

클라이언트와의 SSL 통신에 대한 각종 설정을 작성할 수 있습니다.

[ssl] 섹션에 모든 설정을 설명합니다.
SSL 설정 파일은 UltraMonkey-L7 설정 도구에서 VirtualService 추가
때 명령 옵션으로 지정합니다. VirtualService 서로 다른 SSL 설정
설정 파일을 지정할 수 있습니다.

[ssl] 섹션
· SSL 통신에 대한 설정을 설명합니다.

(※) v3에서 l7vsd 단체로 SSL 해독이 가능하게되었습니다.
(v2까지 sslproxy이 필요했습니다)

————————————————– ——————————

7.2 sslproxy.target.cf 예제 설명

# ssl 섹션
[ssl]

# SSL 핸드 셰이크 프로세스의 제한 시간 값 (초)
timeout_sec = 30

# 루트 인증서 디렉토리 경로
ca_dir = “/ etc/l7vs/sslproxy /”

# 루트 인증서 파일 (빈 문자열도 가능)
ca_file = “root.pem”

# 서버 인증서 체인 디렉토리 경로
cert_chain_dir = “/ etc/l7vs/sslproxy /”

# 서버 인증서 체인 파일
cert_chain_file = “server.pem”

# 비밀 열쇠 디렉토리 경로
private_key_dir = “/ etc/l7vs/sslproxy /”

# 비밀 키 파일
private_key_file = “server.pem”

# 비밀 키 암호화 유형 (SSL_FILETYPE_PEM 또는 SSL_FILETYPE_ASN1)
private_key_filetype = “SSL_FILETYPE_PEM”

# 비밀키 암호 디렉토리 경로
private_key_passwd_dir = “/ etc/l7vs/sslproxy /”

# 비밀키 암호 파일
private_key_passwd_file = “passwd.txt”

# 인증서 유효성 검사 옵션 (복수 지정 가능 ※, OpenSSL 정의 항목)
verify_options = “SSL_VERIFY_FAIL_IF_NO_PEER_CERT”
verify_options = “SSL_VERIFY_CLIENT_ONCE”

# 검증 인증서 계층
verify_cert_depth = 9

# SSL 옵션 (복수 지정 가능 ※, OpenSSL 정의 항목)
ssl_options = “SSL_OP_ALL”
ssl_options = “SSL_OP_NO_SSLv2″

# 일시 키 디렉토리 경로 (SSL 옵션 “SSL_OP_SINGLE_DH_USE”이
지정된 경우에만 필요하다)
tmp_dh_dir = “/ etc/l7vs/sslproxy /”

# 일시 키 파일 이름 (SSL 옵션 “SSL_OP_SINGLE_DH_USE”이
지정된 경우에만 필요하다)
tmp_dh_file = “dh512.pem”

# 암호화 스위트 (OpenSSL 정의 항목)
cipher_list = “ALL :! ADH :! LOW :! EXP :! MD5 : @ STRENGTH”

# 세션 캐시 (on, off)
session_cache = “on”

# 세션 캐시 크기가 0이 지정된 경우, 사이즈 제한 없음
session_cache_size = 20480

# 세션 캐시 시간 제한
# 0이 지정된 경우, 기본값 300 초
session_cache_timeout = 300

(※) verify_options, ssl_options 내용은 해당 옵션 행을 여러 행 지정할
하는 수 있습니다.

================================================== ==============================

8 기타

————————————————– ——————————

8.1 snmpd 설명
8.1.1 설정 파일 (snmpd.conf)에 대한 설명

master agentx <-Master agentx 사용 여부 플래그
access <- 모든 iso 트리를 액세스할 수 설정.
trap2sink <- 트랩 싱크 지정.

8.1.2 snmpd.conf의 예제 설명

# net-snmp configuration file.
# / etc / snmp / snmpd.conf
master agentx # Master agentx 사용 여부 플래그 추가
com2sec ultramonkey_sec default ultramonkey_com # 네트워크의 범위와 커뮤니티 이름을 정의
group ultramonkey_group v1 ultramonkey_sec # 보안 이름과 SNMP의 보안 모델을 그룹 이름으로 정의
group ultramonkey_group v2c ultramonkey_sec
group ultramonkey_group usm ultramonkey_sec
view ultramonkey included .1.3.6.1.4.1.32132.1 # SNMP에서 구할 수있는 정보의 범위를 지정
access ultramonkey_group “”any noauth exact ultramonkey none none # 모든 iso 트리를 액세스할 수 설정.
trap2sink 127.0.0.1 public # 트랩 싱크 지정을 추가합니다.

————————————————– ——————————

8.2 Transparent Proxy에 대해

VirtualService 만들 때 RealServer 추가시 – tproxy 옵션을 붙이는 것으로,
Transparent Proxy 기능이 활성화되어 RealServer 및 SorryServer에 배분
시에 클라이언트의 IP 주소를 bind하여 연결합니다. 이 기능을 사용하면
RealServer 및 SorryServer 클라이언트에서 직접 연결된 것처럼 보이게
하는 수 있습니다.
그러나이 기능을 사용하려면 다음 세 가지 조건을 충족해야합니다.

(1) UltraMonkey-L7 서버의 커널 버전이 다음을 충족

2.6.28 이상 (RHEL6.0 이상)

(2) RealServer, SorryServer과 UltraMonkey-L7가 다른 서버의 경우 RealServer,
SorryServer 기본 게이트웨이 UltraMonkey-L7 서버를 설정하는

(3) 다음 iptables, ip rule, ip route 설정을 할

iptables-t mangle-N DIVERT
iptables-t mangle-A DIVERT-j MARK – set-mark 1
iptables-t mangle-A DIVERT-j ACCEPT
ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0 / 0 dev lo table 100

추가적으로 조건에 따라 다음 (i) 또는 (ii) 설정을 할
(i) RealServer, SorryServer과 UltraMonkey-L7가 다른 서버의 경우

iptables-t mangle-A PREROUTING-p tcp-m socket-j DIVERT

(ii) RealServer, SorryServer과 UltraMonkey-L7가 동일한 서버의 경우
(단, 루프백 주소는 설정할 수 없다)

iptables-t mangle-A OUTPUT-p tcp-s 서버 주소 \
- sport 서버 포트-j DIVERT

(※) (i), (ii) 동시 설정 가능

==================================================