Docker 的優點
989
2025-03-31
一、Cassandra是什么
1.1、應用場景
1.1.1、互聯網類應用
1.1.2、多活
1.1.3、業務靈活多變
1.1.4、寫密集、統計和分析型工作
1.1.5、數據驅動的業務
一、Cassandra是什么
1.1、應用場景
1.1.1、互聯網類應用
1.1.2、多活
1.1.3、業務靈活多變
1.1.4、寫密集、統計和分析型工作
1.1.5、數據驅動的業務
1.2、名詞解釋
1.3、Cassandra vs. MongoDB vs. Couchbase vs. HBase
1.4、常用端口
二、架構簡介
2.1. 核心結構
2.2. 核心組件
三、安裝
3.3、docker安裝
3.4、Docker創建Cassandra集群
四、常見配置
4.1、Cassandra開啟遠程連接
4.2、配置補全功能
4.3、安裝Windows客戶端
4.4、版本問題
五、參考文檔
Cassandra([k??s?ndr?])是云原生和微服務化場景中最好的NoSQL數據庫。
一、Cassandra是什么
高可用性和可擴展的分布式數據庫
Apache Cassandra?是一個開源分布式NoSQL數據庫系統,可提供當今最苛刻的應用程序所需的高可用性、高性能和線性可伸縮性。它提供了跨云服務提供商、數據中心和地理位置的操作簡便性和輕松的復制,并且可以在混合云環境中每秒處理PB級信息和數千個并發操作。
在Hadoop關聯的項目中對Cassandra的解釋是:A scalable multi-master database with no single points of failure.
可以看出,高可用性和高可伸縮性是Cassandra最閃亮的特點。沒有單點故障。
1.1、應用場景
1.1.1、互聯網類應用
Cassandra能夠支持大并發低延時的訪問需求,具備高可用和彈性擴容能力,適合日志、消息、feed流、訂單、賬單、網站等各種大數據量的互聯網在線應用場景。
1.1.2、多活
Cassandra原生支持多DC部署方式,實現更好的可用性和容災能力。云數據庫Cassandra可以很容易添加新的數據中心,不同的數據中心可以設定不同的副本數,既可以作為跨數據中心多活高可用,也可以作備份容災或離線分析使用。
1.1.3、業務靈活多變
云數據庫Cassandra的數據模型靈活,對表結構的變更是一個非常輕量級的操作,非常適用于初創型的業務需求,讓您的數據庫能更快地跟上業務改進的步伐。
1.1.4、寫密集、統計和分析型工作
Cassandra是為優異的寫吞吐量而特別優化的,能夠支持很高的多客戶線程并發寫性能和突發的峰值,這些特性使得Cassandra能夠很好支持寫多于讀的場景,例如用戶狀態更新、社交網絡、建議/評價以及應用統計等。
1.1.5、數據驅動的業務
云數據庫Cassandra可以支持數百個節點的集群規模,適合大數據量的存儲。在一些需要應用大量數據對用戶行為進行分析的場景中,可以通過整合多種數據來源,存儲用戶行為數據,構建用戶畫像,實時存儲在Cassandra中,提供大數據風控、推薦等服務。
1.2、名詞解釋
1.3、Cassandra vs. MongoDB vs. Couchbase vs. HBase
Apache Cassandra?在高負載下提供了更高的性能,在許多用場景中都超過了它的NoSQL數據庫競爭對手。
Apache Cassandra: 高度可伸縮、高性能的分布式數據庫,設計用于處理許多商用服務器上的大量數據,提供高可用性,沒有單點故障。
Apache HBase: 基于谷歌的BigTable的開源、非關系型、分布式數據庫,是用Java編寫的。它是Apache Hadoop項目的一部分,在HDFS上運行,為Hadoop提供類似于BigTable的功能。
MongoDB: 跨平臺的面向文檔的數據庫系統,避開了傳統的基于表的關系數據庫結構,轉而使用具有動態模式的類JSON文檔,從而使數據在某些類型的應用程序中的集成更加容易和快捷。
Couchbase: 為交互式應用程序優化的分布式NoSQL面向文檔的數據庫。
1.4、常用端口
7199 - JMX(8080 pre Cassandra 0.8.xx)
7000 - 節點間通信(如果啟用了TLS,則不使用)
7001 - TLS節點間通信(使用TLS時使用)
9160 - Thrift客戶端API
9042 - CQL本地傳輸端口
二、架構簡介
Cassandra被設計用來處理跨多個節點的大數據工作負載,沒有單點故障。Cassandra通過采用跨同構節點的對等分布式系統來解決故障問題,其中數據分布在集群中的所有節點中。每個節點使用點對點gossip通信協議頻繁地交換自己和集群中其他節點的狀態信息。每個節點上按順序寫入的提交日志被捕獲寫入活動,以確保數據的持久性。然后,數據被編入索引并寫入內存結構,稱為memtable,它類似于回寫緩存。每次內存結構滿了,數據就被寫到一個SSTables數據文件的磁盤上。所有寫操作都會自動分區并在整個集群中復制。Cassandra定期使用一個稱為壓縮的進程合并SSTables,丟棄用tombstone標記為要刪除的過時數據。為了確保集群中的所有數據保持一致,需要使用各種修復機制。
Cassandra是一個分區的行存儲數據庫,其中行被組織成具有所需主鍵的表。Cassandra的體系結構允許任何授權用戶連接到任何數據中心中的任何節點,并使用CQL語言訪問數據。為了易于使用,CQL使用與SQL類似的語法并處理表數據。通常,集群中的每個應用程序都有一個鍵空間,由許多不同的表組成。
客戶端讀或寫請求可以發送到集群中的任何節點。當客戶端使用請求連接到某個節點時,該節點充當該特定客戶端操作的協調器。協調器充當客戶端應用程序和擁有所請求數據的節點之間的代理。協調器根據集群的配置方式確定環形中的哪些節點應該獲得請求。
2.1. 核心結構
? Node
存儲數據的地方。它是Cassandra的基礎設施組件
? datacenter
相關節點的集合。數據中心可以是物理數據中心,也可以是虛擬數據中心。不同的工作負載應該使用單獨的數據中心,無論是物理的還是虛擬的。復制由數據中心設置。使用單獨的數據中心可以防止Cassandra事務受到其他工作負載的影響,并使請求彼此接近以降低延遲。根據復制因子,可以將數據寫入多個數據中心。數據中心絕不能跨越物理位置。
? Cluster
一個集群包含一個或多個數據中心。它可以跨越物理位置。
? Commit log
為了持久性,所有數據寫入之前都要首先寫入提交日志(日志寫入優先)。所有數據都刷新到SSTables之后,就可以對其進行歸檔、刪除或回收。
? SSTable(Sorted String Table)
一個SSTable是一個不可變的數據文件,Cassandra定期將memtables寫入其中。僅追加SSTables并按順序存儲在磁盤上,并為每個Cassandra表維護SSTables。
? CQL Table
按表行獲取的有序列的集合。一張表由多列組成,并且有一個主鍵。
2.2. 核心組件
? Gossip
一種對等通信協議,用于發現和共享Cassandra集群中其他節點的位置和狀態信息。Gossip息也由每個節點本地保存,以便在節點重新啟動時立即使用。
? Partitioner
分區程序確定哪個節點將接收一段數據的第一個副本,以及如何跨集群中的其他節點分發其他副本。每一行數據都由一個主鍵唯一地標識,主鍵可能與其分區鍵相同,但也可能包含其他集群列。Partitioner是一個哈希函數,它從一行的主鍵派生標記。分區程序使用令牌值來確定集群中的哪些節點接收該行的副本。Murmur3Partitioner是新Cassandra集群的默認分區策略,幾乎在所有情況下都是新集群的正確選擇。
? Replication factor
整個集群中的副本總數。副本因子1表示在一個節點上每一行只有一個副本。副本因子2表示每一行有兩個副本,其中每個副本位于不同的節點上。所有的副本都同樣重要,沒有主副本。你可以為每個數據中心定義副本因子。通常,應該將副本策略設置為大于1,但不超過集群中的節點數。
? Replica placement strategy
Cassandra將數據的副本存儲在多個節點上,以確保可靠性和容錯能力。副本策略決定將副本放在哪個節點上。數據的第一個副本就是第一個副本,它在任何意義上都不是唯一的。強烈建議使用NetworkTopologyStrategy策略,因為在將來需要擴展時,可以輕松擴展到多個數據中心。創建keyspace時,必須定義副本放置策略和所需的副本數。
? Snitch
snitch將一組機器定義為數據中心和機架(拓撲),副本策略使用這些數據中心和機架放置副本。
在創建集群時,必須配置一個snitch。所有的snitch都使用一個動態的snitch層,該層監視性能并選擇最佳副本進行讀取。它是默認啟用的,建議在大多數部署中使用。在cassandra.yaml配置文件中為每個節點配置動態snitch閾值。
? cassandra.yaml
用于設置集群的初始化屬性、表的緩存參數、調優和資源利用率的屬性、超時設置、客戶端連接、備份和安全性的主要配置文件。
三、安裝
官網:https://cassandra.apache.org/
下載:https://cassandra.apache.org/download/
安裝過程:https://cassandra.apache.org/doc/latest/getting_started/installing.html
歷史版本:http://archive.apache.org/dist/cassandra/
最新rpm版本:https://downloads.apache.org/cassandra/redhat
http://apache.mirror.digitalpacific.com.au/cassandra/
3.3、docker安裝
https://hub.docker.com/_/cassandra
docker pull cassandra:3.11 docker run --name lhrcassandra311 -d cassandra:3.11 docker exec -it lhrcassandra311 bash
3.4、Docker創建Cassandra集群
Docker Hub上已經提供了Cassandra的官方鏡像,可以方便地創建單節點Cassandra實例或Cassandra集群。Cassandra采用去中心化的集群架構,沒有master節點的概念;但是會有seed節點在新節點連入時通知當前集群。
下面的Docker Compose模板將為你創建一個包含3個節點的Cassandra集群,其中第一個容器“cassandra-1”為seed節點。
mkdir -p /cassandra/ cat > /cassandra/docker-compose.yml <<"EOF" version: '2' services: cassandra-1: image: cassandra:3.11 container_name: cassandra-1 environment: - CASSANDRA_BROADCAST_ADDRESS=cassandra-1 ports: - 7000 restart: always cassandra-2: image: cassandra:3.11 container_name: cassandra-2 environment: - CASSANDRA_BROADCAST_ADDRESS=cassandra-2 - CASSANDRA_SEEDS=cassandra-1 ports: - 7000 depends_on: - cassandra-1 restart: always cassandra-3: image: cassandra:3.11 container_name: cassandra-3 environment: - CASSANDRA_BROADCAST_ADDRESS=cassandra-3 - CASSANDRA_SEEDS=cassandra-1 ports: - 7000 depends_on: - cassandra-2 restart: always EOF
注意修改鏡像的版本。
現在,我們可以輕松利用 docker-compose 命令來啟動Cassandra集群了
cd /cassandra/ docker-compose up -d [root@docker35 cassandra]# docker-compose up -d Building with native build. Learn about native build in Compose here: https://docs.docker.com/go/compose-native-build/ Creating network "cassandra_default" with the default driver Creating cassandra-1 ... done Creating cassandra-2 ... done Creating cassandra-3 ... done [root@docker35 cassandra]#
啟動之后,我們可以方便地查看集群狀態
[root@docker35 cassandra]# docker-compose ps Name Command State Ports --------------------------------------------------------------------------------------------------------------------- cassandra-1 docker-entrypoint.sh cassa ... Up 0.0.0.0:1049->7000/tcp, 7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp cassandra-2 docker-entrypoint.sh cassa ... Up 0.0.0.0:1048->7000/tcp, 7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp cassandra-3 docker-entrypoint.sh cassa ... Up 0.0.0.0:1047->7000/tcp, 7001/tcp, 7199/tcp, 9042/tcp, 9160/tcp [root@docker35 cassandra]# docker exec -it cassandra-1 cqlsh cassandra-2 -e "DESCRIBE CLUSTER" Cluster: Test Cluster Partitioner: Murmur3Partitioner
四、常見配置
4.1、Cassandra開啟遠程連接
修改/etc/cassandra/default.conf/cassandra.yaml
sed -i 's/start_rpc: false/start_rpc: true/g' /etc/cassandra/default.conf/cassandra.yaml sed -i 's/rpc_address: localhost/rpc_address: 0.0.0.0/g' /etc/cassandra/default.conf/cassandra.yaml sed -i 's/# broadcast_rpc_address: 1.2.3.4/broadcast_rpc_address: 1.2.3.4/g' /etc/cassandra/default.conf/cassandra.yaml -- 遠程測試9042端口 telnet 192.168.66.35 9042 -- 連接 cqlsh 172.17.0.17 cqlsh 172.17.0.17 9042
4.2、配置補全功能
1、進入python2的環境變量下 2、執行 pip install pyreadline
4.3、安裝Windows客戶端
執行報錯:
C:\Users\lhrxxt>cqlsh 192.168.66.35 9042 File "D:\Program Files\apache-cassandra-3.4-bin\apache-cassandra-3.4\bin\\cqlsh.py", line 146 except ImportError, e: ^ SyntaxError: invalid syntax
原因:不支持Python 3,需要修改為python 2
解決:安裝Python 2,修改文件D:\Program Files\apache-cassandra-3.4-bin\apache-cassandra-3.4\bin\cqlsh.bat,添加一行:set PATH=D:\Program Files\Python\Python27,如下:
重新執行即可。
4.4、版本問題
C:\Users\lhrxxt>cqlsh 192.168.66.35 9042 Connection error: ('Unable to connect to any servers', {'192.168.66.35': ProtocolError("cql_version '3.4.2' is not supported by remote (w/ native protocol). Supported versions: [u'3.4.4']",)}) C:\Users\lhrxxt>cqlsh 192.168.66.35 9042 --cqlversion=3.4.4 Connected to Test Cluster at 192.168.66.35:9042. [cqlsh 5.0.1 | Cassandra 3.11.10 | CQL spec 3.4.4 | Native protocol v4] Use HELP for help. WARNING: pyreadline dependency missing. Install to enable tab completion.
五、參考文檔
https://cassandra.apache.org/download/
https://cassandra.apache.org/doc/latest/architecture/index.html
https://www.datastax.com/products/compare/nosql-performance-benchmarks
https://docs.datastax.com/en/cassandra-oss/3.x/
https://docs.datastax.com/en/cassandra-oss/3.x/cassandra/architecture/archDataDistributeHashing.html
https://docs.datastax.com/en/cassandra-oss/3.x/cassandra/dml/dmlIntro.html
https://help.aliyun.com/document_detail/126637.html?spm=a2c4g.11186623.6.542.268a7f3bIk5dap
https://www.w3cschool.cn/cassandra/
云數據庫 GaussDB(for Cassandra) 數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。