在 DC/OS 上运行有状态服务
教程 - 在 DC/OS 上运行有状态服务
重要: Mesosphere 不支持本教程、相关脚本或命令,它们不提供任何形式的保证。本教程的目的是为了演示功能,可能不适合在生产环境中使用。在您的环境中使用类似的解决方案之前,您必须进行调整、验证和测试。
本教程向您展示如何在 DC/OS 上安装和运行有状态服务。有状态服务对持久数据起作用。每次启动时,简单无状态服务在空沙盒中运行。相反,有状态服务使用驻留在群集中代理节点上的持久卷,直到被明确销毁。
这些持久卷安装在任务的 Mesos 沙盒中,因此可以连续访问服务。DC/OS 为每个任务创建持久卷,并且动态保留运行任务所需的所有资源。这样,DC/OS 可确保重新启动服务,并在需要时重用其数据。这对数据库、缓存和其他数据感知服务非常有用。
如果您打算运行的服务不会自行复制数据,则需要处理备份或采用合适的复制策略。
有状态服务利用两个基础的 Mesos 功能:
时间估计:
大约 20 分钟。
目标受众:
本教程适用于希望在 DC/OS 上运行有状态服务的开发人员。
注意:DC/OS 持久卷功能仍处于测试阶段,尚未准备好进行生产使用,因为没有数据复制策略来防止数据丢失。
前提条件
群集大小:至少一个代理节点,具有 1 个 CPU、1 GB RAM 和 1000 MB 可用磁盘空间。
安装有状态服务 (PostgreSQL)
这是启动官方 PostgreSQL Docker 镜像的 DC/OS 服务定义 JSON 。
{
"id": "/postgres",
"cpus": 1,
"mem": 1024,
"instances": 1,
"networks": [
{ "mode": "container/bridge" }
],
"container": {
"type": "DOCKER",
"volumes": [
{
"containerPath": "pgdata",
"mode": "RW",
"persistent": {
"size": 100
}
}
],
"docker": {
"image": "postgres:9.5"
},
"portMappings": [
{
"containerPort": 5432,
"hostPort": 0,
"protocol": "tcp",
"labels": {
"VIP_0": "5.4.3.2:5432"
}
}
]
},
"env": {
"POSTGRES_PASSWORD": "DC/OS_ROCKS",
"PGDATA": "/mnt/mesos/sandbox/pgdata"
},
"healthChecks": [
{
"protocol": "TCP",
"portIndex": 0,
"gracePeriodSeconds": 300,
"intervalSeconds": 60,
"timeoutSeconds": 20,
"maxConsecutiveFailures": 3,
"ignoreHttp1xx": false
}
],
"upgradeStrategy": {
"maximumOverCapacity": 0,
"minimumHealthCapacity": 0
}
}
注意 volumes
字段,它表示 postgres
用于其数据的持久卷。即使任务终止并重新启动,它也会恢复该卷,数据也不会丢失。
接下来,将此服务 添加到您的群集:
dcos marathon app add //tutorials/stateful-services/postgres.marathon.json
服务已安排且 Docker 容器已下载后,postgres 将变得运行良好并且可以使用。您可以从 DC/OS CLI 验证这一点:
dcos marathon task list
APP HEALTHY STARTED HOST ID
/postgres True 2016-04-13T17:25:08.301Z 10.0.1.223 postgres.f2419e31-018a-11e6-b721-0261677b407a
停止服务
要停止服务:
dcos marathon app stop postgres
此命令将 instances
计数缩减到 0 并终止所有正在运行的任务。如果再次检查任务列表,您会注意到任务仍在那里。该列表提供了有关其被放置的代理节点及其已连接的持久卷的信息,但没有 startedAt
值的信息。这允许您使用相同的元数据重新启动服务。
dcos marathon task list
APP HEALTHY STARTED HOST ID
/postgres True N/A 10.0.1.223 postgres.f2419e31-018a-11e6-b721-0261677b407a
重启
再次启动有状态服务:
dcos marathon app start postgres
先前 postgres
任务的元数据用于启动新任务,该任务接管先前停止的服务的保留和卷。重复上一步的命令,再次检查正在运行的任务。您将看到运行的服务任务使用与前一服务任务相同的数据。
清除
若要在安装有状态服务之前恢复群集状态,请删除该服务:
dcos marathon app remove postgres
附录
有关 DC/OS 中有状态服务的更多信息,请访问文档的存储部分。