Cassandra on Mesos with Docker

简介: 本文讲的是Cassandra on Mesos with Docker,【编者的话】分布式系统是难于理解、设计、构建和管理的,Apache Mesos能够在集群机器上运行多种分布式系统,并可高效的共享资源。
本文讲的是Cassandra on Mesos with Docker 【编者的话】分布式系统是难于理解、设计、构建和管理的,Apache Mesos能够在集群机器上运行多种分布式系统,并可高效的共享资源。Marathon是一个mesos框架,支持运行长服务。本文介绍了如何在Mesos上运行Docker化的Cassandra集群,推荐阅读。

目标

我们想在Mesos集群上使用Docker容器,并以Marathon长期运行job的方式部署Datastax Cassandra集群。别以为我们只是想将这些热点词汇堆砌在一起,接下来我会具体介绍我们是怎么做的。

在过去的几个月里,我们使用Mesos作为云资源管理器,并且成功部署了Mesos集群。这些集群和Jenkins、Mesos Jekins Scheduler以及开发环境整合在一起支持CI/CD环境,并用Marahon来运行时间较长的任务,同时,我们选择Docker作为容器化工具。现在我们已经成功部署了Cassandra,并且我们推荐在高吞吐量的项目里使用Datastax Cassandra。

场景

我们之前在Akka集群中使用了一个Cassandra节点,现在正准备使用Cassandra集群。当我们想要在Mesos为基础的测试环境中使用Cassandra时,一切很简单,因为只要求一个单节点的Cassandra。而当我们想要转到预生产环境时,事情开始变得复杂起来,因为这时必须使用Cassandra集群。我们完成的就是从单节点Cassandra到Cassandra集群的转变。本练习里使用的项目是我们自己项目的一个开源分支: Lift 这篇文章 介绍了该项目的架构详情。

Cassandra背景介绍

我们在2011年就开始使用和推广Cassandra数据库,算是第一批Apache Cassandra NoSql数据库的使用者,当时使用的是0.8.x版本。我们从一开始就在AWS云上使用Cassandra。我们也使用新的版本,并且在此之间成功升级到新版本上。2015年,我们开始结合Mesosphere运行Spotify的Cassandra  Docker镜像

方案

Cassandra单节点

Mesosphere提供了很好的工具,Spotify社区贡献了官方Datastax Cassandra版本的Docker镜像,所以在开发或者模拟环境里使用Cassandra单节点非常容易。

如下是我们系统的简单介绍:

使用Puppet作为配置管理工具。之前 这篇文章 介绍了我们是怎么使用Puppet的。

Mesosphere工具中我们选择使用Marathon框架来运行Cassandra节点。Marathon可以支持应用在Mesos上长期运行,我们使用的是最新版本,具体内容记录在 这篇博客 了。

我们场景的前提是在Marathon框架里使用Mesos集群,以及很多能运行Docker容器的Mesos slave。单节点Cassandra的搭建需要如下代码和配置:
Puppet代码,确保可以运行任何Marathon任务:
class profile::marathon_jobs ( $jobs     = {} ) {
create_resources ( 'profile::resources::marathon_job', $jobs, $defaults )
}

创建profile的同时创建了resource,用来装载Marathon job hash到json文件里,并将其发送给Marathon框架。精简的Puppet resource如下:
define profile::resources::marathon_job ( ... ) {
file { ".../${title}.json": ...  } ->
exec { "post ${title}.json": ... }
}

所以单节点Cassandra job在Hiera的配置如下:
profile::marathon_jobs::jobs:
lift_cassandra:
docker:
  image: 'spotify/cassandra'
  privileged: true
id: 'lift-cassandra'
instances: '1'
cpus: '1'
mem: '1000'
constraints:
  -
    - "rack-id"
    - "CLUSTER"
    - "cassandra-single-rack-1"

我们借助Marathon jobs constraints确保Cassandra单节点容器在带有所需属性的Mesos Slave上运行: [ “rack-id”, “CLUSTER”, “cassandra-single-rack-1”] 。这是基础用法,用资源本身的作用来做其拓扑标签,因为Mesos和Cassandra都有“集群”的概念。

我们也要确保Cassandra单节点运行的Mesos slave有正确的名字,这样应用才可以使用它。为此我们使用如下Hiera配置在Route53上注册:
profile::aws_manager::route53_register::records:
cassandra: {}

这样一切都配置好了,Datastax Cassandra节点在应用层已经可用了。

扩展到集群

到目前为止一切都很好很简单,但要是想在Mesos上部署Cassandra集群还不够。

为了搭建所需的四个节点的集群,我们确保Mesos有所需的资源提供给Marathon。这需要4个用已知名称(s1.cassandra.eigengo.io)注册了的Mesos slave docker主机。
本练习中我们在虚拟节点上使用spotify Cassandra:cluster,因此令牌会自动生成。

Marathon job的Hiera配置如下:
profile::marathon_jobs::jobs:
lift_cassandra_cluster:
docker:
  image: 'cakesolutions/cassandra:cluster'
  privileged: true
  parameters:
    - key: env
      value: CASSANDRA_CLUSTERNAME=eigengo
    - key: env
      value: CASSANDRA_SEEDS=s1.cassandra.eigengo.io,s2.cassandra.eigengo.io,s3.cassandra.eigengo.io,s4.cassandra.eigengo.io
id: 'lift-cassandra'
instances: '4'
cpus: '4'
mem: '8000'
volumes:
  - hostPath: "%{hiera('cassandra::raid_volume')}"
    containerPath: "/var/lib/cassandra"
    mode: "RW"
constraints:
  -
    - "rack-id"
    - "CLUSTER"
    - "cassandra-single-rack-1"
    - 

关键的配置项是特权模式。启用特权模式允许Cassandra进程,thrift client,CQL native transport, internode 通信端口,绑定到Cassandra容器运行的Docker主机上。特权模式的替代方案是使用网络HOST模式。有人可能会说在Docker主机上运行多个Cassandra节点有限制。针对这个明显局限的例子是在预生产环境上的Cassandra集群必须满足某些资源的需求,尤其是存储需求。我们认为,在同一个Docker主机上运行多个Cassandra Docker容器,共享机器资源是很好的想法,不过需要参考Cassandra生产环境最佳 实践
我们还fork了spotify docker-Cassandra仓库,撤销了Cassandra默认配置上的一处改动。简单来说,我们重新启用了虚拟节点的使用,这样我们依赖Cassandra自己生成令牌。spotify/cassandra:cluster上的替代方案只要有特定的令牌就可以工作。也就是说每个Cassandra节点需要一个Marathon job,分配了预定义的和每个Marathon job关联的令牌,这看上去有点矫枉过正。

根据Cassandra生产环境推荐设置,我们假设这样的Cassandra容器会运行在准备了raid0卷,并且有充足内存资源的主机上。以生产为目的基准线我们考虑的是m3.xlarge AWS实例,但是你也完全可以尝试一个小规模用途的集群来验证你的想法。

集群图

Cassandra_Cluster_Mesos_Cluster_-_New_Page.png

如上图你可以一下子了解集群创建流程,Marathon Mesos scheduler 作为触发器,Mesos作为资源管理器。Docker是Mesos资源的容器化选择方案。

其他方案

Mesosphere允许运行称为Cassandra Mesos框架,如何构建 弹性mesos 这里 有篇不错的实践文章。
Cassandra Mesos框架正在被重写,因此需要时刻关注着。
这里 有一篇tuplejump.com写的文章,在Cassandra ring里使用了一种独特的方式管理资源,在Mesos集群基础上使用了Spark和Akka RM。

结论和考虑

安全考虑

另外值得考虑的一点是Cassandra集群的安全性。建模Mesos集群Cassandra分区时考虑到安全性,才能从早期发现安全问题。根据不同的需求来源可以实现多层次的安全性。

在Cassandra上采用这种方案的优势

通过点击按钮,提交为新数据中心配置过的Marathon job,就能添加额外的数据中心。一个具体的例子就是在现有的基础架构上再另外的地区添加一个同等的VPC。在新的VPC里使用额外的Cassandra数据中心需要如下步骤:
  • 部署Mesos基础
  • 调整运行在Cassandra集群里Merathon已有job的限制,调整Docker环境变量指到新的地区(可能的同等VPC)
  • 准备一个新的Marathon job,在新的VPC上部署新的Cassandra集群。

参考资料

http://www.datastax.com/blog
http://www.datastax.com/docume ... .html
https://github.com/spotify/docker-cassandra
https://www.youtube.com/watch?v=efYIRKs63T4
https://github.com/mesosphere/cassandra-mesos
https://github.com/spotify/docker-cassandra
https://github.com/cakesolutions/docker-cassandra

原文链接:Cassandra on Mesos with Docker(翻译:崔婧雯 校对:李颖杰)
===========================
译者介绍
崔婧雯,现就职于VMware,高级软件工程师,负责桌面虚拟化产品的质量保证工作。曾在IBM WebSphere业务流程管理软件担任多年系统测试工作。对虚拟化,中间件技术有浓厚的兴趣。

原文发布时间为:2015-03-07 
本文作者:崔婧雯 
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:Cassandra on Mesos with Docker
相关实践学习
阿里云专有网络VPC使用教程
专有网络VPC可以帮助您基于阿里云构建出一个隔离的网络环境,并可以自定义IP 地址范围、网段、路由表和网关等;此外,也可以通过专线/VPN/GRE等连接方式实现云上VPC与传统IDC的互联,构建混合云业务。 产品详情:https://www.aliyun.com/product/vpc
目录
相关文章
|
6月前
|
Kubernetes 调度 Apache
Docker 编排工具比较:Kubernetes、Docker Swarm 和 Mesos,选择最适合你的容器编排方案
Docker 编排工具比较:Kubernetes、Docker Swarm 和 Mesos,选择最适合你的容器编排方案
183 0
|
9月前
|
分布式计算 Ubuntu Hadoop
Hadoop生态系统中的云计算与容器化技术:Apache Mesos和Docker的应用
Hadoop生态系统中的云计算与容器化技术:Apache Mesos和Docker的应用
|
监控 Kubernetes Cloud Native
分享Docker监控体系(Kubernetes Mesos监控)
常不释放资源,造成高CPU占用;比如进程结束异常,不停的重启相同的进程;比如日志级别设置过低,大量日志输出,影响进程性能和占用大量磁盘空间。所以做监控时一定要遵循有自我安全控制的能力。监控工具在拿到生产环境中运行前,一定要先在测试环境中进行一段时间的试运行 。
1720 0
|
应用服务中间件 nginx 数据格式
|
Web App开发 关系型数据库 开发工具
|
分布式计算 应用服务中间件 nginx
基于Docker搭建多节点Mesos/Marathon
本文讲的是基于Docker搭建多节点Mesos/Marathon【编者的话】在之前的一篇博客中,我介绍了基于Docker搭建单机版Mesos/Marathon,但是仅仅使用了单个节点。而在这篇博客中,我将介绍基于Docker搭建多节点Mesos/Marathon,开发者可以使用3个节点快速地搭建一个真正的分布式容器集群系统。
3234 0
|
监控 jenkins 持续交付
去哪儿网利用Mesos和Docker构建dev—beta环境
本文讲的是去哪儿网利用Mesos和Docker构建dev—beta环境【编者的话】本文是@Container容器技术大会·北京站上去哪网带来的分享——去哪儿网利用Mesos和Docker构建dev—beta环境。
1442 0
|
Kubernetes Apache Docker
Docker、Kubernetes、Apache Mesos 之争 | 一个与传说不同的故事
本文讲的是Docker、Kubernetes、Apache Mesos 之争 | 一个与传说不同的故事【编者的话】有无数的文章、讨论和社交网络上的交流在比较 Docker、Kubernetes 和 Mesos。
3803 0