DB/MemoryDB

Redis 설치 하기 (Replica)

Dragonfog.net 2021. 7. 11. 11:24
반응형

Redis replica 설치 

. 요즘 캐시로 메모리 디비를 많이 사용 하다 보니 이것저것 알아보다 Redis를 설치하기로 했다.

간단하게 Redis replica 설치에 대한 기록을 남긴다.

 

 

우선 설치에 필요한 package를 설치 해 준다.

 

$ sudo yum install gcc gcc-c++ wget -y

Redis를 다운로드 받는다 최신버전은 아래 사이트에서 받을수 있다.

다운로드 주소 : https://redis.io/download

 

Redis

*Download Stable releases liberally follow the usual major.minor.patch semantic versioning schema. *Other versions Old (6.0) Redis 6.0 introduces SSL, the new RESP3 protocol, ACLs, client side caching, diskless replicas, I/O threads, faster RDB loading, ne

redis.io

. Download (2021.07.11 일 기준 ver 6.2)

$ wget http://download.redis.io/redis-stable.tar.gz

or

$ curl -O -L wget http://download.redis.io/redis-stable.tar.gz

 

설치전에 서비스 구성에 필요한 디렉토리들을 생성해준다. (필요에 따라 디렉토리를 구성해 주면됨)

디렉토리구조

redis/
├── bin          --> redis 운영에 필요한 command link 파일 위치
├── conf        --> redis 운영에 필요한 config 파일
├── dump      --> db파일 위치
├── logs         --> redis 로그 파일
├── tmp         --> 임시파일 공간
└── var    
    └── run      --> pid 파일

 

mkdir -p /home/dragonfog/server/redis/dump
mkdir -p /home/dragonfog/server/redis/logs
mkdir -p /home/dragonfog/server/redis/var
mkdir -p /home/dragonfog/server/redis/var/run
mkdir -p /home/dragonfog/server/redis/bin
mkdir -p /home/dragonfog/server/redis/conf
mkdir -p /home/dragonfog/server/redis/tmp

 

 

다운로드 받은 파일을 압축 해제 후 적당한 위치로 mv 한다. 그리고 make로 컴파일 진행

$ tar xvfz redis-stable.tar.gz 
$ mv redis-stable /home/dragonfog/server/redis/redis-server
$ cd /home/dragonfog/server/redis/redis-server

$ make

정상적으로 컴파일이 완료되면 아래와 같은 메세지를 볼수 있습니다.

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

컴파일이 정상적으로 진행되셨으면 해당 위치의 ./src 이하에 redis 관련 binary 파일들이 생성됩니다.

이제 컴파일하여 생성된 파일들에 대하여 아까 생성해둥 디렉토리에 link 파일을 생성해줍니다.

 

#링크 생성
$ cd /home/dragonfog/server/redis/bin/
$ ln -sf /home/dragonfog/server/redis/redis-server/src/redis-cli redis-cli
$ ln -sf /home/dragonfog/server/redis/redis-server/src/redis-server redis-server
$ ln -sf /home/dragonfog/server/redis/redis-server/src/redis-trib.rb redis-trib.rb
$ ln -sf /home/dragonfog/server/redis/redis-server/src/redis-benchmark redis-benchmark
$ ln -sf /home/dragonfog/server/redis/redis-server/src/redis-sentinel redis-sentinel

 

이제 운영을 위하여 OS parameter를 권장 설정에 맞추어 수정해줍니다.

 

# vi /etc/rc.local (추가)

## Redis Setting
echo never > /sys/kernel/mm/transparent_hugepage/enabled

 

# vi /etc/security/limits.conf  --> 아래추가
dragonfog            soft    nofile          65536
dragonfog            hard    nofile          65536
dragonfog            soft    nproc           131072
dragonfog            hard    nproc           131072

 

vi /etc/sysctl.conf  --> 아래추가
#redis
vm.overcommit_memory = 1
net.core.somaxconn = 65535

 

위 내용 적용후 reboot   (# sysctl -p 명령어를 실행해줘도 됨) 

바로적용 하고자 하면 아래와 같이 실행
# sysctl vm.overcommit_memory=1

 

Redis Config  설정

Master 172.30.1.11 7001

Slave 172.30.1.11 7002

Sentinel 172.30.1.11 27001

 

우선 아래 컨피그를  아래 위치에 생성해준다.

$ cd ~/server/redis/conf

$ vi redis_7001.conf

$ vi redis_7002.conf

$ vi sentinel_27001.conf

컨피그는 하단 내용 참고 해서 입력해준다.

 

.bash_profile의 아래 부분에 path(/home/dragonfog/server/redis/bin)를 추가 해준다.

PATH=$PATH:$HOME/.local/bin:$HOME/bin:/home/dragonfog/server/redis/bin

 

path 추가후 설정을 적용해 준다.

$ source .bash_profile

 

여기까지 완료되었으면 각 Redis (Master/slave), Sentinel을 기동한다.

 

기동은 아래와 같이 진행하면됩니다.

.Redis기동

redis-server ./{설정파일}

$ redis-server ~/server/redis/conf/redis_7001.conf
$ redis-server ~/server/redis/conf/redis_7002.conf

 

Sentinel기동

$ redis-sentinel ~/server/redis/conf/sentinel_27001.conf

 

Redis 접속후 체크

$ redis-cli -p 7001 (Master) - role:master / slave : 172.30.1.11:7002

127.0.0.1:7001> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=172.30.1.11,port=7002,state=online,offset=5987,lag=1
master_failover_state:no-failover
master_replid:0ad1e369fe3ed56107a505eab561322ec12919b2
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:6126
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:6126

 

 redis-cli -p 7002  (SLAVE)  - role:slave / master : 172.30.1.11:7001
127.0.0.1:7002> info replication
# Replication
role:slave
master_host:172.30.1.11
master_port:7001
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:14648
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:0ad1e369fe3ed56107a505eab561322ec12919b2
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14648
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14648

 

 

Sentinel 

$ redis-cli -p 27001  

127.0.0.1:27001> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=redis_7001,status=ok,address=172.30.1.11:7001,slaves=1,sentinels=1

 

 

failover TEST (Master 를 죽였을때 Slave로 넘어가는지 본다.)

$ redis-cli -p 7001 shutdown   (master shutdown)

$ redis-cli -p 7002 info replication  

:role이 master로 변경된것을 볼수 있다.

 redis-cli -p 7002 info replication
# Replication
role:master
connected_slaves:0
master_failover_state:no-failover
master_replid:c09a90760f216211064584e93f9675d0ae363c1e
master_replid2:0ad1e369fe3ed56107a505eab561322ec12919b2
master_repl_offset:29657
second_repl_offset:27550
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:29657

 

$ redis-server ~/server/redis/conf/redis_7001.conf

:7001 redis를 기동하고 보면 아래와 같이 기존 마스터인 7001 redis가 slave로 붙어 있는것을 볼수 있다.

redis-cli -p 7002 info replication
# Replication
role:master
connected_slaves:1
slave0:ip=172.30.1.11,port=7001,state=online,offset=33725,lag=0
master_failover_state:no-failover
master_replid:c09a90760f216211064584e93f9675d0ae363c1e
master_replid2:0ad1e369fe3ed56107a505eab561322ec12919b2
master_repl_offset:33864
second_repl_offset:27550
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:33864

 

 

1. Master (7001 포트)


protected-mode no
port 7001
tcp-backlog 511
timeout 0
tcp-keepalive 0
daemonize yes
supervised no
pidfile "/home/dragonfog/server/redis/var/run/redis_7001.pid"
loglevel notice
logfile "/home/dragonfog/server/redis/logs/redis_7001.log"
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename "dump_7001.rdb"
dir "/home/dragonfog/server/redis/dump"
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly_7001.aof"
appendfsync no
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
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
maxmemory 1gb

 

Slave 설정 (7002 포트)


protected-mode no
port 7002
tcp-backlog 511
timeout 0
tcp-keepalive 0
daemonize yes
supervised no
pidfile "/home/dragonfog/server/redis/var/run/redis_7002.pid"
loglevel notice
logfile "/home/dragonfog/server/redis/logs/redis_7002.log"
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename "dump_7002.rdb"
dir "/home/dragonfog/server/redis/dump"
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly_7002.aof"
appendfsync no
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
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
maxmemory 1gb
slaveof 172.30.1.11 7001

 

Sentinel (27001포트)


port 27001
dir "/home/dragonfog/server/redis/tmp"
daemonize yes
logfile "/home/dragonfog/server/redis/logs/sentinel_27001.log"
pidfile "/home/dragonfog/server/redis/var/run/sentinel_27001.pid"
sentinel monitor redis_7001 172.30.1.11 7001 1
sentinel down-after-milliseconds redis_7001 3000
sentinel parallel-syncs redis_7001 1
sentinel failover-timeout redis_7001 10000

 

 

systemd script 설정

 

vi /usr/lib/systemd/system/redis_7001.service

[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
User=dragonfog
Group=dragonfog
Type=forking
ExecStart=/home/dragonfog/server/redis/bin/redis-server /home/dragonfog/server/redis/conf/redis_7001.conf
ExecStop=/home/dragonfog/server/redis/bin/redis-cli -p 7001 shutdown

[Install]
WantedBy=multi-user.target

 

vi /usr/lib/systemd/system/redis_7002.service

[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
User=dragonfog
Group=dragonfog
Type=forking
ExecStart=/home/dragonfog/server/redis/bin/redis-server /home/dragonfog/server/redis/conf/redis_7002.conf
ExecStop=/home/dragonfog/server/redis/bin/redis-cli -p 7002 shutdown

[Install]
WantedBy=multi-user.target

 

vi /usr/lib/systemd/system/sentinel_27001.service

[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
User=dragonfog
Group=dragonfog
Type=forking
ExecStart=/home/dragonfog/server/redis/bin/redis-sentinel /home/dragonfog/server/redis/conf/sentinel_27001.conf
ExecStop=/home/dragonfog/server/redis/bin/redis-cli -p 27001 shutdown

[Install]
WantedBy=multi-user.target

 

 

운영으로 사용하실 경우에는  Redis Persistence 옵션을 disabled 하고 사용해주세요

반응형

'DB > MemoryDB' 카테고리의 다른 글

REDIS KEY 체크 하기  (0) 2023.05.11
REDIS TTL 없는키 확인 하기  (0) 2023.05.11
redis 보안 [rename-command]  (0) 2023.01.13
Redis 백업 스크립트  (0) 2022.03.04
Memcached 설치 하기  (0) 2021.07.09