设为首页 收藏本站
查看: 1625|回复: 0

[经验分享] 分布式文件系统之MogileFS的使用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-2-2 08:38:29 | 显示全部楼层 |阅读模式
一.mogilefs简介
MogileFS 是一个开源的分布式文件系统,用于组建分布式文件集群,由 LiveJournal 旗下 Danga Interactive 公司开发,Danga 团队开发了包括 Memcached、MogileFS、Perlbal 等不错的开源项目:(注:Perlbal 是一个强大的 Perl 写的反向代理服务器)。

MogileFS由3个部分组成:
   第1个部分: 是server端,包括mogilefsd和mogstored两个程序。前者即是mogilefsd的tracker,它将一些全局信息保存在数据库 里,例如站点domain,class,host等。后者即是存储节点(store node),它其实是个HTTP Daemon,默认侦听在7500端口,接受客户端的文件备份请求。在安装完后,要运行mogadm工具将所有的store node注册到mogilefsd的数据库里,mogilefsd会对这些节点进行管理和监控。
   第2个部分:是utils(工具集),主要是MogileFS的一些管理工具,例如mogadm等。
   第3个部分:是客户端API,目前只有Perl API(MogileFS.pm)、PHP,用这个模块可以编写客户端程序,实现文件的备份管理功能,提供MogileFS.pm。

MogileFS分布式文件系统的架构组件详解:
跟踪器:tracker,类似于name node,作为文件系统的访问入口;
是整个系统核心,是调度器,工作进程为mogilefsd,
借助于mysql关系型数据库保存元数据
需要查询数据库的元数据信息,返回信息给客户端,数据存储在哪个节点上;
主要工作:
replication:节点间文件复制,保证足量副本
deletion:从空间删除文件,
query worker:查询工作进程,实现响应客户端请求;
reaper:在磁盘存储失败后将文件复制请求重新放置进队列中;
monitor:检测主机和设备dev的健康状态和其它状态

database:保存mogilefs的元数据(数据名称,访问路径,数据块),一般使用mysql,建议使用冗余方案保证其可用性。
表的创建使用需要mogilefs提供的组件mogdbsetup来实现,可用于实现初始化数据库;


存储节点:数据存储节点,storage node,仅提供存储数据使用;
需要在本地提供一个文件系统;分区格式化挂载后提供存储空间后给tracker
进程为mogstored,加入tracker中后就是存储节点了;
一个准备好的mogstored节点可通过mogadm加入到现有的集群中;
在存储节点上需要定义设备(dev),每个设备都有其唯一ID号;

数据存取协议:
http协议:默认支持的协议
可以理解为数据节点为可以上传数据的web服务器节点;
NFS协议

客户端:client
客户端用于与mogilefs建立通信的接口(API)

MogileFS的特点:
1
2
3
4
5
6
7
8
1).工作于应用层,没有特殊的组件要求;
2).无单点,tracker节点可以高可用,存储节点可以存储多个数据副本,对应数据库有高可用方案;
3).实现自动文件复制,默认副本是2份;建议存三份;
4).传输中立,无须特殊协议,MogileFS客户端可以通过NFS或HTTP来和MogileFS的存储节点来通信,但首先需要告知跟踪器一下。
5).使用名称空间(命名空间),每个文件通过key来确定,domain,切割成不同的空间,单个空间的名称不重复,也可以根据应用来分空间;
domain内部有多个小的组件组成,成为class类,整个空间由不同节点提供的,每个文件需要存副本,在数据库中保存元数据,也适用于存储海量小文件,class把多个文件合并起来当作一个复制最小单元;
6).无需raid,但比raid更优,MogileFS在不同的机器之间进行文件复制,因此文件始终是可用的。
7).不共享任何数据,MogileFS不需要依靠昂贵的SAN来共享磁盘,每个机器只用维护好自己的磁盘。






二.实验介绍
1.实验架构图如下
wKioL1TI2NKyvSO4AAMYJO2vNgc452.jpg

图中的数字含义说明:
1
2
3
4
5
6
7
8
1).客户端向服务器发送请求,nginx服务器将请求接收;
2).nginx服务器通过反向代理挑选后端一台trackers服务器响应请求;
3).trackers接收到请求后再向后端数据库获取数据存储的位置;
4).数据库返回数据存储位置给trackers;
5).trackers接收到数据库响应回来的数据位置后再响应给nginx;
6).nginx服务器接收到trackers响应回来的数据位置后再到Stored服务器上获取实际的存储数据;
7).stored服务器再响应数据给nginx代理服务器;
8).nginx服务器拿到最终数据之后再发送给客户端;



2.实验说明
由于我的电脑内存8G,开4台虚拟机已经很不错了,我就将mogilefs的trackers和stored放在了同一节点里面了,数据库就单独存放;
node6节点是nginx的反向代理服务器;
node7和node8节点是一组mogilefs服务器,包含了trackers和stored两个组件;
node9是数据库服务器,安装的mariadb数据库软件;数据库安装过程略。如有疑问参考我的博客:《源码编译安装mariadb-10.0.12数据库》

三.实验的实现过程
1.安装MogileFS软件
获取关于MogileFS相关的软件包如下:软件放在附件中了,需要就下载哦!
1
2
3
4
5
6
7
8
MogileFS-Server-2.46-2.el6.noarch.rpm
MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm
MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm
MogileFS-Utils-2.19-1.el6.noarch.rpm
Perlbal-1.78-1.el6.noarch.rpm
perl-MogileFS-Client-1.14-1.el6.noarch.rpm
perl-Net-Netmask-1.9015-8.el6.noarch.rpm
perl-Perlbal-1.78-1.el6.noarch.rpm





安装相关的软件,在node7和node8节点上安装
1
# yum install -y MogileFS-Server-* MogileFS-Utils-2.19-1.el6.noarch.rpm Perlbal-1.78-1.el6.noarch.rpm perl-MogileFS-Client-1.14-1.el6.noarch.rpm perl-Net-Netmask-1.9015-8.el6.noarch.rpm perl-Perlbal-1.78-1.el6.noarch.rpm perl-IO-AIO




2.MogileFS服务器trackers的配置
配置mogilefs.conf这个配置文件:
配置mogilefs如何连接数据库和mogilefs内部进程启动配置:
1
2
3
4
5
6
7
8
9
10
11
12
[iyunv@node7 ~]# grep -v "^#" /etc/mogilefs/mogilefsd.conf
daemonize = 1
pidfile = /var/run/mogilefsd/mogilefsd.pid
db_dsn = DBI:mysql:mogilefs:host=172.16.31.53     #定义数据库服务器主机
db_user = mogilefs                                #定义登录mogilefs数据库所使用的用户名
db_pass = mogpass                                 #定义登录mogilefs数据库所使用的密码
listen = 0.0.0.0:7001                             #0.0.0.0表示监听所有地址
conf_port = 7001
query_jobs = 10
delete_jobs = 1
replicate_jobs = 5
reaper_jobs = 1



将配置文件复制一份拷贝到node8节点:
1
# scp /etc/mogilefs/mogilefsd.conf node8:/etc/mogilefs/





配置完成后需要登录我们安装的数据库mariadb服务器节点node9上进行授权操作,操作过程如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[iyunv@node9 ~]# mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 5
Server version: 10.0.12-MariaDB-log Source distribution
Copyright (c) 2000, 2014, Oracle, SkySQL Ab and others.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
MariaDB [(none)]> grant all on *.* to 'root'@'172.16.%.%' identified by 'oracle' with grant option;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> grant all on mogilefs.* to 'mogilefs'@'172.16.%.%' identified by 'mogpass';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> q
Bye





授权完成后到mogilefs节点进行mogilefs数据库初始化操作:
1
[iyunv@node7 ~]# mogdbsetup --dbhost=172.16.31.53 --dbport=3306 --dbname=mogilefs --dbrootuser=root --dbrootpass=oracle --dbuser=mogilefs --dbpass=mogpass --yes





初始化mogilefs数据库后我们到数据库服务器节点上检查是否安装:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
[iyunv@node9 ~]# mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 10
Server version: 10.0.12-MariaDB-log Source distribution
Copyright (c) 2000, 2014, Oracle, SkySQL Ab and others.
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
#查看数据库;
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| binlog             |
| information_schema |
| mogilefs           |
| mysql              |
| performance_schema |
| relaylog           |
| test               |
+--------------------+
7 rows in set (0.04 sec)
#发现有mogilefs数据库,我们切换到mogilefs数据库;
MariaDB [(none)]> use mogilefs;
Database changed
#查看数据库的表;
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)
MariaDB [mogilefs]> q
Bye
[iyunv@node9 ~]#
初始化安装完成。




3.在node7和node8节点上配置mogstored
如下操作在两个节点都需要进行;
尽量提供一个分区,将分区格式化后挂载后贡献给trackers;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# echo -n -e "np3+10Gt38ew" |fdisk /dev/sda   
# partx -a /dev/sda
# mke2fs -t ext4 /dev/sda3
# mkdir /mogilefs
# vim /etc/fstab
#添加如下选项,开机自动挂载;
/dev/sda3               /mogilefs               ext4    defaults        0 0
使用命令先挂载:
# mount -a
查看挂载:
# mount
/dev/mapper/vg0-root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
/dev/mapper/vg0-usr on /usr type ext4 (rw)
/dev/mapper/vg0-var on /var type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/sda3 on /mogilefs type ext4 (rw)#已经挂载上了;
在挂载目录下创建一个dev1目录,将其作为存储共享给trackers;
在节点node7上创建的目录是:
# mkdir /mogilefs/dev1
在node8节点创建的目录是:
# mkdir /mogilefs/dev2
将文件目录的属主属组更改为mogilefs;
# chown -R mogilefs.mogilefs /mogilefs/dev1/





配置mogstored.conf这个关于存储的配置文件:
我们这里只是测试,所以只需要定义一下贡献给trackers的存储路径:
1
2
3
4
5
# vim /etc/mogilefs/mogstored.conf
maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /mogilefs



配置完成复制一份到节点node8上去:
1
# scp /etc/mogilefs/mogstored.conf node8:/etc/mogilefs/




至此,我们的mogilefs服务器的节点的trackers和stored都配置完成了,下面就可以启动服务了:


4.启动mogilefs服务器的指定服务,两个mogilefs节点都启动;
1
2
3
4
# /etc/init.d/mogilefsd start
Starting mogilefsd                                         [  OK  ]
# /etc/init.d/mogstored start
Starting mogstored                                         [  OK  ]




查看进程监听端口:
1
2
3
4
[iyunv@node7 ~]# netstat -tunlp |grep mog
tcp        0      0 0.0.0.0:7001                0.0.0.0:*                   LISTEN      2643/mogilefsd      
tcp        0      0 0.0.0.0:7500                0.0.0.0:*                   LISTEN      2690/mogstored      
tcp        0      0 0.0.0.0:7501                0.0.0.0:*                   LISTEN      2690/mogstored



可以发现mogilefsd服务和mogstored服务都启动成功了。

我们来进行trackers节点的检查:
1
2
3
4
5
[iyunv@node7 ~]# mogadm --trackers=172.16.31.51:7001 check     
Checking trackers...
  172.16.31.51:7001 ... OK
Checking hosts...
No devices found on tracker(s).



可以发现trackers是正常的,但是没有主机节点的存在,并且存储设备也没有在节点上,下面就应该添加主机节点和存储设备了。
也可以使用如下命令检查主机状态:
1
2
3
4
5
[iyunv@node7 ~]# mogadm --trackers=172.16.31.51:7001 host list
node7.stu31.com [1]: alive
  IP:       172.16.31.51:7500
node8.stu31.com [2]: alive
  IP:       172.16.31.52:7500




5.trackers的主机节点和存储设备的添加;
在两个节点的其中一个节点上添加主机:
1
2
[iyunv@node7 ~]# mogadm --trackers=172.16.31.51:7001 host add node7.stu31.com --ip=172.16.31.51 --status=alive
[iyunv@node7 ~]# mogadm --trackers=172.16.31.51:7001 host add node8.stu31.com --ip=172.16.31.52 --status=alive




再次进行trackes节点的检查:
1
2
3
4
5
6
7
8
9
10
11
[iyunv@node7 ~]# mogadm --trackers=172.16.31.51:7001 check
Checking trackers...
  172.16.31.51:7001 ... OK
Checking hosts...
  [ 1] node7.stu31.com ... OK
  [ 2] node8.stu31.com ... OK
Checking devices...
  host device         size(G)    used(G)    free(G)   use%   ob state   I/O%
  ---- ------------ ---------- ---------- ---------- ------ ---------- -----
  ---- ------------ ---------- ---------- ---------- ------
             total:     0.000      0.000      0.000   0.00%




我们发现节点和主机都正常了,但是存储设备还是没有,下面就进行存储设备的添加:
1
2
[iyunv@node7 ~]# mogadm --trackers=172.16.31.51:7001 device add node7.stu31.com 1
[iyunv@node7 ~]# mogadm --trackers=172.16.31.51:7001 device add node8.stu31.com 2




再次进行trackers检查:
1
2
3
4
5
6
7
8
9
10
11
12
13
[iyunv@node7 ~]# mogadm --trackers=172.16.31.51:7001 check
Checking trackers...
  172.16.31.51:7001 ... OK
Checking hosts...
  [ 1] node7.stu31.com ... OK
  [ 2] node8.stu31.com ... OK
Checking devices...
  host device         size(G)    used(G)    free(G)   use%   ob state   I/O%
  ---- ------------ ---------- ---------- ---------- ------ ---------- -----
  [ 1] dev1             9.221      0.023      9.198   0.25%  writeable   0.0
  [ 2] dev2             9.221      0.022      9.199   0.24%  writeable   0.0
  ---- ------------ ---------- ---------- ---------- ------
             total:    18.443      0.045     18.398   0.24%



我们可以发现trackers,hosts,devices都正常了。

我们也可以使用如下命令检查存储设备的状态:
1
2
3
4
5
6
7
[iyunv@node7 ~]# mogadm --trackers=172.16.31.51:7001 device list
node7.stu31.com [1]: alive
                    used(G)    free(G)   total(G)  weight(%)
   dev1:   alive      0.022      9.198      9.221        100
node8.stu31.com [2]: alive
                    used(G)    free(G)   total(G)  weight(%)
   dev2:   alive      0.021      9.199      9.221        100




6.创建domain,实现名称空间的定义
假设我们有图片,文件和html静态网页需要分开存储,我们就定义名称空间如下:
1
2
3
[iyunv@node7 ~]# mogadm --trackers=172.16.31.51:7001 domain add images
[iyunv@node7 ~]# mogadm --trackers=172.16.31.51:7001 domain add files
[iyunv@node7 ~]# mogadm --trackers=172.16.31.51:7001 domain add html



定义完成后我们来查看名称空间:
1
2
3
4
5
6
[iyunv@node7 ~]# mogadm --trackers=172.16.31.51:7001 domain list
domain               class                mindevcount   replpolicy   hashtype
-------------------- -------------------- ------------- ------------ -------
files                default                   2        MultipleHosts() NONE   
html                 default                   2        MultipleHosts() NONE   
images               default                   2        MultipleHosts() NONE




7.创建名称空间中的class类
如我们在图片images这个名称空间中创建一个类:
1
2
3
4
5
6
7
[iyunv@node7 ~]# mogadm --trackers=172.16.31.51:7001 class add images first.class
[iyunv@node7 ~]# mogadm --trackers=172.16.31.51:7001 domain list                  domain               class                mindevcount   replpolicy   hashtype
-------------------- -------------------- ------------- ------------ -------
files                default                   2        MultipleHosts() NONE   
html                 default                   2        MultipleHosts() NONE   
images               default                   2        MultipleHosts() NONE   
images               first.class               2        MultipleHosts() NONE



#mindevcount 表示最少设备数量,默认是2个,我们这里就2个设备;

至此,我们的mogilefs分布式文件系统就定义完成了。


8.进行上传文件测试
我这里为了测试准备了2张图片和1个html静态网页文件;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[iyunv@node7 ~]# ls
image1.jpg   
image2.jpg  
index.html   
使用的上传命令:mogupload
上传图片和静态网页到存储中:
[iyunv@node7 ~]# mogupload --trackers=172.16.31.51:7001 --domain=images --key='image1.jpg' --file='/root/image1.jpg'
[iyunv@node7 ~]# mogupload --trackers=172.16.31.51:7001 --domain=images --key='image2.jpg' --file='/root/image2.jpg'
[iyunv@node7 ~]# mogupload --trackers=172.16.31.51:7001 --domain=html --key='index.html' --file='/root/index.html'   
上传成功后,我们查看存储的key值信息:
[iyunv@node7 ~]# moglistkeys --trackers=172.16.31.51 --domain=images
image1.jpg
image2.jpg
[iyunv@node7 ~]# moglistkeys --trackers=172.16.31.51 --domain=html
index.html
查看上传的文件的信息:
[iyunv@node7 ~]# mogfileinfo --trackers=172.16.31.51:7001 --domain=images --key='image1.jpg'
- file: image1.jpg
     class:              default
  devcount:                    2
    domain:               images
       fid:                   10
       key:           image1.jpg
    length:               304436
- http://172.16.31.52:7500/dev2/0/000/000/0000000010.fid
- http://172.16.31.51:7500/dev1/0/000/000/0000000010.fid




这里是每上传一个文件就都会在两个节点是都存一份,如果节点多的话它会根据定义的devcount自己选择节点存储几份,这样在一个节点掉了也可以在别的节点在有相同的资源可用;
由上面的信息我们知道了文件的fid,我们通过提供的URL进行访问测试一下:
wKioL1TI2oOiMMMXAAR8oklAH40501.jpg

我们在mogilefs服务器节点的配置到此就暂时告一段落,我们下面就去进行nginx服务器的反向代理配置:


9.nginx服务器的安装和基础配置
这里安装Nginx需要编译安装,因为他需要装载第三方模块才可以使用mogilefs;
第三方模块在此:在附件中有下载。
nginx_mogilefs_module-1.0.4.tar.gz
nginx的源码程序包:这个自己解决哦!
nginx-1.6.2.tar.gz

开发环境准备:
1
2
# yum install -y pcre-devel openssl-devel
# yum groupinstall -y "Development Tools"



创建nginx用户和组:
1
2
# groupadd -r nginx
# useradd -r -g nginx nginx



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
先解压第三方模块的源码包:
[iyunv@node6 ~]# tar xf nginx_mogilefs_module-1.0.4.tar.gz                 
编译安装nginx:
[iyunv@node6 ~]# tar xf nginx-1.6.2.tar.gz
[iyunv@node6 ~]# cd nginx-1.6.2
[iyunv@node6 nginx-1.6.2]# ./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/fcgi/
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi
--http-scgi-temp-path=/var/tmp/nginx/scgi
--with-pcre
--with-debug
--add-module=/root/nginx_mogilefs_module-1.0.4
编译完成后进行安装:
# make && make install




编译安装完nginx后需要给nginx提供一个服务脚本:
新建文件/etc/rc.d/init.d/nginx,内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:     /var/run/nginx.pid
  
# Source function library.
. /etc/rc.d/init.d/functions
  
# Source networking configuration.
. /etc/sysconfig/network
  
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
  
nginx="/usr/sbin/nginx"
prog=$(basename $nginx)
  
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
  
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
  
lockfile=/var/lock/subsys/nginx
  
make_dirs() {
   # make required directories
   user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=([^ ]*).*//g' -`
   options=`$nginx -V 2>&1 | grep 'configure arguments:'`
   for opt in $options; do
       if [ `echo $opt | grep '.*-temp-path'` ]; then
           value=`echo $opt | cut -d "=" -f 2`
           if [ ! -d "$value" ]; then
               # echo "creating" $value
               mkdir -p $value && chown -R $user $value
           fi
       fi
   done
}
  
start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    make_dirs
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}
  
stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}
  
restart() {
    configtest || return $?
    stop
    sleep 1
    start
}
  
reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}
  
force_reload() {
    restart
}
  
configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}
  
rh_status() {
    status $prog
}
  
rh_status_q() {
    rh_status >/dev/null 2>&1
}
  
case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac



而后为此脚本赋予执行权限:
# chmod +x /etc/rc.d/init.d/nginx

添加至服务管理列表,并让其开机自动启动:
# chkconfig --add nginx
# chkconfig nginx on

而后就可以启动服务并测试了:
# service nginx start

访问测试:
wKiom1TI2h2xWk9EAAFbYZeuFAI836.jpg


10.前端nginx服务器的反向代理配置
nginx的配置文件如下:我使用sed和awk结合去掉了所有以#开头的行和空白行;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[iyunv@node6 ~]# sed -e "s/#.*//g" /etc/nginx/nginx.conf |awk '{if (length !=0) print $0}' |sed '/^ *$/d'
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream mogsrvs {
        server 172.16.31.51:7001;
        server 172.16.31.52:7001;
    }
    server {
        listen       80;
        server_name  localhost;
        location /images/ {
            mogilefs_tracker mogsrvs;
            mogilefs_domain images;
            mogilefs_pass {
                proxy_pass $mogilefs_path;
                proxy_hide_header Content-Type;
                proxy_buffering off;
            }
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}




配置完成后我们启动nginx服务:
#service nginx restart

我们再次上传一张图片上去:
1
2
3
4
5
6
7
8
9
10
11
[iyunv@node7 ~]# mogupload --trackers=172.16.31.51:7001 --domain=images --key='image3.png' --file='/root/image3.png'
[iyunv@node7 ~]# mogfileinfo --trackers=172.16.31.51:7001 --domain=images --key='image3.png'
- file: image3.png
     class:              default
  devcount:                    2
    domain:               images
       fid:                   13
       key:           image3.png
    length:                74726
- http://172.16.31.51:7500/dev1/0/000/000/0000000013.fid
- http://172.16.31.52:7500/dev2/0/000/000/0000000013.fid





访问测试:
wKioL1TI2z7Q3egoAAJ545iOFSc318.jpg
wKioL1TI202DJl14AAQAsB_HNTc314.jpg wKiom1TI2oDivO48AAdgKxZu6sg107.jpg
我们将其中一个节点的mogilefs服务关闭,查看是否还能提供服务:
wKioL1TI23GAuho4AAIHa_jdeok644.jpg
还是能提供服务的。

至此,整个实验过程就结束了,我们的分布式文件系统mogilefs的搭建和nginx服务器反向代理访问mogilefs就实现了。
nginx_mogilefs_module.zip (11.14 KB, 下载次数: 0)
mogilefs.rar (570.13 KB, 下载次数: 0)


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-41793-1-1.html 上篇帖子: 分布式文件系统MogileFS 下篇帖子: 基于mogileFS搭建分布式文件系统 适用于海量小文件的存储
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表