본문 바로가기
infra/redis

[Redis] 레디스 설치해보기, 그리고 몇 가지 경고 해결

by hjhello423 2019. 12. 9.

 

CentOS 환경에서 레디스를 설치해 보겠습니다.
레디스를 설치하는 방법은 매우 간단해서 한 단계식 따라 하면 금방 실행 모습을 볼 수 있습니다!

글 아래쪽에서는 redis 설지후 나타나는 경고 메시지를 해결해 보았습니다.
참고용으로만 봐주세요.

 


다운로드

일단 redis 파일을 다운로드해 보겠습니다.
링크로 이동하면 pre 버전과 stable 버전에 대한 링크가 나옵니다.

pre버전에는 새로운 기능들이 많지만 안정화 버전 사용을 위해 stable의 링크에서 다운로드해 주면 됩니다. (선택사항)

다운로드 링크를 클릭해서 파일을 직접 다운로드하거나, wget을 이용하여 다운로드해 주면 됩니다.
wget을 이용한다면 아래와 같이 파일을 다운로드해 주세요.

다운로드 링크가 http://download.redis.io/releases/redis-5.0.7.tar.gz 일 때 wget을 이용한 파일을 다운로드

[itsme@localhost ~]$ wget http://download.redis.io/releases/redis-5.0.7.tar.gz
--2019-12-09 21:23:17--  http://download.redis.io/releases/redis-5.0.7.tar.gz
Resolving download.redis.io (download.redis.io)... 109.74.203.151
Connecting to download.redis.io (download.redis.io)|109.74.203.151|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1984203 (1.9M) [application/x-gzip]
Saving to: ‘redis-5.0.7.tar.gz’

redis-5.0.7.tar.gz                100%[==========================================================>]   1.89M   330KB/s    in 6.5s    

2019-12-09 21:23:25 (298 KB/s) - ‘redis-5.0.7.tar.gz’ saved [1984203/1984203]

 


설치

이제 다운로드 한 tar 파일을 이용해 컴파일을 진행해 보겠습니다.
먼저 아래 과정을 진행하기 위해 make 모듈을 설치해 줍니다.

sudo yum install make gcc

 

이제 tar 파일의 압축을 풀고, 컴파일 과정을 진행해 줍니다.

$ tar xzf redis-5.0.7.tar.gz
$ cd redis-5.0.7

$ make
$ make test
$ sudo make install

자! 이제 설치가 끝났습니다!
아주 간단하죠?

설치가 무사히 완료됐다면 redis 관련 명령어를 사용할 수 있습니다.

  • redis-benchmark
  • redis-check-aof
  • redis-check-rdb
  • redis-cli
  • redis-sentinel
  • redis-server

 

그럼 이제 잘 설치됐는지 실행해보겠습니다.
redis-server를 이용하여 실행해 주면 아래와 같은 화면이 나타납니다.

$ redis-server 

9372:C 09 Dec 2019 21:42:16.306 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
9372:C 09 Dec 2019 21:42:16.307 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=9372, just started
9372:C 09 Dec 2019 21:42:16.307 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
9372:M 09 Dec 2019 21:42:16.307 # You requested maxclients of 10000 requiring at least 10032 max file descriptors.
9372:M 09 Dec 2019 21:42:16.307 # Server can't set maximum open files to 10032 because of OS error: Operation not permitted.
9372:M 09 Dec 2019 21:42:16.307 # Current maximum open files is 4096. maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclients increase 'ulimit -n'.
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 5.0.7 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 9372
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

9372:M 09 Dec 2019 21:42:16.330 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
9372:M 09 Dec 2019 21:42:16.330 # Server initialized
9372:M 09 Dec 2019 21:42:16.330 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
9372:M 09 Dec 2019 21:42:16.330 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
9372:M 09 Dec 2019 21:42:16.330 * Ready to accept connections

PID가 9372이고 port는 6379를 사용하는 redis가 실행되었습니다.

이상태에서 새로운 세션을 하다 더 열어서 redis-cli를 이용해 ping을 보내고 응답이 오는지 확인해 보면 됩니다.

$ redis-cli ping
PONG

이렇게 ping을 보내면 pong 하고 답변이 온다... 핑퐁핑퐁. 하하하

 


경고 : The TCP backlog setting of 511 cannot be enforced

실행해 보면 WARN 메시지가 나오는 걸 확인할 수 있습니다.
아래와 같이 메시지가 뜰 거예요.

 WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.

listen backlog(소캣 Accept limit)이 기본으로 128로 설정되어 있어서 나타나는 경고 문구입니다.
redis에서 511로 설정하고자 했지만 시스템에서 128이 limit으로 제한되어 있어 redis 또한 128로 강제로 설정된다는 의미인데요.
해결을 위해 아래와 같이 net.core.somaxconn 값의 설정을 변경해 주면 됩니다. (net.core.somaxconn의 최대 값은 65535이다.)

이 부분은 서버의 tcp 성능을 튜닝할 수 있는 옵션이기도 합니다. 링크를 참고해 보시면 도움이 될 거예요.

$ sudo sysctl -w net.core.somaxconn=1024
net.core.somaxconn = 1024

$  echo "net.core.somaxconn=1024" >> /etc/sysctl.conf

아래의 방법 중 하나로 변경이 됐는지 확인해 보면 됩니다.

$ cat /etc/sysctl.conf 
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.core.somaxconn=1024



$ sysctl -a | grep somaxconn
net.core.somaxconn = 1024

 


경고 : overcommit_memory is set to 0

혹시나 아래와 같은 경고를 만날 수도 있습니다.

WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

overcommit은 메모리 관련된 설정으로 인해 생기는 경고입니다.
순간적으로 물리 메모리를 넘어서는 요청이 발생했을 때, 시스템에서 어떻게 처리를 할지 설정해주는 값입니다.
overcommit에 대해 잘 정리한 블로그가 있어 링크를 공유합니다.

 sysctl.conf 파일의 vm.overcommit_memory 값을 수정하여 상황에 맞게 적용하면 됩니다.

  • 0: (기본값) Linux 커널은 메모리를 overcommit 할 수 있습니다. 충분한 메모리를 사용할 수 있는지 알아내기 위해 heuristic algorithm이 적용됩니다.  
  • 1: Linux 커널은 항상 메모리를 overcommit 하고 사용 가능한 메모리가 충분한 지 확인하지 않습니다. 이는 메모리 부족 상황의 위험을 증가시킵니다, 하지만 memory-intensive workloads를 개선합니다.
  • 2: Linux 커널은 메모리를 오버 커밋하지 않고 overcommit_ratio에 정의된 만큼만 메모리를 할당합니다.

 


참조 

redis5 doc :redisgate.kr/redis/introduction/redis_release5.php

over commit : engineering.pivotal.io/post/virtual_memory_settings_in_linux_-_the_problem_with_overcommit/

over commit : brunch.co.kr/@alden/16

net.core.somaxconn 옵션 : meetup.toast.com/posts/54

 

 

반응형

'infra > redis' 카테고리의 다른 글

[Redis] redis cluster 간단하게 구성해보기  (0) 2021.01.02

댓글