欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【赵强老师】Docker Swarm集群的数据持久化

程序员文章站 2022-05-17 23:45:13
...

【赵强老师】Docker Swarm集群的数据持久化
            
    
    博客分类: Docker dockerKubernetesk8s云计算容器 

如果Docker Swarm集群中运行了mysql、nginx等服务,这些服务的数据如果没有挂载到宿主机中,那么容器一旦停止运行,那就意味着数据丢失。

有什么方法可以解决swarm集群中运行的服务能够数据持久化呢?我们可以通过volme、nfs等方法来实现swarm集群应用数据持久化,其实也和docker数据持久化的形式是一样的。

可以用两种方式来实现:

  1. volume 默认模式:工作节点宿主机数据同步到容器内。

  2. volume NFS 共享存储模式:管理节点宿主同步到工作节点宿主,工作节点宿主同步到容器。

一、通过volume实现数据持久化

注意:这种方式各个节点的数据不能共享。

卷是绕过联合文件系统的一个或多个容器内的特定目录。 卷被设计为保持数据,与容器的生命周期无关。 因此,Docker在删除容器时不会自动删除卷,也不会“垃圾收集”不再由容器引用的卷。 也称为:数据卷。

【赵强老师】Docker Swarm集群的数据持久化
            
    
    博客分类: Docker dockerKubernetesk8s云计算容器 

使用的语法格式如下:

【赵强老师】Docker Swarm集群的数据持久化
            
    
    博客分类: Docker dockerKubernetesk8s云计算容器 

使用案例:

  •  在Swarm上部署服务,同时指定相应的数据卷
docker service create -p 7788:80 --replicas 3 --name myswarmtest \
--mount type=volume,src=myvolumn,dst=/usr/share/nginx/html/ collenzhao/mynginx:v1 
  •  查看数据卷
docker volume ls 

【赵强老师】Docker Swarm集群的数据持久化
            
    
    博客分类: Docker dockerKubernetesk8s云计算容器 

  • 查看数据卷挂载的目录

docker volume  inspect myvolumn 

【赵强老师】Docker Swarm集群的数据持久化
            
    
    博客分类: Docker dockerKubernetesk8s云计算容器 

二、通过NFS实现数据持久化

NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。

【赵强老师】Docker Swarm集群的数据持久化
            
    
    博客分类: Docker dockerKubernetesk8s云计算容器 

为了方便我们进行测试,单独准备一台机器作为NFS的服务器:node3。接下来,我们就需要安装NFS了。

1、所有节点安装NFS

yum -y install nfs-utils   

2、NFS服务器端的部署

  • 开启NFS服务
systemctl enable nfs
systemctl start nfs 
  • 创建NFS目录
mkdir /nfs 
  • 编辑NFS配置文件
vi /etc/exports
 
输入以下内容:
/nfs *(rw,sync,no_root_squash)
 
参数说明:
/nfs : 共享的目录
* : 可以访问的主机网段,星号表示所有网段。
rw : 可读写权限,只读权限ro
sync : 同步,数据更安全,速度慢
async : 异步,速度快,效率高,安全性低
no_root_squash :NFS 服务共享的目录的属性, 如果用户是root, 对这个目录就有root的权限 
  • 重启NFS
systemctl restart nfs 

3、NFS客户端的部署

  • 启动NFS客户端
systemctl start rpcbind 
  •  测试挂载nfs共享目录
mount -t nfs 192.168.15.140:/nfs /mynfs
 
其中:192.168.15.140为node3(NFS服务器的地址) 
  •  在文件/mynfs/a.txt 输入一些内容,在nfs服务器端查看是否能够看到刚才输入的内容。也可以通过下面的语句卸载NFS目录。
umount /mynfs/ 

 4、基于NFS共享目录,创建Swarm集群服务

docker service create \
--replicas 3 \
--name my-nginx \
-p 7788:80 \
--mount 'type=volume,src=my-nfs-vol,dst=/usr/share/nginx/html,volume-driver=local,volume-nocopy=true,volume-opt=type=nfs,volume-opt=device=192.168.15.140:/nfs,"volume-opt=o=addr=192.168.15.140,vers=4,soft,timeo=180,bg,tcp,rw"' \
collenzhao/mynginx:v1

参数说明:

【赵强老师】Docker Swarm集群的数据持久化
            
    
    博客分类: Docker dockerKubernetesk8s云计算容器 

5、验证实验环境

  • 在Manager节点上,查看服务和数据卷目录

docker service ls 

【赵强老师】Docker Swarm集群的数据持久化
            
    
    博客分类: Docker dockerKubernetesk8s云计算容器 

docker volume ls 

【赵强老师】Docker Swarm集群的数据持久化
            
    
    博客分类: Docker dockerKubernetesk8s云计算容器 

  • 查看node1数据卷目录
docker volume ls

【赵强老师】Docker Swarm集群的数据持久化
            
    
    博客分类: Docker dockerKubernetesk8s云计算容器 

  • 查看node2数据卷目录
docker volume ls 

【赵强老师】Docker Swarm集群的数据持久化
            
    
    博客分类: Docker dockerKubernetesk8s云计算容器 

【赵强老师】Docker Swarm集群的数据持久化
            
    
    博客分类: Docker dockerKubernetesk8s云计算容器 

  •  在任意一个节点上,进入数据卷共享目录修改a.html

【赵强老师】Docker Swarm集群的数据持久化
            
    
    博客分类: Docker dockerKubernetesk8s云计算容器 

【赵强老师】Docker Swarm集群的数据持久化
            
    
    博客分类: Docker dockerKubernetesk8s云计算容器