3개의 노드로 Cassandra 클러스터를 구축
node0 172.16.254.180 (seed1)
node1 172.16.254.181
node2 172.16.254.182
만약 cassandra가 구동되고 있다면 중지하고 현재 데이터를 삭제한다.
systemctl stop cassandra
rm -rf /var/lib/cassandra/data/*
각 노드들 설정파일 수정
각 노드들의 /etc/cassandra/conf/cassandra.yaml
의 내용중 아래 부분을 찾아서 수정해준다.
seed node
의 경우auto_bootstrap
의 값을false
로 해주고 나머지 노드들은true
값으로 설정한다.listen_address
의 경우 각 노드의 IP주소를 넣어준다.
cluster_name: 'MyCassandraCluster'
num_token: 256
-seeds: 172.16.254.180
listen_address: 172.16.254.180
rpc_address: 0.0.0.0
broadcast_rpc_address: 172.16.254.255 # rpc_address가 wildcard address(0.0.0.0)일 경우 반드시 해당 IP대역의 broadcast_rpc_address를 설정함
endpoint_snitch: GossipingPropertyFileSnitch
auto_bootstrap: false # seed node일 경우 추가함. 나머지 노드들은 ‘true’로 설정
cassandra-rackdc.properties 파일 수정
각 노드들의 /etc/cassandra/conf/cassandra-rackdc.properties
파일의 내용을 동일하게 수정한다.
# indicate the rack and dc for this node
dc=DC1
rack=RAC1
Cassandra 클러스터 시작
각 노드들의 설정파일 수정이 완료 되면 seed node
부터 구동을 해주고 나머지 노드들을 구동한다.
systemctl start cassandra
Cassandra 클러스터 확인
nodetool status
명령으로 클러스터의 상태를 확인
# nodetool status
Datacenter: DC1
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 172.16.254.180 116.8 KB 256 69.6% e6c52a7b-ac64-4805-b14a-6c99b444af59 RAC1
UN 172.16.254.181 101.83 KB 256 67.8% 4c9a95bf-047b-489a-ab19-a150db6b174c RAC1
UN 172.16.254.182 75.88 KB 256 62.6% b32a71fa-4b9d-4c13-91ed-4cdb2954069e RAC1
테스트
cqlsh
명령어로cassandra
에 접속
Keyspace 생성
CREATE KEYSPACE demo WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};
cqlsh> DESCRIBE KEYSPACES
demo system_schema system_auth system system_distributed system_traces
cqlsh>
Table 생성
cqlsh> USE demo ;
cqlsh:demo> CREATE TABLE users ( id int PRIMARY KEY, email text, name text );
Data 입력
각 노드에서 insert를 해본다.
node-0
cqlsh:demo> INSERT INTO users ( id, email, name ) VALUES ( 1, 'naver@naver.com', 'Kim' );
node-1
cqlsh:demo> INSERT INTO users ( id, email, name ) VALUES ( 2, 'google@gmail.com', 'Lee' );
node-2
INSERT INTO users ( id, email, name ) VALUES ( 3, 'daum@daum.net', 'Park' );
Data 조회
각 노드에서 select 를 실행해보면 결과를 확인 할 수 있다.
cqlsh:demo> select * from users ;
id | email | name
----+------------------+------
1 | naver@naver.com | Kim
2 | google@gmail.com | Lee
3 | daum@daum.net | Park
(3 rows)
cqlsh:demo>