分布式存储的应用场景相对于其存储接口,现在流行分为三种:
块存储: 这种接口通常以QEMU Driver或者Kernel Module的方式存在,这种接口需要实现Linux的Block Device的接口或者QEMU提供的Block Driver接口,块存储一般体现形式是卷或者硬盘(比如windows里面看到的c盘),数据是按字节来访问的,对于块存储而言,对里面存的数据内容和格式是完全一无所知的。可以简单的理解为玉米粒。
文件存储: 通常意义是支持POSIX接口,它跟传统的文件系统如Ext4是一个类型的,但区别在于分布式存储提供了并行化的能力,如Ceph的CephFS(CephFS是Ceph面向文件存储的接口),但是有时候又会把GFS,HDFS这种非POSIX接口的类文件存储接口归入此类。可以简单的理解为数据像玉米粒一样组成玉米棒子,再对应到不同的玉米杆上,要找到某个玉米粒,先找到玉米杆,再找到玉米棒子,然后根据玉米粒在玉米棒子上的位置找到它。
对象存储: 也就是通常意义的键值存储,其接口就是简单的GET、PUT、DEL和其他扩展,如七牛、腾讯cos、阿里oss、亚马逊S3。可以简单的理解为数据的玉米粒被做成了玉米罐头,每个玉米罐头都有一个唯一出厂号,但是买卖罐头,都一次是一盒为单位。
本章重点介绍基于S3FS协议的云存储挂载。
S3FS是Google开发的一款支持将对象存储中的bucket以文件形式导出的文件系统接口,兼容POSIX语法
S3FS基于FUSE开发的文件系统,允许Linux和MacOS以及windows挂载S3的存储桶到本地文件系统,并保持对象原来格式。
只要支持S3存储协议的都支持挂载,比如minio、华为云OBS、阿里云OSS等,特殊一点的腾讯cos自己整了个cosfs,类似于S3FS。
#centos 安装
yum -y install s3fs-fuse
#ubantu 安装
apt install s3fs
S3FS参数说明
命令: s3fs BUCKET:[/PATH] MOUNTPOINT [OPTION]…
OPTIONS:
#命令格式:echo [IAM用户访问密钥ID]:[ IAM用户访问密钥] >[密钥文件名] ( $ACCESS_KEY_ID:SECRET_ACCESS_KEY)
echo "username:password" > /data/s3fs/.passwd-s3fs
# 设置密钥智能被当前用户访问
chmod 600 /data/s3fs/.passwd-s3fs
亚马逊云s3官网参考:https://aws.amazon.com/cn/blogs/china/s3fs-amazon-ec2-linux/
华为云官网OBS官网参考:https://support.huaweicloud.com/fstg-obs/obs_12_0008.html
#挂载 S3存储
# 命令格式:s3fs [S3存储桶名] [本地目录名] -o passwd_file=[密钥文件名] -o endpoint=[区域名]
s3fs prodfile-bucket /data/s3fs/s3mnt -o passwd_file=/data/s3fs/.passwd-s3fs -o url=http://s3.cn-north-1.amazonaws.com.cn -o endpoint=cn-north-1
#挂载华为云OBS
# 命令格式:s3fs [S3存储桶名] [本地目录名] -o passwd_file=[密钥文件名] -o endpoint=[区域名]
s3fs prodfile-bucket /data/s3fs/s3mnt -o passwd_file=/data/s3fs/.passwd-s3fs -o url=http://obs.cn-north-4.myhuaweicloud.com
#挂载minio存储
# 需要加上 use_path_request_style进行兼容
s3fs prodfile-bucket /data/s3fs/s3mnt -o passwd_file=/data/s3fs/.passwd-s3fs -o url=http://www.mydomain.com:9001 -o use_path_request_style
# 可以使用 -o dbglevel=info -f 进行输出调试信息
s3fs prodfile-bucket /data/s3fs/s3mnt -o passwd_file=/data/s3fs/.passwd-s3fs -o url=http://www.mydomain.com:9001 -o use_path_request_style -o dbglevel=info -f
写入到 /etc/fstab
# 命令格式:s3fs#[S3存储桶名] [本地目录名] fuse _netdev,[options1],[optins2]... 0 0
s3fs prodfile-bucket /data/s3fs/s3mnt fuse _netdev,passwd_file=/data/s3fs/.passwd-s3fs,url=http://obs.cn-north-4.myhuaweicloud.com 0 0
步骤基本上于Linux系统相同,命令略有差别
brew install --cask macfuse
brew install gromgit/fuse/s3fs-mac
#将具有Bucket访问权限的AccessKey ID和AccessKey Secret信息存放在.passwd-s3fs文件中。
echo $ACCESS_KEY_ID:SECRET_ACCESS_KEY > ${HOME}/.passwd-s3fs
#将.passwd-s3fs文件的权限设置为600。
chmod 600 ${HOME}/.passwd-s3fs
#创建挂载点
mkdir /tmp/oss-bucket
#将华东1(杭州)地域的examplebucket挂载至/tmp/oss-bucket。
s3fs examplebucket /tmp/oss-bucket -o passwd_file=$HOME/.passwd-s3fs -ourl=http://oss-cn-hangzhou.aliyuncs.com
#如果是与OSS同地域的ECS访问,您可以使用oss-cn-hangzhou-internal.aliyuncs.com的内网endpoint。
#vim oss-start.sh
#初始化需要先解绑定,否则会有意外的错误发生
umount -f /tmp/oss-bucket
nohup s3fs -f examplebucket /tmp/oss-bucket -o passwd_file=$HOME/.passwd-s3fs -ourl=http://oss-cn-hangzhou.aliyuncs.com >/dev/null 2>&1 &
#增加可执行权限
#chmod +x oss-start.sh
阿里云oss挂载官网参考:https://www.alibabacloud.com/help/zh/oss/developer-reference/mount-oss-buckets-to-local-file-systems-by-using-amazon-s3-protocols
腾讯云cos挂载官网参考:https://cloud.tencent.com/document/product/436/55241
windos系统挂载云盘需要借助Rclone,Rclone是一个命令行程序,用于管理云存储中的数据,支持在50多种云存储产品间同步数据。相对于s3fs和goofys,Rclone还支持将存储空间挂载到Windows系统上,作为本地磁盘共享数据。
以下载winfsp-1.12.22339版本为例。下载地址,请参见Winfsp
以下载rclone-v1.60.1-windows-amd64版本为例。下载地址,请参见Rclone。Rclone是一个命令行程序,下载后,只需解压到本地任意目录即可,此处以解压到D:\Rclone目录为例。
小提示:环境变量设置,在“我的电脑”->“属性”->“高级”->“环境变量”中增加或修改环境变量后,一般需重启系统才能使之生效
打开命令行窗口,输入rclone --version,然后按下Enter。返回rclone v1.60.1,表明Rclone已成功安装。
输入rclone config命令,然后按下Enter。
输入n,按下Enter,然后新建new remote。
以new remote命名为test-remote为例。
输入磁盘名称,例如oss-disk,然后按下Enter。
选择包含Amazon S3 Compliant Storage的选项,即输入5,然后按下Enter。
选择包含Alibaba Cloud Object Storage System (OSS)的选项,即输入2,然后按下Enter。
执行到env_auth>,按下Enter。
执行到access_key_id>,输入OSS的访问密钥AccessKey ID,然后按下Enter。
执行到 secret_access_key> ,输入OSS的访问密钥AccessKey Secret,然后按下Enter。
执行到endpoint>,输入访问OSS的endpoint,然后按下Enter。
以访问华东1(杭州)外网为例,endpoint填写为oss-cn-hangzhou.aliyuncs.com。如果是ECS上的Windows环境,您可以使用oss-cn-hangzhou-internal.aliyuncs.com的内网endpoint。
执行到acl>,选择Object读写权限。该选项仅对新上传的Object有效。您可以根据实际需求选择合适的读写权限。此处以选择default(私有权限)为例,即输入1,然后按下Enter。
执行到storage_class>,选择Object的存储类型。 此处以选择default(继承Bucket存储类型)为例,即输入1,然后按下Enter。
执行到Edit advanced config? (y/n) ,输入n,然后按下Enter。
输入q,完成所有配置。
以将examplebucket挂载到E:盘,并以D:\disk-cache路径作为缓存目录为例。
rclone mount oss-disk:/examplebucket E: --cache-dir D:\disk-cache --vfs-cache-mode writes
返回The service rclone has been started信息,表示挂载成功。此时,您还可以查看到examplebucket(E:)的磁盘。
#在E:\oss-cache\start-shell目录创建oss-start.bat,内容如下:
rclone mount oss-disk:/examplebucket E: --cache-dir D:\disk-cache --vfs-cache-mode writes
#创建start-oss-shell.bat文件
powershell.exe -command "& {Start-Process -WindowStyle hidden -FilePath 'E:\oss-cache\start-shell\oss-start.bat'}"
腾讯云cos挂载windows和oss、s3等基本类似,均是需要借助上述Rclone工具
但是cos挂载到linux系统时,与其他云盘就不一样了,很是特殊,使用s3fs挂载之后打不开cos,需要借助其特有的挂载工具cosfs才可以,真是格色…。
腾讯云cosfs官网参考:https://cloud.tencent.com/document/product/436/30743
官网教程:https://cloud.tencent.com/document/product/436/6883
工具下载地址:https://github.com/tencentyun/cosfs/releases
下载与系统相匹配的rpm文件后安装
#CentOS7.0
sudo wget https://github.com/tencentyun/cosfs/releases/download/v1.0.21/cosfs-1.0.21-centos7.0.x86_64.rpm
sudo rpm -ivh cosfs-1.0.21-centos7.0.x86_64.rpm
#注意: 如果安装时报错,提示 conflicts with file from package fuse-libs-*,则加 --force 参数再次安装。
#查看是否安装完成
cosfs --help
#将具有Bucket访问权限的AccessKey ID和AccessKey Secret信息存放在.passwd-s3fs文件中。
echo $ACCESS_KEY_ID:SECRET_ACCESS_KEY > /tmp/passwd-sts
#将.passwd-s3fs文件的权限设置为600。
chmod 600 /tmp/passwd-sts
#使用命令选项 -ocam_role=[role] 指定角色为 sts、-opasswd_file=[path] 指定密钥文件路径,示例如下:
cosfs examplebucket-1250000000 /mnt/cosfs -ourl=http://cos.ap-guangzhou.myqcloud.com -odbglevel=info -oallow_other -ocam_role=sts -opasswd_file=/tmp/passwd-sts
cosfs bucketName mount_address -ourl=http://cos.ap-beijing.myqcloud.com -odbglevel=info -opasswd_file=/tmp/passwd-sts
#如何挂载 Bucket 下的一个目录
cosfs examplebucket-1250000000:/my-dir /mnt/cosfs -ourl=http://cos.ap-guangzhou.myqcloud.com -odbglevel=info
#注意:my-dir 必须以 / 开头。
#安装 fuse 包:
#CentOS系统
sudo yum install -y fuse
#Ubuntu系统
sudo apt-get install fuse
#在 /etc/fstab 文件中添加如下的内容,其中,_netdev 选项使得网络准备好后再执行当前命令:
cosfs#examplebucket-1250000000 /mnt/cosfs fuse _netdev,allow_other,url=http://cos.ap-guangzhou.myqcloud.com,dbglevel=info