66
Cassandra를 Virtual Box에 설치해보자

카산드라를 설치해서 테스트 해보자 with virtualbox

  • Upload
    -

  • View
    1.553

  • Download
    4

Embed Size (px)

Citation preview

Cassandra를 Virtual Box에 설치해보자

이걸 한지 꽤 오래됐는데 이제서야 이걸 올리게 됐다이게 다 옹차장이 술을 사지 않았기 때문이다!

그리고 이 내용은 한짤로 요약하자면 아래와 같다

캐리어 가야 되요~~.develop

사실은 매드 사이언티스트 신바람 이박사의 삽질기를 보다보니자극받아서 한번 시도해 봤다

개발자의 열공중인 모습

요새 NOSQL이 말이 많다. 게다가 최근 MariaDB에선Cassandra용 연동 API도 제공해 주신다고 하신다

사나이라면 설치해봐야 하지 않겠는가

말도많고 탈도 많은 NOSQL 제가한번 설치해 보겠습니다!

그런데 테스트할 서버가 많아야 하잖아?

없는 살림에 어쩌겠어? 가상화 해서 해야지 뭐

오라클느님의 가상화툴 Virtual box

설치 환경

1. Virtual Box

Window BASE

2. Ubuntu

2기 설치

일단은 Virtual Box부터설치를 해 봐야지

https://www.virtualbox.org/wiki/Downloads

일단 다운로드 해서 설치하란 소리

닥치고 일단 설치하고 나면 다음과 같이 새로만들기를 실행하자

가상머신에 설치할 OS를 선택해야한다

진리의 우분투 느님

메모리도 설정해주자 기본적인 메모리는 충분히.

메모리 설정 작게했다간 지옥을 맛보게 될 것이야

하드디스크도 8G이상 하는게 암걸리지 않을 것임

짜증을 맛보고 싶으면 뭐…작게해도 되고 뭐…

그냥 VDI로 합시다

VDI 하드디스크 설정

설정 끝

그담에 우분투를 설치하자

응?

2개 만들어야 하는거 아니냐고?

우분투 설치하고 난 다음 카산드라까지 설치하고그냥 가상 이미지 복제하는게 쉽지않겠얼?

문제발생!

귀찮다….

원래 세미나용 발표자료를 바꾸려고 하니까시간이 엄청 걸린다.검은사막 할 시간 없어…

그래서 기존에 만들었던걸로 그대로 붙여 넣자!

Virtual Box Ubuntu 설치

VirtualBox Ubuntu Downlod

http://www.ubuntu.com/download/desktop

CA1클릭->시작 시 시동디스크에 ISO 선택 화면

VirtualBox Ubuntu 설치

Ubuntu ISO 선택(amd64로 설치하는 것을 권장)

VirtualBox Ubuntu 설치

VirtualBox Ubuntu 설치

Ubuntu 해상도 문제

Virtual Box 특성상 Ubuntu의 해상도가 800x600 고정되어 있는 경우가 종종 있음

<해결책>

1. Ubuntu 업데이트 및 DKMS 설치

터미널을 연다

Ubuntu 해상도 문제

1. Ubuntu 업데이트 및 DKMS 설치

sudo apt-get update 실행

sudo apt-get upgrade 실행

sudo apt-get install dkms 실행

Ubuntu 해상도 문제

2. 게스트 확장 설치

설치 완료시 리부팅

Ubuntu 해상도 문제

2. 게스트 확장 설치

Linux를 켜고 [게스트 확장 설치] 클릭(보통 virtual box 디렉토리에 존재함)

Ubuntu 호환 IP 설정

Virtual Box때문에 호스트 PC와 게스트 PC상 통신문제가 발생

2개의 어댑터를 통한 내부 통신 및 외부 통신이 가능하게 적용

Ubuntu 호환 IP 설정

설정->네트워크->어댑터1

NAT 선택 및 포트포워딩 클릭

Ubuntu 호환 IP 설정

호스트포트 9042, 게스트IP 192.168.56.101, 게스트포트 9042

지금부터 CA1의 내부 IP는 192.168.56.101로 설정할 것

9042포트는 Cassandra를 위한 설정

Ubuntu 호환 IP 설정

어댑터 2 생성->호스트전용어댑터->VirtualBox Host-Only Ethernet Adaptor->모두 허용 설정->재시작

Ubuntu 호환 IP 설정

호스트PC의 네트워크->Virtual Host-Only Network 속성->IPv4 설정-> IP주소 아래와 같이 설정(DNS는 설정안함)->재시작

Ubuntu 내부 IP 설정

터미널 열고 -> sudo vi /etc/network/interfaces [ENTER]

다음과 같이 입력 저장 및 리붓

앞으로 CA1은 IP가 192.168.56.101로 설정됨

추후 CA2는 IP가 192.168.56.102로 설정될 예정

주의 : 설정이후 호스트PC에서 ping 192.168.56.101하면 연결불가됨 이는 나중에 포트포워딩으로 확인 가능

Cassandra 설치

Cassandra 설치

설치 메뉴얼

http://www.datastax.com/documentation/cassandra/2.0/cassandra/install/installDeb_t.html

설치 필요 JDK

JDK7 필요

JDK 설치

설치되어있던 openjdk 삭제

sudo apt-get purge openjdk*

apt-repository에 경로 추가

sudo apt-get install software-properties-common

ppa 추가

sudo add-apt-repository ppa:webupd8team/java

JDK 7 설치

sudo apt-get install oracle-java7-installer

JDK 설치

설치되어있던 openjdk 삭제

sudo apt-get purge openjdk*

apt-repository에 경로 추가

sudo apt-get install software-properties-common

ppa 추가

sudo add-apt-repository ppa:webupd8team/java

sudo apt-get update

JDK 7 설치

sudo apt-get install oracle-java7-installer

JDK 설치 확인

Cassandra 설치

Curl 설치

repository에 경로 추가

sudo curl -L http://debian.datastax.com/debian/repo_key | sudo apt-key add -

패키지 설치

sudo apt-get update

sudo apt-get install dsc20

초기화

sudo service cassandra stop

sudo rm -rf /var/lib/cassandra/data/system/*

Cassandra 환경 설정

환경 설정 파일 경로

/etc/cassandra/conf/cassandra.yaml

설정 내역

Simple Data Center

RackInferringSnitch

IP 192.168.56.101

Client 연결 포트 9042(기본)

Cli 연결 9160(기본)

주의: cassandra.yaml에서 설정이 xxx : xxx 일 경우 띄어쓰기 잘 해줘야 함 붙여

쓸 경우 parse 에러 발생함

Cassandra.yaml 설정

initial token 설정(메인 0)

seeds 설정(192.168.56.101)

Listen Address 설정(192.168.56.101)

주의: 대부분의 사이트에서 listen_address를 0.0.0.0 잡으라고 하는데 이럴 경우 실행하면 나중에 broadcast 를 잡지 않았다고 에러가 발생함

Cassandra.yaml 설정

rpc_address 설정(192.168.56.101)

cluster_name 설정(적당히 알아서)

endpoint_snitch(RackInferringSnitch)

기타 설정들에 대한 설명과 각 전략에 대한 설명은 칸이 부족해적지 않는다

Cassandra.yaml 설정

로그 위치

/var/log/cassandra/

데이터 위치

/var/lib/cassandra/commitlog

/var/lib/cassandra/data

/var/lib/cassandra/saved_caches

주의: 나중에 token이 중복되었다니 등의 문제가 발생하면 이는 데이터를 지우기 전엔 복구

가 안되므로 위의 데이터 내의 파일을 모두 지우고 초기화를 하면 initial_token이 새로 적용

된다

Cassandra.yaml 설정

서비스 시작 및 동작상황 확인

sudo service cassandra start

node status

이미지 처럼 1개가 우선 동작하고 있는 것이 확인된다

Node 복제

VirtualBox에서 CA1노드를 복제한다

이름은 CA2로 하고 완전한 복제를 시행한다

Node 복제

CA1을 종료하고 CA2를 실행하여 IP를 192.168.56.102로 변경한다

Cassandra.yaml의 IP부분중 seeds를 제외하고 나머지를 전부102로 바꾼다

initial token 설정은 0이 아닌 다른 키로 입력한다(이거 충돌나면 안됨)

순서대로 재시작

CA1을 켜고 CA2를 켠 다음 nodetool status를 확인한다주의: 만약 error중 Cannot change the number of tokens from 1 to 256 에러 발생하면 cassandra.yaml에서 num_tokens를 1로 바꾸고 data로그를 다 지운다

정상적인 동작상황이면 nodetool status를 통해 2개가 연결된것을 확인할 수 있다

Cassandra client 연결

Client Lib

Client 종류는 여러가지가 존재함

https://github.com/datastax/java-driver에서 드라이버를 다운받음 driver-core.jar

이 파트는 아무래도 SQL쿼리문 처럼 사용할 수 있기때문에 사용함.

다른Lib는 가능한지 확인 안함

DB 생성

Cassandra는 Keyspace를 DB라고 생각하면 됨(방식 차이)

DB생성을 위해 CLI 접근

연결거부 에러는 신경쓰지 말것

DB 생성

connect 192.168.56.101/9160 ; 실행

create keyspace demodb with placement_strategy=‘org.apache.cassandra.locator.SimpleStrategy’ and strategy_options = {replication_factor:1};

demodb라는 keyspace 생성

demodb에 연결 시도

에러가 나지 않으면 정상 연결

이 앞에 포트포워딩 한 포트와 해당 PC의 IP를 연결하여 테스트

Client Demo 접근 테스트

user란 테이블을 생성 및 INSERT 시도

Client Table 생성

user란 테이블을 생성 및 INSERT 시도

Client Table 생성

user란 테이블을 생성 및 Select 시도

Client get 테스트

Insert Select Delete 등에 대해서 각 기능과 Update는 왜 어려운지 등에 대한 별도의 연구가 필요

->update는 인덱스의 재배치가 필요하므로 페이지 로드가

크기 때문이다

시스템적인 구성에 대한 연구 또한 필요

Client SQL

껐다 켜면 cassandra cannot change the number of tokens from 1 to 256 라는게종종 뜨는데 이건 num_tokens 세팅 때문이다 이는 데이터센터가 1개이상 즉NetworkTopologyStrategy 사용시에 virtual node가 사용되고 이 virtual node의 갯수를 설정할때 쓰는 부분이다. 우린 SimpleStrategy라 별 의미가 없다. 자세한건 여기참조

http://www.datastax.com/documentation/cassandra/2.0/cassandra/configuration/configVnodesProduction_t.html?scroll=task_ds_jsd_xjd_2l__task_ds_jsd_xjd_2l_unique_1

MariaDB 연동은 가능은 하지만 현재 알파버전 (10.1)으로 진행중이기 때문에 현재는큰 의미는 없다. 내용은 Cassandra의 table을 Mariadb에서 읽어 들일 수 있게 Table Mapping처리를 해주는 방법을 사용한다

주의

MariaDB 연동은 가능은 하지만 현재 알파버전 (10.1)으로 진행중이기 때문에 현재는큰 의미는 없다. 내용은 Cassandra의 table을 Mariadb에서 읽어 들일 수 있게 Table Mapping처리를 해주는 방법을 사용한다

주의

그래서 뭐 어쩌라고?

너, 나 그리고 우리가 쓰는 카톡 시스템 구조다.활용방안에 대한 고민을 할게 많아 보이지 않은가?

없으면 어쩔수 없고뭐.. 군시렁..