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
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)을 해보아야 겠다.
'오픈소스 > Redis' 카테고리의 다른 글
[Redis] Redis-Tomcat 연동 설정 및 인스턴스간 Session 유지 테스트 (0) | 2022.01.06 |
---|---|
[Redis] Redis 클러스터 구성(Redis Clustering) (0) | 2021.10.29 |
[Redis] 레디스 장애 복구를 위한 Sentinel 구성 (0) | 2021.10.29 |