阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Web集群实现共享存储的架构演变及MogileFS

416次阅读
没有评论

共计 15323 个字符,预计需要花费 39 分钟才能阅读完成。

本篇博客从 Web 集群中亟需解决的大容量存储问题引入,分析了几类常用的共享存储架构,重点解析了分布式存储系统的原理及配置实现;

===================================================================

1 共享存储的架构演变
2 分布式存储系统
2.1 基础知识
2.2 分类
2.3 CAP 理论
2.4 协议
3 MogileFS
3.1 特性
3.2 架构
3.3 组成
3.4 服务安装及启动
3.5 配置部署
3.6 配置前端代理 Nginx
3.7 访问验证
3.8 后续扩展 

=================================================================== 

MogileFS 设置 Memcached http://www.linuxidc.com/Linux/2012-03/56905.htm

在 MogileFS 中使用 Nginx http://www.linuxidc.com/Linux/2012-03/56904.htm

在开源分布式文件系统 MogileFS 中使用 Nginx http://www.linuxidc.com/Linux/2012-03/56573.htm

自定义 Nagios 监控 MogileFS 存储节点脚本 http://www.linuxidc.com/Linux/2011-12/49394.htm

1 共享存储的架构演变

  • rsync+inotify:本地各保留一份完整数据,但通过 rsync 实时同步修改文件,双主模型哦

  • NFS:多节点挂载后性能下降严重;存在单点故障,且多个客户端并发修改同一个文件时可能出现不一致的情况;

  • SAN:存储区域网络,不适用于海量高并发的存储场景,且代价昂贵;可通过软件实现 iSCSI 存储网络;涉及 GFS2/CLVM(LVM2)

  • MooseFS:分布式文件系统,适用于海量小文件存储;支持 FUSE,可被挂载使用;

  • MogileFS:分布式存储系统,适用于海量小文件存储;不支持 FUSE,只能通过 API 调用;

2 分布式存储系统

2.1 基础知识

定义:分布式存储系统是大量普通 PC 服务器通过 Internet 互联,对外作为一个整体提供存储服务

特性

  • 可扩展:分布式存储系统可以扩展到几百台至几千台的集群规模,且随着集群规模的增长,系统整体性能表现为线性增长;

  • 低成本:分布式存储系统的自动容错、自动负载均衡机制使其可以构建在普通 PC 机之上;另外,线性扩展能力也使得增加、减少机器非常方便,可以实现自动运维;

  • 高性能:无论是针对整个集群还是单台服务器,都要求分布式系统具备高性能;

  • 易用:分布式存储系统需要能够提供易用的对外接口;另外,也要求具备完善的监控、运维工具,并能方便的与其他系统集成,如从 Hadoop 云计算系统导入数据;

挑战:在于数据、状态信息的持久化,要求在自动迁移、自动容错、并发读写的过程中保证数据的一致性;

2.2 分类

数据类型大致可分为非结构化数据(如文本、图片、视频等),结构化数据(一般存储在关系型数据库中),半结构化数据(如 HTML 文档);根据处理不同类型数据的需求,分布式存储系统可分为如下 4 类:

  • 分布式文件系统:用于存储 Blob 对象,如图片、视频等,这类数据以对象的形式组织,对象之间没有关联;如 GFS,MogileFS 等;

  • 分布式键值系统:用于存储关系简单的半结构化数据,它只提供基于主键的 CRUD(Create/Read/Update/Delete)功能;如 Memcache,Redis 等;

  • 分布式表格系统:用于存储关系较为复杂的半结构化数据,不仅支持简单的 CRUD 操作,还支持扫描某个主键范围;如 Google Bigtable、Megastore;

  • 分布式数据库:用于存储结构化数据,利用二维表格组织数据;如 MySQL Sharding 集群,Google Spanner 等;

2.3 CAP 理论

来自 Berkerly 的 Eric Brewer 教授提出了一个著名的 CAP 理论:一致性 (Consistency),可用性(Availability) 和分区容忍性 (Tolerance of network Partition) 三者不能同时满足:

  • C:读操作总是能读取到之前完成的写操作结果,满足这个条件的系统成为强一致系统,这里的“之前”一般对同一个客户端而言;

  • A:读写操作在单台机器发生故障的情况下依然能够正常执行,而不需要等待发生故障的机器重启或者其上的服务迁移到其他机器;

  • P:机器故障、网络故障、机房停电等异常情况下仍然能够满足一致性和可用性;

分布式存储系统要求能够自动容错,即分区可容忍性总是需要满足的,因此,一致性和写操作的可用性就不能同时满足了,需要在这二者间权衡,是选择不允许丢失数据,保持强一致,还是允许少量数据丢失以获得更好的可用性;

2.4 协议

分布式协议涉及的协议很多,例如租约,复制协议,一致性协议,其中以两阶段提交协议和 Paxos 协议最具有代表性;

两阶段提交协议 (Two-phase Commit,2PC) 用以保证跨多个节点操作的原子性,即跨多个节点的操作要么在所有节点上全部执行成功,要么全部失败;

两个阶段的执行过程如下:

  • 阶段一:请求阶段(Prepare phase),在请求阶段,协调者通知事务参与者准备提交或者取消事务,然后进入表决过程;

  • 阶段二:提交阶段(Commit phase);

Paxos 协议 用于确保多个节点对某个投票 (例如哪个节点为主节点) 达成一致;

 

3 MogileFS

3.1 特性

  • 工作于应用层:无需特殊的核心组件;

  • 无单点:三大组件 (tracker,mogstore,database) 皆可实现高可用;

  • 自动文件复制:复制的最小单位不是文件,而是 class;基于不同的 class,文件可以被自动的复制到多个有足够存储空间的存储节点上;

  • 传输中立,无特殊协议:可以通过 NFS 或 HTTP 协议进行通信;

  • 简单的命名空间:文件通过一个给定的 key 来确定,是一个全局的命名空间;没有目录,基于域实现文件隔离;

  • 不共享数据:无需通过昂贵的 SAN 来共享磁盘,每个存储节点只需维护自己所属的存储设备 (device) 即可;

3.2 架构

Web 集群实现共享存储的架构演变及 MogileFS

 

Tracker:MogileFS 的核心,是一个调度器;服务进程为 mogilefsd;可以做负载均衡调度;

  • 主要职责有:

  • 数据删除;

  • 数据复制;

  • 监控:故障后生成新的数据副本;

  • 查询;

Database:Tracker 访问 Database,返回用户可用的 Storage Node 及文件的存放位置;

mogstored:数据存储的位置,通常是一个 HTTP(WebDAV)服务器,用于数据的创建、删除、获取等;不可做负载均衡调度;

3.3 组成

MogileFS 由 3 个部分组成:

server:主要包括 mogilefsd 和 mogstored 两个应用程序。

  • mogilefsd 实现的是 tracker,它通过数据库来保存元数据信息,包括站点 domain、class、host 等;

  • mogstored 是存储节点(store node),它其实是个 WebDAV 服务,默认监听在 7500 端口,接受客户端的文件存储请求。

Utils(工具集):主要是 MogileFS 的一些管理工具,例如 mogadm 等;

  • 在 MogileFS 安装完后,要运行 mogadm 工具将所有的 store node 注册到 mogilefsd 的数据库里,mogilefsd 会对这些节点进行管理和监控;

客户端 API:MogileFS 的客户端 API 很多,例如 Perl、PHP、Java、Python 等,用这个模块可以编写客户端程序,实现文件的备份管理功能等;

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2014-06/103094p2.htm

3.4 服务安装及启动

基本架构(在 LNMT 架构的基础上改进)

Web 集群实现共享存储的架构演变及 MogileFS

服务器规划

Web 集群实现共享存储的架构演变及 MogileFS

服务安装及启动

数据库授权

MariaDB [(none)]> grant all on *.* to ‘root’@’192.168.%.%’ identified by ‘magedu’;

Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> grant all on mogdb.* to ‘moguser’@’192.168.%.%’ identified by ‘mogpass’;

Query OK, 0 rows affected (0.02 sec)

MariaDB [(none)]> flush privileges;

Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]>

grant all on *.* to ‘root’@’192.168.%.%’ identified by ‘magedu’;

grant all on mogdb.* to ‘moguser’@’192.168.%.%’ identified by ‘mogpass’;

flush privileges;

主机 192.168.0.45(mogilefs+mogilestored)

# 所需程序包

[root@mysql mogilefs]# ls

MogileFS-Server-2.46-2.el6.noarch.rpm            perl-MogileFS-Client-1.14-1.el6.noarch.rpm

MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm  perl-Net-Netmask-1.9015-8.el6.noarch.rpm

MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm  perl-Perlbal-1.78-1.el6.noarch.rpm

MogileFS-Utils-2.19-1.el6.noarch.rpm

[root@mysql mogilefs]# yum install -y *.rpm perl-IO-AIO

# 修改配置文件

[root@mysql mogdata]# vi /etc/mogilefs/mogilefsd.conf # 调度器 tracker 的配置文件

    # Enable daemon mode to work in background and use syslog 

    daemonize = 1

    # Where to store the pid of the daemon (must be the same in the init script)

    pidfile = /var/run/mogilefsd/mogilefsd.pid

    # Database connection information

    db_dsn = DBI:mysql:mogdb:host=192.168.0.45:3406    # 存储元数据的数据库信息,包括数据库 mogdb 及连接地址 192.168.0.45:3406

    db_user = moguser    # 数据库用户名

    db_pass = mogpass    # 数据库登录密码

    # IP:PORT to listen on for mogilefs client requests

    listen = 192.168.0.45:7001

[root@mysql mogdata]# vi /etc/mogilefs/mogstored.conf # 存储节点 mogstored 的配置文件

    maxconns = 10000    # 最大连接数

    httplisten = 0.0.0.0:7500 # http 请求监听的地址和端口

    mgmtlisten = 0.0.0.0:7501

    docroot = /var/mogdata # 存储设备挂载目录,可修改

# 准备存储设备

[root@mysql mogdata]# fdisk /dev/sda # 新建分区 sda4,大小 10G(实际生产环境中,此为整块磁盘,而非分区)

[root@mysql mogdata]# kpartx -af /dev/sda

[root@mysql mogdata]# partx -a /dev/sda

[root@mysql mogdata]# cat /proc/partitions # 验证分区已创建成功

[root@mysql mogdata]# mke2fs -t ext4 /dev/sda4 # 初始化分区

[root@mysql mogdata]# mkdir /var/mogdata

[root@mysql mogdata]# mount -t ext4 /dev/sda4 /var/mogdata/ # 挂载分区

[root@mysql mogdata]# mkdir /var/mogdata/dev1 # 创建存储设备 dev1(注:在 192.168.0.46 上,此为 dev2)

[root@mysql mogdata]# chown -R mogilefs.mogilefs /var/mogdata/

# 初始化数据库

[root@mysql mogdata]# mogdbsetup –dbhost=192.168.0.45 –dbport=3406 –dbrootuser=root –dbrootpass=magedu –dbuser=moguser –dbpass=mogpass –dbname=mogdb –yes

# 初始化数据库执行一次即可,故在主机 192.168.0.46 上无需执行此步骤

# 启动服务

[root@mysql mogilefs]# service mogilefsd start

Starting mogilefsd                                        [OK]

[root@mysql mogilefs]# service mogstored start

Starting mogstored                                        [OK]

主机 192.168.0.46(mogilefs+mogilestored)

同上,直至 mogilefsd 和 mogstored 服务都正常启动

3.5 配置部署(任意一个 tracker 节点上配置即可,如 192.168.0.45)

添加节点

[root@mysql mogdata]# echo “trackers = 192.168.0.45:7001” > /etc/mogilefs/mogilefs.conf # 管理程序 mogadm 的配置文件

[root@mysql mogdata]# mogadm host add 192.168.0.45 –ip=192.168.0.45 –status=alive # 添加节点 1

[root@mysql mogdata]# mogadm host add 192.168.0.46 –ip=192.168.0.46 –status=alive # 添加节点 2

[root@mysql mogilefs]# mogadm host list # 查看已添加节点

192.168.0.45 [1]: alive

  IP:      192.168.0.45:7500

192.168.0.46 [2]: alive

  IP:      192.168.0.46:7500

添加设备

[root@mysql mogdata]# mogadm device add 192.168.0.45 1 # 添加存储设备 1,设备编号需与 /var/mogdata 目录下的 dev1 目录保持一致

[root@mysql mogdata]# mogadm device add 192.168.0.46 2 # 添加存储设备 2,设备编号需与 /var/mogdata 目录下的 dev2 目录保持一致

[root@mysql mogdata]# mogadm device list # 查看已添加设备

192.168.0.45 [1]: alive

                    used(G)    free(G)  total(G)  weight(%)

  dev1:  alive      0.146      9.200      9.347        100

192.168.0.46 [2]: alive

                    used(G)    free(G)  total(G)  weight(%)

  dev2:  alive      0.146      9.199      9.346        100

添加 domain(域)

[root@mysql mogdata]# mogadm domain add images

[root@mysql mogdata]# mogadm domain add text

[root@mysql mogdata]# mogadm domain list

 domain              class                mindevcount  replpolicy  hashtype

——————– ——————– ————- ———— ——-

 images              default                  2        MultipleHosts() NONE

 text                default                  2        MultipleHosts() NONE

添加 class(文件类别)

[root@mysql mogdata]# mogadm class add images class1 –mindevcount=2 # 在域 images 中添加类别 class1 和 class2,最小文件复制份数为 2

[root@mysql mogdata]# mogadm class add images class2 –mindevcount=2

[root@mysql mogdata]# mogadm class add text class1 –mindevcount=2 # 在域 text 中添加类别 class1 和 class2,最小文件复制份数为 2

[root@mysql mogdata]# mogadm class add text class2 –mindevcount=2

[root@mysql mogdata]# mogadm class list

 domain              class                mindevcount  replpolicy  hashtype

——————– ——————– ————- ———— ——-

 images              class1                    2        MultipleHosts() NONE

 images              class2                    2        MultipleHosts() NONE

 images              default                  2        MultipleHosts() NONE

 text                class1                    2        MultipleHosts() NONE

 text                class2                    2        MultipleHosts() NONE

 text                default                  2        MultipleHosts() NONE

本篇博客从 Web 集群中亟需解决的大容量存储问题引入,分析了几类常用的共享存储架构,重点解析了分布式存储系统的原理及配置实现;

===================================================================

1 共享存储的架构演变
2 分布式存储系统
2.1 基础知识
2.2 分类
2.3 CAP 理论
2.4 协议
3 MogileFS
3.1 特性
3.2 架构
3.3 组成
3.4 服务安装及启动
3.5 配置部署
3.6 配置前端代理 Nginx
3.7 访问验证
3.8 后续扩展 

=================================================================== 

MogileFS 设置 Memcached http://www.linuxidc.com/Linux/2012-03/56905.htm

在 MogileFS 中使用 Nginx http://www.linuxidc.com/Linux/2012-03/56904.htm

在开源分布式文件系统 MogileFS 中使用 Nginx http://www.linuxidc.com/Linux/2012-03/56573.htm

自定义 Nagios 监控 MogileFS 存储节点脚本 http://www.linuxidc.com/Linux/2011-12/49394.htm

1 共享存储的架构演变

  • rsync+inotify:本地各保留一份完整数据,但通过 rsync 实时同步修改文件,双主模型哦

  • NFS:多节点挂载后性能下降严重;存在单点故障,且多个客户端并发修改同一个文件时可能出现不一致的情况;

  • SAN:存储区域网络,不适用于海量高并发的存储场景,且代价昂贵;可通过软件实现 iSCSI 存储网络;涉及 GFS2/CLVM(LVM2)

  • MooseFS:分布式文件系统,适用于海量小文件存储;支持 FUSE,可被挂载使用;

  • MogileFS:分布式存储系统,适用于海量小文件存储;不支持 FUSE,只能通过 API 调用;

2 分布式存储系统

2.1 基础知识

定义:分布式存储系统是大量普通 PC 服务器通过 Internet 互联,对外作为一个整体提供存储服务

特性

  • 可扩展:分布式存储系统可以扩展到几百台至几千台的集群规模,且随着集群规模的增长,系统整体性能表现为线性增长;

  • 低成本:分布式存储系统的自动容错、自动负载均衡机制使其可以构建在普通 PC 机之上;另外,线性扩展能力也使得增加、减少机器非常方便,可以实现自动运维;

  • 高性能:无论是针对整个集群还是单台服务器,都要求分布式系统具备高性能;

  • 易用:分布式存储系统需要能够提供易用的对外接口;另外,也要求具备完善的监控、运维工具,并能方便的与其他系统集成,如从 Hadoop 云计算系统导入数据;

挑战:在于数据、状态信息的持久化,要求在自动迁移、自动容错、并发读写的过程中保证数据的一致性;

2.2 分类

数据类型大致可分为非结构化数据(如文本、图片、视频等),结构化数据(一般存储在关系型数据库中),半结构化数据(如 HTML 文档);根据处理不同类型数据的需求,分布式存储系统可分为如下 4 类:

  • 分布式文件系统:用于存储 Blob 对象,如图片、视频等,这类数据以对象的形式组织,对象之间没有关联;如 GFS,MogileFS 等;

  • 分布式键值系统:用于存储关系简单的半结构化数据,它只提供基于主键的 CRUD(Create/Read/Update/Delete)功能;如 Memcache,Redis 等;

  • 分布式表格系统:用于存储关系较为复杂的半结构化数据,不仅支持简单的 CRUD 操作,还支持扫描某个主键范围;如 Google Bigtable、Megastore;

  • 分布式数据库:用于存储结构化数据,利用二维表格组织数据;如 MySQL Sharding 集群,Google Spanner 等;

2.3 CAP 理论

来自 Berkerly 的 Eric Brewer 教授提出了一个著名的 CAP 理论:一致性 (Consistency),可用性(Availability) 和分区容忍性 (Tolerance of network Partition) 三者不能同时满足:

  • C:读操作总是能读取到之前完成的写操作结果,满足这个条件的系统成为强一致系统,这里的“之前”一般对同一个客户端而言;

  • A:读写操作在单台机器发生故障的情况下依然能够正常执行,而不需要等待发生故障的机器重启或者其上的服务迁移到其他机器;

  • P:机器故障、网络故障、机房停电等异常情况下仍然能够满足一致性和可用性;

分布式存储系统要求能够自动容错,即分区可容忍性总是需要满足的,因此,一致性和写操作的可用性就不能同时满足了,需要在这二者间权衡,是选择不允许丢失数据,保持强一致,还是允许少量数据丢失以获得更好的可用性;

2.4 协议

分布式协议涉及的协议很多,例如租约,复制协议,一致性协议,其中以两阶段提交协议和 Paxos 协议最具有代表性;

两阶段提交协议 (Two-phase Commit,2PC) 用以保证跨多个节点操作的原子性,即跨多个节点的操作要么在所有节点上全部执行成功,要么全部失败;

两个阶段的执行过程如下:

  • 阶段一:请求阶段(Prepare phase),在请求阶段,协调者通知事务参与者准备提交或者取消事务,然后进入表决过程;

  • 阶段二:提交阶段(Commit phase);

Paxos 协议 用于确保多个节点对某个投票 (例如哪个节点为主节点) 达成一致;

 

3 MogileFS

3.1 特性

  • 工作于应用层:无需特殊的核心组件;

  • 无单点:三大组件 (tracker,mogstore,database) 皆可实现高可用;

  • 自动文件复制:复制的最小单位不是文件,而是 class;基于不同的 class,文件可以被自动的复制到多个有足够存储空间的存储节点上;

  • 传输中立,无特殊协议:可以通过 NFS 或 HTTP 协议进行通信;

  • 简单的命名空间:文件通过一个给定的 key 来确定,是一个全局的命名空间;没有目录,基于域实现文件隔离;

  • 不共享数据:无需通过昂贵的 SAN 来共享磁盘,每个存储节点只需维护自己所属的存储设备 (device) 即可;

3.2 架构

Web 集群实现共享存储的架构演变及 MogileFS

 

Tracker:MogileFS 的核心,是一个调度器;服务进程为 mogilefsd;可以做负载均衡调度;

  • 主要职责有:

  • 数据删除;

  • 数据复制;

  • 监控:故障后生成新的数据副本;

  • 查询;

Database:Tracker 访问 Database,返回用户可用的 Storage Node 及文件的存放位置;

mogstored:数据存储的位置,通常是一个 HTTP(WebDAV)服务器,用于数据的创建、删除、获取等;不可做负载均衡调度;

3.3 组成

MogileFS 由 3 个部分组成:

server:主要包括 mogilefsd 和 mogstored 两个应用程序。

  • mogilefsd 实现的是 tracker,它通过数据库来保存元数据信息,包括站点 domain、class、host 等;

  • mogstored 是存储节点(store node),它其实是个 WebDAV 服务,默认监听在 7500 端口,接受客户端的文件存储请求。

Utils(工具集):主要是 MogileFS 的一些管理工具,例如 mogadm 等;

  • 在 MogileFS 安装完后,要运行 mogadm 工具将所有的 store node 注册到 mogilefsd 的数据库里,mogilefsd 会对这些节点进行管理和监控;

客户端 API:MogileFS 的客户端 API 很多,例如 Perl、PHP、Java、Python 等,用这个模块可以编写客户端程序,实现文件的备份管理功能等;

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2014-06/103094p2.htm

3.6 配置前端代理 Nginx

重新编译安装 nginx,添加 nginx-mogilefs-module-master 模块

[root@nginx1 tar]# cd /home/software/src/nginx-1.4.7/

[root@nginx1 nginx-1.4.7]# ./configure \

> –prefix=/usr \

> –sbin-path=/usr/sbin/nginx \

> –conf-path=/etc/nginx/nginx.conf \

> –error-log-path=/var/log/nginx/error.log \

> –http-log-path=/var/log/nginx/access.log \

> –pid-path=/var/run/nginx/nginx.pid \

> –lock-path=/var/lock/nginx.lock \

> –user=nginx \

> –group=nginx \

> –with-http_ssl_module \

> –with-http_flv_module \

> –with-http_stub_status_module \

> –with-http_gzip_static_module \

> –http-client-body-temp-path=/var/tmp/nginx/client/ \

> –http-proxy-temp-path=/var/tmp/nginx/proxy/ \

> –http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \

> –http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \

> –http-scgi-temp-path=/var/tmp/nginx/scgi \

> –with-pcre \

> –with-debug \

> –add-module=/home/software/tar/nginx-mogilefs-module-master

[root@nginx1 nginx-1.4.7]# make && make install

配置 Nginx,将静态文件和图片的访问都转发至后端 MogileFS 即可

[root@nginx1 nginx]# cat /etc/nginx/nginx.conf

worker_processes 2;

error_log /var/log/nginx/nginx.error.log;

pid /var/run/nginx.pid;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘

‘$status $body_bytes_sent “$http_referer” ‘

‘”$http_user_agent” “$http_x_forwarded_for”‘;

sendfile on;

keepalive_timeout 65;

fastcgi_cache_path /www/cache levels=1:2 keys_zone=fcgicache:10m inactive=5m;

upstream mogfs_cluster {# 定义后端 mogilefs 集群

server 192.168.0.45:7001;

server 192.168.0.46:7001;

}

server {

listen 4040;

server_name xxrenzhe.lnmmp.com;

access_log /var/log/nginx/nginx-img.access.log main;

root /www/lnmmp.com;

valid_referers none blocked xxrenzhe.lnmmp.com *.lnmmp.com;

if ($invalid_referer) {

rewrite ^/ http://xxrenzhe.lnmmp.com/404.html

}

location ~* ^(/images/.*)$ {# 图片访问直接转发至后端 mogilefs 集群

mogilefs_tracker mogfs_cluster;

mogilefs_domain images; # 指定 images 域

mogilefs_noverify on;

mogilefs_pass $1 {# 传输访问的全路径(/images/.*)

proxy_pass $mogilefs_path;

proxy_hide_header Content=Type;

proxy_buffering off;

}

}

}

server {

listen 80;

server_name xxrenzhe.lnmmp.com;

access_log /var/log/nginx/nginx-static.access.log main;

location / {

root /www/lnmmp.com;

index index.php index.html index.htm;

}

location ~* ^(/text/.*)$ {# 文本访问直接转发至后端 mogilefs 集群

mogilefs_tracker mogfs_cluster;

mogilefs_domain text; # 指定 text 域

mogilefs_noverify on;

mogilefs_pass $1 {# 传输访问的全路径(/text/.*)

proxy_pass $mogilefs_path;

proxy_hide_header Content=Type;

proxy_buffering off;

}

}

gzip on;

gzip_comp_level 6;

gzip_buffers 16 8k;

gzip_http_version 1.1;

gzip_types text/plain text/css application/x-javascript text/xml application/xml;

gzip_disable msie6;

}

server {

listen 8080;

server_name xxrenzhe.lnmmp.com;

access_log /var/log/nginx/nginx-php.access.log main;

location / {

root /www/lnmmp.com;

index index.php index.html index.htm;

}

error_page 404 /404.html;

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root /www/lnmmp.com;

}

location ~ \.php$ {

root /www/lnmmp.com;

fastcgi_pass 127.0.0.1:9000;

fastcgi_cache fcgicache;

fastcgi_cache_valid 200 302 1h;

fastcgi_cache_valid 301 1d;

fastcgi_cache_valid any 1m;

fastcgi_cache_min_uses 1;

fastcgi_cache_key $request_method://$host$request_uri;

fastcgi_cache_use_stale error timeout invalid_header http_500;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}

}

}

启动 nginx 服务

 

 

[root@nginx1 nginx]# service nginx start

Starting nginx: [OK]

3.7 访问验证

上传文件测试分布式文件系统 MogileFS 的功能

 

 

[root@mysql mogdata]# mogupload –domain=images –key=’/images/fish.jpg’ –file=”/images/fish.jpg” # 上传图片文件,选择 images 域

[root@mysql mogdata]# mogupload –domain=text –key=’/text/index.html’ –file=”/text/index.html” # 上传文本文件,选择 text 域

[root@mysql mogdata]# moglistkeys –domain=images # 列出已添加的 key

/images/fish.jpg

[root@mysql mogdata]# moglistkeys –domain=text

/text/index.html

[root@mysql mogdata]# mogfileinfo –domain=images –key=’/images/fish.jpg’ # 查看已添加文件的具体信息,包括实际可访问地址

– file: /images/fish.jpg

class: default

devcount: 2

domain: images

fid: 9

key: /images/fish.jpg

length: 3225

– http://192.168.0.45:7500/dev1/0/000/000/0000000009.fid

– http://192.168.0.46:7500/dev2/0/000/000/0000000009.fid

[root@mysql mogdata]# mogfileinfo –domain=text –key=’/text/index.html’

– file: /text/index.html

class: default

devcount: 2

domain: text

fid: 8

key: /text/index.html

length: 15

– http://192.168.0.46:7500/dev2/0/000/000/0000000008.fid

– http://192.168.0.45:7500/dev1/0/000/000/0000000008.fid

Web 集群实现共享存储的架构演变及 MogileFS

 

 

说明:直接访问 mogilefs 提供的文件存储路径,访问正常;

结合 Nginx,从前端访问测试

Web 集群实现共享存储的架构演变及 MogileFSWeb 集群实现共享存储的架构演变及 MogileFS

 

 

说明:通过前端 Nginx 访问图片和文本文件一切正常,实现了对前端访问的透明性;

3.8 后续扩展

结合 LNMT 的架构,再通过 Haproxy 进行前端调度,就可以使用 MogileFS 这个分布式存储系统完全替代 NFS,实现对图片文件和文本文件的存储和读写;

鉴于 MogileFS 的无目录性,无法直接挂载使用,故向 mogilefs 集群中添加文件则需要程序通过 API 调用上传 (upload) 文件,虽然对于运维人员有点不方便,但也保证了一定的高效性;

如果想体验直接挂载使用分布式文件系统的乐趣,则可以尝试使用 MooseFS,在此就不多说了!

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计15323字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7978921
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...
如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装 2026 年最强个人助理 ClawdBot、完整安装教程 一、前言 学不完,根本学不完!近期,一款名...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...