如何使用Flocker将容器数据量迁移到第二个主机
Flocker是一个免费的开源软件,用于管理dockerized应用程序中的容器数据量。
在本机Docker技术中,如果我们将容器从一台服务器迁移到另一台新服务器,则数据量将被保留,而仅容器被移动。
但是随着技术的进步和Docker技术的大力发展,诞生了一个名为Flocker的新平台。
它不仅可以移动容器,而且还可以将容器和数据量一起迁移。
这使得flocker数据量(也称为数据集)非常易于移植,可以与集群中的任何容器一起使用。
Flocker的这一关键功能使其在操作团队中非常受欢迎,可以在生产环境中运行容器化的有状态服务,例如数据库。
本教程的全部内容是关于如何将容器与数据量一起从一台服务器迁移到另一台服务器的信息。
这是一些有关如何使用Flocker将具有数据量的容器从一台服务器迁移到另一台服务器的步骤。
准备工作
首先,在我们开始之前,我们需要完成一些基本的事情。
我们需要3个节点来完成此工作。
首先,我们将有一个客户端节点,我们将其中存储配置文件并运行flocker-cli。
客户端节点可以是我们自己的笔记本电脑,台式机或者任何其他计算机,甚至是服务器。
接下来,我们将需要另外两个节点,在这些节点中,我们将使用flocker运行docker容器,并在不中断的情况下将正在运行的容器及其数据量一起移动。
以下是我们要使用其IP地址设置的系统,这些系统以Ubuntu 15.04作为操作系统运行,并且在同一群集中。
客户端节点0 | Docker节点1 | Docker节点2 |
---|---|---|
104.130.26.196 | 104.130.169.227 | 104.130.26.245 |
设置完flocker集群之后,我们现在开始使用flocker运行docker容器。
1.创建应用程序文件
现在,我们将创建一个docker compose文件或者应用程序文件,这些文件或者应用程序文件将使用各自的配置(例如docker镜像,名称,端口,数据量等)定义我们要运行的容器。
我们将使用文本编辑器并在docker compose的结构下创建YAML文件。
为此,我们将运行以下命令并启动文本编辑器,并在节点0中创建docker-compose.yml文件。
# nano docker-compose.yml
打开文本编辑器后,我们现在将添加文件,如下所示。
web: image: clusterhq/flask links: - "redis:redis" ports: - "80:80" redis: image: redis:latest ports: - "6379:6379" volumes: ["/data"]
上面的配置定义了在运行上面的配置时,它将创建2个容器,一个命名为web,另一个命名为redis。
网络站点将运行来自镜像clusterhq/flash的容器,并将在端口80上公开,而redis将运行最新版本的镜像redis的容器,并将在端口6379上显示/data目录下的数据卷。
2.创建部署文件
接下来,我们将创建另一个名为flocker-deploy1.yml的文件,其中定义本教程中最重要的部分,并定义将在何处部署这些容器。
其中我们将定义将Python Web App(FLASK)和Redis数据库服务器这两个容器都部署在同一主机(即节点1)下。
为此,我们将运行以下命令以打开文本编辑器。
# nano flocker-deploy1.yml
打开后,我们将如下所示添加YAML文件。
"version": 1 "nodes": "104.130.169.227": ["web", "redis"] "104.130.26.245": []
然后,我们将简单地保存文件并退出。
在上面的YAML文件中,我们定义了运行两个容器(即web和redis)以在同一主机(即节点1)下运行,而不在节点2下运行任何内容。
3.部署容器
创建这些文件之后,现在将使用这些YAML文件部署容器。
为此,我们只需要在sudo或者root特权下运行以下命令。
# flocker-deploy control-service flocker-deploy1.yml docker-compose.yml The cluster configuration has been updated. It Jan take a short while for changes to take effect, in parti cular if Docker images need to be pulled.
系统会提示我们,可能需要一些时间才能按照上述配置定义来部署容器。
正如我们在上述配置中定义的那样,FLASK和Redis必须都在同一主机(即节点1)下运行。
因此,我们将进入节点1来检查其是否同时在两个容器中运行。
4.检查Docker容器
要检查节点1是否同时运行两个容器,我们将在节点1中看到正在运行的Docker容器的列表。
我们可以通过SSH隧道传输到IP地址为104.130.169.227的节点1并运行docker来实现此目的。
命令以查看正在运行的容器的列表。
为此,我们需要运行以下命令。
# ssh [email protected] docker ps
5.测试应用程序
在使这些容器运行之后,我们肯定会想要测试在节点1中运行的应用程序。
为此,我们将使用Web浏览器打开这些ip地址。
当我们浏览http://104.130.169.227/时,我们看到显示了访问计数,而当我们浏览http://104.130.26.245/时,我们看到了访问计数仍然存在,因为flocker路由了来自部署文件中定义的任一节点到具有应用程序的节点。
它使群集器可以在群集中移动我们的容器及其卷,而无需更新任何DNS或者应用程序设置。
6.重新创建部署文件
现在,我们最终将重写部署文件,以移动容器及其数据量。
我们将创建一个新文件或者编辑以前的文件,追加并另存为flocker-deploy2.yml。
# nano flocker-deploy2.yml
然后,我们将如下所示追加文件。
"version": 1 "nodes": "104.130.169.227": ["web"] "104.130.26.245": ["redis"]
这将定义Web容器在节点1下运行,而redis容器在节点2下运行。
7.使用数据量移动容器
最后,我们现在将部署新创建的部署YAML文件,该文件将正在运行的redis容器(包括其数据量)从节点1迁移到节点2.
这将使Web容器与以前的节点(即节点1)保持在同一节点上,而不会影响应用程序。
# flocker-deploy control-service flocker-deploy2.yml docker-compose.yml The cluster configuration has been updated. It Jan take a short while for changes to take effect, in particular if Docker images need to be pulled.
8.检查迁移
要检查redis容器是否确实已迁移,可以通过在那些节点中列出正在运行的容器来查看。
首先,通过运行以下命令,在节点2中查看是否通过SSH隧道迁移了redis服务器。
# ssh [email protected] docker ps
如我们所见,在此节点中仅运行Redis服务器容器,而在此节点中未运行Web容器。
现在,要进行交叉检查,我们将看到Node 1中正在运行哪些容器。
# ssh [email protected] docker ps
最后,我们看到该节点中没有运行Redis服务器,而只有Web容器正在运行。
9.检查申请
现在,我们将检查该应用程序是否正常运行。
为此,我们将打开一个网络浏览器并将其指向两个节点,即http://104.130.169.227/和http://104.130.26.245/。
其中我们看到指向节点1时计数仍然存在,即使具有该卷的容器已在主机之间移动。
而且我们还看到,即使应用程序不再在该主机上运行,访问计数仍保留在节点2上。
这将验证redis容器及其数据卷已成功迁移。