행복님 avatar

레디스 프로세스 멀티 실행

jaerakson

Published: 30 Aug 2018 › Updated: 30 Aug 2018레디스 프로세스 멀티 실행

레디스 프로세스 멀티 실행

한서버에 여러개의 레디스를 실행 하는 경우 있습니다.

Script 통해 작업 하게 되시면 빠르게 실수없이 설치 할수 있습니다.
간략하게 정리 해봤습니다.

1. 레디스 설치 
2. 레디스 설치 대상 파일로 관리 (레디스목록) 
3. 레디스 목록 파일 기준으로 환경파일 및 RDB생성 
4. 레디스목록 파일 내용을 redis start ,stop  ,접속 

Redis 환경설정

sysctl vm.overcommit_memory=1


/etc/redis/6379.conf

sed -i "s:protected-mode yes:protected-mode no:g" /etc/redis/6379.conf
sed -i "s:tcp-backlog 511:tcp-backlog 1024:g" /etc/redis/6379.conf
sed -i "s:logfile:#logfile:g" /etc/redis/6379.conf
sed -i "s:# syslog-enabled no:syslog-enabled yes:g" /etc/redis/6379.conf
sed -i "s:# syslog-ident redis:syslog-ident redis(6379):g" /etc/redis/6379.conf
sed -i "s:databases 16:databases 1:g" /etc/redis/6379.conf

자동재시작 환경파일 생성

  vi /etc/init/redis_6379.conf


  start on runlevel [!2345] # 시스템종료,리부팅일때 시작 서비시작
  stop on runlevel [016]   #  서비스 종료 
  respawn                  # 프로세스 죽으면 재시작
  expect fork                # 백그라운드 실행
  limit nofile 50000 50000    # file open 갯수

레디스 시작

/opt/redis/bin/redis-server /etc/redis/6379.conf


레디스 멀티 실행을 위한 포트 정리 파일 생성

  vi /etc/redis/redislist.txt
  redis1,6379
  redis2,6380
  redis3,6380

etc/redis/redislist.txt 읽어서


삭제

  while read file
  do
      RDBNAME=`echo $file|cut -d "," -f 1`
      PORT=`echo $file|cut -d "," -f 2`
      echo $PORT,$RDBNAME
      
        rm -rf  /var/lib/redis/$PORT*
        rm    /etc/redis/$PORT*.conf 
        rm    /etc/init/redis\_$PORT*.conf 
        rm /var/run/redis\_$PORT*.pid

  done   < /etc/redis/redislist.txt

RDB,redis config, redis start config 파일생성

  while read file
  do
    RDBNAME=`echo $file|cut -d "," -f 1`
    PORT=`echo $file|cut -d "," -f 2`
    echo $PORT,$RDBNAME
    mkdir /var/lib/redis/$PORT\-$RDBNAME
    cp -f /etc/redis/6379.conf /etc/redis/$PORT\-$RDBNAME.conf
    cp -f /etc/init/redis_6379.conf /etc/init/redis_$PORT\-$RDBNAME.conf 
    sed -i "s:pidfile /var/run/redis_6379.pid:pidfile /var/run/redis_$PORT-$RDBNAME.pid:g" /etc/redis/$PORT\-$RDBNAME.conf
    sed -i "s:/var/lib/redis/6379:/var/lib/redis/$PORT-$RDBNAME:g" /etc/redis/$PORT\-$RDBNAME.conf
    sed -i "s:syslog-ident redis(6379):syslog-ident redis($PORT-$RDBNAME):g" /etc/redis/$PORT\-$RDBNAME.conf
    sed -i "s/6379/$PORT/g" /etc/redis/$PORT\-$RDBNAME.conf
    sed -i "s/dump.rdb/$RDBNAME.rdb/g" /etc/redis/$PORT\-$RDBNAME.conf
    sed -i "s:6379.conf:$PORT\-$RDBNAME.conf:g" /etc/init/redis_$PORT\-$RDBNAME.conf
  done < /etc/redis/redislist.txt

redis start (/etc/redis/redislist.txt)

  while read file
  do
    RDBNAME=`echo $file|cut -d "," -f 1`
    PORT=`echo $file|cut -d "," -f 2`
    echo $PORT,$RDBNAME 
    start redis_$PORT\-$RDBNAME
  done < /etc/redis/redislist.txt 
  ps -ef|grep redis

redis stop (/etc/redis/redislist.txt)

  while read file
  do
    RDBNAME=`echo $file|cut -d "," -f 1`
    PORT=`echo $file|cut -d "," -f 2`
    echo $PORT,$RDBNAME 
    stop redis_$PORT\-$RDBNAME
  done < /etc/redis/redislist.txt 
  ps -ef|grep redis

redis 접속 (/etc/redis/redislist.txt)

  #rdb File Check 
   
  while read file
  do
    RDBNAME=`echo $file|cut -d "," -f 1`
    PORT=`echo $file|cut -d "," -f 2`
    echo $PORT,$RDBNAME 
    redis-cli -p $PORT save
    ls /var/lib/redis/$PORT-*
  done < /etc/redis/redislist.txt

for port in netstat -napolt|grep LISTEN|grep redis-server|grep -v tcp6|cut -d ":" -f 2|awk '{print $1}'; do echo "Redis instance port : $port";redis-cli -h 127.0.0.1 -p $port info|grep -e ^role -e ^master -e ^slave;echo " "; done

Leave 레디스 프로세스 멀티 실행 to:

Written by

Read more #redis posts


Best Posts From 행복님

We have not curated any of jaerakson's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From 행복님