본문 바로가기
오픈소스/Redis

[Redis] Redis 기본 개념 및 설치 구성

by sangyeon 2021. 10. 28.
728x90

1. Redis란?

Remote Dictonary Server의 약자로 직역하면 '원격 사전 서버' 이다. 

사전이란 우리가 어떤 '단어'에 대한 '의미'를 보여주는 것이다. 

다시 말하자면 Redis는 key(단어), value(의미) 형태로 데이터가 저장되어 있는 원격의 서버라고 볼 수 있다.

 

Redis는 아래와 같은 특징을 가지고 있다.

 

- 휘발성이며 영속성을 가진 Key-Value 형태의 in-memory 저장소

- NOSQL이다. (비관계형 DB : 키-밸류나 컬럼, 문서 형식의 데이터 모델)

  별로의 쿼리 없이 Key 값으로 Value를 찾아 사용 가능.

- <String, Set, Sorted Set, Hash, List> 5가지 데이터 형식을 지원

- 메모리에 데이터를 read/write 하기 때문에 매우 빠른 속도를 보장

- Cache 방식을 통한 DB 부하 감소

- Snapshotting(RDB) 방식을 사용, 순간적으로 메모리에 있는 내용을 디스크 전체에 복구

- AOF(Append On File) 방식을 사용, Redis의 모든 read/write 이벤트를 로그 파일에 기록

 

 

2. Redis Installation on OL7

OS : Linux sydev 4.14.35-1818.3.3.el7uek.x86_64

설치 가이드는 redis 공식 사이트에서 확인하고 진행 함

https://redis.io/topics/quickstart

 

Redis Quick Start – Redis

*Redis Quick Start This is a quick start document that targets people without prior experience with Redis. Reading this document will help you: Download and compile Redis to start hacking. Use redis-cli to access the server. Use Redis from your application

redis.io

 

2-1. 필수 패키지 설치

yum을 통해 Redis 컴파일 설치 시 필요한 "gcc-c++" 패키지를 설치한다.

$ sudo yum -y install gcc-c++

 

2-2. wget을 이용하여 설치 파일 다운로드 및 설치

https://redis.io/download 에서 최신 버전의 redis를 다운받아 설치해도 무방하다.

[root@sydev redis]# wget http://download.redis.io/redis-stable.tar.gz
--2021-10-27 10:31:52--  http://download.redis.io/redis-stable.tar.gz
Resolving download.redis.io (download.redis.io)... 45.60.125.1
Connecting to download.redis.io (download.redis.io)|45.60.125.1|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2527624 (2.4M) [application/octet-stream]
Saving to: ‘redis-stable.tar.gz’

100%[================================================================================================================================================>] 2,527,624   6.14MB/s   in 0.4s   

2021-10-27 10:31:53 (6.14 MB/s) - ‘redis-stable.tar.gz’ saved [2527624/2527624]
[root@sydev redis]# tar xvzf redis-stable.tar.gz
redis-stable/
redis-stable/CONTRIBUTING
redis-stable/src/
redis-stable/src/geohash.h
..(생략)


[root@sydev redis]# cd redis-stable/
[root@sydev redis]# make && make install
...설치 진행

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

    INSTALL redis-server
    INSTALL redis-benchmark
    INSTALL redis-cli
make[1]: Leaving directory `/home/redis/redis-stable/src'

정상적으로 설치가 완료되었다면

"Hint: It's a good idea to run 'make test' ;)" 메세지를 볼 수 있다.

 

컴파일이 다 된 후에 Redis 내의 src 디렉토리에는 Redis의 실행 파일들이 생긴다.

  • redis-server - Redis 서버 자체
  • redis-sentinel - Redis Sentinel 실행 파일(모니터링 및 장애 조치)
  • redis-cli - Redis와 통신하기 위한 명령줄 인터페이스 유틸리티
  • redis-benchmark - Redis 성능을 확인하는데 사용
  • redis-check-aof  redis-check-rdb ( 3.0 이하의 redis-check-dump ) - 데이터 파일이 손상된 경우에 유용한 파일

 

3. Redis Replication(Master/Slave) 구성

3-1. master/slave 생성

실행. ${REDIS_HOME}/utils/install_server.sh

redis에서 기본으로 제공하는 install_server.sh를 사용하여 구성한다.

해당 쉘 스크립트 실행 전에 수정이 필요하다. 아래 라인을 주석 처리

76 #bail if this system is managed by systemd
77 #_pid_1_exe="$(readlink -f /proc/1/exe)"
78 #if [ "${_pid_1_exe##*/}" = systemd ]
79 #then
80 #       echo "This systems seems to use systemd."
81 #       echo "Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!"
82 #       exit 1
83 #fi

이제 install_server.sh를 실행 한다.

[root@sydev utils]# ./install_server.sh 
Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379] 6380

- 포트 설정(이 예제에서는 master-6379, slave1-6380, slave2-6381)로 설정한다.
- 이후에 conf 파일/ 로그 파일/ 작업경로/ 실행 경로등을 설정 해준다.

Please select the redis config file name [/etc/redis/6380.conf]            
Selected default - /etc/redis/6380.conf
Please select the redis log file name [/var/log/redis_6380.log] 
Selected default - /var/log/redis_6380.log
Please select the data directory for this instance [/var/lib/redis/6380] 
Selected default - /var/lib/redis/6380
Please select the redis executable path [/usr/local/bin/redis-server] 
Selected config:
Port           : 6380
Config file    : /etc/redis/6380.conf
Log file       : /var/log/redis_6380.log
Data dir       : /var/lib/redis/6380
Executable     : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli

Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6380.conf => /etc/init.d/redis_6380
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!

추가적으로 slave2도 생성해 준다.

 

이제 redis를 모두 기동해보자.

[root@sydev redis]# cd /etc/redis
[root@sydev redis]# redis-server ./6379.conf & redis-server ./6380.conf & redis-server ./6381.conf 

...

[root@sydev redis]# ps -ef|grep redis
root     21796     1  0 11:05 ?        00:00:00 redis-server 127.0.0.1:6379
root     21797     1  0 11:05 ?        00:00:00 redis-server 127.0.0.1:6380
root     21806     1  0 11:05 ?        00:00:00 redis-server 127.0.0.1:6381

 

3-2. master password 설정

master 노드 기동 중지 시 안정성을 위해 password 옵션을 넣어준다.

/etc/redis/6379.conf 파일에서 requirepass 부분 주석을 해제해주고 패스워드를 설정해준다.

898 #
899 # The requirepass is not compatable with aclfile option and the ACL LOAD
900 # command, these will cause requirepass to be ignored.
901 #
902 requirepass foobared
903 

추가적으로 

/etc/init.d/redis_6379 파일에서 stop 명령줄에 아래와 같이 패스워드 옵션을 추가한다

36     stop)
37         if [ ! -f $PIDFILE ]
38         then
39             echo "$PIDFILE does not exist, process is not running"
40         else
41             PID=$(cat $PIDFILE)
42             echo "Stopping ..."
43             $CLIEXEC -p $REDISPORT -a foobared shutdown
44             while [ -x /proc/${PID} ]
45             do
46                 echo "Waiting for Redis to shutdown ..."
47                 sleep 1
48             done
49             echo "Redis stopped"
50         fi

 

3-3. slave1, slave2에 Replication 설정

6380.conf와 6381.conf에 master 노드에 대한 정보와 masterauth 설정에 패스워드를 추가한다.

[root@sydev redis]# cd /etc/redis/
479 replicaof 127.0.0.1 6379
480 
481 # If the master is password protected (using the "requirepass" configuration
482 # directive below) it is possible to tell the replica to authenticate before
483 # starting the replication synchronization process, otherwise the master will
484 # refuse the replica request.
485 #
486 # masterauth <master-password>
487 masterauth foobared

 

3-4. master와 slave 조인 확인

6379 로그 /var/log/redis_6379.log

2382:M 28 Oct 2021 14:44:19.664 * Starting BGSAVE for SYNC with target: disk
2382:M 28 Oct 2021 14:44:19.665 * Background saving started by pid 15410
15410:C 28 Oct 2021 14:44:19.668 * DB saved on disk
15410:C 28 Oct 2021 14:44:19.670 * RDB: 2 MB of memory used by copy-on-write
2382:M 28 Oct 2021 14:44:19.708 * Background saving terminated with success
2382:M 28 Oct 2021 14:44:19.709 * Synchronization with replica 127.0.0.1:6380 succeeded

2382:M 28 Oct 2021 14:45:59.505 * Replica 127.0.0.1:6381 asks for synchronization
2382:M 28 Oct 2021 14:45:59.505 * Full resync requested by replica 127.0.0.1:6381
2382:M 28 Oct 2021 14:45:59.505 * Starting BGSAVE for SYNC with target: disk
2382:M 28 Oct 2021 14:45:59.506 * Background saving started by pid 15554
15554:C 28 Oct 2021 14:45:59.517 * DB saved on disk
15554:C 28 Oct 2021 14:45:59.518 * RDB: 4 MB of memory used by copy-on-write
2382:M 28 Oct 2021 14:45:59.609 * Background saving terminated with success
2382:M 28 Oct 2021 14:45:59.610 * Synchronization with replica 127.0.0.1:6381 succeeded

 

3-5. 데이터 복제 테스트

master에서 입력한 데이터를 slave1, slave2에서 확인

[root@sydev redis]# redis-cli -p 6379 -a foobared
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> set 1 test
OK


[root@sydev redis]# redis-cli -p 6380
127.0.0.1:6380> get 1
"test"

[root@sydev redis]# redis-cli -p 6381
127.0.0.1:6381> get 1
"test"

> 데이터를 넣을 때는 set [key] [value] 형식으로 작성하며, 데이터를 꺼내올 때는 get [key] 형식으로 데이터를 가져온다. 

데이터 복제방식은 replicated로 모든 클러스터 노드에 동일한 데이터를 저장한다.

추가적으로 slave 노드들은 무조건 read만 가능하다.

write하려고 할 시에는 아래와 같이 에러가 발생함.

127.0.0.1:6380> set 2 hsy
(error) READONLY You can't write against a read only replica.

 

 

이상으로 redis 설치 및 Replicated 구성을 해보았다.

다음 장에서는 좀 더 상세한 config 설정(Sentinel, Clustering)을 해보아야 겠다.

 

 

728x90