【编者的话】本文为Mesosphere官方博客中发布的系列文章的第二部分,Mesosphere在本篇系列文章中分享了DC/OS的入门指南,并且做了演示。
在这系列之前的两篇文章中,我们通过配置DC/OS, 安装和启动一个Docker应用程序并且安装了一些公有的负载均衡的基础设施。 说真的,这些都是你需要开始的基本知识。
但是DC/OS有一堆很棒的特性,应用和扩展。在先进的4层 Minuteman 负载均衡之间,SQL和NoSQL例如 Crate 和 ArangoDB ,和 Apache Spark ,很难决定我们下面该了解什么。
幸运地是,它已经被决定: 我们将会去学习在DC/OS上运行现有应用 ,将会按照以下三步去做:
安装DC/OS命令行:该DC/OS命令行是最令人兴奋的功能之一,终于把你的全部集群环境放进了命令行里。在整个集群分布容器的情况下工作的一个普遍问题是,它很难与容器本身互动。访问本地文件,发现主机和绑定的端口,并且能轻松地收集相关容器组的信息经常是有挑战性的任务。DC/OS的命令行用一个很棒也很简单的方法去做到这一切,这些我们将会看到。
安装Cassandra: Cassandra 是一个可扩展,成熟的NoSQL数据库,我们许多人都在生产环境中使用。伴随着DC/OS的Cassandra架构,你可以轻松地部署自动监控并轻松地扩展Cassandra集群。虽然在本文中,我们将着眼于Cassandra,但是有几个DC/OS可用的其他数据库可以适应你的任何需要-无论是SQL,NoSQL或者time-series。
安装KairosDB,(图示教程可以参考 这里 ):当该应用是无状态的情况下可以最轻松地运行于DC/OS上面。在这篇文章中,我们将会看看这些流行的应用如何按照stateless的设计原则,例如 KairosDB ,很容易适应于部署在DC/OS上。(无状态的一个好处是--通常与容器和微服务一起使用--就是当你需要一个应用程序的多个实例的时候,你可以轻松地添加更多的容器,如果一个容器一旦崩溃了,你也可以很轻松地重启它,除此以外不用任何特殊的操作。许多应用可以适用这种方式,只要他们使用外部数据库来进行通信,同步和存储。)
我们在DC/OS上开始运行第二个应用堆叠之前,让我们安装CLI命令行,然后用它来试一试。我们现在在引导节点上安装CLI,由于该节点可以获得代理的私有IP。首先,你需要配置我们的引导节点的Python环境,就运行:
$ sudo easy_install pip
$ sudo pip install virtualenv
要做到这一点,只需点击DC/OS界面的左下方的您的登录信息。
这将会弹出一些选项,包含“安装CLI”。然后你可以复制该DC/OS提供给我们的命令到控制台上。你的命令大概会像这样:
$ mkdir -p dcos && cd dcos &&
curl -O https://downloads.dcos.io/dcos-cli/install.sh &&
bash ./install.sh . https://$PRIVATE_MASTER_IP &&
source ./bin/env-setup
其中你需要做的一件事是修改DC/OS提供的公共的master IP成为一个私有集群IP(它可能始于10.0. . ,如果你用的是AWS并且参照该文章的系列来做的话)。这将会在安装的期间运行几分钟。
现在,让我们试试很有趣的东西:运行dcos service.它将会让你访问一个URL。不幸地是,该URL地址目前是用的私有集群的master IP;我们需要访问master的公有IP。将CLI的提示的UP替换成DC/OS最初给我们的IP,访问该URL页面并登陆。你应该需要验证提交令牌认证信息,这可以拷贝到黏贴板并复制到CLI命令行中。
还有最后一步是能够通过SSH进入我们的节点,就是使用一个文件然后可以让SSH知道如何连接到我们的节点。DC/OS初建于CoreOS,虽然CentOS完全其支持,但是CLI命令行模式目前还不能完全自动处理。所以我将该文件写入~/centos_ssh_config里:
User centos
IdentityFile ~/genconf/ssh_key
现在,让我们尝试一些命令。例如,通过dcos service检查Marathon是否在运行,或通过 dcos service log marathon --ssh-config-file ~/centos_ssh_config检查Marathon的追踪日志(注意,由于该CLI实际上是通过SSH抓取日志的,所以我们需要传递我们的SSH配置文件) 加粗文字 。
我们也可以跳转到我们的节点群集上,为了从源头迅速调试问题。通过dcos node来在集群上显示所有节点。我已经将节点添加到我的集群,所以这里的输出会像以下一样。
[centos@ip-10-0-0-114 dcos]$ dcos node
HOSTNAME IP ID
10.0.0.10 10.0.0.10 4cb15493-2ca7-4b8b-8d4d-83b76cdcf7bb-S8
10.0.0.11 10.0.0.11 4cb15493-2ca7-4b8b-8d4d-83b76cdcf7bb-S7
10.0.0.116 10.0.0.116 4cb15493-2ca7-4b8b-8d4d-83b76cdcf7bb-S0
10.0.0.12 10.0.0.12 4cb15493-2ca7-4b8b-8d4d-83b76cdcf7bb-S9
10.0.0.13 10.0.0.13 4cb15493-2ca7-4b8b-8d4d-83b76cdcf7bb-S11
10.0.0.86 10.0.0.86 4cb15493-2ca7-4b8b-8d4d-83b76cdcf7bb-S1
10.0.0.87 10.0.0.87 4cb15493-2ca7-4b8b-8d4d-83b76cdcf7bb-S2
10.0.0.9 10.0.0.9 4cb15493-2ca7-4b8b-8d4d-83b76cdcf7bb-S10
让我们选择一个节点并通过ssh连接--第一个节点如何?很快,其实这就是简单的复制ID字段,所以你可以:
$ dcos node ssh --mesos-id=4cb15493-2ca7-4b8b-8d4d-83b76cdcf7bb-S8
不过现在,我们需要指定SSH配置文件,以及明确地覆盖用户。全部的命令如下:
$ dcos node ssh --config-file=~/centos_ssh_config --user=centos --mesos-id=4cb15493-2ca7-4b8b-8d4d-83b76cdcf7bb-S8
这操作实际上将把我们放入其中一个节点的shell入口上!如果你曾经试着在生产环境运行这些容器而并没有一个解决方案可以追踪这些容器的主机运行。你一定会努力的去找出主机统计并附加调试器。DC/OS使容器更轻松地感谢这些很棒的用于生产调试的功能。
现在我们有了安装好的命令行,那么接下来开始安装Cassandra。
$ dcos package install cassandra
现在,尽管Cassandra一定会稳定地运行,我们也需要为KairosDB打开Thrift RPC层级、就去Marathon并修改环境变量中的CASSANDRA_START_RPC为true:
你应该可以看到Cassandra开启了三个节点,这大概需要10分钟的时间来稳定并达到一个健康的状态。喝杯咖啡休息会吧。
如果你看不到Cassandra开启任何节点,但是它的状态显示任为“健康”,这有可能遇到了配置错误--他们只有8GB磁盘空间,但是我们真的应该选择至少20GB。继续并开启额外三台VM,每台配给20GB磁盘空间。你可以通过用新的代理IP替换旧代理的IP重新安装它,并且运行--install-prereqs,--preflighjt,--deploy和--postflight步骤。你可以忽略由deploy和preflight产生的错误,因为master已经安装了DC/OS。
一旦你添加了这些节点并且可以通过DC/OS的UI上的Nodes标签看到他们上线了,Cassandra应该完成它的部署。
我们如何调试磁盘空间的问题?许多问题可以被查询正确进程的日志来进行解决。除了CLI,DC/OS UI一样可以帮你简单的从特殊任务中找到这些日志,去帮助你做普通的调试。
让我们回顾一下我们是如何通过用户界面(UI)得知磁盘空间不足的。首先,我们来到service tab标签。然后点击了Cassandra。
在Task标签下方(默认选择的),我们可以看到所有Cassandra的框架中运行和已完成的任务。如果我们需要针对Cassandra的节点来调试,我们可以点击详细信息。相反,但是我们需要去调试scheduler本身。为了找到运行scheduler的任务,我们来到弹出的汇总窗口中的Details标签,然后我们点击scheduler的ID可以跳转到Cassandra的该scheduler运行的容器。
有时候,你仅仅需要收集一些任务中的文件, 在此视图中的默认选项卡可以让你浏览和下载这些文件。从那里,将会和点击日志查看器(Log Viewer)标签去查看Cassandra的日志一样轻松方便。
请注意,日志查看器允许你查看输出和错误。对于一些应用程序来说(例如Cassandra节点),将会有更多的日志可以选择。果然,我们在阅读一分钟日志后发现了该问题的根源。
INFO [2016-04-20 15:26:44,723] org.apache.mesos.offer.OfferEvaluator: EnoughCPU: true EnoughMem: true EnoughDisk: false EnoughPorts: true HasExpectedVolumes: true
WARN [2016-04-20 15:26:44,723] org.apache.mesos.offer.OfferEvaluator: No Offers found meeting Resource constraints.
WARN [2016-04-20 15:26:44,723] org.apache.mesos.offer.OfferEvaluator: No acceptable offers due to insufficient resources.
如果日志显示EnoughDisk: False那就是一个很好的提示来告诉我们需要更大的磁盘空间。这只是显示它通过DC/OS可以多么容易地调试分布式系统的问题。
要在DC/OS上启动无状态容器化的应用,我们需要使用Marathon。Marathon有一个UI并且可以全面记录JSON API用于启动,管理,伸缩和停止容器。该DC/OS命令行可以非常方便的通过子命令dcos marathon与Marathon进行交互(试着运行它来看看提供的所有选项)
我们将创建一个名为marathon-kairosdb.json来开始,它的内容几乎和 教程中 的marathon-kairosdb.json一样,但是我们做了一些改变,例如移除了role restriction,并且添加了一些服务端口方面的信息。接下来是该文件的全部内容:
{
"constraints": [
[
"hostname",
"UNIQUE"
]
],
"labels": {
"HAPROXY_GROUP": "external"
},
"container": {
"docker": {
"image": "mesosphere/archlinux-kairosdb:master",
"network": "BRIDGE",
"portMappings": [
{
"servicePort": 80,
"containerPort": 8080,
"hostPort": 0
},
{
"containerPort": 4242,
"hostPort": 0
},
{
"containerPort": 2003,
"hostPort": 0
},
{
"containerPort": 2004,
"hostPort": 0
}
]
},
"type": "DOCKER"
},
"cpus": 0.5,
"env": {
"CASS_HOSTS": "node-0.cassandra.mesos:9042",
"REPFACTOR": "1"
},
"id": "kairos",
"mem": 500
}
由于我们要将KairosDB放在80端口上了,所以首先让我们关闭咱们的blog(反正它是无状态的):dcos marathon app remove my-blog。现在,只需运行dcos marathon app add marathon-kairosdb.json来启动KairosDB的服务器。一会儿的功夫你就会看到该任务健康的运行了。这一次,访问你的浏览器上的公共代理IP,然后你应该能看到KairosDB在运行了。
你看到的目前那些运行在DC/OS上的容器的模式是由于他们有着参数数据库和其他服务及其连接的环境变量。通过等待,直到你启动容器指定这些连接,它简化了您的网络试验。通过这种方式,你可以轻松地尝试和推出HAProxy, Minuteman 或者其他为你DC/OS集群所用的网络层应用。
当然了,如果你愿意,你可以使用你的新的DC/OS技能并跟随者KairosDB教程的 剩余部分 来完成安装Grafana和GitHub的数据填充器。
在本文中,我们学习了下面几个技能:
- 如何安装DC/OS命令行和排错SSH连接
- 如何安装Cassandra(与一些练习来扩大我们的集群)
- 如何通过DC/OS的UI在生产环境中来调试容器
- DC/OS集群上退出无状态服务的提示
在此刻,你应该有了开始使用DC/OS的所有的工具--你可以创建集群,按需扩展,并且在容器中运行服务和数据库。然而请记住,如果你需要更多的信息,你可以经常在DC/OS的 官方网站 , GitHub仓库 或者 其文档 以及在 Mesosphere的文档 中查询。
我们很高兴地看到你可以在DC/OS上做的事情!
原文链接: The Mesosphere guide to getting started with DC/OS:Part3 (翻译:薛开成)