使用SequoiaDB的分布式文件系统搭建流媒体服务器

介绍

如今使用移动互联网的年轻人开始越来越多使用短视频展示自我,而流媒体则是支撑在线视频播放的核心技术。当我们开始构建流媒体站点时,往往面临最大的难题在于大量媒体音视频文件所占用的海量磁盘空间。譬如说,一个标准高清短视频可能需要30-50MB的存储空间,那么存储百万短视频的系统就需要几十TB的存储。而如果我们更进一步需要播放高清电影等视频内容,每个电影需要大概2GB左右的空间,十万部各种电影剧集则需要200TB的存储容量。

为了满足如此海量的音视频文件存储需求,大部分流媒体服务器使用外接NAS甚至分布式文件系统进行PB级海量数据存储。

通过阅读本文,用户可以了解到如何使用SequoiaDB巨杉数据库的分布式文件系统功能,为开源流媒体服务器Emby构建后端可弹性扩展的分布式存储。

Emby是一款被广泛使用的流媒体服务器,允许用户简单一键式部署自己的视频播放系统,将家庭内部或企业存储的图片、音视频文件进行统一管理,并能够在几乎全部设备上在线播放观看。

用户可以在Emby的服务端设置服务器路径指定其所访问的文件系统。一般来说,使用PC机或NAS设备内置的磁盘存储容量有限,因此如果希望将Emby后端的存储使用分布式文件系统替换传统内置盘,可以使用SequoiaDB所提供的分布式文件系统SequoiaFS,提供用户近乎无限可弹性扩展存储容量。

安装SequoiaDB

本文使用Linux Ubuntu Server 18.10作为服务器,SequoiaDB巨杉数据库版本为3.2。

本教程默认使用sudo用户名密码为“sequoiadb:sequoiadb”,默认home路径为/home/sequoiadb。

对于使用CentOS等其他Linux版本的用户,本文所描述的流程可能略有不同,需要根据实际情况自行调整。

下载SequoiaDB标准虚拟机模板的用户可以直接跳过该安装部署步骤。

更多安装细节可以查看SequoiaDB信息中心

1)     下载并安装SequoiaDB巨杉数据库

$ wget http://cdn.sequoiadb.com/images/sequoiadb/x86_64/sequoiadb-3.2-linux_x86_64.tar.gz

$ tar -zxvf sequoiadb-3.2-linux_x86_64.tar.gz

$ cd sequoiadb-3.2/

$ sudo ./setup.sh

之后一直回车确认各个默认参数即可。

2)     使用数据库实例用户创建默认实例

# 默认密码使用“sdbadmin”

$ sudo su sdbadmin

$ /opt/sequoiadb/tools/deploy/quickDeploy.sh

3)     使用root用户创建SequoiaFS文件系统

# 确认fuse内核组件被安装,且版本大于2.9.4。

$ which fusermount

/bin/fusermount

$ fusermount -V

fusermount version: 2.9.8

# 创建名为Nas.Storage的集合容器

$ /opt/sequoiadb/bin/sdb "db=new Sdb(); db.createCS('Nas'); db.Nas.createCL('Storage');"

# 创建mountpoint挂载点目录

$ mkdir -p /opt/sequoiadb/mountpoint

# 退出sdbadmin用户,回到默认sequoiadb用户

$ exit

# 密码默认为“sequoiadb”

$ sudo ln -s /opt/sequoiadb/bin/sequoiafs /usr/local/bin/sequoiafs

# 为fuse内核开启多用户访问权限

$ sudo sed -i "s/\#user_allow_other/user_allow_other/g" /etc/fuse.conf

# 创建sequoiafs所需的目录与空配置文件

$ sudo mkdir -p /opt/sequoiafs/conf/NasStorage/

$ sudo mkdir -p /opt/sequoiafs/log/NasStorage/

$ sudo touch /opt/sequoiafs/conf/NasStorage/sequoiafs.conf

$ sudo chown -R sdbadmin:sdbadmin_group /opt/sequoiafs

# 切换回数据库实例用户,密码默认为“sdbadmin”

$ sudo su sdbadmin

# 创建sequoiafs文件系统

$ sequoiafs /opt/sequoiadb/mountpoint -i localhost:11810 -l Nas.Storage --autocreate -c /opt/sequoiafs/conf/NasStorage/ --diagpath /opt/sequoiafs/log/NasStorage/ -o big_writes -o auto_unmount -o max_write=131072 -o max_read=131072 -o allow_other

# 检查文件系统加载正确

$ mount

sequoiafs on /opt/sequoiadb/mountpoint type fuse.sequoiafs (rw,nosuid,nodev,relatime,user_id=1001,group_id=1001,allow_other,max_read=131072)

安装Emby

本教程使用Emby版本为4.1.1。

1)登录Emby官网https://emby.media下载安装包

或登录sequoiadb用户,使用wget下载安装包

$ wget https://github.com/MediaBrowser/Emby.Releases/releases/download/4.1.1.0/emby-server-deb_4.1.1.0_amd64.deb

2)安装Emby Server

# 密码默认使用“sequoiadb”

$ sudo dpkg -i emby-server-deb_4.1.1.0_amd64.deb

3)打开浏览器,登录Linux服务器8096端口

4)按照向导进行配置,用户名密码建议均使用sdbadmin

5)在添加媒体页面添加SequoiaFS挂载点作为外接分布式文件系统

6)在添加媒体库页面,内容类型选择Movies,输入显示名后点击目录旁边的“+”号

7)使用/opt/sequoiadb/mountpoint作为分布式文件系统挂载点路径,并点击OK

8)点击OK进入下一步配置

9)按照向导完成后续配置

上传并使用流媒体服务器

1)将电影视频拷贝入/opt/sequoiadb/mountpoint目录

sftp> put YourName.mp4

Uploading YourName.mp4 to /opt/sequoiadb/mountpoint/YourName.mp4

sftp> put 教父BD双语双字.mkv

Uploading 教父BD双语双字.mkv to /opt/sequoiadb/mountpoint/教父BD双语双字.mkv

# 文件系统中通过ls可以看到文件大小

$ pwd

/opt/sequoiadb/mountpoint

$ ls -la

total 3978136

drwxr-xr-x  2 sdbadmin sdbadmin_group       4096 Jan  1  1970 .

drwxr-xr-x 23 sdbadmin sdbadmin_group       4096 May 15 10:13 ..

-rw-r--r--  1 sdbadmin sdbadmin_group  761962089 May 15 11:03 YourName.mp4

-rw-r--r--  1 sdbadmin sdbadmin_group 3311639424 May 15 11:12 教父BD双语双字.mkv

2)在Emby首页的媒体库点击“刷新元数据”进行后台元数据同步

进入电影库可以看到上传的电影

3)点击电影可以在线播放

结论

SequoiaDB巨杉数据库作为一款分布式数据库,提供包括结构化SQL、与非结构化文件系统和对象存储的机制。

使用SequoiaDB的非结构化存储能力,用户可以轻松基于分布式文件系统接口构建多媒体应用程序,并保持与传统Posix文件系统的完整兼容。

本文向读者展示了如何通过SequoiaDB的文件系统接口能力构建与Posix文件系统兼容的分布式文件系统,同时搭建Emby流媒体服务器。通过使用基于SequoiaDB的分布式文件系统能力,流媒体服务器能够使后台的存储空间得到近无限的弹性扩展能力。


最新文章

  1. 【译】Spring 4 Hello World例子
  2. VB.net Wcf事件广播(订阅、发布)
  3. C#调用Java方法(详细实例)
  4. 分页查询的SQL语句
  5. Android 自定义波浪动画 --"让进度浪起来~"
  6. RFID 基础/分类/编码/调制/传输
  7. 搬家后Magento前台只有产品的缩略图不显示
  8. 黑马程序员——JAVA基础之构造函数,构造代码块
  9. eclipse导入不到嵌套的项目
  10. 转载---linux运维相关
  11. 字体圆润属性的使用-webkit-font-smoothing: antialiased
  12. 转载:如何查看用户当前shell和修改用户登陆时的默认shell
  13. Android 上传库到Binary的操作
  14. <密码的实现>输入密码的时候,显示“*”,而不是显示输入内容
  15. 作为函数的mixin
  16. poj 1811 随机素数和大数分解(模板)
  17. 什么是Docker,它可干什么?
  18. Groovy语言学习--语法基础(1)
  19. [转]ArrayList的实现原理
  20. linux串口驱动分析【转】

热门文章

  1. spark集群
  2. 清北学堂—2020.1提高储备营—Day 2 afternoon(线段树、树状数组)
  3. C# DES加密、解密
  4. JAVA方法中参数到底是值传递还是引用传递
  5. 微信小程序-骰子游戏2
  6. Linux下快速删除大量小文件引起的磁盘inode(目录索引)过满
  7. CF1227F2 Wrong Answer on test 233 (Hard Version)
  8. Matrix Sum HihoCoder - 1336 二维树状数组 感觉好像二维差分。
  9. PAT (Basic Level) Practice (中文)1030 完美数列 (25 分) (有点意思)
  10. Linux更改时区