레디스 프로세스 멀티 실행

in #redis6 years ago (edited)

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

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

Sort:  

마지막 스크립트 서식이 깨져있네요 ㅎㅎ

#kr 태그를 달지 않으시면 한국어 사용자에게 글이 잘 노출되지 않습니다.
스팀잇에 익숙해지실 때까지 #kr-newbie 태그를 사용하시는 것을 추천드립니다.
하루에 한 번 #jjangjjangman 태그를 다시면 좋은 분이 오셔서 보팅을 해 주실겁니다.
#kr 커뮤니티에서 사용하는 태그 목록은 @myfan 님의 태그 정리글에서 확인하실 수 있습니다.

이지스팀잇 가이드북 을 보시면 앞으로 스팀잇 활동하시는데 도움이 되실겁니다.

감사합니다. ~

Coin Marketplace

STEEM 0.19
TRX 0.14
JST 0.030
BTC 60122.55
ETH 3199.29
USDT 1.00
SBD 2.43