0 背景介绍
openstack+ceph,openstack中的云主机使用ceph rbd作为云硬盘
1 需求
1)支持对外提供文件存储服务
2)支持内部云主机访问存储服务
3)支持万兆访问,单客户端读速度不小于400MB/s,聚合读写速度不小于800MB/s
2 概要设计
使用openstack中的一台云主机作为NAS-server,挂载云硬盘提供存储空间,使用samba软件对外提供nas服务。
网络拓扑见下图:
【对部署的要求】
① 为了满足性能指标,要求external-net部署在万兆网络上
② 云主机的镜像中有samba和samba-client相关安装包(备注:CentOS-7.4-x86_64-Full中直接安装了所需的所有包,推荐直接使用该镜像安装虚拟机)
3 手动搭建服务
首先创建一个云主机作为NAS-Server,安装samba服务,然后挂载云硬盘,创建共享文件夹。
【关于磁盘挂载方式】
目前,关于NAS-server云主机挂载云硬盘的方式有两种
方式一:挂载单块大容量云硬盘
格式化挂载盘: # mkfs.xfs /dev/vdb 创建挂载点 # mkdir /mnt/nas 将磁盘挂载到挂载点 # mount /dev/vdb /mnt/nas 设置权限 # chmod +777 /mnt/nas /mnt/nas就是nas服务共享的文件夹 |
方式二:同时挂载多块云硬盘,做成lvm逻辑卷的方式提供存储空间
(调研中后续补充)
考虑单块大容量盘的克隆、快照操作都比较耗时,建议使用方式二
【配置文件】
配置文件路劲在: /etc/samba/smb.conf,配置文件实例如下(仅列出较为重要的几项),配置完之后可以使用 # testparm 检查配置的合法性:
[homes]
comment = %s # 描述信息
path = %s # 用来指定共享目录的路径
public = yes/no # 用来指定该共享是否允许guest账户访问
read only = yes/no # 是否只允许读
valid users = %s # 允许访问该共享的用户
write list = %s # 允许写入该共享的用户
samba服务提供了两种文件共享访问方式:① 使用账号密码登陆 ② 匿名登陆。分别的配置方式如下:
需要预先在samba server中创建系统用户以及设置用户密码 # useradd titan // 添加系统用户 # smbpasswd -a titan // 设置samba访问的用户名密码
samba还支持用户组的概念 # groupadd group1 // 添加系统用户组group1 # useradd -G group1 alice // 添加系统用户alice,且alice属于group1 # smbpasswd -a alice // 设置samba访问的用户名密码 # useradd -G group1 bob // 添加系统用户bob,且bob属于group1 # smbpasswd -a bob // 设置samba访问的用户名密码
# 只有用户user1和组group1中所有的用户(即alice和bob)可以访问该文件夹,但是只有user1可以写该文件夹 [Test-A] public = no # 用户访问sambaserver需要提供用户名密码 comment = Test Directory path = /mnt/nas-A #共享的文件夹 read only = No valid users = user1,@group1 write list = user1 |
【关于匿名(免密)登陆】
我们建议使用免密登陆的方式给用户提供服务,因为方式① ,这种方式使用起来不方便。
匿名登陆的配置: 首先,在[global]默认的配置项中加入map to guest = bad user,表示将匿名用户映射成nobody,
然后在共享盘的配置中填写 valid users = nobody, write list = nobody
[Test-B] public = share # 用户访问sambaserver需要提供用户名密码 comment = Test Directory path = /mnt/nas-B #共享的文件夹 browseable = yes read only = No valid users = nobody write list = nobody |
4 需求实现
4.1 对外提供文件存储服务
即用户从外网向一体机中导入导出数据,我们对客户端系统是windows和linux俩种情况进行讨论。
4.1.1 外网系统是linux
在Linux的中, 可以通过Samba客户端直接访问共享文件系统,也可以把server中的共享文件夹挂载在本地机上使用.
(1)Samba客户端访问
使用smbclient,smbclient是samba的客户端,可以通过smbclient的put/get上传下载文件。
# smbclient //10.10.17.8/Test-A -U user1 使用user1账号登陆Test-A
# smbclient //10.10.17.8/Test-B 匿名登陆Test-B,遇到输入密码直接回车
常见错误:session setup failed: NT_STATUS_LOGON_FAILURE。登陆错误,建议重新看一下【配置文件】中的两种登陆方式、用户创建等内容。
(2)挂载到本地方式访问
直接将nas-server中的目录挂载到本地,提供服务。具体方法:
① 第一步,在本地创建一个挂载点 mkdir /mnt/local-nas
② 第二步,挂载到本地
# mount -t cifs -o username=user1,password=user1 //10.10.17.8/Test-A /mnt/local-A 使用账号密码登陆
# mount -t cifs -o username=guest,password= //10.10.17.8/Test-B /mnt/local-B 匿名登陆
4.1.2 外网系统是windows
(1)ftp
直接使用ftp向nas盘传输数据。这种方式依赖于windows中已经装了ftp软件,不推荐使用。
(2)映射网络文件夹方式
在Windows网络中,可以直接就可以把共享文件夹当做本地硬盘来使用。
具体步骤:
计算机->网络->映射网络驱动器->输入 \\server\share->完成
4.2 内部虚拟机访问存储服务
也分成云主机系统是window和linux两种情况讨论。和3.5中方式完全一样,故不作复述。
总之,只要网络是通的,就可以使用nas服务
5 存在问题
该方案在高可靠性方面存在风险:由于我们的nas服务是通过云主机+rbd盘方式提供,如果云主机迁移过程中(大概一分钟),服务会中端,如果恰好在文件传输过程中,文件传输会失败,需要用户重新传输文件。
6 其他调研
以下调研,本人均没有进行实验验证,也许后续会补充相关文档。
(1) 服务器层 CephFS+nfsd/samba+consul
nfsd(是linux自带的守护进程)使用nfs协议向linux提供服务,samba使用cifs协议向windows提供服务
目前实现的高可用程度:
nfsd 可以支持高可用,切换节点(大概1分钟),服务重新连接上后,文件可以继续传输。注意:仅nfsd的v3版本支持无状态无连接的传输方式,故服务切换后可以继续传输,v4版本是无连接有状态的,不能支持高可用。目前云存储cifs协议不支持高可用。
(2) 在CephFS + Manila
Manila项目全称是File Share Service,文件共享即服务。是OpenStack大帐篷模式下的子项目之一,用来提供云上的文件共享,支持CIFS协议和NFS协议。
些关于Ceph对接Manila的驱动:
1. Default Driver: 使用 RBD 作为 Manila Service VM 的后端,在 VM 上启动 NFS 实例提供服务
2. Ganesha Driver: 使用 Ganesha 将 CephFS 重新 Reexport 出去
3. Native CephFS Driver: 在 Guest VM 上直接使用原生 CephFS Module 访问
4. VirtFS Driver: 将 CephFS 挂载在 Host 端,VM 通过 VirtFS 访问
目前实现的高可用程度:
时间原因,没有查到资料。