日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在AWS中设置Cassandra集群

發布時間:2023/12/3 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在AWS中设置Cassandra集群 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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(圖像),例如帶有打包程序,但是由于僅安裝了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中设置Cassandra集群的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。