(限于篇幅,测试过程中有些效果并未截图在此文中展示) MogileFS简介: Mogilefs是一款由Perl语言研发的轻量级的分布式存储系统,从应用层解决海量小数据的存储,主要适用于互联网文件共享、上传、下载。分布式存储系统是将数据分散存储在多台独立的设备上,分担存储负荷,利用位置服务器定位存储信息。它不但提高了系统的可靠性、可用性和存取效率,还易于扩展,可以支持由PHP、Java、Perl、Python写的扩展API接口来提供服务。GitHub地址: https://github.com/mogilefs。 MogileFS工作特点: 1、工作于应用层,没有特殊的组件要求; 2、无单点,tracker节点可以高可用,存储节点可以存储多个数据副本,对应数据库有高可用方案; 3、实现文件自动复制,默认副本是2份; 4、传输中立,无须特殊协议。MogileFS客户端可以通过NFS或HTTP来和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进行数据传输,通常是一个HTTP(WebDAV)服务器,能完成文件创建、删除、重命名等操作。该节点上运行的进程名为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、所有软件包下载并上传至对应服务器 3、所有测试服务器时间同步及主机名配置(仅以192.168.1.121的Nginx服务器为例): (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安装配置MogileFS(3个tracker + 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.145中mfsdb数据库是否创建成功: # 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 备注:在3个tracker+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 2 --> 对应/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.jpg和2.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 备注:图片文件已经有了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 # 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命令上传目前还是有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模块: TCMalloc(Thread-Caching Malloc)是谷歌开发的开源工具google-perftools中的一个成员,用于优化内存分配的效率和速度。与标准的glibc库的malloc相比,TCMalloc库在内存分配效率和速度上要高很多,这在很大程度上提高了服务器在高并发情况下的性能,从而降低系统负载。要安装TCMalloc库,需要安装libunwind(32位操作系统不需要安装)和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:支持TCMalloc对Nginx性能优化 选项--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 7、使用Nginx进行反向代理: 为了能够基于URL进行访问而非fid,Nginx需要安装一个第三方的mogilefs模块。nginx_mogilefs_module就是利用mogilefs的API开发的一个应用程序,用于自动转换fid到URL的映射。 修改Nginx配置文件,在server配置段中新增1个location (此处只演示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.jpg和mfsnode144.jpg,采用IP+domain+key的方式: 能正常访问图片。 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个访问路径: 再按之前的访问方式,会提示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 查看上传效果,随机选择几张图片在浏览器中访问: 都能正常访问。 # 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来实现文件的上传、下载和删除。
|