Untitled

위처럼 단일 레디스 서버 구성은 dev환경에서 개발 과정에 무리가 없다.

다만 production환경에서 하나의 Redis Server로 운영하는 것은 굉장히 위험한 선택이므로 이번에는 Master-Slave(Replica)구성을 구축해보자.

레디스 클러스터 구성

서버명 IP:PORT
MasterNode 127.0.0.1:6379
Slave Node - 1 127.0.0.1:6380
Slave Node - 2 127.0.0.1:6381

구성은 위 구성으로 진행해보자. 진행하기 앞서 redis.conf파일을 작성해주어야 한다.

우선 MasterNode의 설정파일로 사용할 redis.conf이다.

>bind 127.0.0.1

>port 6379

>requirepass yourpassword

>daemonize  yes

이정도 설정으로 나머지는 기본설정을 사용한다.

이제는 나머지 SlaveNode의 설정파일 2개이다.

>bind 127.0.0.1
>port 6380(slave-1) / port 6381 (slave-2)
replicaof 127.0.0.1 6379
>requirepass yourpassword
>daemonize  yes

Replica 구성 확인

Untitled

Untitled

참고] redis.conf 설정값 정리

설정값 설명
daemonize [yes
port [number] default 6379 Connection 요청을 받을 포트를 지정하는 설정입니다.
bind [ip] default all interface Redis를 bind 할 특정 interface를 지정하는 설정입니다. 만약 명시하지 않으면 모든 interface로부터 들어오는 요청들을 listen합니다.
unixsocket [path], unixsocketperm [number]unixsocket /tmp/redis.sock / unixsocketperm 755 소켓으로 Redis Server를 붙게할 수 있는 설정입니다.
timeout [second] 클라이언트의 idle 시간이 해당 초만큼 지속되면 connection을 닫습니다.
0으로 지정할시 항상 connection을 열어둡니다.
loglevel [level - debug, verbose,notice,warning] 로그레벨지정
logfile [file path] 로그파일이 쓰여질 파일 경로를 지정합니다.
slaveof -> replicaof [master ip] [master port] 최근 버젼은 slaveof에서 replicaof로 변경됨.(어느 버전부터 바뀐지는 확인필요) Master-Slave 관계를 구성하기 위하여 Master의 replication Node가될 slave Node 설정파일에 Master Node의 ip와port 정보를 기입하는 설정이다.
즉, Master의 데이터가 slave에 replicate되게 된다.
masterauth [master-password] 만약 Master Node 설정파일에 Slave Node가 붙기 위한 암호요구를 하였다면(require pass [password]), Slave Node의 설정파일은 Master Node가 지정한 패스워드로 해당 설정을 해줘야한다.
slave-server-stale-data [yes
  1. [yes] - 유효하지 않은 데이터로 클라이언트 요청에 답한다.
  2. [no] - 몇몇 명령을 제외하고 요청에 대해 error로 응답한다. | | repl-ping-slave-perid [seconds] default 10 | Slave가 지정된 시간마다 ping을 날린다. | | repl-timeout [seconds] default 60 | 타임아웃 시간을 설정한다. 기본적으로 ping 주기보다 큰 시간을 주어야한다. | | require pass [password] | 클라이언트에게 패스워드를 요구한다.(Slave가 Master에 접근할때의 보안설정이기도하다) | | maxclient [size] | 한번에 연결될 수 있는 클라이언트의 연결수이다. | | maxmemory [bytes] | Redis Server의 최대 메모리 사용양을 설정한다. 만약 memory에 한계가 도달했다면 Redis는 선택된 eviction policy(제거정책)에 따라 key들을 제거한다. 만약 제거에 실패한다면 read-only에 대한 명령만 수행할 수있게 된다. | | maxmemory-policy [policy] | max memory 도달시 취할 정책을 설정한다
  1. volatile-ru : expire가 설정된 key들 중 LRU 알고리즘을 이용해 선택된 key를 제거한다.
  2. alleys-lru :  모든 keys에 대해 LRU 알고리즘을 적용해 제거한다.
  3. volatile-random : expire가 설정된 key들 중 임의의 key를 제거한다.
  4. alleys-random : 모든 keys중 랜덤하게 제거한다.
  5. volatile-ttl : expire time이 가장 적게 남은 key를 제거한다.
  6. noeviction : 어떠한 key도 제거하지 않는다. read-only작업만 허용하고 write와 그 밖에 명령은 error를 내뿜는다. | | appendonly [yes||no] | Redis는 기본적으로 비동기로 disk에 dataset의 dump를 남긴다. 이 방법은 최근 데이터가 손실되어도 큰 문제가 없다면 사용해도 좋지만, 하나라도 데이터의 유실을 원치 않는 상황이라면 yes로 설정하여 요청받는 모든 write를 disk에 쓰도록하면 된다.(default file appendonly.aof) | | appendfilename [file name] | append only 파일 이름을 설정한다. |

참고] homebrew를 이용하여 redis를 설치한 경우

Untitled