개발용으로 사용할 cassandra 3.0 설치 방법이다.  


참고 자료는 아래 링크이다. 하지만 완벽하지 않다.. 

http://docs.datastax.com/en/cassandra/3.0/cassandra/install/installRHEL.html



python 2.7 이상이어야 한다. python 2.6이면 아래를 참고한다.(cassandra 2점 대에서는 python 2.6에도 잘 동작했지만, cassandra 3점대부터는 python 2.7이 필수이다)

http://knight76.tistory.com/entry/python-26-%EC%97%90%EC%84%9C-python-279-%EC%97%85%EA%B7%B8%EB%A0%88%EC%9D%B4%EB%93%9C-%ED%95%98%EA%B8%B0


python 2.7을 확인한 후, java 8을 설치한다.



다음 cassandra를 설치한다.



$ su

/etc/yum.repos.d/datastax.repo 파일에 다음을 추가한다.


[datastax] 

name = DataStax Repo for Apache Cassandra

baseurl = http://rpm.datastax.com/community

enabled = 1

gpgcheck = 0



cassandra 바이너리와 운영 툴을 설치한다.

$ yum install dsc30

$ yum install cassandra30-tools



혹시 cqlsh를 실행할 수 없다면 pip로 cqlsh를 설치한다. 

$ cqlsh
Traceback (most recent call last):
  File "/usr/bin/cqlsh.py", line 163, in <module>
    from cqlshlib import cql3handling, cqlhandling, pylexotron, sslhandling
ImportError: No module named cqlshlib

$ python get-pip.py
$ pip install cqlsh



cassandra3의 테스트 장비 설치를 했지만 외부에서 포트 연결이 안될 수 있다. 

아래와 같이 설정을 바꾼다.  1.1.1.1에 실제 ip를 등록한다. 


$ vi /etc/cassandra/conf/cassandra.yaml

listen_address: 1.1.1.1

broadcast_address: 1.1.1.1

rpc_address: 0.0.0.0  

broadcast_rpc_address: 1.1.1.1



cassandra 서비스를 실행한다.


$ service cassandra start



cqlsh과 nodetool로 정상적으로 문제 없는지 확인한다. 


$ cqlsh

Connected to Test Cluster at 127.0.0.1:9042.

[cqlsh 5.0.1 | Cassandra 3.0.9 | CQL spec 3.4.0 | Native protocol v4]

Use HELP for help.


$ nodetool status

...


문제가 있으면 아래 로그를 확인한다.


$ tail -f /var/log/cassandra/




============


만약 2.1에서 3.0으로 업그레이드하려면 다음 내용을 참조한다.





sudo -s


rm -rf /var/lib/cassandra

rm -rf /var/log/cassandra

rm -rf /etc/cassandra


yum remove -y cassandra21-2.1.12-1.noarch


yum remove python


export https_proxy=..

export http_proxy=..


wget http://www.python.org/ftp/python/2.7.8/Python-2.7.8.tar.xz

xz -d Python-2.7.8.tar.xz 

tar xvf Python-2.7.8.tar


cd Python-2.7.8

./configure --prefix=/usr/local


make

make install



cat > /etc/yum.repos.d/datastax.repo  << EOF

[datastax] 

name = DataStax Repo for Apache Cassandra

baseurl = http://rpm.datastax.com/community

enabled = 1

gpgcheck = 0

EOF


yum install -y dsc30

yum install -y cassandra30-tools




저작자 표시
신고
Posted by 김용환 '김용환'

아래 카산드라 설정은 문제 없어보이지만, error를 유발하고 데몬이 뜨지 않는다.




rpc_address:0.0.0.0



에러 내용은 다음과 같다. 



INFO  23:31:56 Configuration location: file:/etc/cassandra/default.conf/cassandra.yaml

Exception (org.apache.cassandra.exceptions.ConfigurationException) encountered during startup: Invalid yaml: file:/etc/cassandra/default.conf/cassandra.yaml

org.apache.cassandra.exceptions.ConfigurationException: Invalid yaml: file:/etc/cassandra/default.conf/cassandra.yaml

at org.apache.cassandra.config.YamlConfigurationLoader.loadConfig(YamlConfigurationLoader.java:124)

at org.apache.cassandra.config.YamlConfigurationLoader.loadConfig(YamlConfigurationLoader.java:95)

at org.apache.cassandra.config.DatabaseDescriptor.loadConfig(DatabaseDescriptor.java:135)

at org.apache.cassandra.config.DatabaseDescriptor.<clinit>(DatabaseDescriptor.java:119)

at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:543)

at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:696)

Caused by: while scanning a simple key

 in 'reader', line 962, column 1:

    rpc_address:0.0.0.0

    ^

could not found expected ':'

 in 'reader', line 964, column 1:






: 다음에 공백이 한 칸 있어야 한다. 더 이상 에러는 발생하지 않는다.


rpc_address: 0.0.0.0



저작자 표시
신고
Posted by 김용환 '김용환'


kafka에 복제(replication) 개념이 있고, 아래 위키에서 잘 설명하고 있다. nosql을 공부하는 사람이라면 충분히 이해할 수 있을 것이다.


동기 복제와 비동기 복제 때문에 ack관련 설정이 있기 때문에 적당히 kafka를 이해할 필요가 있을 것 같다. 



https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Replication





복제 관련 운영 툴은 다음과 같다.


https://cwiki.apache.org/confluence/display/KAFKA/Replication+tools



kafka-preferred-replica-election.sh 


큰 클러스터에서 카프카는 브로커간에 리드 복제본이 균등하게 분산되게 한다. 브로커 종료가 실패하면 분산 기능이 균형을 이루지 못한다. 균등하게 분산하기 위해 카프카에 클러스터의 브로커간에 리드 복제본을 배포한다. 



kafka-preferred-replica-election.sh 툴은 주키퍼 목록을 리드 복제본이 이동되야 하는 토픽 파티션 목록으로 변경한다. 컨트롤러는 기본 복제본이 리더가 아님을 알게 되면 브로커에 기본 복제본을 파티션 리더로 지정하라는 요청을 보낸다. 기본 복제본이 ISR(in-sync replicas) 목록에 없으면 컨트롤러는 데이터를 손실하지 않도록 작업을 실패 처리한다.




$ bin/kafka-preferred-replica-election.sh --zookeeper localhost:12913/kafka --path-to-json-file topicPartitionList.json



topicPartionList.json 파일은 다음과 같다.


{"partitions": [  

    {"topic": "topic", "partition": "0"}, 

    {"topic": "topic", "partition": "1"}, 

    {"topic": "topic", "partition": "2"}, 

    {"topic": "topic2", "partition": "0"}, 

    {"topic": "topic2", "partition": "1"}, 

    {"topic": "topic2", "partition": "2"},  

  ] 




kafka-reassign-partitions.sh을 사용하면 복제본의 파티션 정책을 변경할 수 있다.


$ bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file increase-replication-factor.json --execute 



increase-replication-factor.json 파일은 다음과 같다.

 {"partitions":[{"topic":"smackTopic","partition":0,"replicas":[2,3]}], "version":1 } 






저작자 표시
신고
Posted by 김용환 '김용환'


티스토리 툴바