Elassandra는 Elasticsearch 검색 엔진을 포함하는 Apache Cassandra 배포판입니다. Elassandra는 활성/활성 모드에서 여러 데이터 센터에 걸쳐 복제를 지원하는 다중 마스터 다중 클라우드 데이터베이스 및 검색 엔진입니다.
Elasticsearch 코드는 Cassandra 테이블에 고급 검색 기능을 제공하는 Cassanda 노드에 내장되어 있으며 Cassandra는 Elasticsearch 데이터 및 구성 저장소 역할을 합니다.
Elassandra는 Cassandra vnode를 지원하며 인덱스를 다시 샤딩할 필요 없이 더 많은 노드를 추가하여 수평적으로 확장됩니다.
프로젝트 문서는 doc.elassandra.io에서 확인할 수 있습니다.
Cassandra 사용자를 위해 elassandra는 Elasticsearch 기능을 제공합니다.
Elasticsearch 사용자를 위해 elassandra는 유용한 기능을 제공합니다.
Docker에서 단일 노드 Elassandra 클러스터를 실행하기 위한 빠른 시작 가이드입니다.
Google Kubernetes Engine을 실행하여 Elassandra를 배포합니다.
<<<<<<< HEAD 버전 6.8.4.2부터 gossip X1 애플리케이션 상태는 시스템 속성을 사용하여 압축할 수 있습니다. 이 설정을 활성화하면 많은 가상 인덱스를 생성할 수 있습니다. 이 설정을 활성화하기 전에 모든 6.8.4.x 노드를 6.8.4.2 이상으로 업그레이드하세요. 모든 노드가 6.8.4.2에 있으면 설정이 아직 로컬로 구성되지 않은 경우에도 애플리케이션 상태의 압축을 풀 수 있습니다.
Elassandra는 Cassandra GOSSIP 프로토콜을 사용하여 Elasticsearch 라우팅 테이블을 관리하고 Elassandra 6.8.4.2+는 X1 애플리케이션 상태 압축에 대한 지원을 추가하여 Elasticsearch 인덱스의 최대 수를 늘립니다. 이전 버전과의 호환성을 위해 압축은 기본적으로 비활성화되어 있지만 모든 노드가 버전 6.8.4.2+로 업그레이드되면 conf/jvm.options 에 -Des.compress_x1=true를 추가하고 모두 롤링 재시작하여 X1 압축을 활성화해야 합니다. 노드. 버전 6.8.4.2+를 실행하는 노드는 압축된 X1과 압축되지 않은 X1을 읽을 수 있습니다.
버전 6.2.3.21 이전에는 elasic_admin 키스페이스(및 elastic_admin_[datacenter.group])에 대한 Cassandra 복제 요소가 데이터 센터의 노드 수에 따라 자동으로 조정되었습니다. 버전 6.2.3.21부터 대규모 클러스터의 성능에 영향을 미치기 때문에 이제 이 키스페이스에 대한 복제 요소를 적절하게 조정하는 것은 Elassandra 관리자의 몫입니다. Elasticsearch 매핑 업데이트는 QUORUM 노드가 성공해야 하는 PAXOS 트랜잭션에 의존하므로 복제 요소는 각 데이터 센터에서 최소 3이어야 합니다.
Elassandra 6.2.3.19 메타데이터 버전은 이제 Cassandra 테이블 elastic_admin.metadata_log (6.2.3.8에서 6.2.3.18까지의 elastic_admin.metadata )를 사용하여 elasticsearch 매핑 업데이트 기록을 유지하고 가능한 PAXOS 쓰기 시간 초과 문제로부터 자동으로 복구합니다.
클러스터의 첫 번째 노드를 업그레이드할 때 Elassandra는 현재 메타데이터 .버전을 새 elastic_admin.metadata_log 테이블에 자동으로 복사합니다. Elasticsearch 매핑 불일치를 방지하려면 롤링 업그레이드가 진행되는 동안 매핑 업데이트를 피해야 합니다. 모든 노드가 업그레이드되면 elastic_admin.metadata 는 더 이상 사용되지 않으며 제거할 수 있습니다. 그런 다음 새로운 elastic_admin.metadata_log 에서 매핑 업데이트 기록을 가져오고 어느 노드가 언제, 어떤 이유로 매핑을 업데이트했는지 알 수 있습니다.
Elassandra 6.2.3.8+는 이제 CQL 스키마 확장( system_schema.tables , 열 확장 참조)을 사용하여 CQL 스키마의 elasticsearch 매핑을 완전히 관리합니다. 이러한 테이블 확장과 Elasticsearch 인덱스 생성/수정으로 인한 CQL 스키마 업데이트는 동시 업데이트가 발생할 때 일관성을 보장하기 위해 일괄 원자 스키마 업데이트로 업데이트됩니다. 또한 이러한 확장은 바이너리로 저장되며 보다 효율적으로 부분 업데이트를 지원합니다. 결과적으로 elasticsearch 매핑은 elastic_admin.metadata 테이블에 더 이상 저장되지 않습니다.
경고: 롤링 업그레이드 중에 elasticserach 매핑 변경 사항은 새 버전과 이전 버전을 실행하는 노드 간에 전파되지 않으므로 업그레이드하는 동안 매핑을 변경하지 마십시오. 모든 노드가 6.2.3.8+로 업그레이드되고 유효성이 검사되면 다음 CQL 문을 적용하여 쓸모 없는 elasticsearch 메타데이터를 제거합니다.
ALTER TABLE elastic_admin.metadata DROP metadata ;
ALTER TABLE elastic_admin.metadata WITH comment = ' ' ;
경고: Elassandra에서 사용하는 CQL 테이블 확장으로 인해 일부 이전 버전의 cqlsh 에서는 "'모듈' 객체에 'viewkeys' 속성이 없습니다." 라는 오류 메시지가 나타날 수 있습니다. . 이는 Cassandra에 내장된 이전 Python Cassandra 드라이버에서 비롯되었으며 CASSANDRA-14942에서 보고되었습니다. 가능한 해결 방법:
docker run -it --rm strapdata/cqlsh:0.1 node.example.com
Java 8이 설치되어 있고 JAVA_HOME
올바른 위치를 가리키는지 확인하세요.
export CASSANDRA_HOME=<extracted_directory>
bin/cassandra -e
실행bin/nodetool status
실행curl -XGET localhost:9200/_cluster/state
실행 존재하지 않는 색인에서 문서 색인을 생성해 보세요.
curl -XPUT ' http://localhost:9200/twitter/_doc/1?pretty ' -H ' Content-Type: application/json ' -d ' {
"user": "Poulpy",
"post_date": "2017-10-04T13:12:00Z",
"message": "Elassandra adds dynamic mapping to Cassandra"
} '
그런 다음 Cassandra에서 조회합니다.
bin/cqlsh -e " SELECT * from twitter. " _doc " "
그 뒤에서 Elassandra는 새로운 Keyspace twitter
와 _doc
테이블을 만들었습니다.
admin@cqlsh > DESC KEYSPACE twitter;
CREATE KEYSPACE twitter WITH replication = { ' class ' : ' NetworkTopologyStrategy ' , ' DC1 ' : ' 1 ' } AND durable_writes = true;
CREATE TABLE twitter . " _doc " (
" _id " text PRIMARY KEY ,
message list < text > ,
post_date list < timestamp > ,
user list < text >
) WITH bloom_filter_fp_chance = 0 . 01
AND caching = { ' keys ' : ' ALL ' , ' rows_per_partition ' : ' NONE ' }
AND comment = ' '
AND compaction = { ' class ' : ' org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy ' , ' max_threshold ' : ' 32 ' , ' min_threshold ' : ' 4 ' }
AND compression = { ' chunk_length_in_kb ' : ' 64 ' , ' class ' : ' org.apache.cassandra.io.compress.LZ4Compressor ' }
AND crc_check_chance = 1 . 0
AND dclocal_read_repair_chance = 0 . 1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0 . 0
AND speculative_retry = ' 99PERCENTILE ' ;
CREATE CUSTOM INDEX elastic__doc_idx ON twitter. " _doc " () USING ' org.elassandra.index.ExtendedElasticSecondaryIndex ' ;
기본적으로 다중 값 Elasticsearch 필드는 Cassandra 목록에 매핑됩니다. 이제 CQL을 사용하여 행을 삽입합니다.
INSERT INTO twitter. " _doc " ( " _id " , user, post_date, message)
VALUES ( ' 2 ' , [ ' Jimmy ' ], [dateof(now())], [ ' New data is indexed automatically ' ]);
SELECT * FROM twitter. " _doc " ;
_id | message | post_date | user
-- ---+--------------------------------------------------+-------------------------------------+------------
2 | [ ' New data is indexed automatically ' ] | [ ' 2019-07-04 06:00:21.893000+0000 ' ] | [ ' Jimmy ' ]
1 | [ ' Elassandra adds dynamic mapping to Cassandra ' ] | [ ' 2017-10-04 13:12:00.000000+0000 ' ] | [ ' Poulpy ' ]
( 2 rows)
그런 다음 Elasticsearch API를 사용하여 검색하세요.
curl " localhost:9200/twitter/_search?q=user:Jimmy&pretty "
다음은 샘플 응답입니다.
{
"took" : 3 ,
"timed_out" : false ,
"_shards" : {
"total" : 1 ,
"successful" : 1 ,
"skipped" : 0 ,
"failed" : 0
},
"hits" : {
"total" : 1 ,
"max_score" : 0.6931472 ,
"hits" : [
{
"_index" : " twitter " ,
"_type" : " _doc " ,
"_id" : " 2 " ,
"_score" : 0.6931472 ,
"_source" : {
"post_date" : " 2019-07-04T06:00:21.893Z " ,
"message" : " New data is indexed automatically " ,
"user" : " Jimmy "
}
}
]
}
}
This software is licensed under the Apache License, version 2 ("ALv2"), quoted below.
Copyright 2015-2018, Strapdata ([email protected]).
Licensed under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance with the License. You may obtain a copy of
the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations under
the License.