brunch

You can make anything
by writing

C.S.Lewis

by Daniel Lim Mar 07. 2017

Redis 설치 및 Cluster 구성

레디스 설치 클러스터 구성

1. 계정을 생성한다.

$> adduser redis

2. open file 개수에 대한 Limit을 변경한다.

$> vi /etc/security/limits.conf    redis soft nofile 65535    redis hard nofile 65535

3. 메모리 스와핑을 최소로 사용하도록 설정을 한다.

$> sysctl -w vm.swappiness=1
이후 재기동 이후 반영을 위해
$> vi /etc/sysctl.conf     vm.swappiness=1 

4. 메모리를 다 사용해도 충분한 메모리가 있는 것처럼 처리한다.

$> sysctl -w vm.overcommit_memory=1
    # 이후 재기동 이후 반영을 위해
$> vi /etc/sysctl.conf    
    vm.overcommit_memory=1 추가

5. 네트워크 연결 개수를 설정한다.

$> sysctl -w net.core.somaxconn=65535
    # 이후 재기동 이후 반영을 위해
$> vi /etc/rc.local
    sysctl -w net.core.somaxconn=65535

6. System Hang을 막기 위해 THP 사용 안 하도록 설정한다.

$> echo never > /sys/kernel/mm/transparent_hugepage/enabled
이후 재기동 이후 반영을 위해
$> vi /etc/rc.local
    echo never > /sys/kernel/mm/transparent_hugepage/enabled

7. Redis 설치 - redis 계정으로 진행

# Source Download
$> wget http://download.redis.io/releases/redis-3.2.6.tar.gz
# 압축 해제
$> tar xvzf redis-3.2.6.tar.gz
# 해제된 디렉터리 이동
$> cd redis-3.2.6# 설치 진행
$> make
# 에러 발생 시 다음 진행
    $> yum install gcc-c++
    $> make distclean
    $> make
# /usr/local/bin에 실행 파일 복사됨, root 권한 필요
$> make install

8. Cluster 구성

8.1 Conf File 수정

$> vi redis_conf
    #원격 서버에서 접속 가능하게 설정하려면 no로 지정
    protected-mode no
    tcp-keepalive 60
    loglevel notice
    logfile "/var/log/redis/redis_5543.log"
    daemonize yes
    #포트 지정
    port 5543
    #bind 127.0.0.1을 주석 처리
    # bind 127.0.0.1
    #비밀번호 지정
    requirepass <password>
    masterauth <password>
    #yes로 설정 시 클러스터 모드, no로 설정 시 standalone 모드로 시작
    cluster-enabled yes
     #클러스터의 상태를 기록하는 바이너리 파일 경로
    cluster-config-file nodes_5543.conf
     #레디스 노드가 다운되었는지 판단하는 시간 단위는 millisecond
    cluster-node-timeout 3000
     #다운 시도 횟수
     cluster-slave-validity-factor 2
     #위치 지정
    pidfile /var/run/redis/redis_5543.pid
    dbfilename dump-5543.rdb
    # appendonly는 변경 시 해당 명령을 저장해 두었다가, 복구 시 저장된 명령을 순서대로 실행하는 옵션
    appendonly yes 

8.2 인스턴스 시작

$>  $REDIS_BIN/redis-server $REDIS_NODE_CONF/redis-${port}.conf
#7000 ~ 7002 까지 인스턴스 실행 예
$> $REDIS_BIN/redis-server $REDIS_NODE_CONF/redis-7000.conf
$> $REDIS_BIN/redis-server $REDIS_NODE_CONF/redis-7001.conf
$> $REDIS_BIN/redis-server $REDIS_NODE_CONF/redis-7002.conf

8.3 인스턴스 별 슬롯 할당

$> redis-cli -c -h 124.66.185.75 -p 7000 -a <password> cluster addslots {0..5460}
$> redis-cli -c -h 124.66.185.75 -p 7001 -a <password> cluster addslots {5461..10922}
$> redis-cli -c -h 124.66.185.75 -p 7002 -a <password> cluster addslots {10923..16383}

8.4 epoch 설정

$> redis-cli -c -h 124.66.185.75 -p 7000 -a <password> cluster set-config-epoch 1
$> redis-cli -c -h 124.66.185.75 -p 7001 -a <password> cluster set-config-epoch 2
$> redis-cli -c -h 124.66.185.75 -p 7002 -a <password> cluster set-config-epoch 3

8.5 meet nodes

$> redis-cli -c -h 124.66.185.75 -p 7000 -a <password> cluster meet 124.66.185.75 7001
$> redis-cli -c -h 124.66.185.75 -p 7002 -a <password> cluster meet 124.66.185.75 7001

8.6 salve 추가

8.6.1 meet slave to master

$> redis-cli -c -h 124.66.185.75 -p 7002 -a <password> cluster meet 124.66.185.71 6000

8.6.2 regist slave to master

#node-id는 70002의 노드 ID 이어야 한다.
$> redis-cli -c -h 124.66.185.71 -p 6000 -a <password> cluster replicate <node-id>

참고 자료

http://www.redisgate.com/redis/cluster/cluster_cmd_intro.php 
http://knight76.tistory.com/entry/redis-AOF-appendonlyfile 
http://knight76.tistory.com/entry/redis-%EB%A6%AC%EB%88%85%EC%8A%A4-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%84%A4%EC%A0%95-%EA%B4%80%EB%A0%A8-%ED%99%95%EC%9D%B8%ED%95%98%EB%8A%94-%EC%BD%94%EB%93%9C-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%98%A4%EB%B2%84%EC%BB%A4%EB%B0%8B-THP 

작가의 이전글 @ResponsBody String 시 한글 깨짐
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari