一、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+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.zipcd MogileFS-Server-masterper Makefile.PLmakemake install

1.3.安装MogileFS-Network

cd MogileFS-Network-master/perl Makefile.PLmakemake install

1.4.安装MogileFS-Utils

cd MogileFS-Utils-master/per Makefile.PLmakemake install

1.5.安装perl-MogileFS-Client

cd perl-MogileFS-Client-master/per Makefile.PLmakemake 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=mogpassThis 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.confdaemonize = 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.confmaxconns = 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 1esac 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 1esac exit $retval

3.6.启动进程:

启动查看mogilefsd进程

# systemctl start mogilefsd.service# ss -ntlState      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 -ntlState      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:7500node2 [2]: alive  IP:       172.16.110.48:7500node3 [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/dev4chown -R mogilefs.mogilefs /var/mogdata/dev4

node2:

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

node3:

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

查看添加的节点:    

# mogadm --trackers=172.16.110.49:7001 device listnode1 [1]: alive                    used(G)    free(G)   total(G)  weight(%)   dev4:   alive      1.786      6.200      7.986        100node2 [2]: alive                    used(G)    free(G)   total(G)  weight(%)   dev5:   alive      1.792      6.194      7.986        100node3 [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 checkChecking trackers...  172.16.110.49:7001 ... OKChecking hosts...  [ 1] node1 ... OK  [ 2] node2 ... OK  [ 3] node3 ... OKChecking 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: 20Statistics 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.访问测试

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.gzcd zlib-1.2.8./configuremakemake insatll

9.2.安装pcre

tar -xf pcre-8.37.tar.gzcd pcre-8.37./configuremakemake install

9.3.安装openssl

tar -xf openssl-1.0.2.tar.gzcd openssl-1.0.2./config --prefix=/usr/local --openssldir=/usr/local/opensslmakemake insatll

9.4.安装nginx

tar -xf nginx-1.6.3.tar.gzcd 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.4makemake 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.测试文件

错误说明:

启动报错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=1Jan 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 errorsmake[1]: *** [objs/addon/nginx_mogilefs_module-1.0.4/ngx_http_mogilefs_module.o] Error 1make[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,以后的版本会编译出错,跳过也不行)