Nginx+MogileFS安装与配置

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

(限于篇幅,测试过程中有些效果并未截图在此文中展示)

MogileFS简介:

Mogilefs是一款由Perl语言研发的轻量级的分布式存储系统,从应用层解决海量小数据的存储,主要适用于互联网文件共享、上传、下载。分布式存储系统是将数据分散存储在多台独立的设备上,分担存储负荷,利用位置服务器定位存储信息。它不但提高了系统的可靠性、可用性和存取效率,还易于扩展,可以支持由PHPJavaPerlPython写的扩展API接口来提供服务。GitHub地址:https://github.com/mogilefs

MogileFS工作特点:

1、工作于应用层,没有特殊的组件要求;

2、无单点,tracker节点可以高可用,存储节点可以存储多个数据副本,对应数据库有高可用方案;

3、实现文件自动复制,默认副本是2份;

4、传输中立,无须特殊协议。MogileFS客户端可以通过NFSHTTP来和MogileFS的存储节点来通信,但首先需要告知跟踪器;

5、使用名称空间(命名空间),每个文件通过key来确定,domain切割成不同的空间,单个空间的名称不能重复,也可以根据应用来分空间;

6、domain内部有多个小的组件组成,称为class类。整个空间由不同节点提供的,每个文件需要存副本。在数据库中保存元数据,class把多个文件合并起来当作一个复制最小单元;

7、无需raid,但比raid更优。MogileFS在不同的机器之间进行文件复制,因此文件始终是可用的;

8、不共享任何数据。MogileFS不需要依靠昂贵的SAN来共享磁盘,每个机器只用维护好自己的磁盘;

9、若某个Storage节点不在线,客户端向Tracker节点请求获取数据时,Tracker节点会返回用于冗余的副本的存储位置给客户端,这样就保证了整个文件系统中数据的高可用性。当有数据存储至某一Storage节点后,各Storage节点会根据Tracker的指示通过节点间通信将副本发送至其他节点上。若某一Storage下线了,该节点上的副本会由其他节点重新提供,保证副本的个数不少于指定的值。

MogileFS核心角色:

1、tracker节点:文件系统集群的核心节点。借助于数据库保存各节点文件的元数据信息,保存每个域中所有键的存储位置分布,方便检索、定位数据位置的同时并监控各个节点,告诉客户端存储区位置并指示storage节点完成数据的添加、删除、查询及节点之间数据的复制等。该节点上运行的进程名为mogilefsd,监听7001端口。往往Tracker节点有多个,以实现负载均衡和高可用。

2、database节点:为tracker节点提供数据存取服务,返回用户可用的storagenode及文件的存放位置。

3、storage节点:实际存储数据的位置。将指定域中的键转换为其特有的文件名存储在指定的设备文件中,转换后的文件名为值。storage节点自动维护键值对应关系。storage节点由于使用http进行数据传输,通常是一个HTTPWebDAV)服务器,能完成文件创建、删除、重命名等操作。该节点上运行的进程名为mogstored,监听7500端口和7501端口。

4、host:每一个存储节点称为一个主机,一个主机上可以有多个存储设备(单独的硬盘),每个设备都有ID号,Domain+Fid用来定位文件。

5、domain:一个域中的键值是唯一的,一个MogileFS可以有多个域,域可以存储不同应用类型的数据的容器。

6、class:复制最小单位,用于文件属性管理,定义文件存储在不同设备上的份数。

MogileFS工作原理:

1、客户端向服务器端发送请求,Nginx接收请求;

2、Nginx通过反向代理挑选后端任意一台Trackers服务器响应请求;

3、Trackers接收请求后再向后端数据库获取数据存储的位置;

4、Trackers接收到数据库响应回来的数据位置后再响应给Nginx

5、Nginx接收到Trackers响应回来的数据位置后再到Storage服务器上获取实际的存储数据;

6、Storage存储服务器将文件内容通过http协议返回给Nginx

7、Nginx将结果返回给应用层客户端。

测试Nginx+MogileFS

1、 测试环境:

192.168.1.121  nginx 1.10.3 编译安装

192.168.1.142  tracker+mogstore

192.168.1.143  tracker+mogstore

192.168.1.144  tracker+mogstore

192.168.1.145  mysql 5.6 RPM包安装

2、所有软件包下载并上传至对应服务器

libunwind-1.2.tar.gz 下载地址http://download.savannah.gnu.org/releases/libunwind/

gperftools-2.5.tar.gz  下载地址https://github.com/gperftools/gperftools/releases

nginx_mogilefs_module-1.0.4.tar.gz  下载地址http://www.grid.net.ru/nginx/download/

3、所有测试服务器时间同步及主机名配置(仅以192.168.1.121Nginx服务器为例):

(1)服务器时间同步:# yum-y install ntp  # ntpdatecn.ntp.org.cn  # date

(2)主机名配置:# vim/etc/sysconfig/network  -->  HOSTNAME=nginx121

# hostname nginx121  # hostname  --> nginx121

# vim/etc/hosts

192.168.1.121 nginx121

192.168.1.142 mfs-node142

192.168.1.143 mfs-node143

192.168.1.144 mfs-node144

192.168.1.145 mysql145

# logout

备注:5台测试服务器都需要执行上述步骤,只是需要修改的主机名不同而已。

4、192.168.1.145安装配置MySQL 5.6

(1)删除系统自带的旧MySQLRPM包:

# rpm-qa|grep -i mysql  -->  mysql-libs-5.1.73-7.el6.x86_64

# yum-y remove mysql-libs*

# rpm-qa|grep -i mysql

(2)安装MySQL

# rpm-ivh MySQL-client-5.6.35-1.el6.x86_64.rpm

# rpm-ivh MySQL-devel-5.6.35-1.el6.x86_64.rpm

# rpm-ivh MySQL-server-5.6.35-1.el6.x86_64.rpm

查看MySQL-server安装完成后生成的文件:

# rpm -ql MySQL-server

查看默认MySQL数据库root用户密码(随机字符串):

# cat /root/.mysql_secret  --> CsbCv2Ij_V2vcJSi

(3)创建MySQL配置文件:

# find / -name my.cnf           //如果默认已经存在/etc/my.cnf配置文件,需要先备份

# mv/etc/my.cnf /etc/my.cnf.bak

# cp/usr/share/mysql/my-default.cnf /etc/my.cnf

(4)初始化MySQL

# mysql_install_db --user=mysql --datadir=/var/lib/mysql

(5)启动MySQL,并实现开机自启:

# cp/usr/share/mysql/mysql.server /etc/init.d/mysqld

# service mysqld start

# netstat -lntup|grep mysqld

# chkconfig --add mysqld

# chkconfig mysqld on

# chkconfig --list mysqld

(6)MySQL安全性设置(包括创建或者修改root管理员密码、删除匿名用户、允许root管理员远程登录、删除测试数据库、重新加载授权表):

# mysql_secure_installation       //初始root管理员密码:CsbCv2Ij_V2vcJSi

(7)查看MySQL默认数据库:

# mysql -uroot -p

mysql>show databases;

查看是否有数据库mfsdb。

5、192.168.1.142 | 143 | 144安装配置MogileFS3tracker + storage节点都需要执行如下操作,此处仅以192.168.1.142 mfs-node142节点为例)

(1)新增一块磁盘10G,用于LVM存储数据,并查看系统分区情况:

# df-Th

# fdisk -l

(2)创建LVM分区:

# fdisk /dev/sdb          //分区截图没有上传

# partx -a /dev/sdb

# cat/proc/partitions

# fdisk -l

(3)创建LVM

将物理磁盘设备初始化为物理卷PV# pvcreate /dev/sdb1  # pvdisplay

创建卷组VG,并将PV加入VG中:# vgcreate卷组名称物理磁盘

# vgcreate mogilefs /dev/sdb1  # vgdisplay

基于VG创建逻辑卷LV# lvcreate【选项】卷组名称

【选项】:

-n:指定逻辑卷名称

-l:指定使用多少个卷组中的PE创建逻辑卷,PE的容量在创建卷组时已经指定

-L:指定逻辑卷的容量大小

# lvcreate -n mfsdata -l 100%FREE mogilefs  # lvdisplay

创建文件系统:# mke2fs -t ext4 /dev/卷组名称/逻辑卷名称  -->  # mke2fs -t ext4 /dev/mogilefs/mfsdata

创建挂载点:

  • 节点:# mkdir -pv /mfsdata/dev1

  • 节点:# mkdir -pv /mfsdata/dev2

  • 节点:# mkdir -pv /mfsdata/dev3

手动挂载:

  • 节点:# mount /dev/mogilefs/mfsdata /mfsdata/dev1

  • 节点:# mount /dev/mogilefs/mfsdata /mfsdata/dev2

  • 节点:# mount /dev/mogilefs/mfsdata /mfsdata/dev3

开机自动挂载:# vim/etc/fstab

  • 节点:/dev/mogilefs/mfsdata /mfsdata/dev1 ext4 defaults 0 0

  • 节点:/dev/mogilefs/mfsdata /mfsdata/dev2 ext4 defaults 0 0

  • 节点:/dev/mogilefs/mfsdata /mfsdata/dev3 ext4 defaults 0 0

手动挂载/etc/fstab文件中的所有设备:# mount -a

验证挂载是否成功:# cat /etc/mtab   # mount   # fdisk -l  # df -Th

192.168.1.142 mfs-node142为例:

(4)安装MogileFS

# yum-y install *.rpm perl-IO-AIO

MogileFS-Server-2.46-2.el6.noarch.rpm

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

perl-Perlbal-1.78-1.el6.noarch.rpm

MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm

perl-MogileFS-Client-1.14-1.el6.noarch.rpm

MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm

perl-Net-Netmask-1.9015-8.el6.noarch.rpm

# chown -R mogilefs.mogilefs /mfsdata/

# chown -R mogilefs.mogilefs /var/run/mogilefsd/

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

此时需要先回到192.168.1.145 mysql145节点中进行mfsuser用户和root用户的授权:

# mysql -uroot -p

mysql>grant all on mfsdb.*to 'mfsuser'@'192.168.%.%'identified by '123456';

mysql>grant all on *.* to 'root'@'192.168.%.%' identified by '123456';

mysql>flush privileges;

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

(5)新建mfsdb数据库(只要在192.168.1.142 mfs-node142节点执行如下命令,另外2个节点无需执行):

# mogdbsetup --dbhost=192.168.1.145 --dbport=3306 --dbname=mfsdb --dbrootuser=root --dbrootpass=123456 --dbuser=mfsuser --dbpass=123456 --yes

验证192.168.1.145mfsdb数据库是否创建成功:

# yum-y install mysql

//192.168.1.142 mfs-node142节点上安装MySQL客户端,远程连接192.168.1.145 mysql145节点

# mysql-h192.168.1.145 -uroot -p

(6)修改mogilefsd.conf配置文件,并启动mogilefsd服务:

# vim/etc/mogilefs/mogilefsd.conf,改为如下内容:

db_dsn = DBI:mysql:mfsdb:host=192.168.1.145

db_user = mfsuser

db_pass = 123456

listen = 0.0.0.0:7001

# /etc/init.d/mogilefsd start

# netstat -lntup|grep mogilefsd -->  监听端口7001

# chkconfig mogilefsd on

# chkconfig --list mogilefsd

(7)修改mogstored.conf配置文件,并启动mogstored服务:

# vim /etc/mogilefs/mogstored.conf,改为如下内容:

docroot = /mfsdata

# /etc/init.d/mogstored start

# netstat -lntup|grep mogstored  --> 监听端口7500和端口7501

# chkconfig mogstored on

# chkconfig --list mogstored

以下的所有操作只要在192.168.1.142 | 143 | 144中的任意一个节点中进行即可

(8)mfs-node142节点中添加host

# mogadmhost list            //默认没有任何host

# mogadmhost add 192.168.1.142 --status=alive

# mogadm host add 192.168.1.143 --status=alive

# mogadm host add 192.168.1.144 --status=alive

# mogadm host list

192.168.1.142 [1]: alive

  IP:       192.168.1.142:7500

192.168.1.143 [2]: alive

  IP:       192.168.1.143:7500

192.168.1.144 [3]: alive

  IP:       192.168.1.144:7500

备注:在3tracker+storage节点中的任何1个节点使用命令# mogadmhost list都能查看到相同的信息,即所有host的状态信息。如果要删除某个host,可以使用命令#mogadm host delete IP删除。

(9)mfs-node143节点中添加device

# mogadm device list

192.168.1.142 [1]: alive

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

192.168.1.143 [2]: alive

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

192.168.1.144 [3]: alive

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

# mogadmdevice add 192.168.1.142 1  -->  对应/mfsdata/dev1

# mogadm device add 192.168.1.143  -->  对应/mfsdata/dev2

# mogadm device add 192.168.1.144 3  -->  对应/mfsdata/dev3

备注:添加设备时所使用的设备ID号必须要和/mfsdata中的dev编号保持一致。

# mogadm device list

192.168.1.142 [1]: alive

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

   dev1:   alive     0.021      9.188     9.210        100

192.168.1.143 [2]: alive

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

   dev2:   alive     0.021      9.188     9.210        100

192.168.1.144 [3]: alive

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

   dev3:   alive     0.021      9.188      9.210        100

# mogadm device summary

Hostname     HostID  Status   used(G)  free(G)  total(G) %Used

192.168.1.142  [   1]:  alive    0.021    9.188    9.210    0.23

192.168.1.143  [   2]:  alive    0.021    9.188    9.210    0.23

192.168.1.144  [   3]:  alive    0.021    9.188    9.210    0.23

(10)mfs-node144节点中添加domain

# mogadm domain list

domain    class     mindevcount     replpolicy    hashtype

--------------- -------------- ------------------------------------------ ---------------

# mogadm domain add images

# mogadm domain add htmls

# mogadm domain add txts

# mogadm domain list

domain      class    mindevcount     replpolicy       hashtype

----------------- ------------ ---------------------------------------------- -------------------

  htmls      default       2         MultipleHosts()   NONE

  images    default       2          MultipleHosts()   NONE

  txts          default       2         MultipleHosts()   NONE

(11)mfs-node142节点中添加class

# mogadmclass list

domain      class    mindevcount     replpolicy       hashtype

----------------- ------------ ---------------------------------------------- -------------------

  htmls       default       2          MultipleHosts()   NONE

  images     default       2          MultipleHosts()   NONE

  txts          default       2           MultipleHosts()   NONE

每个域添加2个类,每个类至少3个副本:

# mogadm class add images class0 --mindevcount=3

# mogadm class add images class1 --mindevcount=3

# mogadm class add htmls class0 --mindevcount=3

# mogadm class add htmls class1 --mindevcount=3

# mogadmclass add txts class0 --mindevcount=3

# mogadm class add txts class1 --mindevcount=3

# mogadm class list

domain      class    mindevcount     replpolicy       hashtype

----------------- ------------ ---------------------------------------------- -------------------

  htmls       class0        3         MultipleHosts()   NONE

  htmls      class1        3         MultipleHosts()   NONE

  htmls      default       2         MultipleHosts()   NONE

  images     class0        3         MultipleHosts()   NONE

  images     class1        3         MultipleHosts()   NONE

  images     default       2          MultipleHosts()   NONE

  txts        class0        3          MultipleHosts()   NONE

  txts        class1        3          MultipleHosts()   NONE

  txts        default       2          MultipleHosts()   NONE

状态检查:

# mogadm check

Checking trackers...

  127.0.0.1:7001... OK

Checking hosts...

  [ 1]192.168.1.142 ... OK

  [ 2]192.168.1.143 ... OK

  [ 3]192.168.1.144 ... OK

Checking devices...

  host  device  size(G)   used(G)    free(G)  use%   ob state    I/O%

  ------------------ ---------- ------------------ ------------- ------------ -------------------------

  [ 1]   dev1   9.211     0.022      9.188    0.24%  writeable  0.0

  [ 2]   dev2    9.211    0.022      9.188     0.24%  writeable  0.0

  [ 3]   dev3   9.211     0.022      9.188    0.24%  writeable  0.0

  ------------------ ---------- ------------------ ------------- ------------ -------------------------

       total:    27.632   0.067      27.565   0.24%

# mogstats --config=/etc/mogilefs/mogilefsd.conf

# mogstats --config=/etc/mogilefs/mogilefsd.conf --stats="domains,devices"

(12)mfs-node143节点和mfs-node144节点中分别上传图片:

首先在上述2个节点中创建图片存放目录:# mkdir-pv /images

将测试图片1.jpg2.jpg分别上传至上述2个节点中的/images目录下

mfs-node143节点中执行:

# mogupload --trackers=192.168.1.143:7001--domain=images --class=class0 --key="mfsnode143.jpg" --file="/images/1.jpg"

# mogfileinfo --trackers=192.168.1.143:7001 --domain=images --key="mfsnode143.jpg"

- file: mfsnode143.jpg

     class:               class0

  devcount:               3

   domain:               images

       fid:               5

      key:               mfsnode143.jpg

    length:               45325

 -http://192.168.1.143:7500/dev2/0/000/000/0000000005.fid

 -http://192.168.1.142:7500/dev1/0/000/000/0000000005.fid

 -http://192.168.1.144:7500/dev3/0/000/000/0000000005.fid

备注:图片文件已经有了3个备份,3个路径都能访问此图片。

mfs-node144节点中执行:

# mogupload --trackers=192.168.1.144:7001 --domain=images --class=class0 --key="mfsnode144.jpg" --file="/images/2.jpg"

# mogfileinfo --trackers=192.168.1.144:7001 --domain=images --key="mfsnode144.jpg"

- file: mfsnode144.jpg

     class:               class0

  devcount:               3

   domain:               images

       fid:               6

      key:               mfsnode144.jpg

    length:               61163

 - http://192.168.1.142:7500/dev1/0/000/000/0000000006.fid

 -http://192.168.1.143:7500/dev2/0/000/000/0000000006.fid

 -http://192.168.1.144:7500/dev3/0/000/000/0000000006.fid

# moglistkeys --trackers=192.168.1.142:7001 --domain=images    //每个节点上执行都可以,执行结果都一致

mfsnode143.jpg

mfsnode144.jpg

(13)如果需要执行图片的下载操作,可以执行如下命令,假设在mfs-node142中下载mfsnode143.jpg(即1.jpg),保存在该节点的/tmp目录下,重命名为mfsnode142.jpg

# mogfetch --trackers=192.168.1.143:7001 --domain=images --key="mfsnode143.jpg" --file="/tmp/mfsnode142.jpg"

(14)如果需要执行图片的删除操作,可以执行如下命令,假设在mfs-node142中删除mfsnode143.jpg

# mogdelete --trackers=192.168.1.143:7001 --domain=images --key="mfsnode143.jpg"

也可以通过curl命令进行删除,在后续配置了Nginx反向代理之后,可以得到如下的图片访问地址:

http://192.168.1.121/images/mfsnode143.jpg

# curl-X DELETE http://192.168.1.121/images/mfsnode143.jpg

使用curl命令上传目前还是有bug,无法实现。

6、192.168.1.121安装配置Nginx

(1)下载相关软件包并安装依赖组件:

# yum-y groupinstall "Development Tools" "Server PlatformDevelopment"

# yum-y install pcre-devel perl-ExtUtils-Embed

(2)编译安装google_perftools_module模块:

TCMallocThread-Caching Malloc)是谷歌开发的开源工具google-perftools中的一个成员,用于优化内存分配的效率和速度。与标准的glibc库的malloc相比,TCMalloc库在内存分配效率和速度上要高很多,这在很大程度上提高了服务器在高并发情况下的性能,从而降低系统负载。要安装TCMalloc库,需要安装libunwind32位操作系统不需要安装)和google-perftools两个软件包,libunwind库为基于64位操作系统的程序提供了基本函数调用链和函数调用寄存器功能。

编译安装libunwind-1.2.tar.gz

# tarxf libunwind-1.2.tar.gz -C /usr/src

# cd /usr/src/libunwind-1.2

#./configure

# make && make install

编译安装gperftools-2.5.tar.gz

# tarxf gperftools-2.5.tar.gz -C /usr/src

# cd /usr/src/gperftools-2.5

# ./configure --enable-frame-pointers

# make && make install

# echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf

# ldconfig

(3)编译安装Nginx

# groupadd -r nginx

# useradd -M -r -s /sbin/nologin -g nginx nginx

创建Nginx临时文件存放目录

# mkdir -pv /var/tmp/nginx/

创建gperftools线程目录

# mkdir -pv /tmp/tcmalloc/

# chmod -R 0777 /tmp/tcmalloc/

# tarxf nginx-1.10.3.tar.gz -C /usr/src

# tarxf nginx_mogilefs_module-1.0.4.tar.gz -C /usr/src

# cd/usr/src/nginx-1.10.3/

# ./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/fastcgi/ \

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

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

  --with-pcre \

--with-google_perftools_module \

 --add-module=/usr/src/nginx_mogilefs_module-1.0.4 | tee /tmp/nginx.out

# less /tmp/nginx.out

configuring additional modules

adding module in /usr/src/nginx_mogilefs_module-1.0.4

 +ngx_http_mogilefs_module was configured

# make && make install

备注:

  • 选项--with-google_perftools_module:支持TCMallocNginx性能优化

  • 选项--add-module=/usr/src/nginx_mogilefs_module-1.0.4:编译安装第三方模块nginx_mogilefs_module

  • | tee /tmp/nginx.out:将Nginx整个configure过程中输出的信息保存至/tmp/nginx.out文件中

(4)实现Nginx的服务启动脚本,并实现开机自启:

# vim/etc/init.d/nginx        //网上有脚本,限于篇幅,不具体写了

# chkconfig --add nginx

# chkconfig nginx on

# chkconfig --list nginx

(5)修改Nginx配置文件,并启动Nginx

# vim/etc/nginx/nginx.conf,修改为以下内容:

user nginx;

worker_processes4;

#pid logs/nginx.pid;行下添加

google_perftools_profiles /tmp/tcmalloc;

events{

    use epoll;

    worker_connections  65535;

}

配置文件语法检查

# nginx -t 或者 #service nginx configtest

# service nginx start

# lsof -i:80

# netstat-lntup|grep nginx

测试TCMalloc

# lsof-n|grep tcmalloc

浏览器中输入http://192.168.1.121,能看到Nginx的欢迎页。

7、使用Nginx进行反向代理:

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

为了能够基于URL进行访问而非fidNginx需要安装一个第三方的mogilefs模块。nginx_mogilefs_module就是利用mogilefsAPI开发的一个应用程序,用于自动转换fidURL的映射。

- http://192.168.1.144:7500/dev3/0/000/000/0000000006.fid

修改Nginx配置文件,在server配置段中新增1location

(此处只演示images域,htmls域和txts域与此类似):

# vim/etc/nginx/nginx.conf

location /images/ {

    mogilefs_tracker 192.168.1.142:7001;

    mogilefs_domain images;

mogilefs_class class0 class1;

    mogilefs_noverify on;

    mogilefs_methods GET PUT DELETE;

     mogilefs_pass{

          proxy_pass $mogilefs_path;

          proxy_hide_header Content-Type;

          proxy_buffering off;

}

}

# nginx -t

# servicenginx reload

浏览器中访问存储在MogileFS中的mfsnode143.jpgmfsnode144.jpg采用IP+domain+key的方式

http://192.168.1.121/images/mfsnode143.jpghttp://192.168.1.121/images/mfsnode144.jpg

能正常访问图片。

Nginx反向代理测试成功。

模拟节点单点故障:因为此时新增的location中的mogilefs_tracker配置的是192.168.1.142,如果192.168.1.142上的mogilefsd服务停止,则再次访问图片显示error。

8、配置Nginx负载均衡集群:

# vim/etc/nginx/nginx.conf,在http配置段中、server配置段外新增upstream

upstream mfscluster {

     server192.168.1.142:7001;

     server192.168.1.143:7001;

     server192.168.1.144:7001;

}

修改之前新增的location

location /images/ {

    mogilefs_tracker mfscluster;

    mogilefs_domain images;

    mogilefs_class class0 class1;

    mogilefs_noverify on;

    mogilefs_methods GET PUT DELETE;

     mogilefs_pass{

          proxy_pass $mogilefs_path;

          proxy_hide_header Content-Type;

          proxy_buffering off;

}

}

# nginx -t

# service nginx reload

再次在浏览器中访问存储的图片,显示正常。

http://192.168.1.121/images/mfsnode143.jpg

http://192.168.1.121/images/mfsnode144.jpg

此时只要192.168.1.142 | 143 | 144任意1个节点中的mogilefsd服务正常,就能采用IP+domain+key的方式访问图片,实现了负载均衡效果。

9、采用IP+key的方式访问图片:

# vim/etc/nginx/nginx.conf,修改之前新增的location

location ~* ^(/images/.*)$ {

    mogilefs_trackermfscluster;

    mogilefs_domain images;

    mogilefs_class class0 class1;

    mogilefs_noverify on;

    mogilefs_methods GET PUT DELETE;

    mogilefs_pass $1 {

          proxy_pass $mogilefs_path;

          proxy_hide_header Content-Type;

          proxy_buffering off;

}

}

# nginx -t

# service nginx reload

重新上传图片时的key值需要改为:

# mogupload --trackers=192.168.1.143:7001 --domain=images --class=class0 --key="/images/mfsnode143.jpg" --file="/images/1.jpg"

# mogfileinfo --trackers=192.168.1.143:7001 --domain=images --key="/images/mfsnode143.jpg"

得到3个访问路径:

 - http://192.168.1.142:7500/dev1/0/000/000/0000000013.fid

 -http://192.168.1.143:7500/dev2/0/000/000/0000000013.fid

 -http://192.168.1.144:7500/dev3/0/000/000/0000000013.fid

 -http://192.168.1.121/images/images/mfsnode143.jpg

再按之前的访问方式,会提示404。

采用IP+key的方式:

http://192.168.1.121/images/mfsnode143.jpg

10、通过Shell脚本模拟图片批量上传、删除:

先查看192.168.1.145 mysql145节点MySQL中的mfsdb数据库中file表里的数据,默认上传成功后文件的key会在此保存。

查看images域中key的存储情况:# moglistkeys --trackers=192.168.1.143:7001 --domain=images

默认没有存储任何key

  • 批量上传:

批量上传192.168.1.144 mfs-node144节点中/images目录下的10张图片:

# vim/scripts/upload.sh

#!/bin/bash

read -p "enter the dirpath" dirpath

read -p "enter the tracker IP" traIP

read -p "enter the domain name" domname

read -p "enter the class name" claname

cd $dirpath

for file in `ls`

do

    mogupload--trackers="$traIP":7001 --domain="$domname"--class="$claname" --key="$dirpath/$file"--file="$dirpath/$file"

done

# bash-n /scripts/upload.sh

# bash /scripts/upload.sh  或者  # chmod +x/scripts/upload.sh  # /scripts/upload.sh

查看上传效果,随机选择几张图片在浏览器中访问:

http://192.168.1.121/images/BPRO0001.jpg

http://192.168.1.121/images/BPRO0005.jpg

http://192.168.1.121/images/BPRO0010.jpg

都能正常访问。

  • 批量删除:

# vim/scripts/delete.sh

#!/bin/bash

read -p "enter the tracker IP" traIP

read -p "enter the domain name" domname

for file in `moglistkeys --trackers="$traIP":7001--domain="$domname"`

do

     mogdelete--trackers="$traIP":7001 --domain="$domname"--key="$file"

done

# bash -n /scripts/delete.sh

# bash /scripts/delete.sh

查看删除效果,再次访问:

http://192.168.1.121/images/BPRO0001.jpg

http://192.168.1.121/images/BPRO0005.jpg

http://192.168.1.121/images/BPRO0010.jpg

都显示404.

备注:实际生产环境中应用程序都是通过调用API来实现文件的上传、下载和删除。





      本文转自Marion0728  51CTO博客,原文链接:http://blog.51cto.com/qiuyue/1901998 ,如需转载请自行联系原作者


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
26天前
|
运维 前端开发 应用服务中间件
LNMP详解(八)——Nginx动静分离实战配置
LNMP详解(八)——Nginx动静分离实战配置
28 0
|
24天前
|
前端开发 应用服务中间件 nginx
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
99 0
|
1天前
|
前端开发 JavaScript 应用服务中间件
前端vue2、vue3去掉url路由“ # ”号——nginx配置(二)
前端vue2、vue3去掉url路由“ # ”号——nginx配置
16 0
|
1天前
|
JavaScript 前端开发 应用服务中间件
angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)
angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)
9 0
|
1天前
|
负载均衡 前端开发 应用服务中间件
Nginx安装与使用
Nginx安装与使用
12 0
|
2天前
|
负载均衡 Java 应用服务中间件
nginx安装在linux上
nginx安装在linux上
21 2
|
5天前
|
安全 应用服务中间件 网络安全
SSL原理、生成SSL密钥对、Nginx配置SSL
现在,你的Nginx虚拟主机应该已经配置了SSL,可以通过HTTPS安全访问。确保在生产环境中使用有效的SSL证书来保护通信的安全性。
17 0
|
7天前
|
域名解析 缓存 负载均衡
Nginx正向代理域名的配置
Nginx正向代理域名的配置
|
8天前
|
前端开发 JavaScript 应用服务中间件
修改Jeecg-boot context-path(附加图片+Nginx配置)
修改Jeecg-boot context-path(附加图片+Nginx配置)
16 0
|
8天前
|
应用服务中间件 nginx
yum 安装报错 No package nginx available Error:Nothing to do
yum 安装报错 No package nginx available Error:Nothing to do
22 1