ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Redis] 레디스 설치 #CentOS 8 #VMware
    database/redis 2021. 2. 12. 12:32

     

    REDIS 설치


     CentOS 8 환경에 redis를 설치하는 방법에 대한 포스팅입니다.

     

     redis.io아빠프로그래머 님의 포스팅을 참고하여 작성하였습니다. 

     초보 개발자 입장에서 설치중 막혔던 점이나 의문점을 같이 적었습니다.

     

    환경구성


    • VMware Fusion - Player Version 12.1.0
    • CentOS 8.3
    • Redis 5.0.4

     

    컴파일러 설치


     먼저 redis 설치시 필요한 컴파일러를 설치합니다. 관리자 권한이 필요합니다. 관리자로 변경합니다.

     

    $ su

     

     gcc : GNU 컴파일러 모음 

     make : makefile 컴파일러

    $ sudo yum install gcc
    $ sudo yum install make
    

    컴파일러 설치

     

    Redis 5.0.4 다운로드


     

     (6.x 버전은 설치도중 에러가 난다... 없다시피한 서버지식을 갖고 이틀동안 씨름했으나 해결을 못하여 5.x 버전을 설치)

     

     redis 파일을 다운로드 하기 전 원하는 폴더로 이동합니다. 여기서는 /Desktop 경로에 다운로드하겠습니다.

    현재 디렉토리 위치 /home/<사용자 계정명>/Desktop/ 

     

     wget 명령을 통해 redis 5.0.4 버전을 다운로드합니다.

     

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

     압축해제 합니다.

    $ tar -xvf redis-5.0.4.tar.gz

    redis 설치 후 압축해제한 상태

     

    dependency 설치


     설치한 /redis-5.0.4 폴더로 이동합니다.  /deps 폴더에 필요한 dependency를 설치 할 수 있습니다.

    $ cd redis-5.0.4/
    $ cd deps/

     make 명령어를 통해  설치합니다.

    $ make hiredis jemalloc linenoise luacc

     

    /redis-5.0.4/deps 경로로 이동하여 필요한 dependency 설치

     

     

    Redis 설치하기


     필요한 dependency 설치가 완료되면  /redis-5.0.4  경로로 돌아와 레디스를 설치합니다.

    현재 디렉토리 위치 /home/<사용자 계정명>/Desktop/redis-5.0.4/

     

    /redis-5.0.4 경로에 존재하는 Makefile 

    $ cd ..	//이전 폴더로 이동
    $ make
    $ sudo make install

    redis설치완료

     

     

    Redis 서버 구동 테스트


     설치를 완료 후 서버 실행합니다.

    현재 디렉토리 위치 /home/<사용자 계정명>/Desktop/redis-5.0.4/src
    $ cd src
    $ ./redis-server

    redis-server 실행

     

     간단하게 String을 저장하고 조회해 보겠습니다. 새로운 터미널 창을 열어서 다음과 같이 실행합니다.

    •  redis-cli 는 redis 명령어 인터페이스 입니다.
    $ cd /home/zangznags/Desktop/redis-5.0.4/src/
    $ ./redis-cli

     

    •   set : String을 key에 저장한다.
    •   get: key에 저장된 String을 조회한다.
    redis> set foo bar
    OK
    redis> get foo
    "bar"

     

     

     실행중인 서버의 연결을 끊으면 안됩니다!

    redis 서버 실행 후 set/get 명령어 테스트 결과

     

     

     

     

    Troubleshooting


    redis-server 작동 시 WARNING

    레디스 서버 작동 시 위 사진처럼 WARNING 메시지가 나오는 것을 볼 수 있습니다. 하나씩 해결해 보도록 하겠습니다.

     

     


    * Increased maximum number of open files to 10032 (it was originally set to 1024).

     

    최대 오픈 파일 개수는 적어도 10032 여야 되므로 레디스 서버는 10032로 설정해야 하는데 centOS 제한으로 설정할 수 없다. 최대 오픈 파일 개수(현재 설정값)는 1024이므로 'ulimit -n' 명령으로 설정을 변경해야 한다.

     

    # ulimit -n		//현재 값 확인
    1024
    # ulimit -n 65536	//값 변경

    리부팅 시에도 적용될 수 있도록 limits.conf 파일도 수정한다.

    # vim /etc/security/limits.conf
    redis soft nofile 65536
    redis hard nofile 65536


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

     

    레디스 서버에 초당 접속 가능한 클라이언트 수가 511로 설정되어있으나 centOS 8 설정에서 최대 클라이언트 연결 수가 128로 되어 있어서 나타나는 경고 문구 입니다.  somaxconn  네트워크 관련 파라미터로 511 이상으로 설정합니다.

     

    # sysctl -a |grep somaxconn
    net.core.somaxconn = 128
    # sysctl -w net.core.somaxconn=4096       //설정  
    net.core.somaxconn = 4096
    # cat /proc/sys/net/core/somaxconn       //확인  
    4096

    CentOS가 리부팅 되면 해당 설정이 초기화 됩니다. 리부팅 후에도 적용 될 수 있도록  systctl.conf 설정파일도 함께 수정합니다.

    # vim /etc/sysctl.conf

     

     


    # 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_memory는 가상 메모리 사용 관련 커널 파라미터입니다.  레디스 서버는 메모리 데이터베이스이기 때문에 1로 설정할 것으로 권장합니다.

     

    0 - Heuristic overcommit handling.
    1 - Always overcommit.
    2 - Don't overcommit.

     

    overcommit 관련 해서 잘 정리한 블로그가 있으니 읽어보면 도움이 될 것 같습니다.

     

     

    # sysctl -a |grep overcommit_memory
    vm.overcommit_memory = 0
    # sysctl -w vm.overcommit_memory=1      // 설정  
    vm.overcommit_memory = 1
    # cat /proc/sys/vm/overcommit_memory    // 확인  
    1

    CentOS가 리부팅 되면 해당 설정이 초기화 됩니다. 리부팅 후에도 적용 될 수 있도록  systctl.conf 설정파일도 함께 수정합니다.

    # vim /etc/sysctl.conf

     

     

     


    # 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.

     

     Linux에서는 대량 메모리를 할당하기 위해서 거대 페이지(huge page)를 사용합니다. Huge pages는 부팅 시 할당해야 합니다. Linux에서는 이를 효과적으로 관리하기 위해서 Transparent Huge Pages (THP)를 도입했습니다.  THP는 huge pages의 생성, 관리, 사용의 대부분을 자동화하는 추상화 계층입니다.

     메모리를 많이 사용하는 Redis에서는 성능을 저하시키는 요인이 되기도 합니다. THP를 사용하지 않게(disable) 설정합니다.

     

    # cat /sys/kernel/mm/transparent_hugepage/enabled
    [always] madvise never	//always로 되어있다면 수정하자
    # echo never > /sys/kernel/mm/transparent_hugepage/enabled
    # cat /sys/kernel/mm/transparent_hugepage/enabled
    always madvise [never]

    CentOS가 리부팅 되면 해당 설정이 초기화 됩니다. 리부팅 후에도 적용 될 수 있도록  /etc/rc.local 파일에 해당 명령을 입력한다.

    # vim /etc/rc.local

     

     

     

     

    Post


    • 연관 포스트1
    • 연관 포스트2
    • 연관 포스트3

    References


     


    잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)

     

     

     

    댓글