基于docker的对象存储文件网关装置和构建方法
技术领域
1.本发明涉及云计算、容器以及对象存储技术领域,具体地说是一种基于docker的对象存储文件网关装置和构建方法。
背景技术:2.相比较传统的存储方式,云厂商的对象存储因其按需付费、可靠、价格低廉、节约运维成本等优势得到了广泛的应用。其中,有这样一些应用场景,将数据以对象形式存储在云端,但希望应用仍然以文件系统的方式访问,或者多个数据中心通过文件存储服务的方式访问对象存储的对象。目前已有的对象存储网关存在部署难度大,对技术要求较高,已有的网关是单机部署,多用户需要部署多套网关系统,不支持一次部署多用户使用的场景,大大增加了用户的使用成本。
3.故如何构建存储网关服务,简化部署步骤,从而达到降低时间成本和人力成本是目前亟待解决的技术问题。
技术实现要素:4.本发明的技术任务是提供一种基于docker的对象存储文件网关装置和构建方法,来解决如何构建存储网关服务,简化部署步骤,从而达到降低时间成本和人力成本的问题。
5.本发明的技术任务是按以下方式实现的,基于docker的对象存储文件网关装置,该装置在docker中安装基础镜像及公共依赖组件,基础镜像及共依赖组件包括nfs服务器、对象存储网关以及若干共享目录,在用户主机上使用nfs客户端挂载共享目录;
6.其中,对象存储网关用于将对象存储桶的对象结构与nas文件系统的目录/文件建立映射关系,并兼容大部分posix标准。
7.作为优选,所述对象存储网关在使用时,对象存储的桶映射为数据目录,用户对数据目录的读写同步到对象存储桶中;
8.对象存储网关还用于缓存;
9.对象存储网关采用rclone、gooyfs及s3fs。
10.作为优选,所述nfs服务器用于使数据目录成为共享目录,使不同计算机共享该文件目录,提供nfs协议的访问入口;
11.nfs服务器采用nfs-utils。
12.作为优选,所述nfs客户端应用可以透明的读写位于远端nfs服务器上的共享目录,在nfs客户端看起来,就像访问本地文件一样;
13.nfs客户端采用nfs-common。
14.更优地,所述共享目录用于作为文件系统和网关联系的桥梁,nfs客户端读写共享目录的文件,对象存储网关将共享目录的对象同步到对象存储桶。
15.一种基于docker的对象存储文件网关构建方法,其特征在于,该方法具体如下:
16.编写dockerfile;
17.编写shell脚本:在容器启动时会立即执行,创建共享目录,将共享目录挂载到对象存储桶;
18.构建导出镜像:在dockfile同目录下执行构建命令执行docker build;待构建成功后导出镜像,执行docker save导出镜像文件,或者执行docker push命令推送到远程仓库;
19.导入镜像:在宿主机上执行docker save命令或docker pull下载镜像;
20.运行容器:执行docker run命令运行容器,需要指定必须的参数;
21.客户机挂载:执行挂载命令挂载共享目录。
22.作为优选,编写dockerfile具体如下:
23.docker基础镜像选择linux系统,具体实施中可以使用alpine;
24.使用run命令写入基础公共依赖组件,例如fuse,bash;
25.使用copy命令写入对象存储网关安装包,对象存储网关安装包是二进制文件,需要提前准备;
26.使用copy命令将shell脚本文件复制到容器内部;
27.将拷贝到容器的文件和脚本赋予执行权限;
28.使用expose命令暴露供客户端访问的端口2049。
29.作为优选,shell脚本具有如下功能:
30.(1)、校验环境变量access_key_id、secret_access_key、endpoint、nfs_export_*及bucket_*是否存在且合法;
31.检查nfs_export_*及bucket_*是否是一对一关系;
32.环境变量在docker容器启动时传入;
33.(2)、将nfs规则写入etc/exports文件中、
34.(3)、将对象存储桶的公钥、密钥及endpoint写入存储网关组件的配置文件;
35.(4)、运行nfs rpcbind;
36.(5)、运行nfs exportfs;
37.(6)、运行rpc.mountd、rpc.statd、rpc.idmapd、rpc.nfsd及rpc.svcgssd;
38.(7)、运行存储网关。
39.作为优选,必须指定的参数包括access_key_id(对象存储access key)、secret_access_key(对象存储secret key)、endpoint(对象存储的endpoint)、nfs_export_*(nfs规则,*是编号,从0开始的整数,例如nfs_export_0,nfs_export_1,可配置多个规则,此参数和bucket_*必须一一对应)、bucket_*(对象存储桶名,*是编号,从0开始的整数,例如bucket_0,bucket_1;参数和nfs_export_*必须一一对应)、
‑‑
volume=xx(导出共享目录和缓存目录到宿主机,可指定多个)、
‑‑
privileged
‑‑
cap-add sys_admin
‑‑
security-opt apparmor:unconfined(添加权限)、
‑‑
device/dev/fuse(增加fuse支持,必选项)及-p=端口号。
40.作为优选,nfs规则配置多个,用于限制客户机的访问ip、读写权限等;
41.‑‑
volume=xx(缓存目录)选择开启或者关闭;开启缓存,对象存储网关在docker容器中生成一个缓存目录,客户机写入的数据先写入网关的缓存中,对象存储网关择机将数据同步到对象存储桶中;客户机读数据,先判断缓存数据和对象存储桶数据是否一致,一
致从缓存中读取,不一致从对象存储桶中重新下载对象,使用缓存能够显著提高文件网关的吞吐量。
42.本发明的基于docker的对象存储文件网关装置和构建方法具有以下优点:
43.(一)本发明构建存储网关服务,大大简化部署步骤,使网关支持一机部署多机使用,从而达到降低时间成本和人力成本;由于对象存储网关对部署机器配置要求较高,采用一机部署多机使用的方案可减少用户的部署成本;
44.(二)本发明在docker中安装基础镜像及公共依赖组件;在docker中安装对象存储网关装置;在docker中安装nfs服务器;在客户端挂载共享目录。最后打包成镜像,支持一机部署多用户使用,减少了基础设施的购买成本;
45.(三)本发明用于将对象存储桶的对象结构与nas文件系统的目录/文件建立映射关系,提供共享目录供远端用户挂载使用,并基于容器技术,可以显著减少部署的时间成本和人力成本,解决传统存储网关不能一次部署多用户使用的场景。
附图说明
46.下面结合附图对本发明进一步说明。
47.附图1为基于docker的对象存储文件网关装置的结构示意图;
48.附图2为基于docker的对象存储文件网关构建方法的流程框图。
具体实施方式
49.参照说明书附图和具体实施例对本发明的基于docker的对象存储文件网关装置和构建方法作以下详细地说明。
50.实施例1:
51.本实施例提供了一种基于docker的对象存储文件网关装置,该装置在docker中安装基础镜像及公共依赖组件,基础镜像及共依赖组件包括nfs服务器、对象存储网关以及若干共享目录,在用户主机上使用nfs客户端挂载共享目录;
52.其中,对象存储网关用于将对象存储桶的对象结构与nas文件系统的目录/文件建立映射关系,并兼容大部分posix标准。
53.作为优选,所述对象存储网关在使用时,对象存储的桶映射为数据目录,用户对数据目录的读写同步到对象存储桶中;
54.对象存储网关还用于缓存;
55.对象存储网关采用rclone、gooyfs及s3fs。
56.作为优选,所述nfs服务器用于使数据目录成为共享目录,使不同计算机共享该文件目录,提供nfs协议的访问入口;
57.nfs服务器采用nfs-utils。
58.作为优选,所述nfs客户端应用可以透明的读写位于远端nfs服务器上的共享目录,在nfs客户端看起来,就像访问本地文件一样;
59.nfs客户端采用nfs-common。
60.更优地,所述共享目录用于作为文件系统和网关联系的桥梁,nfs客户端读写共享目录的文件,对象存储网关将共享目录的对象同步到对象存储桶。
61.实施例2:
62.如附图2所示,本实施例提供了一种基于docker的对象存储文件网关构建方法,其特征在于,该方法具体如下:
63.s1、编写dockerfile;
64.s2、编写shell脚本:在容器启动时会立即执行,创建共享目录,将共享目录挂载到对象存储桶;
65.s3、构建导出镜像:在dockfile同目录下执行构建命令执行docker build;待构建成功后导出镜像,执行docker save导出镜像文件,或者执行docker push命令推送到远程仓库;
66.s4、导入镜像:在宿主机上执行docker save命令或docker pull下载镜像;
67.s5、运行容器:执行docker run命令运行容器,需要指定必须的参数;
68.s6、客户机挂载:执行挂载命令挂载共享目录。
69.本实施例步骤s1中的编写dockerfile具体如下:
70.s101、docker基础镜像选择linux系统,具体实施中可以使用alpine;
71.s102、使用run命令写入基础公共依赖组件,例如fuse,bash;
72.s103、使用copy命令写入对象存储网关安装包,对象存储网关安装包是二进制文件,需要提前准备;
73.s104、使用copy命令将shell脚本文件复制到容器内部;
74.s105、将拷贝到容器的文件和脚本赋予执行权限;
75.s106、使用expose命令暴露供客户端访问的端口2049。
76.本实施例步骤s2中的shell脚本具有如下功能:
77.(1)、校验环境变量access_key_id、secret_access_key、endpoint、nfs_export_*及bucket_*是否存在且合法;
78.检查nfs_export_*及bucket_*是否是一对一关系;
79.环境变量在docker容器启动时传入;
80.(2)、将nfs规则写入etc/exports文件中、
81.(3)、将对象存储桶的公钥、密钥及endpoint写入存储网关组件的配置文件;
82.(4)、运行nfs rpcbind;
83.(5)、运行nfs exportfs;
84.(6)、运行rpc.mountd、rpc.statd、rpc.idmapd、rpc.nfsd及rpc.svcgssd;
85.(7)、运行存储网关。
86.本实施例步骤s5中的必须指定的参数包括access_key_id(对象存储access key)、secret_access_key(对象存储secret key)、endpoint(对象存储的endpoint)、nfs_export_*(nfs规则,*是编号,从0开始的整数,例如nfs_export_0,nfs_export_1,可配置多个规则,此参数和bucket_*必须一一对应)、bucket_*(对象存储桶名,*是编号,从0开始的整数,例如bucket_0,bucket_1;参数和nfs_export_*必须一一对应)、
‑‑
volume=xx(导出共享目录和缓存目录到宿主机,可指定多个)、
‑‑
privileged
‑‑
cap-add sys_admin
‑‑
security-opt apparmor:unconfined(添加权限)、
‑‑
device/dev/fuse(增加fuse支持,必选项)及-p=端口号。
87.本实施例步骤s1和s5中的nfs规则配置多个,用于限制客户机的访问ip、读写权限等;
88.本实施例步骤s5中的
‑‑
volume=xx(缓存目录)选择开启或者关闭;开启缓存,对象存储网关在docker容器中生成一个缓存目录,客户机写入的数据先写入网关的缓存中,对象存储网关择机将数据同步到对象存储桶中;客户机读数据,先判断缓存数据和对象存储桶数据是否一致,一致从缓存中读取,不一致从对象存储桶中重新下载对象,使用缓存能够显著提高文件网关的吞吐量。
89.最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。