在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349687.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s停止服务_使用 K8S 几年后,这些技术专家有话要说

9 月 7 日下午,在深圳南山软件产业基地,腾讯云 K8S & 云原生技术开放日成功落幕,来自腾讯、灵雀云、超参数科技、虎牙等资深技术专家与现场开发者共同探讨企业落地 K8S 的过程中遇到的难点以及解决问题的方法。K8S 逐渐成为容器编排的标准…

spring的事件机制实战

理论 在分布式场景下,实现同步转异步的方式有三种方式: 1.异步线程池执行;比如借助Asyn注解,放到spring自带的线程池中去执行; 2.放到消息队列中,在消费者的代码中异步的消费,执行相关的逻辑&am…

苹果wifi网速慢怎么办_所以,WiFi和4G到底哪个更耗电?

来源 | 中科院物理所(ID:cas-iop)编辑 | 椒盐猫巨烦现代人行走江湖,必备三件法宝:手机,网络,充电宝。即便在4G基站遍布各个旮旮角角的今天,当你带着心仪的人儿走进一家咖啡店,第一件事仍然是低声…

问题 1073: 弟弟的作业

题目描述你的弟弟刚做完了“100以内数的加减法”这部分的作业,请你帮他检查一下。每道题目(包括弟弟的答案)的格式为abc或者a-bc,其中a和b是作业中给出的,均为不超过100的非负整数;c是弟弟算出的答案&#…

苹果4怎么越狱_苹果手机如何截屏

很多用过苹果手机的用户对苹果的评价可是非常高对,苹果手机最大的特点便是手感好,并且使用一年以上也不会卡机现象,因此苹果手机才得到了广泛的关注。苹果手机的截屏程序与安卓手机不同,一般情况下,安卓手机是可以设置…

简单的Spring Boot管理员设置

Spring Boot Admin是一个不错的仪表板,用于监视您的Spring Boot应用程序。 但是,设置它并不是一件容易的事。 该文档概述了两个选项 : 在连接到admin应用程序的启动应用程序中包括一个客户端库–这要求将admin应用程序部署在公共位置或至少可…

NOIP模拟测试19「count·dinner·chess」

反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍然认为不可实现 0分 所以T1是什么样的难题呢 即使暴力也有60分,但我楞没想出来暴力怎么打…

react组件卸载调用的方法_好程序员web前端培训分享React学习笔记(三)

好程序员web前端培训分享React学习笔记(三),组件的生命周期React中组件也有生命周期,也就是说也有很多钩子函数供我们使用, 组件的生命周期,我们会分为四个阶段,初始化、运行中、销毁、错误处理(16.3之后)初始化在组件初始化阶段会…

静态工厂方法代替构造器实例_静态工厂方法与传统构造方法

静态工厂方法代替构造器实例之前,我已经讨论过一些关于Builder模式的信息 , Builder Pattern是一种有用的模式,用于实例化具有几个(可能是可选的)属性的类,这些属性可以使读取,编写和维护客户端…

NOIP模拟测试21「折纸·不等式」

折纸 题解 考试时无限接近正解&#xff0c;然而最终也只是接近而已了 考虑模拟会爆炸&#xff0c;拿手折纸条试一试&#xff0c;很简单 考你动手能力 代码 #include<bits/stdc.h> using namespace std; #define ll long long #define A 3100000 ll cj[A],questions[A]; l…

小孔成像总结_科学实践小孔成像

科学实践小孔成像-徐征浩、周永锋耳闻之不如目见之&#xff0c;目见之不如足践之。行是知之始&#xff0c;知是行之成。聪明不仅仅是理论上&#xff0c;它还体现在实践等方面。国庆期间&#xff0c;同学们运用物理课堂上所学的知识制作了小孔成像和土电话这些常见的物理仪器&am…

休眠架构概述

下图提供了Hibernate体系结构的高级视图&#xff1a; 最小的架构 “最小”架构使应用程序可以管理自己的JDBC连接&#xff0c;并提供与Hibernate的连接。 另外&#xff0c;应用程序自行管理交易。 这种方法使用了最少的Hibernate API子集。 综合架构 Hibernate Basic API 这里…

ASP.NET Core MVC 之过滤器(Filter)

ASP.NET MVC 中的过滤器允许在执行管道中的特定阶段之前或之后运行代码。可以对全局&#xff0c;也可以对每个控制器或每个操作配置过滤器。 1.过滤器如何工作 不同的过滤器类型在管道中的不同阶段执行&#xff0c;因此具有各自的与其场景。根据需要执行的任务以及需要执行的请…

.sh文件是什么语言_FastDFS分布式文件系统的搭建安装

FastDFS很久之前&#xff0c;对上传的文件可能是存储在数据库&#xff0c;在数据库中存储路径&#xff0c;保存文件的二进制数据&#xff0c;随着用户上传的文件增加&#xff0c;数据库数据越来越多。这时&#xff0c;可以使用分布式文件系统&#xff0c;将用户上传的文件例如图…

ASP.NET Core MVC 之依赖注入 View

ASP.NET Core 支持在试图中使用依赖注入。这将有助于提供视图专用的服务&#xff0c;比如本地化或者仅用于填充视图元素的数据。应尽量保持控制器和视图之间的关注点分离。视图所显示的大部分数据应该从控制器传入。 使用 inject 指令将服务注入到视图&#xff0c;语法 inject …

matlab全安装多大_不理会其他,我只中意T20天正V2.0软件,激活安装教程在这里...

大家好&#xff0c;我是本文的小编 软妹&#xff0c;前几篇为大家分享了Proe系列软件的安装步骤&#xff0c;在设计三维设计领域Pro/E是现今主流的CAD/CAM/CAE软件一款软件&#xff0c;特别是在国内产品设计领域占据重要位置。在数控加工编程软件领域&#xff0c;哪款软件才是王…

couchbase_Couchbase 2.0归类视图简介

couchbase大多数应用程序必须处理“主/详细”类型的数据&#xff1a; 啤酒厂和啤酒 部门和员工 发票和项目 … 例如&#xff0c;创建如下所示的应用程序视图是必需的&#xff1a; 借助Couchbase和许多面向文档的数据库&#xff0c;您可以使用不同的方式来处理此问题&…

NOIP模拟测试20「周·任·飞」

liu_runda出的题再次$\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%$ 任 题解 题目中为什么反复强调简单路径,没有环 没有环的图中点数-边数联通块数 前缀和维护边的前缀和,和点的前缀和, 在维护边的前缀和不好维护转化为横着边前缀和,竖着边前缀和 注意边的边界问题 看边如何维护 就拿…

如何脚踏实地构建Java Agent

在构建Plumbr的多年中&#xff0c;我们遇到了许多具有挑战性的问题。 在其他方面&#xff0c;使Plumbr Java Agent可靠地执行而又不危害客户的应用程序&#xff0c;是一个特别棘手的任务。 从实时系统中安全地收集所有需要的遥测会带来很多问题。 其中一些非常简单&#xff0c;…