本書的主要內容有:使用Cassandra查詢語言(CQL)和cqlsh(CQL shell)。創(chuàng)建一個實用的數(shù)據(jù)模型,并與等價關系型模型比較。使用客戶端驅動程序設計和開發(fā)應用。研究集群拓樸,了解節(jié)點間如何交換數(shù)據(jù)。維持集群的高性能水平,F(xiàn)場部署、云環(huán)境部署或利用Docker和Kubernetes部署Cassandra。Cassandra與Spark、Kafka、Elasticsearch、Solr和Lucene集成。
這本書告訴你為什么要在你的應用中使用Cassandra以及如何使用。
想象一下,如果解決了伸縮性問題,你能做些什么。利用這本實用指南,你會了解Cassandra數(shù)據(jù)庫管理系統(tǒng)如何處理數(shù)百TB的數(shù)據(jù),同時仍保持跨多個數(shù)據(jù)中心的高可用性。這一版針對Cassandra 4.0做了全面更新,提供了生產(chǎn)環(huán)境中使用這個數(shù)據(jù)庫所需的技術細節(jié)和實用示例。
本書作者展示了Cassandra非關系型設計的諸多優(yōu)點,尤其對數(shù)據(jù)建模特別關注。如果你是一個開發(fā)人員、DBA或應用架構師,著力解決數(shù)據(jù)庫擴展問題或應用的前瞻性問題,這個指南將幫助你充分利用Cassandra的高速度和靈活性。
這本書會告訴你為什么要在你的應用中使用Cassandra以及如何使用。希望你能用它創(chuàng)造奇跡,獲得成功。
?D?DPatrick McFadin
DataStax開發(fā)關系部副總裁
前言
為什么選擇Apache Cassandra?
Apache Cassandra 是一個免費、開源的分布式數(shù)據(jù)存儲系統(tǒng),與關系型數(shù)據(jù)庫管理系統(tǒng)(relational database management systems,RDBMS)截然不同。
Cassandra 在2009 年1 月成為Apache 的一個孵化器項目。不久之后,Apache Cassandra 項目主席Jonathan Ellis 領導的提交者(committer)發(fā)布了Cassandra 0.3,并且此后一直穩(wěn)步推進,不斷發(fā)布新的小版本,直到里程碑版本3.0。從2017 年起,這個項目由Apache Cassandra 項目主席Nate McCall 領導,推出了3.1 版本,一直到的4.0 版本。Cassandra 已經(jīng)被Web 領域的眾多巨頭用于生產(chǎn)環(huán)境,包括Facebook、Twitter 和Netflix。Cassandra 之所以越來越受到歡迎,很大程度上是因為它提供的出色的技術特性。它具有持久性、無縫可擴展性,以及可調一致性,可以非?斓貓(zhí)行寫操作,存儲數(shù)百TB 的數(shù)據(jù),而且是去中心化的和對稱的,所以不存在單點失效問題。此外,它還是高度可用的,提供了一個基于Cassandra 查詢語言(Cassandra Query Language,CQL)的數(shù)據(jù)模型。
本書的讀者對象
這本書適用各類人員,對以下讀者都很有用。
大規(guī)模、高容量應用[ 比如Web 2.0 社交應用、電子商務網(wǎng)站、金融服務或基于傳感器的物聯(lián)網(wǎng)(IoT)系統(tǒng)] 的開發(fā)人員。
應用架構師或數(shù)據(jù)架構師,需要了解有哪些可用的高性能、去中心化、彈性數(shù)據(jù)庫選擇。
目前使用標準關系型數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)庫管理員或數(shù)據(jù)庫開發(fā)人員,需要了解如何實現(xiàn)容錯且終一致的數(shù)據(jù)庫。
希望了解Cassandra 的優(yōu)勢(和不足)的管理者,來幫助做出技術戰(zhàn)略的有關決策。
正在設計Cassandra 或其他非關系型數(shù)據(jù)庫相關項目的學生、分析師或研究人員。
這本書是一本技術指南。在很多方面,Cassandra 和其他NoSQL 數(shù)據(jù)庫代表了一種考慮數(shù)據(jù)的新思路。很多在過去15~20 年間獲得專業(yè)技能的開發(fā)人員十分精通以純粹的關系或面向對象方式來考慮數(shù)據(jù)。Cassandra 的數(shù)據(jù)模型則完全不同,開始時可能很難理解,特別是有些人已經(jīng)對數(shù)據(jù)庫是什么(以及應該是什么)有了先入為主的想法,他們可能尤其難以接受。
使用Cassandra 并不意味著你必須是一個Java 開發(fā)人員。不過,Cassandra 是用Java寫的,所以如果要深入分析源代碼,扎實地理解Java 會非常重要。這本書中的很多例子都是用Java 寫的。不過,已經(jīng)提供了很多不同語言的Cassandra 驅動程序,包括Java、Node.js、Python、C#、PHP、Ruby 和Go。
后,本書假設你已經(jīng)了解Web 是如何工作的,能夠使用集成開發(fā)環(huán)境(IDE),并對數(shù)據(jù)驅動應用的典型問題有所了解。你可能是一個經(jīng)驗豐富的開發(fā)人員或管理員,不過有時會遇到你不太熟悉的Cassandra 世界里使用的一些工具。比如使用Apache Ant 構建Cassandra,另外可以通過Git 獲得Cassandra 源代碼。有些時候我們認為你可能需要做自己的一些設置才能運行某些例子,這種情況下我們會特別說明。
本書的主要內容
這本書盡可能合理地把各章設計為獨立的指南。對于一本關于Cassandra 的書,這一點很重要,因為讀者可能有不同的工作角色,身處不同的行業(yè)。借用軟件領域的一個說法,這本書設計為是模塊化的。如果你剛接觸Cassandra,可以按順序閱讀;如果你已經(jīng)過了入門階段,也可以在后面的章節(jié)中找到你需要的內容,每一章都可以作為一個獨立的指南。
本書的結構如下:
第1 章,超越關系型數(shù)據(jù)庫
這一章將回顧獲得了極大成功的關系型數(shù)據(jù)庫的歷史,并介紹非關系型數(shù)據(jù)庫
技術(如Cassandra)的蓬勃興起。
第2 章,Cassandra 簡介
這一章介紹Cassandra,并討論它有哪些讓人激動和不同尋常的地方,它來自哪里,另外有哪些優(yōu)點。
第3 章,安裝Cassandra
這一章會帶著你安裝和運行Cassandra,并嘗試它的一些基本特性。
第4 章,Cassandra 查詢語言
這一章介紹Cassandra 的數(shù)據(jù)模型,重點強調它與傳統(tǒng)關系模型的區(qū)別。我們還會討論如何用Cassandra 查詢語言(CQL)表示這個數(shù)據(jù)模型。
第5 章,數(shù)據(jù)建模
這一章介紹Cassandra 中數(shù)據(jù)建模的原則和過程。我們會分析一個大家熟悉的領域,建立一個實際可用的模式。
第6 章,Cassandra 架構
這一章將幫助你了解讀寫操作時發(fā)生了什么,另外Cassandra 數(shù)據(jù)庫如何實現(xiàn)它的一些突出特點,如持久性和高可用性。我們會深入地理解一些更復雜的內部工作,如gossip 協(xié)議、提示移交、讀修復、Merkle 樹等。
第7 章, 設計使用Cassandra 的應用
為了讓Cassandra 架構概念更為具體,我們將研究在現(xiàn)代云應用的架構和設計中結合Cassandra 的一些常用方法。
第8 章,使用驅動程序開發(fā)應用
面向不同語言有很多驅動程序,包括Java、node.js、Python、Ruby、C# 和PHP,這些驅動程序對Cassandra 的底層API 提供了抽象。我們會幫助你了解如何利用常用驅動程序的特性用Cassandra 開發(fā)應用。
第9 章,讀寫數(shù)據(jù)
在前面各章的基礎上,我們將學習Cassandra在底層是如何讀寫數(shù)據(jù)的,還會討論批處理(batch)、輕量級事務和分頁(paging)等概念。
第10 章,配置和部署Cassandra
這一章會介紹如何指定分區(qū)器、副本放置策略和snitch。我們會建立一個集群,并查看不同配置選擇的影響。這一章會討論規(guī)劃集群部署的做法,包括使用Amazon、Microsoft 和Google 等提供商的混合云和多云部署,以及使用Docker和Kubernetes 部署和管理集群。
第11 章,監(jiān)控
一旦建立和運行集群,可能需要監(jiān)控集群的使用情況、內存模式和線程模式,了解它的一般活動。Cassandra 內置有一個功能豐富的Java 管理擴展(JMX)接口,可以用來監(jiān)控所有這些方面以及其他一些方面。
第12 章,維護
利用服務器自帶的一些工具可以讓Cassandra 集群的持續(xù)維護變得更為容易。我們會介紹如何退服一個節(jié)點、實現(xiàn)集群的負載平衡、獲得統(tǒng)計信息,以及完成其他日常的運維任務。
第13 章,性能調優(yōu)
Cassandra 突出的特性之一就是它的速度,Cassandra 非常快,不過還有很多方面可以優(yōu)化來進一步提高性能,包括內存設置、數(shù)據(jù)存儲、硬件選擇、緩存,以及緩沖區(qū)大小。
第14 章,安全
NoSQL技術經(jīng)常因為安全性方面的短板而遭到詬病。好在Cassandra 提供了認證、授權和加密特性,我們將在這一章學習如何配置這些特性。
第15 章,遷移和集成
在這本書的后,將對你的企業(yè)采用Cassandra 所涉及的步驟做一個總結,我們將從關系數(shù)據(jù)庫遷移到Cassandra 的角度來討論,會介紹數(shù)據(jù)建模、應用開發(fā)和部署的有關問題,以及Cassandra 如何集成其他流行技術,包括:
流傳輸系統(tǒng),如Apache Kafka。
搜索引擎,如Apache Lucene、Apache Solr 和ElasticSearch。
分析平臺,如Apache Spark。
這本書中使用的Cassandra 版本
這本書使用了Apache Cassandra 4.0 和DataStax Java Driver 4.1。工具輸出、日志文件、配置文件以及錯誤消息的格式和內容都采用4.0 版本中的形式,
將來的版本中可能會有改變。
討論2.0 及以后版本增加的新特性時,我們會給出新增該特性的相應版本號,方便使用較早版本的讀者考慮是否升級。
第三版新增內容
與版和第二版之間的時間跨度相比,第三版與上一個版本相隔沒有那么遠,不過還是有很多重要的變化需要指出:
成熟的數(shù)據(jù)庫
軟件工程社區(qū)的傳統(tǒng)觀點是一個新的數(shù)據(jù)庫引擎需要5~10 年才能完全成熟。讓人高興的是,Cassandra 已經(jīng)達到了這個成熟度里程碑,盡管4.0 版本肯定有一些穩(wěn)定性和可用性方面的改進,不過大部分新特性都專注于如何讓這個數(shù)據(jù)庫更易于理解和維護。本書這一版涵蓋的4.0 新特性包括:虛擬表(第11 章介紹)、審計日志(第14 章介紹)和變更數(shù)據(jù)捕獲(第15 章介紹)。
云應用中結合Cassandra
使用Cassandra 的應用類型還在不斷增長。為了幫助縮小概念與現(xiàn)實間的差距,我們?yōu)榇藢iT增加了新的一章,即第7 章。我們還更新了第15 章,對結合使用Kafka 和Cassandra 的多種模式進行了討論。
云部署中的變化
第二版出版時,盡管Docker 已經(jīng)成為應用部署的一個流行選擇,但在Docker上運行數(shù)據(jù)庫還沒有定論。在那之后,已經(jīng)取得了足夠多的進展,現(xiàn)在我們認為可以推薦在Docker 上部署Cassandra 了。Kubernetes 作為協(xié)調跨計算機集群的容器部署和維護的關鍵技術迅速崛起。在這一版中,我們更新了第10 章,增加了在Docker 上部署Cassandra 的指導說明,另外增加了Kubernetes 的內容以反映當前變化的格局。
排版約定
本書采用下述排版約定。
斜體(Italic)
表示新術語、URL、電子郵件地址、文件名和擴展名。
等寬字體(constant width)
表示程序清單,在段落中出現(xiàn)則表示程序元素,如變量、函數(shù)名、數(shù)據(jù)庫、數(shù)據(jù)類型、環(huán)境變量、語句和關鍵字。
等寬粗體(constant width bold)
表示應該替換成用戶提供的值,或者由上下文決定的值。
使用代碼示例
本書中的代碼示例可以從https://github.com/jeffreyscarpenter/cassandra-guide 和https://github.com/jeffreyscarpenter/reservation-service 下載。
本書的目的是要幫助你完成工作。一般來講,你可以在你的程序和文檔中使用這些代碼,不需要聯(lián)系我們來得到許可,除非你直接復制了大部分的代碼。例如,如果你在編寫一個程序,使用了本書中的多段代碼,這并不需要得到許可。但是出售或發(fā)行OReilly 書示例代碼則需要得到許可。回答問題時如果引用了這本書的文字和示例代碼,不需要得到許可。但是如果你的產(chǎn)品的文檔借用了本書中的大量示例代碼,則需要得到許可。
我們希望但不嚴格要求標明引用出處。引用信息通常包括書名、作者、出版商和ISBN。例如Cassandra: The Definitive Guide, Revised Edition, by Jeff Carpenter and Eben Hewitt(OReilly). Copyright2020 Jeff Carpenter, 978-1-492-09714-3。
如果你認為你在使用代碼示例時超出了合理使用范圍或者上述許可范圍,可以隨時聯(lián)系我們:permissions@oreilly.com。
OReilly 交互式Katacoda 場景
交互式Katacoda 場景模擬了真實世界生產(chǎn)環(huán)境,你可以一邊學習一邊在瀏覽器中編寫和運行代碼。本書作者開發(fā)了一組Katacoda 場景,使你能親身實踐這本書中所列的工具和做法。關于我們的交互式內容,更多信息可以訪問http://oreilly.com,查看本書的電子版(ebook),并了解我們的學習平臺提供的全部特性。
OReilly 在線學習平臺(OReilly Online Learning)
近40 年來,OReilly Media 致力于提供技術和商業(yè)培訓、知識和卓越見解,來幫助眾多公司取得成功。
我們擁有獨一無二的專家和革新者組成的龐大網(wǎng)絡,他們通過圖書、文章、會議和我們的在線學習平臺分享他們的知識和經(jīng)驗。OReilly 的在線學習平臺允許你按需訪問現(xiàn)場培訓課程、深入的學習路徑、交互式編程環(huán)境,以及OReilly 和200 多家其他出版商提供的大量文本和視頻資源。有關的更多信息,請訪問http://oreilly.com。
聯(lián)系我們
請把對本書的評價和問題發(fā)給出版社。
美國:
OReilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中國:
北京市西城區(qū)西直門南大街2號成銘大廈C座807室(100035)
奧萊利技術咨詢(北京)有限公司
針對本書我們還建有一個網(wǎng)頁,列出了有關勘誤、示例和其他信息?梢酝ㄟ^以下地址訪問這個頁面:https://oreil.ly/cassandra_revisedEd。
如果對這本書有什么意見, 或者詢問技術上的問題, 請發(fā)送電子郵件至bookquestions@oreilly.com。
有關我們的圖書、課程和新聞的更多信息,請訪問我們的網(wǎng)站:http://www.oreilly.com。
我們的Facebook: http://facebook.com/oreilly。
我們的Twitter: http://twitter.com/oreillymedia。
我們的YouTube: http://www.youtube.com/oreillymedia。
致謝
我們要感謝很多非常優(yōu)秀的人幫助這本書得以面世。
感謝我們的技術審校:Stu Hood、Robert Schneider 和Gary Dusbabek,你們?yōu)榘尕暙I了很有見地的評論,另外感謝Andrew Baker、Ewan Elliot、Kirk Damron、Corey Cole、Jeff Jirsa、Chris Judson 和Patrick McFadin 審閱了第二版。第三版由Pankaj Gallar、Cedrick Lunven、Alex Ott 和Wei Deng 審校。
感謝Jonathan Ellis 和Patrick McFadin 分別為這本書的版和第二版作序,另外感謝Nate McCall 為第三版作序。
還要感謝Patrick 對第15 章Spark 集成一節(jié)的貢獻。
感謝我們的編輯:Mike Loukides、Marie Beaugureau、Nicole Tache、Jess Haberman和Sarah Grey,感謝他們一直以來的支持,讓這本書變得更好。
Jeff 還要感謝Eben 給予的信任,給他這個機會來更新這樣一本享有盛譽的經(jīng)典著作,另外感謝Eben 自始至終的鼓勵。
后,對Cassandra 做出貢獻的很多了不起的開發(fā)人員也給了我們很大啟發(fā)。向你們致敬,感謝你們建立了這樣一個優(yōu)秀而強大的數(shù)據(jù)庫。
Jeff Carpenter是DataStax的開發(fā)布道師總監(jiān),利用他在系統(tǒng)架構、微服務和Apache Cassandra等領域的工作背景,Jeff Carpenter著力幫助開發(fā)人員和運維工程師構建可擴展、可靠且安全的分布式系統(tǒng)。Eben Hewitt是Sabre Hospitality的CTO和首席架構師,他負責技術戰(zhàn)略,同時負責設計大規(guī)模關鍵任務系統(tǒng),并領導團隊構建這些系統(tǒng)。他曾任全球酒店集團之一的CTO,另外曾擔任過OReilly Media的CIO。
目錄
序 .1
前言 .3
第1 章 超越關系型數(shù)據(jù)庫 13
1.1 關系型數(shù)據(jù)庫有什么問題? 13
1.2 關系型數(shù)據(jù)庫速覽 18
1.2.1 事務、ACID 性和兩段提交 19
1.2.2 模式 21
1.2.3 分片和無共享架構 22
1.3 網(wǎng)絡規(guī)模 25
1.4 NoSQL 的興起 26
1.5 小結 29
第2 章 Cassandra 簡介 30
2.1 Cassandra 電梯間演講 30
2.1.1 50 字Cassandra 介紹 . 30
2.1.2 分布式與去中心化 31
2.1.3 彈性可擴展 . 32
2.1.4 高可用性和容錯性 33
2.1.5 可調一致性 . 33
2.1.6 Brewer 的CAP 理論 36
2.1.7 面向行 40
2.1.8 高性能 42
2.2 Cassandra 從哪里來? 42
2.3 Cassandra 適合我的項目嗎? 44
2.3.1 大規(guī)模部署 . 44
2.3.2 大量寫操作、統(tǒng)計和分析 44
2.3.3 多地分布 45
2.3.4 混合云和多云部署 45
2.4 參與其中 45
2.5 小結 48
第3 章 安裝Cassandra 49
3.1 安裝Apache 發(fā)布版本 49
3.1.1 解壓縮下載包 50
3.1.2 里面有什么? . 50
3.2 從源碼構建 . 51
3.3 運行Cassandra . 53
3.3.1 設置環(huán)境 54
3.3.2 啟動服務器 . 55
3.3.3 停止Cassandra . 57
3.4 其他Cassandra 發(fā)布版本 . 58
3.5 運行CQL Shell . 59
3.6 基本cqlsh 命令 . 60
3.6.1 cqlsh 幫助 61
3.6.2 cqlsh 中描述環(huán)境 . 62
3.6.3 cqlsh 中創(chuàng)建鍵空間和表 . 62
3.6.4 cqlsh 中讀寫數(shù)據(jù) . 66
3.7 Docker 中運行Cassandra . 69
3.8 小結 70
第4 章 Cassandra 查詢語言 71
4.1 關系型數(shù)據(jù)模型 71
4.2 Cassandra 的數(shù)據(jù)模型 72
4.2.1 集群 75
4.2.2 鍵空間 76
4.2.3 表 . 76
4.2.4 列 . 80
4.3 CQL 類型 . 83
4.3.1 數(shù)值數(shù)據(jù)類型 83
4.3.2 文本數(shù)據(jù)類型 84
4.3.3 時間和標識數(shù)據(jù)類型 . 85
4.3.4 其他簡單數(shù)據(jù)類型 87
4.3.5 集合 89
4.3.6 元組 93
4.3.7 用戶自定義類型 93
4.4 小結 97
第5 章 數(shù)據(jù)建模 98
5.1 概念數(shù)據(jù)建模 98
5.2 RDBMS 設計 . 99
5.3 定義應用查詢 . 103
5.4 邏輯數(shù)據(jù)建模 . 105
5.4.1 酒店邏輯數(shù)據(jù)模型 106
5.4.2 預訂邏輯數(shù)據(jù)模型 109
5.5 物理數(shù)據(jù)建模 . 110
5.5.1 酒店物理數(shù)據(jù)模型 112
5.5.2 預訂物理數(shù)據(jù)模型 113
5.6 評估和改進 114
5.6.1 計算分區(qū)大小 . 114
5.6.2 計算磁盤上的大小 115
5.6.3 劃分大分區(qū) 117
5.7 定義數(shù)據(jù)庫模式 118
5.8 小結 . 123
第6 章 Cassandra 架構 . 124
6.1 數(shù)據(jù)中心和機架 124
6.2 Gossip 和故障檢測 125
6.3 Snitch . 128
6.4 環(huán)和令牌 129
6.5 虛擬節(jié)點 130
6.6 分區(qū)器 131
6.7 復制策略 132
6.8 一致性級別 133
6.9 查詢和協(xié)調器節(jié)點 134
6.10 提示移交 . 135
6.11 逆熵、修復和Merkle 樹 . 137
6.12 輕量級事務和Paxos . 138
6.13 Memtable、SSTable 和提交日志 140
6.14 布隆過濾器 143
6.15 緩存 143
6.16 合并 144
6.17 刪除和墓碑 146
6.18 管理器和服務 147
6.18.1 Cassandra 守護進程 147
6.18.2 存儲引擎 . 147
6.18.3 存儲服務 . 148
6.18.4 存儲代理 . 149
6.18.5 消息傳遞服務 149
6.18.6 流管理器 . 149
6.18.7 CQL 原生傳輸服務器 150
6.19 系統(tǒng)鍵空間 150
6.20 小結 153
第7 章 設計使用Cassandra 的應用 . 154
7.1 酒店應用設計 . 154
7.1.1 Cassandra 和微服務架構 154
7.1.2 一個酒店應用的微服務架構 156
7.1.3 識別限界上下文 157
7.1.4 識別服務 157
7.1.5 設計微服務持久存儲 159
7.2 擴展設計 162
7.2.1 二級索引 163
7.2.2 物化視圖 167
7.3 預訂服務:一個示例微服務 171
7.4 部署和集成問題 172
7.4.1 服務、鍵空間和集群 172
7.4.2 數(shù)據(jù)中心和負載平衡 173
7.4.3 微服務間的交互 173
7.5 小結 . 175
第8 章 使用驅動程序開發(fā)應用 176
8.1 DataStax Java 驅動程序 . 177
8.1.1 開發(fā)環(huán)境配置 . 178
8.1.2 連接集群 179
8.1.3 語句 . 181
8.1.4 簡單語句 181
8.1.5 準備語句 183
8.1.6 查詢生成器 185
8.1.7 對象映射器 187
8.1.8 異步執(zhí)行 191
8.1.9 驅動程序配置 . 193
8.1.10 元數(shù)據(jù) . 200
8.1.11 調試和監(jiān)控 202
8.2 DataStax Python 驅動程序 203
8.3 DataStax Node.js 驅動程序 204
8.4 DataStax C# 驅動程序 205
8.5 其他Cassandra 驅動程序 205
8.6 小結 . 207
第9 章 讀寫數(shù)據(jù) 208
9.1 寫 208
9.1.1 寫一致性級別 . 208
9.1.2 Cassandra 寫路徑 210
9.1.3 文件寫入磁盤 . 212
9.1.4 輕量級事務 215
9.1.5 批處理 218
9.2 讀 221
9.2.1 讀一致性級別 . 221
9.2.2 Cassandra 讀路徑 223
9.2.3 讀修復 225
9.2.4 區(qū)間查詢、排序和過濾 . 228
9.2.5 分頁 . 231
9.3 刪除 . 233
9.4 小結 . 236
第10 章 配置和部署Cassandra . 237
10.1 Cassandra 集群管理器 . 237
10.1.1 創(chuàng)建集群 . 238
10.1.2 為集群增加節(jié)點 . 241
10.1.3 動態(tài)加入環(huán) 243
10.2 節(jié)點配置 . 244
10.2.1 種子節(jié)點 . 244
10.2.2 Snitch 245
10.2.3 分區(qū)器 . 247
10.2.4 令牌和虛擬節(jié)點 . 249
10.2.5 網(wǎng)絡接口 . 250
10.2.6 數(shù)據(jù)存儲 . 251
10.2.7 啟動和JVM 設置 253
10.3 規(guī)劃集群部署 254
10.3.1 集群拓撲和復制策略 255
10.3.2 確定集群規(guī)模 258
10.3.3 選擇實例 . 259
10.3.4 存儲 259
10.3.5 網(wǎng)絡 260
10.4 云部署 . 261
10.4.1 Amazon Web 服務 262
10.4.2 Google 云平臺 . 265
10.4.3 Microsoft Azure 266
10.5 小結 266
第11 章 監(jiān)控 268
11.1 用JMX 監(jiān)控Cassandra 268
11.2 Cassandra 的MBean . 271
11.2.1 數(shù)據(jù)庫MBean . 272
11.2.2 集群相關MBean . 276
11.2.3 內部MBean 278
11.3 用nodetool 監(jiān)控 . 279
11.3.1 獲得集群信息 280
11.3.2 獲得統(tǒng)計信息 283
11.4 虛擬表 285
11.4.1 系統(tǒng)虛擬模式 286
11.4.2 系統(tǒng)視圖 . 287
11.5 指標 290
11.6 日志 292
11.6.1 檢查日志文件 295
11.6.2 全量查詢日志 296
11.7 小結 298
第12 章 維護 . 299
12.1 健康檢查 . 299
12.2 常見維護任務 300
12.2.1 刷新輸出 . 300
12.2.2 清理 301
12.2.3 修復 302
12.2.4 重建索引 . 307
12.2.5 移動令牌 . 308
12.3 增加節(jié)點 . 308
12.3.1 向已有的數(shù)據(jù)中心增加節(jié)點 . 308
12.3.2 向集群增加數(shù)據(jù)中心 309
12.4 處理節(jié)點故障 311
12.4.1 修復失敗節(jié)點 311
12.4.2 替換節(jié)點 . 312
12.4.3 移除節(jié)點 . 313
12.5 升級Cassandra . 317
12.6 備份和恢復 319
12.6.1 建立快照 . 320
12.6.2 清除快照 . 321
12.6.3 啟用增量備份 322
12.6.4 從快照恢復 322
12.7 SSTable 實用工具 323
12.8 維護工具 . 325
12.8.1 Netflix Priam 325
12.8.2 DataStax OpsCenter 325
12.8.3 Cassandra Sidecars . 325
12.8.4 Cassandra Kubernetes Operators . 327
12.9 小結 330
第13 章 性能調優(yōu) . 331
13.1 管理性能 . 331
13.1.1 設置性能目標 331
13.1.2 基準測試和壓力測試 333
13.1.3 監(jiān)控性能 . 338
13.1.4 分析性能問題 340
13.1.5 跟蹤 340
13.1.6 調優(yōu)方法 . 343
13.2 緩存 344
13.2.1 鍵緩存 . 344
13.2.2 行緩存 . 345
13.2.3 塊緩存 . 346
13.2.4 計數(shù)器緩存 347
13.2.5 保存的緩存設置 . 347
13.3 Memtable 348
13.4 提交日志 . 349
13.5 SSTables . 350
13.6 提示移交 . 351
13.7 合并 352
13.8 并發(fā)和線程 356
13.9 網(wǎng)絡和超時 357
13.10 JVM 設置 . 359
13.10.1 內存 360
13.10.2 垃圾回收 360
13.11 小結 364
第14 章 安全 . 365
14.1 認證和授權 367
14.1.1 密碼認證器 367
14.1.2 使用CassandraAuthorizer 371
14.1.3 基于角色的訪問控制 373
14.2 加密 375
14.2.1 SSL、TLS 和證書 . 376
14.2.2 節(jié)點間加密 379
14.2.3 客戶端- 節(jié)點間加密 . 381
14.3 JMX 安全性 382
14.3.1 保護JMX 訪問安全 383
14.3.2 安全MBean 385
14.4 審計日志 . 386
14.5 小結 389
第15 章 遷移和集成 390
15.1 了解何時遷移 390
15.2 調整數(shù)據(jù)模型 391
15.2.1 轉換實體 . 393
15.2.2 轉換關系 . 394
15.3 調整應用 . 396
15.3.1 重構數(shù)據(jù)訪問 397
15.3.2 維護一致性 398
15.3.3 遷移存儲過程 400
15.4 規(guī)劃部署 . 405
15.5 遷移數(shù)據(jù) . 406
15.5.1 零停機遷移 406
15.5.2 批量加載 . 407
15.6 常見集成 . 409
15.6 1 使用Apache Kafka 管理數(shù)據(jù)流 409
15.6.2 用Apache Lucene、SOLR 和Elasticsearch 搜索 412
15.6.3 使用Apache Spark 分析數(shù)據(jù) 413
15.7 小結 421