- 해당 글은 Google Cloud Engine 로 부터 테스트 지원을 받아서 작성되었습니다.
Redis는 In-Memory Cache/Store 입니다. 또는 In-Memory Key-Value NoSQL 로 불리기도 합니다. 사실 어떻게 불리는가는 특별히 중요하지 않습니다. 굉장히 여러 분야에서, 다양하게 사용되고 있다는게 중요합니다.
그런데 Amazon AWS, Microsoft Azure 의 경우에는 Redis 는 아예 PaaS 형태로 존재하고 있습니다. AWS의 Elastic Cache 라든지, Azure 의 Redis Cache 가 있습니다. (아마도 GCE에서도 뭔가 곧 나오지 않을까 예상합니다. 여기서는 서로 서로 점점 유사해지고 있으니…)
이렇게 PaaS로 제공하는 것은 각각 장점이 있습니다. 편한 대신에, 세밀한 컨트롤이 안된다든가, 반대로 불편한 대신에 좀더 컨트롤이 명확하든가… Elastic Cache의 경우에는 아예 몇가지 쓸 수 없는 명령이 있어서 spring data redis에서 뭔가 이슈가 있기도 합니다.(지금은 수정되었나 모르겠네요.)
일단은 아주 간단하게 최신버전의 Redis를 GCE 에서 설치해보고 간단하게 테스트를 돌려보는 것 까지 확인해 보도록 하겠습니다. 환경은 Ubuntu 16.04 LTS 이지만 어디서든 거의 비슷한 형태로 하시면 가능합니다.
먼저 간단하게 살피고 넘어가면 ssh로 접근하기 위한 키를 생성합니다. 제 환경은 맥이지만, 비슷하니 키 생성은 쉽게 될껍니다. 이 때 주의할 것은 메일 주소를 실제로 사용하는 google 계정으로 하는게 좋은거 같습니다.(뭔가 제 잘못이겠지만, 그냥 public key를 등록했더니 제대로 안되는…)
ssh-keygen -t rsa -C "<구글 계정>"
그리고 이 ssh 키를 전역으로 사용하기 위해서, SSH 키를 미리 등록해둬야 합니다. 아래 그림과 같이 메타데이터 -> SSH 키 -> 수정 을 선택합니다.
그리고 로컬에 생성한 (따로 이름을 지정안했으면 ~/.ssh/id_rsa.pub) public key 파일을 열어서 추가해줍니다. 그럼 자동으로 사용자 이름이 만들어지면서 추가됩니다. 그러면 이제 저장을 누르고 VM 인스턴스 -> 인스턴스 만들기 로 이동합니다.
여기서 해당 서버를 외부에서 바로 접속하고 싶다면, 꼭 네트워크 설정에서 외부를 임시든 고정 IP를 설정해 줘야 합니다. 셋팅안하면 그냥 없음으로 해서 내부 ip만 만들어지는…(물론 이것도 제가 잘못아는 거일 수도 있습니다.)
이제 인스턴스가 만들어지면 ssh -i ~/.ssh/id_rsa @ 로 접속하면 됩니다. 여기서 username 은 위에서 만들어진 사용자 이름을 사용하시면 됩니다.
GCE의 IO는 vCPU 수에 비례한다고 합니다. 네트워크도 vCPU에 비례해서 밴드위스가 추가된다고 하네요 이 내용은 benchmark 돌릴때 상당히 중요할듯 합니다.
자 이제 VM 을 생성했으니 여기서 끝내겠습니다. 다들 수고하셨습니다.(퍽퍽퍽)
앗, 그러고보니 이 글의 목표는 Redis 를 까는 거였습니다. -_-;;;
VM 인스턴스를 선택하면 자신의 서버 주소를 알 수 있습니다.
먼저 기본적인 툴들을 설치해야 합니다.
sudo apt update sudo apt install build-essential libtool tcl
이제 Redis 최신 버전을 받아봅시다.
wget http://download.redis.io/releases/redis-3.2.6.tar.gz
압축을 풀고 빌드를 해봅니다.
tar zxvf redis-3.2.6.tar.gz cd redis-3.2.6 make
Redis 는 생각보다 빌드가 굉장히 쉽습니다. 필요한 컴파일러만 설치되면 그냥 make 만 하시면됩니다. 이제 테스트를 해보겠습니다. test를 위해서는 tcl 이 필요하고 그래서 위에서 tcl 를 설치해두었습니다.
make test
이제 정상적이면 다음과 같은 로그를 보실 수 있습니다. 정상적으로 완료되었으면 문제는 없습니다. 가끔씩 에러가 날수도 있는데, 타이밍 이슈등이므로, 메모리 검사를 해보고 큰 문제가 없다면 무시하셔도 됩니다.
Testing integration/replication-4 [ok]: BRPOPLPUSH with wrong destination type [ok]: BRPOPLPUSH maintains order of elements after failure [ok]: BRPOPLPUSH with multiple blocked clients [ok]: Linked BRPOPLPUSH [ok]: Circular BRPOPLPUSH [ok]: Self-referential BRPOPLPUSH [ok]: BRPOPLPUSH inside a transaction [ok]: PUSH resulting from BRPOPLPUSH affect WATCH
그런데 redis 를 실행해놓고 외부에서 접속을 시도해보면 당연히 접속이 안될껍니다. 왜 그럴까요?(일단 bind 는 0.0.0.0 으로 설정해 둔 다음에도요.) 이것은 해당 GCE의 네트웍 방화벽 설정에 6379 port 가 안열려 있어서 그렇습니다. 이걸 풀어주시면 제대로 설정이 될겁니다.
일단은 GCE(Google Cloud Engine) 에서 Redis 를 수동으로 설치하는 방법에 대해서 알아보았습니다. 다음번에는 실제로 이걸로 셋팅을 하고 서비스를 위한 테스트를 어떻게 할지 살펴보도록 하겠습니다.