如何使用 Oracle Solaris 11.1 构建基于 Web 的存储解决方案

作者:Suk Kim

如何使用 Oracle Solaris 11.1 和 AjaXplorer 构建一个类似 Dropbox 的云存储服务。


2013 年 4 月发布

Oracle Solaris 11 是一个非常强大的云操作系统。使用 Oracle Solaris 11,您将能够提供各种服务。例如,可以创建一个 AjaXplorer 可利用的存储,AjaXplorer 提供基于 Web 的文件访问。

如果要下载软件、加入论坛、阅读像本文这样的其他技术方法文章,请成为 OTN 成员。无垃圾邮件!

本文介绍一个基于 PHP 的开源解决方案:使用 AjaXplorer、Oracle Solaris 11.1 和 Apache Web 服务器(尽管可以使用其他 Web 服务器)构建一个类似于 Dropbox 的基于云的存储服务。

当然,您也可以在 Microsoft Windows、Mac OS X 和 Linux 等操作系统中采用与 AjaXplorer 相同的方式构建存储。不过,使用 Oracle Solaris 11.1 时,您将能够利用 ZFS 以更强大、更安全的方式配置存储。

实现本文所描述的解决方案之后,您将能够使用任何 Web 浏览器访问基于 Web 的存储。而且,还可以使用 Android 和 Apple iOS 智能手机和平板电脑上的应用程序访问该存储。

先决条件

可以使用 Oracle VM VirtualBox 在系统上安装 Oracle Solaris 11.1。如果系统上已经安装了 Oracle Solaris 11.1,可以直接使用。

以下是 Oracle VM VirtualBox 的系统要求:

  • 至少 2 GB 内存(建议在 Oracle VM VirtualBox 中分配 1 GB 内存)
  • 至少 20 GB 的空闲磁盘空间用于 Oracle VM VirtualBox 及其映像

:如果未安装 Oracle VM Virtual Box,而是使用已经安装了 Oracle Solaris 11.1 的系统,该系统至少应有 1 GB 的内存(建议 2 GB)。本文所述的方法使用 Oracle VM VirtualBox 安装 Oracle Solaris 11.1。

安装 Oracle Solaris 和配置 ZFS 存储

执行以下步骤。

  1. 使用 Oracle VM VirtualBox(图 1 中所示)在系统上安装 Oracle Solaris 11.1。

    :如果未安装 Oracle VM VirtualBox,可以在这里下载,然后可以参考 Oracle VM VirtualBox 用户手册 了解安装信息。还可以下载适用于 Oracle VM VirtualBox 的 Oracle Solaris 11.1 VM 映像 — 预安装的虚拟机,它提供了一种在 Oracle VM VirtualBox 中评估 Oracle Solaris 11 的简便方式,您可以参考此文章

    图 1

    图 1. Oracle VM VirtualBox

  2. 添加一个将在配置 ZFS 中使用的磁盘,如图 2 所示。

    图 2

    图 2. 添加磁盘

  3. 再添加三个磁盘。完成后,Oracle VM VirtualBox Manager 将如图 3 所示。

    图 3

    图 3. 添加更多磁盘之后

  4. 使用 Oracle VM VirtualBox 中的 Start 图标启动 Oracle Solaris。
  5. 登录之后,使用 su 命令切换到 root 用户。(从 Oracle Solaris 11 开始,您不能直接作为 root 登录;必须先以常规用户身份登录。)
  6. 使用清单 1 中所示命令配置 ZFS 存储并配置 RAIDZ 卷。

    清单 1 中的命令创建一个名为 data_pool 的 ZFS 池作为 RAIDZ 卷,该卷使用三个磁盘:c7t2d0c7t3d0c7t4d0。然后在 data_pool 下创建 docs ZFS 文件系统。

    root@solaris:~# format
    Searching for disks...done
    
    
    AVAILABLE DISK SELECTIONS:
           0. c7t0d0 <ATA-VBOX HARDDISK-1.0-16.00GB>
              /pci@0,0/pci8086,2829@d/disk@0,0
           1. c7t2d0 <ATA-VBOX HARDDISK-1.0-2.00GB>
              /pci@0,0/pci8086,2829@d/disk@2,0
           2. c7t3d0 <ATA-VBOX HARDDISK-1.0-2.00GB>
              /pci@0,0/pci8086,2829@d/disk@3,0
           3. c7t4d0 <ATA-VBOX HARDDISK-1.0-2.00GB>
              /pci@0,0/pci8086,2829@d/disk@4,0
    Specify disk (enter its number): ^D
    
    root@solaris:~# zpool create data_pool raidz c7t2d0 c7t3d0 c7t4d0
    root@solaris:~# zfs create data_pool/docs
    

    清单 1

安装 Apache 和 PHP 软件包

  1. 要安装 Oracle Solaris 11 附带的 PHP Server 和 Apache Web Server 软件包,请运行以下命令:

    root@solaris:~# pkg install pkg:/web/server/apache-22
    root@solaris:~# pkg install pkg:/web/php-53
    root@solaris:~# pkg install pkg:/web/server/apache-22/module/apache-php53
    
  2. 使用 wget 命令从 sourceforge.net 下载 AjaXplorer:

    root@solaris:~# wget  http://sourceforge.net/projects/ajaxplorer/files/ajaxplorer/stable-channel/4.2.3/ajaxplorer-core-4.2.3.tar.gz
    
  3. 使用以下命令解压缩下载的文件。

    root@solaris:~# tar xvfz /ajaxplorer-core-4.2.3.tar.gz
    

    AjaXplorer 安装在 Apache 服务器的默认位置,即 /var/apache2/2.2/htdocs

  4. 为了在 htdocs 目录下构造 Web 存储,继续操作如下。首先,创建 webhard 子目录:

    root@solaris:~# mkdir /var/apache2/2.2/htdocs/webhard
    
  5. 其次,将挂载点从 /var/apache2/2.2/htdocs/webhard 更改为 data_pool/docs,这是基于 Web 的存储:

    root@solaris:~# zfs set mountpoint=/var/apache2/2.2/htdocs/webhard data_pool/docs
    

    如果您不想更改挂载点,可以通过修改 Apache 服务器配置实现同样的结果。

  6. 如清单 2 所示,可以为 ZFS 文件系统启用重复数据消除(Oracle Solaris 11 支持此功能),还可以启用压缩特性来高效地利用存储。

    在操作中可以启用或关闭重复数据消除和压缩。加密(此处未使用)只能在创建卷时启用。卷加密后不能更改加密设置。

    root@solaris:~# zfs get all data_pool/docs | grep compress
    data_pool/docs  compression           off                    local
    data_pool/docs  compressratio         1.00x               
    
    root@solaris:~# zfs get all data_pool/docs | grep dedup
    data_pool/docs  dedup                 off                    local
    
    root@solaris:~# zfs set compression=on data_pool/docs
    root@solaris:~# zfs set dedup=on data_pool/docs
    
    root@solaris:~# zfs get all data_pool/docs | grep dedup
    data_pool/docs  dedup                 on                     local
    root@solaris:~# zfs get all data_pool/docs | grep compress
    data_pool/docs  compression           on                     local
    data_pool/docs  compressratio         1.00x
    

    清单 2

    现在,如果复制同一个文件,因为重复数据消除可以节省空间,数据块不会发生变化。压缩还可以节省额外的空间。

  7. 运行以下命令设置权限,允许访问该目录:

    root@solaris:~# chown -R webservd:webservd /var/apache2/2.2/htdocs
    root@solaris:~# chmod -R 777 /var/apache2/2.2/htdocs/webhard
    

配置安全性

  1. 要配置 HTTPS (SSL) 通信,可以复制 ssl.conf 文件创建密钥和证书。复制和配置任务完成后,重新启动 Web 服务。

    root@solaris:~# cp /etc/apache2/2.2/sample-config.d/ssl.conf /etc/apache2/2.2/conf.d
    root@solaris:~# openssl genrsa -out server.key 2048
    root@solaris:~# openssl req -new -key server.key -out server.csr
    root@solaris:~# openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
    root@solaris:~# cp server.* /etc/apache2/2.2
    root@solaris:~# svcadm restart http:apache22
    
  2. 注意,由于 32 位 PHP 模块的限制,文件上载大小不得超过 2 GB。对于 64 位模块,上载限制更高;遗憾的是,对于适用于 x86 平台的 Oracle Solaris,只有 32 位 PHP 模块可用。

    root@solaris:~# php -r 'echo PHP_INT_MAX;'
    2147483647
    

    • 32 位:2147483647 (= 2G)
    • 64 位:9223372036854775807 (= 8388608T)

    因此,在 /etc/php/5.3/php.ini 中调整以下值:

    1. memory_limit 设置为 128M
    2. post_max_size 设置为 2G
    3. upload_max_filesize 设置为 2G

    post_max_size 必须始终大于或等于 upload_max_filesize

  3. 完成这些更改后,重新启动服务。

    root@solaris:~# svcadm restart http:apache22
    
  4. 为安全起见,我安装并配置了 mod_secruity Apache 模块。如果需要,可以使用以下命令安装和配置此模块。

    root@solaris:~# pkg install web/server/apache-22/module/apache-security
    root@solaris:~# cp /etc/apache2/2.2/sample-config.d/security2.conf /etc/apache2/2.2/conf.d
    

连接客户端

  1. 对于使用 Web 浏览器的正常 PC,将首先显示客户端连接和诊断消息。然后,如图 4 所示,将显示一个安全警告,指出初始用户 ID 和口令均为 admin。初次登录之后可以更改口令。

    图 4

    图 4. 安全警告

    图 5

    图 5. 连接到 AjaXplorer

  2. 为了检查和设置文件大小限制,选择 Settings,然后依次选择 Global ConfigurationsCore ConfigsCommon 'uploader' plugins optionsLimitations。然后可以看到和更改文件大小,如图 6 所示。

    图 6

    图 6. 查看和更改文件大小限制

  3. 如图 7 所示,使用 Web 浏览器,您可以使用 Web 存储。

    图 7

    图 7. 通过浏览器使用 Web 存储

  4. 如图 8 至图 12 所示,可以按照基于 Android 的智能电话或 iPhone 的方式使用存储。

    图 8
    图 8. 适用于 iOS 的 AjaXplorer
    图 9
    图 9. 服务器设置
    图 10
    图 10. 创建的服务器
    图 11
    图 11. 服务器连接
    图 12
    图 12. 文件访问
     
  5. 可以使用一个 0.99 美元的原生应用程序通过 iPhone 或 iPad 访问 AjaXplorer。

    如图 13 至图 15 所示,即使不使用该应用程序,也可以使用移动 Web 浏览器访问存储。

    图 13
    图 13. 移动 Web 浏览器上的已连接屏幕
    图 14
    图 14. 移动 Web 浏览器上的登录屏幕
    图 15
    图 15. 在移动 Web 浏览器上访问文件
     

检查 ZFS 压缩和重复数据消除

文件上载和下载很成功。

使用 zpool list 验证重复数据消除和压缩功能是否正常:

root@solaris:~# zpool list
NAME        SIZE  ALLOC   FREE  CAP  DEDUP  HEALTH  ALTROOT
data_pool  5.94G  28.2M  5.91G   0%  2.97x  ONLINE  -
rpool      15.6G  4.01G  11.6G  25%  1.00x  ONLINE  -
root@solaris:~# zfs list
NAME                        USED  AVAIL  REFER  MOUNTPOINT
data_pool                  20.0M  3.87G  36.0K  /data_pool
data_pool/docs             19.6M  3.87G  19.6M  /var/apache2/2.2/htdocs/webhard

如果文件重复,zpool list 命令输出中的 DEDUP 列下显示的值将大于 1.00x。在本例中,值为 2.97x,这表示文件已压缩。

同时,zfs list 显示有关文件系统的信息。

另请参见

关于作者

Suk Kim 是韩国负责 Oracle Solaris 的 Oracle Ace 总监。他还是韩国 Oracle Solaris 用户网络主席、Oracle Solaris TechNet 管理员、Solaris School 社区管理员、Ansan 大学客座教授,以及 NoBreak Co., LTD. 的高级系统和安全顾问。

修订版 1.0,2013 年 4 月 25 日

关注我们:
博客 | Facebook | Twitter | YouTube