블로그는 나의 힘!
[ Programing ]/Redis2022. 10. 20. 18:18

## Redis wget 으로 받아 설치.

# Redis 다운로드 (0.0.0 -> 원하는 버전으로)
] $ wget https://download.redis.io/releases/redis-0.0.0.tar.gz

#  압축 해제 
] $ tar xzvf redis-0.0.0.tar.gz

#  의존성 패키지 설치
] $ cd ./redis-0.0.0/deps
~/redis-0.0.0/deps] $ make hiredis jemalloc linenoise lua

#  Redis 설치
~/redis-0.0.0/deps] $ cd ../
~/redis-0.0.0] $ make

※ jemalloc 오류 시
] $ yum install jemalloc
※ make[1]: cc: Command not found 라는 메시지와 함께 에러가 난다면 gcc의 설치를 먼저 진행
] $ yum install gcc
※ systemd-devel (redis 테스트)
] $ yum install systemd-devel



######################################
# 수동 설정으로 작성 시
] $ cd /etc/redis

# 디렉토리 없다면 생성
/etc] $ sudo mkdir redis

# config 항목 수정
/etc/redis] $ vi. [포트].conf
-------------------------------------------------
bind     0.0.0.0    # 127.0.0.1 -> 0.0.0.0 로컬 호스트에서 모든 호스트로 접속 가능하도록
protected-mode     no     # yes : bind 미지정시 로컬로만 접속 / no : bind 미지정시 모든 IP 접속
port     [포트]
tcp-backlog     511
timeout     0
tcp-keepalive     300
daemonize     yes     # 데몬 실행 사용
supervised     no
pidfile     /var/run/redis_[포트].pid
loglevel     notice
logfile     /var/log/redis_[포트].log
databases     16
always-show-logo     yes
# save     900 1      # 디스크 저장 주기 설정. 900초에 1개 이상 데이터 변경 시 스냅샷
# save     300 10
# save     60 10000
save     3600 1

stop-writes-on-bgsave-error     yes
rdbcompression     yes
rdbchecksum     yes
dbfilename     dump.rdb
dir     /var/lib/redis/[포트]
slave-serve-stale-data     yes
slave-read-only     yes
repl-diskless-syno     no
repl-diskless-sync-delay     5
repl-disable-tcp-nodelay     no
slave-priority     100
lazyfree-lazy-eviction     no
lazyfree-lazy-expire     no
lazyfree-lazy-server-del     no
slave-lazy-flush     no
appendonly     yes     # AOF설정 (append-only file  저장 유무 (RDB OFF에 Cluster 롤 체인지 시 데이터 유실 가능))
sppendfilename     "appendonly.aof"
appenddirname     "appendonlydir"

appendfsync     everysec       # 동기화 > always : 매번, IO 높음 / everysec : 매초 / no : OS 넘김, 데이터 유실 높음
no-appendfsync-on-rewrite     no
auto-aof-rewrite-percentage     100
auto-aof-rewrite-min-size     64mb
aof-load-truncated     yes
aof-use-rdb-preamble     no
lua-time-limit     5000
cluster-enabled     yes     # 클러스터 활성화
cluster-config-file     nodes-[포트].conf      # 클러스터 저장 파일 지정
cluster-node-timeout     3000     # 클러스터 노드 다운 시간 체크 3000 -> 3초
cluster-require-full-coverage     yes
slowlog-log-slower-then     10000
slowlog-max-len     128
latency-monitor-threshold     0
notify-keyspace-events     ""
hash-max-ziplist-entries     512
hash-max-ziplist-value     64
last-max-ziplist-size     -2
list-compress-depth     0
set-max-intset-entries     512
zset-max-ziplist-entries     512
zset-max-ziplist-value     64
hll-sparse-max-bytes     3000
activerehashing     yes
client-output-buffer-limit     normal 0 0 0
client-output-buffer-limit     slave 256mb 64mb 60
client-output-buffer-limit     pubsub 32mb 8mb 60
hz     10
aof-rewrite-incremental-fsync     yes
-------------------------------------------------

# 권한 수정
/etc/redis] $ sudo chkmod 644 [포트].conf

# redis 서비스파일 설정
/etc/redis] $ cd ../init.d
/etc/init.d] $ vi redis_[포트]
-------------------------------------------------
CLIEXEC = /[Redis 서버 파일 경로]/redis-cli
PIDFILE = /var/run/redis_[포트].pid
CONF = "/etc/redis/[포트].conf"
REDISPORT = "[포트]"

EXEC = /[Redis 서버 파일 경로]/redis-server
CLIEXEC = /[Redis 서버 파일 경로]/redis-cli
PIDFILE = /var/run/redis_[포트].pid
CONF = "/etc/redis/[포트].conf"
REDISPORT = "[포트]"

case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
            echo "$PIDFILE exists, process is already running or crashed"
        else
            echo "Starting Redis server..."
            $EXEC $CONF
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
            echo "$PIDFILE does not exist, process is not running"
        else
            PID=$(cat $PIDFILE)
            echo "Stopping ..."
            $CLIEXEC -p $REDISPORT shutdown
            while [ -x /proc/${PID} ]
            do
                echo "Waiting for Redis to shutdown ..."
                sleep 1
            done
            echo "Redis stopped"
        fi
        ;;
    status)
        PID=$(cat $PIDFILE)
        if [ ! -x /proc/${PID} ]
        then
            echo 'Redis is not running'
        else
            echo "Redis is running ($PID)"
        fi
        ;;
    restart)
        $0 stop
        $0 start
        ;;
    *)
        echo "Please use start, stop, restart or status as first argument"
        ;;
esac
-------------------------------------------------

# 권한 수정
/etc/init.d] $ sudo chkmod 755 redis_[포트]

# 덤프 & aof 저장 위치 설정
] $ cd /var/lib/redis

# 사용할 포트 이름으로 된 디렉토리 없다면 생성
/var/lib/redis] $ mkdir [포트]
######################################


######################################
## 클러스터 설정
# 클러스터 마스터 등록
~/redis-0.0.0/src] $ ./redis-cli --cluster create [MasterIP]:6379 [MasterIP]:6380 [MasterIP]:7381

# 클러스터 슬레이브 등록 (슬레이브 없다면 미등록)
~/redis-0.0.0/src] $ ./redis-cli --cluster add-node [SlaveIP]:7379 [MasterIP]:6379 -- cluster-slave
~/redis-0.0.0/src] $ ./redis-cli --cluster add-node [SlaveIP]:7380 [MasterIP]:6380 -- cluster-slave
~/redis-0.0.0/src] $ ./redis-cli --cluster add-node [SlaveIP]:6381 [MasterIP]:7381 -- cluster-slave

# 클러스터 설정 확인
~/redis-0.0.0/src] $ ./redis-cli -h [MasterIP] -p 6379 -c
[MasterIP]:6379> cluster info     -> 클러스터 기기 정보 확인.
[MasterIP]:6379> cluster nodes     -> 클러스터 마스터&슬레이브 확인.
[MasterIP]:7000> cluster slots     -> 클러스터 슬롯 그룹 정보 확인
[MasterIP]:6379> exit


## 클러스터 삭제 및 재 설정 필요시.
# 클러스터 삭제 -클러스터 재 구동 시 관련 파일 삭제 후 설치 레디스 설정 재진행.
-- 레디스 실행 정지.
] $ /etc/init.d/redis_[포트] stop
-- Dump, Cluster 데이터 정보 삭제.
] $ sudo rm -r /var/lib/redis/[포트]
-- 레디스 실행 삭제.
] $ sudo rm -r /etc/init.d/redis_[포트]
-- config 설정 위치.
] $ sudo rm -r /etc/redis/[포트].conf
######################################


## 서버 중지 / 시작
] $ sudo /etc/init.d/redis_6379 stop
] $ sudo /etc/init.d/redis_6380 stop
] $ sudo /etc/init.d/redis_6381 stop
] $ sudo /etc/init.d/redis_7379 stop
] $ sudo /etc/init.d/redis_7380 stop
] $ sudo /etc/init.d/redis_7381 stop

] $ sudo /etc/init.d/redis_6379 start
] $ sudo /etc/init.d/redis_6380 start
] $ sudo /etc/init.d/redis_6381 start
] $ sudo /etc/init.d/redis_7379 start
] $ sudo /etc/init.d/redis_7380 start
] $ sudo /etc/init.d/redis_7381 start


# redis 서버 실행 (X)

$ cd [redis 설치 경로]/redis-0.0.0/src
~/redis-0.0.0/src] $ sudo ./redis-server -p [포트].conf (설정한 port 만큼 구동)

# 프로세스 구동 여부 확인
] $ ps -ef | grep redis

# 클라이언트 접속 (redis-cli -h [레디스 서버의 IP주소] -p [포트번호] -a [비밀번호])
~/redis-0.0.0/src] $ ./redis-cli -h [IP] -p [Port]

# 동작 테스트
[IP]:[Port]> ping   ("PONG" 나오면 성공)
[IP]:[Port]> set testKey testValue
[IP]:[Port]> get testKey   ("testValue" 나오면 성공)


# 기타 - 위치
-- PID 위치.
] $ /var/run/
-- Dump, Cluster 데이터 정보 위치.
] $ /var/lib/redis/
-- Log 위치.
] $ /var/log/
-- redis-cli, redis-server 위치.
] $ /home1/[사용자]/redis-0.0.0/src
-- 실행 위치.
] $ /etc/init.d/
-- config 설정 위치.
] $ /etc/redis/

'[ Programing ] > Redis' 카테고리의 다른 글

Redis 데이터 영구 저장과 동기화 RDB, AOF  (0) 2025.02.20
Redis 레퍼런스.  (0) 2024.05.21
[Redis] Reference  (0) 2023.03.02
[Linux] Redis Cluster 설정  (0) 2022.10.20
Redis 명령어  (0) 2021.04.21
Posted by Mister_Q