'cache'에 해당되는 글 4건

  1. 2016.03.22 [Redis] Master/Slave, Sentinel 구성 부터 Jedis 예제까지.
  2. 2015.05.26 [Elasticsearch] Circuit Breaker
  3. 2013.09.02 [Elasticsearch] IndexCacheModule...
  4. 2012.11.23 memcached 설치 따라하기.

[Redis] Master/Slave, Sentinel 구성 부터 Jedis 예제까지.

ITWeb/개발일반 2016.03.22 16:17

필요해서 구성해본 내용을 정리 합니다.

복습 차원에서 기록 하는 것이라 별 도움이 안될수 있습니다.


Redis 공식 사이트)


Redis 다운로드)


Redis 설치 on OSX)

# 다운로드 받은 후 tar 압축 해제 후 make 했습니다.

$ make

    LINK redis-check-dump

    CC redis-check-aof.o

    LINK redis-check-aof


Hint: It's a good idea to run 'make test' ;)

# 필요 하신 경우 make install 하시면 됩니다.


Redis Configure 참조)

- maxmemory 설정은 32bits 운영체제에서 최대 3GB 이며, 64bits 에서는 리소스 만큼 가능 하다고 합니다.

- expire 설정을 해주는 것 보다 그냥 LRU 설정을 사용하라고 합니다. (근데 이건 서비스 특성과 성능 테스트 후 결정 하는게 좋아 보입니다.)

- redis LRU 알고리즘이 완벽하지 않다(Redis LRU algorithm is not an exact implementation.)는 공식 문서의 설명이 있습니다. 그래서 maxmemory-samples 라는 설정을 하는 것 같습니다.

(http://redis.io/topics/lru-cache)

- 단순 휘발성 데이터에 대한 cache 용도 일때는 rdb, append 모드를 disable 하는게 좋습니다.

- sentinel 설정은 master, slave 구성 시 failover 지원을 하기 위함 입니다. (client 에서는 JedisSentinelPool 을 사용하세요.)

- master election 시 민주적으로 하기 위해 quorum 구성을 합니다.


Redis Master 설정)

daemonize yes

pidfile /redis-server/master/pidfile/redis.pid

port 6379

tcp-backlog 511

bind 127.0.0.1

loglevel debug

logfile /redis-server/master/log/redis.log

maxmemory 64MB

maxmemory-policy allkeys-lru

maxmemory-samples 5

appendonly no

save ""

requirepass redispassword


Redis Slave 설정)

daemonize yes

pidfile /redis-server/slave/pidfile/redis.pid

port 6479

tcp-backlog 511

bind 127.0.0.1

loglevel debug

logfile /redis-server/slave/log/redis.log

maxmemory 64MB

maxmemory-policy allkeys-lru

maxmemory-samples 5

appendonly no

save ""

slaveof 127.0.0.1 6379

masterauth redispassword


Redis Sentinel Quorum 설정)

Sentinel 1)

port 26379

dir "/tmp"

sentinel monitor redis-master 127.0.0.1 6379 2

sentinel auth-pass redis-master redispassword

sentinel down-after-milliseconds redis-master 30000

sentinel parallel-syncs redis-master 1

daemonize yes

pidfile "/redis-server/sentinel1/pidfile/sentinel.pid"

logfile "/redis-server/sentinel1/log/sentinel.log"


Sentinel 2)

port 26479

dir "/tmp"

sentinel monitor redis-master 127.0.0.1 6379 2

sentinel auth-pass redis-master redispassword

sentinel down-after-milliseconds redis-master 30000

sentinel parallel-syncs redis-master 1

daemonize yes

pidfile "/redis-server/sentinel2/pidfile/sentinel.pid"

logfile "/redis-server/sentinel2/log/sentinel.log"


Sentinel 3)

port 26579

dir "/tmp"

sentinel monitor redis-master 127.0.0.1 6379 2

sentinel auth-pass redis-master redispassword

sentinel down-after-milliseconds redis-master 30000

sentinel parallel-syncs redis-master 1

daemonize yes

pidfile "/redis-server/sentinel3/pidfile/sentinel.pid"

logfile "/redis-server/sentinel3/log/sentinel.log"


Redis Master/Slave/Sentinel 실행)

$ src/redis-server /redis-server/master/conf/redis.conf

$ src/redis-server /redis-server/slave/conf/redis.conf

$ src/redis-server /redis-server/sentinel1/conf/sentinel.conf --sentinel

$ src/redis-server /redis-server/sentinel2/conf/sentinel.conf --sentinel

$ src/redis-server /redis-server/sentinel3/conf/sentinel.conf --sentinel


Jedis 공식 사이트)


Jedis 샘플 코드)

- JedisSentinelPoolTest 참조

더보기



저작자 표시 비영리 변경 금지
신고
Trackback 0 : Comment 0

[Elasticsearch] Circuit Breaker

Elastic/Elasticsearch 2015.05.26 11:33

참고 문서)

https://www.elastic.co/guide/en/elasticsearch/guide/current/_limiting_memory_usage.html#circuit-breaker

https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-fielddata.html#fielddata-circuit-breaker

https://www.elastic.co/guide/en/elasticsearch/guide/current/_monitoring_individual_nodes.html#_circuit_breaker

https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-update-settings.html#_field_data_circuit_breaker

https://www.elastic.co/guide/en/elasticsearch/resiliency/current/index.html#_circuit_breaker_fielddata_status_done_v1_0_0


결국 하나의 문서만 보셔도 됩니다.

https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-fielddata.html


[Circuit Breaker 요약]

- fielddata cache 와 연관된 기능으로 OOM에 대한 대응 방법으로 제공하고 있습니다.

- circuit breaker limit size는 cache size 보다 커야 합니다.

- circuit breaker는 query에 필요로 하는 memory 크기를 예측/평가 하여 사전에 OOM 문제를 경험하지 않도록 해줍니다.

    즉, 요청한 Query를 중시 시킵니다.


[Geek Igor]

http://igor.kupczynski.info/2015/04/06/fielddata.html

저작자 표시 비영리 변경 금지
신고
Trackback 0 : Comment 0

[Elasticsearch] IndexCacheModule...

Elastic/Elasticsearch 2013.09.02 17:40

index cache module 뭐가 있는지 한번 볼까요?


        new FilterCacheModule(settings).configure(binder());

        new IdCacheModule(settings).configure(binder());

        new QueryParserCacheModule(settings).configure(binder());

        new DocSetCacheModule(settings).configure(binder());


검색 질의와 결과 셋에 대한 cache 가 위에서 보면

        new QueryParserCacheModule(settings).configure(binder());

        new DocSetCacheModule(settings).configure(binder());

이 두 놈이 비슷해 보입니다.


근데 소스 들어가서 보면 정말 원하는 내용은 아니라는 걸 알 수 있습니다.

QueryParserCacheModule 은 요청한 질의에 대한 Query 를 매번 만들지 않고 cache 에서 가져 올 수 있는 기능이라 뭐 괜찮아 보이구요.

DocSetCacheModule 은 docId 기반의 cache 라서 ㅎㅎ document 단위로 cache 정보를 읽어 오는 기능 입니다.

즉, 검색 질의에 대한 결과셋을 cache 하고 싶으신 경우는 그냥 memcached 나 redis 같은걸 이용해서 cache 하시면 되겠습니다.

신고
Trackback 0 : Comment 0

memcached 설치 따라하기.

ITWeb/개발일반 2012.11.23 12:00

[Memcached 설치]
    ※ Reference
        http://code.google.com/p/memcached/wiki/NewInstallFromSource
        http://yupmin.net/install-memcached
    ※ 설치
        (root권한)
            sudo yum install libevent libevent-devel
        (user권한)
            cd dist
            wget http://memcached.org/latest
            tar -zxvf memcached-1.x.x.tar.gz
            cd memcached-1.x.x
            ./configure --prefix=/usr/local/memcached --with-libevent=/usr/lib/
            make && make test
        (root권한)
            sudo make install
    ※ 설정
        cd /etc
        sudo vi memcached.conf
            -m 16
            -p 11311
            -u nobody
            -l 127.0.0.1
    ※ init script 생성
        (user권한)
        mkdir -p /home/USER/dist/memcached_script
        cd /home/USER/dist/memcached_script
            wget http://yupmin.net/wp-content/uploads/2010/08/memcached_script.tar.gz
            tar xvfz memcached_script.tar.gz
            chmod 755 /usr/local/bin/start-memcached
            chmod 755 /etc/init.d/memcached
        (root 권한)
            cd /usr/local/bin
            sudo ln -s /usr/local/memcached/bin/memcached memcached
            cd /home/USER/dist/memcached_script
            sudo mv start-memcached /usr/local/bin/start-memcached
            sudo mv memcached /etc/init.d/memcached
    ※ 실행
        sudo /usr/local/bin/start-memcached or
        /usr/local/memcached/bin/memcached -d -r -m 64 -l 서버IP(10.101.254.223) -p 11211
        - 실행 권한 root or user
        - 단일 서버에 Multi instance 실행
            /usr/local/memcached/bin/memcached -d -r -m 64 -l 서버IP(10.101.254.223) -p 11211
            /usr/local/memcached/bin/memcached -d -r -m 64 -l 서버IP(10.101.254.223) -p 11311
            /usr/local/memcached/bin/memcached -d -r -m 64 -l 서버IP(10.101.254.223) -p 11411
    ※ 실행 스크립트
        #!/usr/bin/perl -w
 
        # start-memcached
        # 2003/2004 - Jay Bonci <jaybonci@debian.org>
        # This script handles the parsing of the /etc/memcached.conf file
        # and was originally created for the Debian distribution.
        # Anyone may use this little script under the same terms as
        # memcached itself.
 
        use strict;
 
        if ($> != 0 and $< != 0) {
                print STDERR "Only root wants to run start-memcached.\n";
                exit;
        }
 
        my $etcfile = shift || "/etc/memcached.conf";
        my $params = [];
        my $etchandle;
 
        # This script assumes that memcached is located at /usr/bin/memcached, and
        # that the pidfile is writable at /var/run/memcached.pid
 
        my $memcached = "/usr/local/bin/memcached";
        my $pidfile = "/var/run/memcached.pid";
 
        # If we don't get a valid logfile parameter in the /etc/memcached.conf file,
        # we'll just throw away all of our in-daemon output. We need to re-tie it so
        # that non-bash shells will not hang on logout. Thanks to Michael Renner for
        # the tip
        my $fd_reopened = "/dev/null";
 
        sub handle_logfile {
                my ($logfile) = @_;
                $fd_reopened = $logfile;
        }
 
        sub reopen_logfile {
                my ($logfile) = @_;
                open *STDERR, ">>$logfile";
                open *STDOUT, ">>$logfile";
                open *STDIN, ">>/dev/null";
                $fd_reopened = $logfile;
        }
 
        # This is set up in place here to support other non -[a-z] directives
 
        my $conf_directives = {
                "logfile" => \&handle_logfile
        };
 
        if (open $etchandle, $etcfile) {
                foreach my $line (<$etchandle>) {
                        $line =~ s/\#.*//go;
                        $line = join ' ', split ' ', $line;
                        next unless $line;
                        next if $line =~ /^\-[dh]/o;
 
                        if ($line =~ /^[^\-]/o) {
                                my ($directive, $arg) = $line =~ /^(.*?)\s+(.*)/;
                                $conf_directives->{$directive}->($arg);
                                next;
                        }
                        push @$params, $line;
                }
        }
 
        unshift @$params, "-u root" unless (grep $_ eq '-u', @$params);
        $params = join " ", @$params;
 
        if (-e $pidfile) {
                open PIDHANDLE, "$pidfile";
                my $localpid = <PIDHANDLE>;
                close PIDHANDLE;
 
                chomp $localpid;
                if (-d "/proc/$localpid") {
                        print STDERR "memcached is already running.\n";
                        exit;
                } else {
                        `rm -f $localpid`;
                }
        }
 
        my $pid = fork();
 
        if ($pid == 0) {
                reopen_logfile($fd_reopened);
                exec "$memcached $params";
                exit(0);
        } elsif (open PIDHANDLE,">$pidfile") {
                print PIDHANDLE $pid;
                close PIDHANDLE;
        } else {
                print STDERR "Can't write pidfile to $pidfile.\n";
        }

신고
tags : cache, memcached
Trackback 0 : Comment 0