Elassandra เป็นการเผยแพร่ Apache Cassandra รวมถึงเครื่องมือค้นหา Elasticsearch Elassandra คือฐานข้อมูลและเครื่องมือค้นหาบนมัลติคลาวด์แบบหลายมาสเตอร์ที่รองรับการจำลองแบบข้ามศูนย์ข้อมูลหลายแห่งในโหมดแอคทีฟ/แอคทีฟ
โค้ด Elasticsearch ถูกฝังอยู่ในโหนด Cassanda ซึ่งนำเสนอฟีเจอร์การค้นหาขั้นสูงบนตาราง Cassandra และ Cassandra ทำหน้าที่เป็นที่เก็บข้อมูล Elasticsearch และที่จัดเก็บการกำหนดค่า
Elassandra รองรับ vnode ของ 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 จะคัดลอก metadata.version ปัจจุบันลงในตาราง elastic_admin.metadata_log ใหม่โดยอัตโนมัติ เพื่อหลีกเลี่ยงความไม่สอดคล้องกันของการแมป Elasticsearch คุณต้องหลีกเลี่ยงการอัปเดตการแมปในขณะที่กำลังดำเนินการอัปเกรดทีละส่วน เมื่ออัปเกรดโหนดทั้งหมดแล้ว elastic_admin.metadata จะไม่ถูกใช้อีกต่อไปและสามารถลบออกได้ จากนั้น คุณจะได้รับประวัติการอัปเดตการแมปจาก elastic_admin.metadata_log ใหม่ และทราบว่าโหนดใดได้อัปเดตการแมป เมื่อใดและด้วยสาเหตุใด
ขณะนี้ Elassandra 6.2.3.8+ จัดการการแมป elasticsearch ใน CQL schema อย่างสมบูรณ์ผ่านการใช้ส่วนขยายสกีมา CQL (ดู system_schema.tables , ส่วนขยาย คอลัมน์ ) ส่วนขยายตารางเหล่านี้และการอัปเดตสคีมา CQL ที่เป็นผลจากการสร้าง/การแก้ไขดัชนี elasticsearch จะได้รับการอัปเดตในการอัปเดตสคีมาอะตอมมิกแบบเป็นชุดเพื่อให้แน่ใจว่ามีความสอดคล้องเมื่อมีการอัปเดตพร้อมกัน นอกจากนี้ ส่วนขยายเหล่านี้จะถูกจัดเก็บไว้ในไบนารีและรองรับการอัปเดตบางส่วนเพื่อให้มีประสิทธิภาพมากขึ้น ด้วยเหตุนี้ การแมป 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"
} '
จากนั้นค้นหาใน Cassandra:
bin/cqlsh -e " SELECT * from twitter. " _doc " "
เบื้องหลัง Elassandra ได้สร้าง Keyspace twitter
และ table _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.