aws集群重启_在AWS中设置Cassandra集群
aws集群重啟
Apache Cassandra是一個NoSQL數據庫,它使用一致的哈希機制可以輕松進行水平擴展。 七年前,我嘗試了它,并決定不將其用于我的附帶項目,因為它太新了。 現在情況有所不同,Cassandra早已建立起來,背后有一家公司(DataStax),還有更多的工具,文檔和社區支持。 因此,我再次決定嘗試Cassandra。
這次我需要它在AWS上的集群中運行,因此我繼續設置了這樣的集群。 谷歌搜索如何執行該操作會給出一些有趣的結果,例如this , this和this ,但是它們要么不完整,要么已過時,或者有太多無關緊要的細節。 因此,它們只是適度的幫助。
我的目標是使用CloudFormation(或潛在的Terraform)來啟動具有Cassandra自動縮放組(在單個區域中)的堆棧,該組可以隨增加組中節點的數量而輕松地增長。
另外,為了使Web應用程序連接到Cassandra而不用對節點IP進行硬編碼,我想在所有為我做輪詢的Cassandra節點的前面都有一個負載均衡器。 替代方法是進行客戶端輪詢 ,但這將意味著客戶端上的一些額外復雜性,而在Cassandra自動擴展組前面使用負載平衡器似乎可以避免。
我的CloudFormation JSON的相關位可以在這里看到 。 它能做什么:
- 設置3個私有子網(歐洲西部每個可用區1個)
- 創建一個安全組,該安全組允許傳入和傳出端口允許cassandra接受連接(9042),并允許節點進行八卦(7000/7001)。 請注意,只能從VPC內部訪問端口,不允許外部連接。 SSH僅通過堡壘主機 。
- 為所有客戶端將連接的端口9042定義一個TCP負載平衡器。 負載均衡器還需要定義一個所謂的“目標組”。
- 配置具有預先配置的節點數的自動擴展組。 自動擴展組引用了“目標組”,因此負載均衡器始終會看到自動擴展組中的所有節點
- 根據啟動配置,自動縮放組中的每個節點都是相同的。 啟動配置在初始化時運行一些腳本。 這些腳本將在每個節點上運行-最初是在一個節點死亡時,或者在某個節點死于另一個節點而又或者群集必須增長時。 這些腳本是從S3中獲取的,您可以在其中手動或通過自動過程發布(和版本化)腳本。
- 注意:這不會配置特定的EBS卷,實際上,如果實例存儲不足,則可能需要配置并附加它們。 不過,由于數據已安全復制,因此不必擔心節點會死。
那是最簡單的部分–一堆AWS資源和端口配置。 特定于Cassandra的設置要困難一些,因為它需要了解Cassandra的功能。
這兩個腳本是setup-cassandra.sh和update-cassandra-cluster-config.py ,因此是bash和python。 Bash用于設置機器,而python用于特定于Cassandra的東西。 除了使用bash腳本外,還可以使用預先構建的AMI(映像),例如帶有打包程序的AMI(鏡像),但是由于僅安裝了2個軟件,因此我認為支持AMI會有點開銷。
bash腳本可以在這里看到 ,只需安裝Java 8和最新的Cassandra,運行python腳本,運行Cassandra服務,并創建(如果需要)具有正確復制配置的鍵空間。 這里有一些注意事項– cassandra.yaml.template可以通過cloudformation腳本提供,而不是通過bash來獲取(并通過存儲桶名稱); 您也可以在python腳本本身中獲取它-這是優先選擇的問題。 未將Cassandra配置為與SSL配合使用,這通常不是一個好主意,但是SSL配置超出了基本設置的范圍。 最后,腳本等待Cassandra進程運行(使用while / sleep循環),然后根據需要創建鍵空間。 必須使用NetworkTopologyStrategy創建密鑰空間(=數據庫),并且必須配置特定數據中心(= AWS區域)的副本數。 對于3個可用區域(其中有節點),該值為3。 這意味著每個可用區中都有一個副本(盡管確實如此,但看起來像一個“機架”)。
python腳本做了一些非常重要的配置-如果沒有它們,集群將無法工作。 (我通常不會使用Python,因此請隨時批評我的Python代碼)。 該腳本執行以下操作:
- 獲取當前的自動伸縮組詳細信息(使用AWS EC2 API)
- 按時間排序實例
- 獲取組中的第一個實例以將其分配為種子節點
- 在配置文件中設置種子節點(通過替換占位符)
- 將listen_address(因此rpc_address)設置為節點的專用IP,以允許Cassandra偵聽傳入的連接
指定種子節點很重要,因為所有群集節點都必須通過指定至少一個種子來加入群集。 您可以獲取前兩個節點,而不僅僅是一個,但這無關緊要。 請注意,種子節點并不總是固定的,它只是集群中最古老的節點。 如果某個最舊的節點在某個時刻終止,則每個新節點將使用第二個最舊的節點作為種子。
我沒有顯示的是cassandra.yaml.template文件。 它基本上是標準Cassandra安裝中的cassandra.yaml文件的副本,但有一些更改:
- cluster_name修改為與您的應用程序名稱匹配。 這只是出于易于理解的目的,與您設置的內容無關。
- allocate_tokens_for_keyspace: your_keyspace取消注釋,并且該鍵空間設置為與您的主鍵空間匹配。 這將啟用Cassandra 3.0中的新令牌分發算法 。 它允許在節點之間平均分配數據。
- endpoint_snitch: Ec2Snitch設置了Ec2Snitch而不是SimpleSnitch來利用AWS元數據API。 請注意,此設置位于單個區域中。 對于多區域而言,還有另一個小問題,以及暴露端口和更改廣播地址的一些其他復雜情況。
- 如上所述,將$ {private_ip}和$ {seeds}占位符放置在適當的位置(IP的listen_address和rpc_address)以允許替換。
通過它們,您可以將Cassandra集群作為AWS堆棧的一部分運行,該集群可以自動擴展,并且不需要任何手動干預-既無需設置,也無需擴展。 好吧,據稱–一旦碰到現實的用例,可能必須解決一些問題。 為了使客戶端連接到群集,只需使用負載平衡器DNS名稱(您可以在每個應用程序節點上的配置文件中打印它)
翻譯自: https://www.javacodegeeks.com/2017/10/setting-cassandra-cluster-aws.html
aws集群重啟
總結
以上是生活随笔為你收集整理的aws集群重启_在AWS中设置Cassandra集群的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小米 Redmi Note 13 Pro
- 下一篇: 极摩客推出 NucBox M3 迷你 P