Elassandra 是一個 Apache Cassandra 發行版,包括 Elasticsearch 搜尋引擎。 Elassandra 是一個多主多雲資料庫和搜尋引擎,支援以主動/主動模式跨多個資料中心進行複製。
Elasticsearch 程式碼嵌入在 Cassanda 節點中,在 Cassandra 表上提供進階搜尋功能,並且 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。
在版本 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 會自動將目前的metadata.version複製到新的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可能會導致以下錯誤訊息“'module' object has no attribute '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.