一、mogilefs介绍

二、mogilefs原理

三、mogilefs架构说明

四、mogile安装部署


一、mogilefs介绍

MogileFS是我们的开源分布式文件系统。其性能和特点包括:

(1)应用程序级别 - 不需要特殊的内核模块。

   没有单点故障 -  MogileFS设置的所有三个组件(存储节点,跟踪器和跟踪器的数据库)可以在多台机器上运行,因此没有单点故障。 (您可以在与存储节点相同的计算机上运行跟踪器,因此您不需要4台计算机...)建议至少使用2台计算机。

(2)自动文件复制

   基于文件“类”的文件在足够不同的存储节点之间自动复制,以满足其类所请求的最小复制计数。例如,对于照片托管网站,您可以使原始JPEG的最小副本计数为3,但缩略图和缩放版本只有副本计数为1或2.如果你失去了缩略图的唯一副本,  应用程序可以重建它。以这种方式,MogileFS(无RAID)可以在不必要地存储多个数据副本的磁盘上节省资金。         

(3)比RAID更好

   在非SAN RAID设置中,磁盘是冗余的,但主机不是。如果丢失整个机器,则文件无法访问。 MogileFS在不同主机上的设备之间复制文件,因此文件始终可用。

(4) Flat Namespace      

   文件由平面的全局命名空间中的命名键标识。您可以创建任意数量的命名空间,因此具有可能冲突的键的多个应用程序可以在同一个MogileFS安装上运行。

(5) Shared-Nothing

    MogileFS不依赖于具有共享磁盘的昂贵的SAN。每台机器都维护自己的本地磁盘。

(6)不需要RAID  

   MogileFS存储节点上的本地磁盘可以位于RAID中,也可以不位于RAID中。它不是更便宜,因为RAID不会买你任何安全,MogileFS尚未提供。

(7)与本地文件系统无关联

   MogileFS存储节点上的本地磁盘可以使用您选择的文件系统(ext3,XFS等)进行格式化。 MogileFS有自己的内部目录哈希,因此它不会遇到文件系统限制,如“每个目录的最大文件数”或“每个目录最大目录数”。使用你舒适的。


二、mogilefs原理

Tracker(mogilefsd进程)

  基于事件的父进程/消息总线,管理来自应用程序的所有客户端通信(请求执行操作),包括将这些请求负载平衡到“查询工作器”,并处理mogilefsd子进程之间的所有通信。您应该在不同的主机上运行2个跟踪程序,为HA或更多负载均衡(如果您需要超过2)。 mogilefsd下的子进程包括:

    Replication - 复制文件

    Deletion- 命名空间中的删除是立即的;从文件系统的删除是异步的

    Query - 应答来自客户端的请求

    Reaper  - 在磁盘发生故障后重新排列文件以进行复制

    Monitor  - 监视主机和设备的运行状况和状态

    ... ...

数据库

  存储MogileFS元数据(命名空间,哪些文件位于哪里)的数据库。这应该在HA配置中设置,所以你没有单点故障。

存储节点

  存储文件的位置。存储节点只是执行DELETE,PUT等的HTTP服务器。任何WebDAV服务器都很好,但建议使用mogstored。 mogilefsd可以配置为使用不同端口上的两个服务器... mogstored用于所有WebDAV操作(和边带监控),以及您的快速/轻量级HTTP服务器,用于GET操作。通常人们每个安装点有一个SATA磁盘,每个安装在/var/mogdata/devNN。


三、mogilefs架构说明

mogilefs分布式部署及说明_第1张图片


四、安装部署

mogilefs+tracker部署在47,48,49上,三个安装一致,这里只写47的安装方法

1.安装mogilefs

下载地址:https://github.com/mogilefs/

由于mogilefs没有提供rpm包,这里使用原生的安装方法,如果需要使用rpm,去下载他人生成好的RPM


1.1.安装需要的依赖包:

yum install perl-DBD-mysql perl-CPAN perl-YAML gcc-c++

添加用户

adduser mogilefs

1.2.安装MogileFS-Server

unzip MogileFS-Server-master.zip
cd MogileFS-Server-master
per Makefile.PL
make
make install

1.3.安装MogileFS-Network

cd MogileFS-Network-master/
perl Makefile.PL
make
make install

1.4.安装MogileFS-Utils

cd MogileFS-Utils-master/
per Makefile.PL
make
make install

1.5.安装perl-MogileFS-Client

cd perl-MogileFS-Client-master/
per Makefile.PL
make
make install

1.6.Perl安装插件

perl -MCPAN -e 'install Danga::Socket'
perl -MCPAN -e 'install Gearman::Client'
perl -MCPAN -e 'install Gearman::Server' 
perl -MCPAN -e 'install Gearman::Client::Async' 
perl -MCPAN -e 'install Net::Netmask' 
perl -MCPAN -e 'install IO::WrapTie' 
perl -MCPAN -e 'install IO::AIO' 
perl -MCPAN -e 'install List::MoreUtils'
perl -MCPAN -e 'install Path::Class' 
perl -MCPAN -e 'install Perlbal'

2.配置数据库

数据库172.16.110.50

2.1.数据库安装略过

2.2.创建数据库及添加账号

添加root管理账号

MariaDB [mysql]> grant all on *.* to 'root'@'172.16.110.%' identified by 'ckl893';
Query OK, 0 rows affected (0.01 sec)

创建数据库:

MariaDB [mysql]> create database mogilefs;
Query OK, 1 row affected (0.00 sec)

添加mogilefs远程连接用户:

MariaDB [mysql]> grant all on mogilefs.* to 'moguser'@'172.16.110.%' identified by 'mogpass';
Query OK, 0 rows affected (0.00 sec)

2.3.生成数据表操作

修改生成脚本:

# vim mogdbsetup
....
my %args = (
            dbhost => "172.16.110.50",
            dbport => 3306,
            dbname => "mogilefs",
            dbrootuser => "root",
            dbrootpass => "ckl893",
            dbuser => "moguser",
            dbpass => "mogpass",
            );
....

在47上生成数据库表:

./mogdbsetup --dbhost=172.16.110.50 --dbname=mogilefs --dbuser=moguser --dbpassword=mogpass

This will attempt to setup or upgrade your MogileFS database.
It won't destroy existing data.
Run with --help for more information.  Run with --yes to shut up these prompts.

Continue? [N/y]: y

查看数据表:

MariaDB [mogilefs]> show tables;
+----------------------+
| Tables_in_mogilefs   |
+----------------------+
| checksum             |
| class                |
| device               |
| domain               |
| file                 |
| file_on              |
| file_on_corrupt      |
| file_to_delete       |
| file_to_delete2      |
| file_to_delete_later |
| file_to_queue        |
| file_to_replicate    |
| fsck_log             |
| host                 |
| server_settings      |
| tempfile             |
| unreachable_fids     |
+----------------------+
17 rows in set (0.00 sec)

3.配置文件及脚本

3.1.创建配置文件目录及权限

mkdir /etc/mogilefs/
chown -R mogilefs.mogilefs /etc/mogilefs/
cp /tmp/soft/MogileFS-Server-master/conf/mogilefsd.conf /etc/mogilefs/
cp /tmp/soft/MogileFS-Server-master/conf/mogstored.conf /etc/mogilefs/

3.2.mogilefsd配置文件说明

#vim /etc/mogilefs/mogilefsd.conf
daemonize = 1  守护进程运行
pidfile = /var/run/mogilefsd/mogilefsd.pid  pid文件
db_dsn = DBI:mysql:mogilefs:host=172.16.110.50  指定数据库连接地址
db_user = moguser       数据库连接用户
db_pass = mogpass       数据库连接密码
listen = 0.0.0.0:7001   tracker监听端口
conf_port = 7001       配置端口
query_jobs = 10        查询线程
delete_jobs = 1        删除线程
replicate_jobs = 5     复制线程
reaper_jobs = 1        复制线程

3.3.mogstored配置文件说明

#vim /etc/mogilefs/mogstored.conf
maxconns = 10000   #最大连接数
httplisten = 0.0.0.0:7500  #访问端口
mgmtlisten = 0.0.0.0:7501  #管理端口
docroot = /var/mogdata     #数据目录
pidfile = /var/run/mogstored/mogstored.pid #pid文件,如果脚本指定,这里必须有

3.4.mogilefsd启动脚本

vim /etc/init.d/mogilefsd 
#!/bin/sh
#
# mogilefsd    Startup script for the MogileFS tracker
#
# chkconfig: - 85 15
# description: MogileFS tracker
# processname: mogilefsd
# config: /etc/mogilefs/mogilefs.conf
# pidfile: /var/run/mogilefsd/mogilefsd.pid 
 
# Source function library.
. /etc/init.d/functions
 
# Check that networking is up.
. /etc/sysconfig/network
 
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
 
mogilefsd="/usr/local/bin/mogilefsd"
 
MOGILEFS_CONF_FILE="/etc/mogilefs/mogilefsd.conf"
SUDO_USER=mogilefs
 
lockfile=/var/lock/subsys/mogilefsd
 
start() {
         echo -n $"Starting mogilefsd: "
         #sudo -u $SUDO_USER $mogilefsd -c $MOGILEFS_CONF_FILE --daemon --no_schema_check
         daemon --user $SUDO_USER $mogilefsd -c $MOGILEFS_CONF_FILE --daemon
         retval=$?
         echo
         [ $retval = 0 ] && touch ${lockfile}
         return $retval
}
stop() {
         echo -n $"Stopping $prog: "
         killproc mogilefsd
         retval=$?
         echo
         [ $retval = 0 ] && rm -f ${lockfile}
         return $retval
}
reload() {
     echo -n $"Reloading mogilefsd: "
     killproc mogilefsd -HUP
     retval=$?
     echo
}
 
# See how we were called.
case "$1" in
   start)
         start
         ;;
   stop)
         stop
         ;;
   status)
         status mogilefsd
         retval=$?
         ;;
   restart)
         stop
         start
         ;;
   reload)
         reload
         ;;
   *)
         echo $"Usage: mogilefsd {start|stop|restart|reload|status}"
         exit 1
esac
 
exit $retval

3.5.mogstored启动脚本

vim /etc/init.d/mogstored 
#!/bin/sh
#
# mogstored    Startup script for the Mogstored Storage
#
# chkconfig: - 85 15
# description: MogileFS storage
# processname: mogstored
# config: /etc/mogilefs/mogstored.conf
# pidfile: /var/run/mogstored/mogstored.pid
 
# Source function library.
. /etc/init.d/functions
 
# Check that networking is up.
. /etc/sysconfig/network
 
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
 
mogstored="/usr/local/bin/mogstored"
 
MOGILEFS_CONF_FILE="/etc/mogilefs/mogstored.conf"
SUDO_USER=mogilefs
 
lockfile=/var/lock/subsys/mogstored
 
start() {
         echo -n $"Starting mogstored: "
#         sudo -u $SUDO_USER $mogilefsd -c $MOGILEFS_CONF_FILE --daemon --no_schema_check
         $mogstored --config=$MOGILEFS_CONF_FILE --daemon
#         daemon --user $SUDO_USER $mogstored -c $MOGILEFS_CONF_FILE --daemon
         retval=$?
         echo
         [ $retval = 0 ] && touch ${lockfile}
         return $retval
}
stop() {
         echo -n $"Stopping $prog: "
         killproc mogstored
         retval=$?
         echo
         [ $retval = 0 ] && rm -f ${lockfile}
         return $retval
}
reload() {
     echo -n $"Reloading mogstored: "
     killproc mogstored -HUP
     retval=$?
     echo
}
 
# See how we were called.
case "$1" in
   start)
         start
         ;;
   stop)
         stop
         ;;
   status)
         status mogstored
         retval=$?
         ;;
   restart)
         stop
         start
         ;;
   reload)
         reload
         ;;
   *)
         echo $"Usage: mogstored {start|stop|restart|reload|status}"
         exit 1
esac
 
exit $retval

3.6.启动进程:

启动查看mogilefsd进程

# systemctl start mogilefsd.service
# ss -ntl
State      Recv-Q Send-Q                      Local Address:Port                                     Peer Address:Port              
LISTEN     0      128                                     *:111                                                 *:*                  
LISTEN     0      128                                     *:22                                                  *:*                  
LISTEN     0      128                                     *:7001                                                *:*                  
LISTEN     0      100                             127.0.0.1:25                                                  *:*                  
LISTEN     0      128                                    :::111                                                :::*                  
LISTEN     0      128                                    :::22                                                 :::*                  
LISTEN     0      100                                   ::1:25                                                 :::*

启动查看mogstored进程:

# systemctl status mogstored.service
# ss -ntl
State      Recv-Q Send-Q                      Local Address:Port                                     Peer Address:Port              
LISTEN     0      128                                     *:7500                                                *:*                  
LISTEN     0      128                                     *:7501                                                *:*                  
LISTEN     0      128                                     *:111                                                 *:*                  
LISTEN     0      128                                     *:22                                                  *:*                  
LISTEN     0      128                                     *:7001                                                *:*                  
LISTEN     0      100                             127.0.0.1:25                                                  *:*                  
LISTEN     0      128                                    :::111                                                :::*                  
LISTEN     0      128                                    :::22                                                 :::*                  
LISTEN     0      100                                   ::1:25                                                 :::*

4.添加节点

为每个host增加节点,方法一直,随便选择一个tracker即可

4.1.增加节点:

# mogadm --trackers=172.16.110.47:7001 host add node1 --ip=172.16.110.47 --status=alive
# mogadm --trackers=172.16.110.48:7001 host add node2 --ip=172.16.110.48 --status=alive
# mogadm --trackers=172.16.110.49:7001 host add node3 --ip=172.16.110.49 --status=alive

删除节点:

mogadm --trackers=172.16.110.49:7001 host delete node1

查看增加的节点:

# mogadm --trackers=172.16.110.49:7001 host list        
node1 [1]: alive
  IP:       172.16.110.47:7500
node2 [2]: alive
  IP:       172.16.110.48:7500
node3 [3]: alive
  IP:       172.16.110.49:7500

4.2.添加设备存储节点:

(注意,最后一列的ID号同创建的目录的序号,如dev4 就是 4)

# mogadm --trackers=172.16.110.49:7001 device add node1 4
# mogadm --trackers=172.16.110.49:7001 device add node2 5
# mogadm --trackers=172.16.110.49:7001 device add node3 6

创建物理存储节点路径:

node1:

mkdir -pv /var/mogdata/dev4
chown -R mogilefs.mogilefs /var/mogdata/dev4

node2:

mkdir -pv /var/mogdata/dev5
chown -R mogilefs.mogilefs /var/mogdata/dev5

node3:

mkdir -pv /var/mogdata/dev6
chown -R mogilefs.mogilefs /var/mogdata/dev6

查看添加的节点:    

# mogadm --trackers=172.16.110.49:7001 device list
node1 [1]: alive
                    used(G)    free(G)   total(G)  weight(%)
   dev4:   alive      1.786      6.200      7.986        100
node2 [2]: alive
                    used(G)    free(G)   total(G)  weight(%)
   dev5:   alive      1.792      6.194      7.986        100
node3 [3]: alive
                    used(G)    free(G)   total(G)  weight(%)
   dev6:   alive      1.928      6.059      7.986        100

删除设备存储节点:

mogadm --trackers=172.16.110.49:7001 device mark node1 1 dead

4.3.检查节点状态:

# mogadm --trackers=172.16.110.49:7001 check
Checking trackers...
  172.16.110.49:7001 ... OK
Checking hosts...
  [ 1] node1 ... OK
  [ 2] node2 ... OK
  [ 3] node3 ... OK
Checking devices...
  host device         size(G)    used(G)    free(G)   use%   ob state   I/O%
  ---- ------------ ---------- ---------- ---------- ------ ---------- -----
  [ 1] dev4             7.986      1.786      6.200  22.37%  writeable   0.0
  [ 2] dev5             7.986      1.793      6.193  22.45%  writeable   0.0
  [ 3] dev6             7.986      1.929      6.058  24.15%  writeable   0.0
  ---- ------------ ---------- ---------- ---------- ------
             total:    23.959      5.508     18.451  22.99%

5.添加域

5.1.创建域:

# mogadm --trackers=172.16.110.49:7001 domain add img
# mogadm --trackers=172.16.110.49:7001 domain add html
# mogadm --trackers=172.16.110.49:7001 domain add file

查看域信息:

# mogadm --trackers=172.16.110.49:7001 domain list    
 domain               class                mindevcount   replpolicy   hashtype
-------------------- -------------------- ------------- ------------ -------
 file                 default                   2        MultipleHosts() NONE   
 html                 default                   2        MultipleHosts() NONE   
 img                  default                   2        MultipleHosts() NONE

6.添加类

默认会创建默认类,这里我们创建测试:

6.1.默认类:

# mogadm --trackers=172.16.110.49:7001 class list
 domain               class                mindevcount   replpolicy   hashtype
-------------------- -------------------- ------------- ------------ -------
 file                 default                   2        MultipleHosts() NONE   
 html                 default                   2        MultipleHosts() NONE   
 img                  default                   2        MultipleHosts() NONE

6.2.创建自定义类:

# mogadm --trackers=172.16.110.49:7001 class add html ckltext --mindevcount=3

查看类列表:

# mogadm --trackers=172.16.110.49:7001 class list
 domain               class                mindevcount   replpolicy   hashtype
-------------------- -------------------- ------------- ------------ -------
 file                 default                   2        MultipleHosts() NONE   
 html                 ckltext                   3        MultipleHosts() NONE   
 html                 default                   2        MultipleHosts() NONE   
 img                  default                   2        MultipleHosts() NONE

7.文件上传

7.1.上传测试:

# mogupload --trackers=172.16.110.49:7001 --domain=file --key='ckl_cron.txt' --file=/data/ckl_cron.txt
# mogupload --trackers=172.16.110.49:7001 --domain=img --key='001' --file=/data/001.jpg
# mogupload --trackers=172.16.110.49:7001 --domain=html --class=ckltext --key='index.html' --file=/data/index.html 上传到指定域指定类

7.2.查看文件上传信息

# mogfileinfo --trackers=172.16.110.49:7001 --domain=file --key='ckl_cron.txt'
- file: ckl_cron.txt
     class:              default
  devcount:                    1
    domain:                 file
       fid:                   17
       key:         ckl_cron.txt
    length:                   78
 - http://172.16.110.48:7500/dev5/0/000/000/0000000017.fid
# mogfileinfo --trackers=172.16.110.49:7001 --domain=img --key='001'    
- file: 001
     class:              default
  devcount:                    1
    domain:                  img
       fid:                   18
       key:                  001
    length:                68539
 - http://172.16.110.47:7500/dev4/0/000/000/0000000018.fid
# mogfileinfo --trackers=172.16.110.49:7001 --domain=html --key='index.html'
- file: index.html
     class:              ckltext
  devcount:                    1
    domain:                 html
       fid:                   19
       key:           index.html
    length:                  131
 - http://172.16.110.48:7500/dev5/0/000/000/0000000019.fid

7.3.查看设备存储信息

# mogstats --config=/etc/mogilefs/mogilefsd.conf 
Fetching statistics... (all)

Statistics for devices...
  device     host                   files     status
  ---------- ---------------- ------------ ----------
  dev4       node1               1      alive
  dev5       node2               3      alive
  ---------- ---------------- ------------ ----------

Statistics for file ids...
  Max file id: 20

Statistics for files...
  domain               class           files    size (m)  fullsize (m)
  -------------------- ----------- ---------- ----------- -------------
  file                 default             1           0             0
  html                 ckltext             1           0             0
  img                  default             2           0             0
  -------------------- ----------- ---------- ----------- -------------

Statistics for replication...
  domain               class        devcount      files
  -------------------- ----------- ---------- ----------
  file                 default             1          1
  html                 ckltext             1          1
  img                  default             1          2
  -------------------- ----------- ---------- ----------

Statistics for replication queue...
  status                      count
  -------------------- ------------
  deferred                        4
  -------------------- ------------

Statistics for delete queue...
  status                      count
  -------------------- ------------
  -------------------- ------------

Statistics for general queues...
  queue           status                      count
  --------------- -------------------- ------------
  --------------- -------------------- ------------

done

8.访问测试

http://172.16.110.48:7500/dev5/0/000/000/0000000017.fid

mogilefs分布式部署及说明_第2张图片

http://172.16.110.48:7500/dev5/0/000/000/0000000019.fid

mogilefs分布式部署及说明_第3张图片

http://172.16.110.48:7500/dev5/0/000/000/0000000020.fid

mogilefs分布式部署及说明_第4张图片

9.nginx反向代理配置

下载nginx_mogilefs_module-1.0.4.tar.gz模块

地址:http://www.grid.net.ru/nginx/mogilefs.en.html

9.1.安装zlib

tar -xf zlib-1.2.8.tar.gz
cd zlib-1.2.8
./configure
make
make insatll

9.2.安装pcre

tar -xf pcre-8.37.tar.gz
cd pcre-8.37
./configure
make
make install

9.3.安装openssl

tar -xf openssl-1.0.2.tar.gz
cd openssl-1.0.2
./config --prefix=/usr/local --openssldir=/usr/local/openssl
make
make insatll

9.4.安装nginx

tar -xf nginx-1.6.3.tar.gz
cd nginx-1.6.3/
./configure  --prefix=/app/local/nginx \
--pid-path=/app/local/nginx \
--user=nginx \
--group=nginx \
--with-threads \
--with-file-aio \
--with-http_ssl_module \
--with-pcre=/tmp/soft/pcre-8.37 \
--with-openssl=/tmp/soft/openssl-1.0.2 \
--add-module=/tmp/soft/nginx_mogilefs_module-1.0.4
make
make isntall

9.5.nginx配置

参考http://www.grid.net.ru/nginx/mogilefs.en.html

user  nginx;
worker_processes  8;
error_log  /app/local/log/nginx/error.log warn;
pid        /app/local/nginx/logs/nginx.pid;

events {
        use epoll;
        worker_connections  5120;
        multi_accept on;    
}


http {

    server_names_hash_bucket_size 64;
    proxy_headers_hash_max_size 51200;
    proxy_headers_hash_bucket_size 6400;
    include       /app/local/nginx/conf/mime.types;
    default_type  application/octet-stream;

    log_format main "$http_cdn_src_ip | $time_local | $request | $status | $body_bytes_sent | "
                "$request_body | $content_length | $http_referer | $http_user_agent | "
                "$http_x_forwarded_for | $remote_addr | $upstream_response_time | $request_time | $http_tracecode";

    access_log  /app/local/log/nginx/access.log  main;
    client_header_buffer_size 16k;
    large_client_header_buffers 4 64k;

    server_tokens off;
    sendfile    on;
    tcp_nopush  on;
    tcp_nodelay on;

    keepalive_timeout  65;
    client_header_timeout 20;
    client_body_timeout 20;
    reset_timedout_connection on;
    send_timeout 30;

    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 4;
    gzip_types text/plain application/x-javascript text/css application/xml;
    gzip_vary on;

    open_file_cache max=409600 inactive=30s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;

    upstream mog_tracker {
        server 172.16.110.47:7001;
        server 172.16.110.48:7001;
        server 172.16.110.49:7001;
    }

    server {

    listen       80;
    location ~* /html/ {
        mogilefs_tracker mog_tracker;
        mogilefs_domain html;
        mogilefs_pass  {
             proxy_pass $mogilefs_path;
             proxy_hide_header Content-Type;
             proxy_buffering off;
        }
    }

    location ~* /img/  {
       mogilefs_tracker mog_tracker;
       mogilefs_domain img;
       mogilefs_pass  {
            proxy_pass $mogilefs_path;
            proxy_hide_header Content-Type;
            proxy_buffering off;
       }
    }

    location ~* /file/ {  
            mogilefs_tracker mog_tracker;
            mogilefs_domain file;
            mogilefs_methods GET PUT DELETE;
            mogilefs_pass {
                proxy_pass $mogilefs_path;
                proxy_hide_header Content-Type;
                proxy_buffering off;
           }
     }
   }

}

启动nginx:

systemctl start nginx.service

10.测试文件

wKiom1ho2sCTF56-AAAUlwSeAlc154.png-wh_50

mogilefs分布式部署及说明_第5张图片

mogilefs分布式部署及说明_第6张图片

错误说明:

启动报错1:

Jan 01 12:05:42 www3.ckl.com runuser[48364]: pam_unix(runuser:session): session opened for user root by (uid=0)
Jan 01 12:05:42 www3.ckl.com mogilefsd[48363]: Starting mogilefsd: Can't locate Sys/Syslog.pm in @INC (@INC contains: lib /us...ne 25.
Jan 01 12:05:42 www3.ckl.com mogilefsd[48363]: BEGIN failed--compilation aborted at /usr/local/share/perl5/MogileFS/Server.pm line 25.
Jan 01 12:05:42 www3.ckl.com mogilefsd[48363]: Compilation failed in require at /usr/local/bin/mogilefsd line 16.
Jan 01 12:05:42 www3.ckl.com mogilefsd[48363]: BEGIN failed--compilation aborted at /usr/local/bin/mogilefsd line 16.
Jan 01 12:05:42 www3.ckl.com mogilefsd[48363]: [FAILED]
Jan 01 12:05:42 www3.ckl.com systemd[1]: mogilefsd.service: control process exited, code=exited status=1
Jan 01 12:05:42 www3.ckl.com systemd[1]: Failed to start SYSV: MogileFS tracker.
Jan 01 12:05:42 www3.ckl.com systemd[1]: Unit mogilefsd.service entered failed state.
Jan 01 12:05:42 www3.ckl.com systemd[1]: mogilefsd.service failed.
Warning: mogilefsd.service changed on disk. Run 'systemctl daemon-reload' to reload units.
Hint: Some lines were ellipsized, use -l to show in full.

解决1:

yum install perl-core

启动报错2:

Jan 01 13:35:29 www3.ckl.com systemd[1]: Starting SYSV: MogileFS storage...
Jan 01 13:35:30 www3.ckl.com mogstored[50356]: Starting mogstored:
Jan 01 13:35:30 www3.ckl.com systemd[1]: PID file /var/run/mogstored/mogstored.pid not readable (yet?) after start.

解决2:

配置文件增加 pidfile = /var/run/mogstored/mogstored.pid

编译nginx报错:

/tmp/soft/nginx_mogilefs_module-1.0.4/ngx_http_mogilefs_module.c: In function ‘ngx_http_mogilefs_handler’:
/tmp/soft/nginx_mogilefs_module-1.0.4/ngx_http_mogilefs_module.c:320:12: error: ‘ngx_peer_connection_t’ has no member named ‘lock’
     u->peer.lock = &r->connection->lock;
            ^
/tmp/soft/nginx_mogilefs_module-1.0.4/ngx_http_mogilefs_module.c:320:34: error: ‘ngx_connection_t’ has no member named ‘lock’
     u->peer.lock = &r->connection->lock;
                                  ^
/tmp/soft/nginx_mogilefs_module-1.0.4/ngx_http_mogilefs_module.c: In function ‘ngx_http_mogilefs_create_request’:
/tmp/soft/nginx_mogilefs_module-1.0.4/ngx_http_mogilefs_module.c:739:37: error: variable ‘request’ set but not used [-Werror=unused-but-set-variable]
     ngx_str_t                       request, domain;
                                     ^
/tmp/soft/nginx_mogilefs_module-1.0.4/ngx_http_mogilefs_module.c: In function ‘ngx_http_mogilefs_create_spare_location’:
/tmp/soft/nginx_mogilefs_module-1.0.4/ngx_http_mogilefs_module.c:1532:39: error: variable ‘pclcf’ set but not used [-Werror=unused-but-set-variable]
     ngx_http_core_loc_conf_t  *clcf, *pclcf, *rclcf;
                                       ^
cc1: all warnings being treated as errors
make[1]: *** [objs/addon/nginx_mogilefs_module-1.0.4/ngx_http_mogilefs_module.o] Error 1
make[1]: Leaving directory `/tmp/soft/nginx-1.8.1'
make: *** [build] Error 2

解决:

CFLAGS =  -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g

去掉 -Werror

CFLAGS =  -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -g

(系统7.3,nginx:1.6.3,以后的版本会编译出错,跳过也不行)