使用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的分布式文件系统能力,流媒体服务器能够使后台的存储空间得到近无限的弹性扩展能力。


SequoiaDB巨杉数据库入门:快速搭建流媒体服务器的更多相关文章

  1. 巨杉Tech|SequoiaDB 巨杉数据库高可用容灾测试

    数据库的高可用是指最大程度地为用户提供服务,避免服务器宕机等故障带来的服务中断.数据库的高可用性不仅仅体现在数据库能否持续提供服务,而且也体现在能否保证数据的一致性. SequoiaDB 巨杉数据库作 ...

  2. SequoiaDB 巨杉数据库

    传统单点数据库的容量瓶颈,仅仅是分布式数据库所解决的问题之一.更重要的是在未来微服务化应用开发以及云化平台的趋势下,应用不再以“烟囱式”的中间件加数据库模式进行构建,而是采用数千甚至上万的微服务程序构 ...

  3. 【巨杉数据库SequoiaDB】SequoiaDB 巨杉数据库 v3.4 版本正式发布

    深秋时节,SequoiaDB 巨杉数据库在深秋给大家带来了“一把火”.SequoiaDB v3.4 正式发布啦! 分布式交易场景性能大幅提升 SequoiaDB 巨杉数据库3.4版本正式发布,v3.4 ...

  4. SequoiaDB 巨杉数据库Docker镜像使用教程

    为方便用户快速体验,SequoiaDB 巨杉数据库提供基于 Docker 的镜像.本文介绍如何在 Docker 环境下部署 SequoiaDB 分布式集群环境.   集群规划 我们准备在五个容器中部署 ...

  5. koa2+koa-generator+mysql快速搭建nodejs服务器

    koa2+koa-generator+mysql快速搭建nodejs服务器 用koa的脚手架koa-generator可以快速生成项目骨架,可以用于发开或者测试接口 https://github.co ...

  6. [Windows Azure] 使用 Windows Azure 快速搭建 Redis 服务器

    [Windows Azure] 使用 Windows Azure 快速搭建 Redis 服务器   Redis相信玩开源,大数据的朋友们并不陌生,大家最熟悉的使用者就是新浪微博,微博的整体数据缓存都是 ...

  7. Ubuntu下使用nginx和nginx-rtmp-module搭建流媒体服务器的正确姿势

    之前在使用nginx和nginx-rtmp-module搭建流媒体服务器的时候遇到一个很尴尬的问题,就是在把nginx-rtmp-module模块添加到nginx中去的时候,我最开始采取的做法是先卸载 ...

  8. 使用 Live555 搭建流媒体服务器

    最近因为工作需要,需要搭建流媒体服务器,所以研究了一下,在此分享我的搭建过程. 搭建过程还是非常简单的! 搭建环境为Centos 7.2 64bit 一.安装gcc编译器 yum install gc ...

  9. Linux-Nginx+rtmp+ffmpeg搭建流媒体服务器

    Nginx+rtmp+ffmpeg搭建流媒体服务器 说明: nginx搭建流媒体服务需要用到 nginx-rtmp-module 模块 具体操作步骤: 安装nginx (1)下载第三方扩展模块ngin ...

随机推荐

  1. BigDecimal精确计算工具类

    前言 在实际开发中,遇到例如货币,统计等商业计算的时候,一般需要采用java.math.BigDecimal类来进行精确计算.而这类操作通常都是可预知的,也就是通用的.所以,写了个工具类来方便以后的工 ...

  2. HTML表单概念、语法及创建表单,案例

    form 标签 Input标签的type属性值 单行文本域 <input type="text" /> 图像域(图像提交按钮) 下拉菜单和列表标签 select 标签属 ...

  3. 有关使用phpstudy搭建sqli-lab环境搭建时发生Uncaught Error: Call to undefined function mysql_connect()错误

    文章更新于2020-1-30 问题描述 Uncaught Error: Call to undefined function mysql_connect() 分析 经查php手册可知 mysql_co ...

  4. Spark学习之路 (十七)Spark分区[转]

    分区的概念 分区是RDD内部并行计算的一个计算单元,RDD的数据集在逻辑上被划分为多个分片,每一个分片称为分区,分区的格式决定了并行计算的粒度,而每个分区的数值计算都是在一个任务中进行的,因此任务的个 ...

  5. take it away `electron-builder` Electron打包失败的问题

    出现这个问题 出现问题原因是程序占用 , 在后台进程中将Electron的服务干掉以后再打包

  6. php趣题小记

    题目一: $a = 'abc'; $a++; echo $a; // abd 题目二: function myfun($a){ echo $a+10; } $a = 10; echo "my ...

  7. H5_0026:使用CSS里的user-select属性控制用户在页面上选中的内容

    CSS里的user-select属性用来禁止用户用鼠标在页面上选中文字.图片等,也就是,让页面内容不可选.也可以只允许用户选中文字,或者全部都放开,用户可以同时选中文字.还包括文本里的图片.视频等其它 ...

  8. Spark学习之路 (六)Spark Transformation和Action[转]

    Transformation算子 基本的初始化 (1)java static SparkConf conf = null; static JavaSparkContext sc = null; sta ...

  9. php 字符串常用函数

    数组.字符串和数据库是我们函数里面最.最.最常用的三类函数. 当然PHP的字符串函数也有很多.我们最常使用的两个系列的字符串: 1.单字节字符串处理函数 2.多字节字符串处理函数 3.字符串编码转换函 ...

  10. 堆之*bin理解

    在程序运行中,使用bins结构对释放的堆块进行管理,以减少向系统申请内存的开销,提高效率. chunk数据结构 从内存申请的所有堆块,都使用相同的数据结构——malloc_chunk,但在inuse和 ...