山西太原做企业网站建设的公司,深圳seo网站推广报价,莱芜市网站建设,网站建设的问题疑问aws集群重启Apache Cassandra是一个NoSQL数据库#xff0c;它使用一致的哈希机制可以轻松进行水平扩展。 七年前#xff0c;我尝试了它#xff0c;并决定不将其用于我的附带项目#xff0c;因为它太新了。 现在情况有所不同#xff0c;Cassandra早已建立起来#xff0c;背… 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.htmlaws集群重启