Total: Today: Yesterday:
노하우/Linux | 2020. 5. 31. 19:36 | Posted by 자수씨

1. yum 을 최신으로 업데이트 한 후에 gcc 와 make 를 설치한다.

$ sudo yum update
$ sudo yum install gcc make

 

2. 레디스 최신 버전 소스를 내려받아 빌드한다.

$ wget http://download.redis.io/releases/redis-6.0.4.tar.gz
$ tar xzf redis-6.0.4.tar.gz
$ cd redis-6.0.4
$ make

 

3. 디렉토리 생성 및 복사

$ sudo mkdir /etc/redis 
$ sudo mkdir /var/lib/redis
$ sudo cp src/redis-server src/redis-cli /usr/local/bin/
$ sudo cp redis.conf /etc/redis/

 

4. /etc/redis/redis.conf 수정

daemonize yes
bind 0.0.0.0
dir /var/lib/redis
logfile "/var/log/redis_6379.log"

 

5. 자동 실행을 위한 설정

$ cd /tmp
$ wget https://raw.github.com/saxenap/install-redis-amazon-linux-centos/master/redis-server
 
$ sudo mv redis-server /etc/init.d
$ sudo chmod 755 /etc/init.d/redis-server

$ sudo chkconfig --add redis-server
$ sudo chkconfig --level 345 redis-server on

 

6. redis 서버 실행

$ sudo service redis-server start
Starting redis-server (via systemctl):                 [  OK  ]

 

참고자료:

1. https://redis.io/download

 

Redis

*Download Redis uses a standard practice for its versioning: major.minor.patchlevel. An even minor marks a stable release, like 1.2, 2.0, 2.2, 2.4, 2.6, 2.8. Odd minors are used for unstable releases, for example 2.9.x releases are the unstable versions of

redis.io

2. https://github.com/saxenap/install-redis-amazon-linux-centos

 

saxenap/install-redis-amazon-linux-centos

his is a installation script to setup Redis 2.6 as a service on Amazon Linux AMI and CentOS distributions. - saxenap/install-redis-amazon-linux-centos

github.com

 

'노하우 > Linux' 카테고리의 다른 글

[EC2] htop, iftop, iotop  (0) 2021.07.22
[scouter] AWS EC2 인스턴스에 scouter-paper 설치하기  (0) 2019.04.23
[AWS] EC2 인스턴스에 nodejs 설치  (0) 2019.04.23
Linux 에 OpenJDK 8 설치  (0) 2019.04.13
포트 우회하기  (0) 2019.04.12

개발/JAVA | 2019. 6. 2. 19:00 | Posted by 자수씨

개요

spring-session 에 저장방식을 redis 로 지정하고 redis 라이브러리를 lettuce 로 지정하였다.

개발서버에서는 정상적으로 동작하였으나 운영서버에서는 같은 AWS EC2 인스턴스임에도 아래와 같은 오류가 발생하였다.

java.lang.ClassCastException: io.netty.channel.epoll.EpollEventLoopGroup cannot be cast to io.netty.channel.EventLoopGroup
    at io.lettuce.core.resource.DefaultEventLoopGroupProvider.getOrCreate(DefaultEventLoopGroupProvider.java:119) ~[lettuce-core-5.1.6.RELEASE.jar:na]

작업1

lettuce Native-Stransports 를 보면 native netty 의 성능이 더 좋으므로 netty-transport-native-epoll 을 디펜던시에 추가하라고 명시되어 있다.

디펜던시를 추가하고 웹 어플리케이션을 재시작하면 위와 같은 오류는 발생하지 않는다. 하지만 로컬 환경에서 native 디펜던시를 추가하는 것은 또다른 문제가 발생할 것으로 보여 다른 방법을 찾아야 했다.

작업2

lettuce Native-Stransports 를 자세히 살펴보니 native netty 를 사용하지 않는 옵션을 발견하였다.

catalina.sh 에 다음과 같이 시스템 프로퍼티를 추가한다.

# netty native settings
JAVA_OPTS="$JAVA_OPTS -Dio.lettuce.core.epoll=false"

재시작 시 native netty 를 사용하지 않고 정상동작 하는 것을 확인하였다.

INFO 15189 --- [enerContainer-1] io.lettuce.core.EpollProvider            : Starting without optional epoll library
INFO 15189 --- [enerContainer-1] io.lettuce.core.KqueueProvider           : Starting without optional kqueue library

작업3

EPollProvider 를 보다보니 io.netty.channel.epoll.Epoll 클래스가 있는지를 체크하는데 저 클래스로 인해 native netty 가 활성화 된 것으로 추가한 기억이 없는 클래스의 위치를 찾기 위해 classloader.jsp 를 인터넷에서 구하여 위치를 확인해보았다.

예전에 tomcat session 을 redis 로 설정하기 위해 ${catalina_base}/lib 에 추가하였던 redis-session-manager-with-dependencies-2.2.2-SNAPSHOT.jar 이 파일이 문제였다. 이번 작업으로 인해 제거해도 무방했던 jar 파일이라 제거하고 테스트를 해보았더니 정상이였다.

결론

문제의 원인은 이전에 추가하였던 redis-session-manager 라이브러리와의 충돌이였다. 어쩐지 인터넷을 찾아봐도 비슷한 내용이 나오지 않더라니...

돌고 돌았지만 문제의 원인은 확인하고 해결할 수 있었다.