Elassandra — это дистрибутив Apache Cassandra, включающий поисковую систему Elasticsearch. Elassandra — это мультиоблачная база данных и поисковая система с несколькими хозяевами и поддержкой репликации между несколькими центрами обработки данных в активном/активном режиме.
Код Elasticsearch встроен в узлы Cassanda, обеспечивая расширенные функции поиска в таблицах Cassandra, а Cassandra служит хранилищем данных и конфигурации Elasticsearch.
Elassandra поддерживает vnodes Cassandra и масштабируется по горизонтали, добавляя больше узлов без необходимости перераспределения индексов.
Документация проекта доступна по адресу doc.elassandra.io.
Для пользователей Cassandra elassandra предоставляет функции Elasticsearch:
Для пользователей Elasticsearch elassandra предоставляет полезные функции:
Краткое руководство по запуску кластера Elassandra с одним узлом в Docker.
Разверните Elassandra, запустив Google Kubernetes Engine:
<<<<<<< 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+, вам следует включить сжатие X1, добавив -Des.compress_x1=true в ваш conf/jvm.options и перезапустив все узлы. Узлы с версией 6.8.4.2+ могут читать сжатые и несжатые файлы X1.
До версии 6.2.3.21 коэффициент репликации Cassandra для пространства ключей elasic_admin (и elastic_admin_[datacenter.group]) автоматически настраивался в соответствии с количеством узлов центра обработки данных. Начиная с версии 6.2.3.21, поскольку она оказывает влияние на производительность больших кластеров, теперь ваш администратор Elassandra должен правильно настроить коэффициент репликации для этого пространства ключей. Имейте в виду, что обновления сопоставлений Elasticsearch зависят от транзакции PAXOS, для успешной работы которой требуются узлы QUORUM, поэтому коэффициент репликации должен быть не менее 3 в каждом центре обработки данных.
Версия метаданных Elassandra 6.2.3.19 теперь использует таблицу Cassandra elastic_admin.metadata_log (которая была elastic_admin.metadata с 6.2.3.8 по 6.2.3.18) для хранения истории обновлений сопоставления elasticsearch и автоматического восстановления после возможной проблемы с тайм-аутом записи PAXOS.
При обновлении первого узла кластера Elassandra автоматически копирует текущую версию метаданных в новую таблицу elastic_admin.metadata_log . Чтобы избежать несогласованности сопоставления Elasticsearch, вам следует избегать обновления сопоставления во время последовательного обновления. После обновления всех узлов файл elastic_admin.metadata больше не используется и его можно удалить. Затем вы можете получить историю обновлений сопоставления из нового журнала elastic_admin.metadata_log и узнать, какой узел обновил сопоставление, когда и по какой причине.
Elassandra 6.2.3.8+ теперь полностью управляет отображением elasticsearch в схеме CQL посредством использования расширений схемы CQL (см. system_schema.tables , расширения столбцов). Эти расширения таблиц и обновления схемы 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 = ' ' ;
ВНИМАНИЕ: из-за расширений таблиц CQL, используемых Elassandra, некоторые старые версии cqlsh могут привести к следующему сообщению об ошибке : «Объект «модуль» не имеет атрибута «viewkeys». . Это происходит из старого драйвера Python cassandra, встроенного в 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"
} '
Затем найдите Кассандру:
bin/cqlsh -e " SELECT * from twitter. " _doc " "
За кулисами Элассандра создала новый twitter
Keyspace и таблицу _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.