Nginx代理MogileFS并实现负载均衡和高可用

Nginx代理MogileFS并实现负载均衡和高可用

MogileFS nginx 负载均衡

前言

上篇文章我们了解分布式系统和MogileFS的基本使用, 但是那样的架构是有问题的, 本篇文章我们来了解一下如何使用nginx-mogilefs-module-master模块来构建一个不一样的 MogileFS Cluster

实验拓扑

blob.png

实验环境

主机 IP 功用
node6 172.16.1.7 Nginx,Tracker, Storage,DataBase
node7 172.16.1.8 Tracker, Storage
node8 172.16.1.9 Tracker, Storage

实验步骤

配置MogileFS

安装过程这里就不叙述了, 有疑问看我上一篇文章分布式系统介绍及MogileFS安装、基本配置


配置数据库:

[root@node6~] service mysqld start

mysql> GRANT ALL ON *.* TO root@'%' IDENTIFIED BY 'passwd' ;  #配置一个可以远程连接的root用户
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL ON mogilefs.* TO  mogileuser@'%' IDENTIFIED BY 'passwd';  #配置一个可管理mogilefs数据库的用户
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE DATABASE mogilefs;   #创建mogilefs数据库
Query OK, 1 row affected (0.00 sec)

配置mogilefsd

[root@node6~] vim /etc/mogilefs/mogilefsd.conf   #node7, node8也要做操
db_dsn = DBI:mysql:mogilefs:host=172.16.1.7
db_user = mogileuser
db_pass = passwd
listen = 0.0.0.0:7001
conf_port = 7001

[root@node6~] service mogilefsd start
Starting mogilefsd                                         [  OK  ]



[root@node6~] mogadm host add node1 --ip=172.16.1.7 alive   #只用在node6操作
[root@node6~] mogadm host add node2 --ip=172.16.1.8 alive   #只用在node6操作
[root@node6~] mogadm host add node3 --ip=172.16.1.9 alive   #只用在node6操作
[root@node6~] mogadm host list
node1 [1]: alive
   IP:       172.16.1.7:7500

node2 [2]: alive
   IP:       172.16.1.8:7500

node3 [3]: alive
    IP:       172.16.1.9:7500

[root@node6~] scp /etc/mogilefs/mogilefsd.conf 172.16.1.8:/etc/mogilefs/    #复制配置文件给node7
[root@node6~] scp /etc/mogilefs/mogilefsd.conf 172.16.1.9:/etc/mogilefs/    #复制配置文件给node8

[root@node7~] service mogilefsd start  #node7启动mogfilefsd
Starting mogilefsd                                         [  OK  ]

[root@node7~] service mogilefsd start  #node7启动mogfilefsd
Starting mogilefsd                                         [  OK  ]

配置mogstored

[root@node6~] mkdir /data/mogilefs/dev1 -pv
   mkdir: created directory `/data'
   mkdir: created directory `/data/mogilefs'
   mkdir: created directory `/data/mogilefs/dev1'
[root@node6~] vim /etc/mogilefs/mogstored.conf
   maxconns = 10000
   httplisten = 0.0.0.0:7500
   mgmtlisten = 0.0.0.0:7501
   docroot = /data/mogilefs/

[root@node6 ~]# chown mogilefs.mogilefs /data/mogilefs/ -R
[root@node6~] service mogstored start
Starting mogstored                                         [  OK  ]


##node7, node8都要做上述操作

[root@node6 ~]# mogadm device add node1 1
[root@node6 ~]# mogadm device add node2 2
[root@node6 ~]# mogadm device add node3 3

#查看设备信息
[root@node6~] mogadm device list
node1 [1]: alive
                   used(G)    free(G)   total(G)  weight(%)
  dev1:   alive      2.069     72.365     74.435        100

node2 [2]: alive
                   used(G)    free(G)   total(G)  weight(%)
  dev2:   alive      1.958     72.477     74.435        100

node3 [3]: alive
                   used(G)    free(G)   total(G)  weight(%)
  dev3:   alive      1.954     72.480     74.435        100

创建域

[root@node6 ~]# mogadm domain add files
[root@node6 ~]# mogadm domain add images

[root@node6~] mogadm domain list
domain               class                mindevcount   replpolicy   hashtype
-------------------- -------------------- ------------- ------------ -------
files                default                   2        MultipleHosts() NONE  
images               default                   2        MultipleHosts() NONE  

上传文件并测试

[root@node6~] mogupload --trackers=172.16.1.7 --domain=images --key='pal5q.jpg' --file=1.jpg 
[root@node6~] mogfileinfo --trackers=172.16.1.7 --domain=images --key='pal5q.jpg'
- file: pal5q.jpg
    class:              default
 devcount:                    2
   domain:               images
      fid:                    5
      key:            pal5q.jpg
   length:               103139
- http://172.16.1.8:7500/dev2/0/000/000/0000000005.fid
- http://172.16.1.7:7500/dev1/0/000/000/0000000005.fid

blob.png

配置Nginx

编译安装Nginx

#Nginx和模块自行下载
[root@node6 ~] yum groupinstall "Development Tools" "Server Platform Developments"  #安装开发包组
[root@node6/usr/local/nginx-1.9.15] yum install pcre-devel openssl-devel -y #安装需要的软件包
[root@node6~] tar xf nginx-1.9.15.tar.gz -C /usr/local/
[root@node6~] tar xf nginx_mogilefs_module-1.0.4.tar.gz -C /usr/local/
[root@node6~] cd /usr/local/nginx-1.9.15/

[root@node6/usr/local/nginx-1.9.15] ./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 \
>   --with-pcre \
>   --with-debug \
>   --add-module=/usr/local/nginx_mogilefs_module-1.0.4/

[root@node6/usr/local/nginx-1.9.15] make && make install

配置Nginx

[root@node6~] vim /etc/nginx/nginx.conf

user  nobody;
worker_processes  1;
events {
   worker_connections  1024;
}

http {
   include       mime.types;
   default_type  application/octet-stream;

   sendfile        on;

   keepalive_timeout  65;
   upstream trackers {
   server 172.16.1.7:7001;
   server 172.16.1.8:7001;
   server 172.16.1.9:7001;
   }


   server {
       listen       80;
       server_name  localhost;



       location / {
           root   html;
           index  index.html index.htm;
       }

     location  /images/ {
         mogilefs_tracker trackers;
         mogilefs_domain images;
         mogilefs_methods GET;
         mogilefs_noverify on;

         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;
       }

   }


}

启动并测试

[root@node6~] /usr/sbin/nginx   #启动nginx

我们直接通过key值就能够访问到图片, 停止后端任意主机都可以继续访问

blob.png

总结

通过这个实验, 我们可以将通过MogileFS实现的分布式存储中的文件通过键值进行获取, 也就是说, 我们也可以在站点中直接引用, 如果是Tengine的话, 还能够通过Check_status看到更为详细的信息

作者水平很低, 如果有错误及时指出, 如果你觉得本文写的好请点一波赞~(≧▽≦)/~ 
作者: AnyISaIln QQ: 1449472454 
感谢: MageEdu

原创文章,作者:Net18-AnyISalIn,如若转载,请注明出处:http://www.178linux.com/16001

(0)
Net18-AnyISalInNet18-AnyISalIn
上一篇 2016-05-04 21:30
下一篇 2016-05-05 10:07

相关推荐

  • 设计模式(二)单件模式Singleton(创建型)

      几乎所有面向对象的程序中,总有一些类的对象需要是唯一的,例如,通过数据库句柄到数据库的连接是独占的。您希望在应用程序中共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销。再如大家最经常用的IM,如QQ,在同一台电脑,一个帐号只能有唯一的登录。 1. 问题 怎样确保一个特殊类的实例是独一无二的(它是这个类的唯一实例),并且这个实例…

    Linux干货 2015-06-24
  • 【linux】正则表达式之grep、egrep、元字符

    正则表达式:     又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。是一类字符所书写的模式,其中许多字符(元字符)不表示其字面意义,而是表达控制或通配等功能。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符…

    Linux干货 2015-04-01
  • linux系统从windows xp上同步时间

    最近公司客户的调度系统GPS天文时钟出现故障,导致整个调度系统失去时间源,时间积累误差达十几分钟。去现场更换时钟很不方便,所有就想用现场的一台win xp(可上网)的远程机器做NTPserver,然后给linux系统对时。上网查了好多资料,终于找到了一个有效的解决方案,具体内容和步骤如下:首先下载一个Windows下的NTP服务软件。这个软件可以搭建wind…

    Linux干货 2015-03-27
  • 推荐-常用RAID级别详解

    一、RAID是什么       RAID(Redundant Arrays of Indent Disks)的名称是独立磁盘冗余阵列,是一种通过将多块硬盘按照某种特定的结构组织起来当做一块硬盘来使用的技术,多块硬盘不同的组织结构我们称之为RAID的级别。而RAID技术的特性主要表现在两个方面: (1)提高硬盘…

    Linux干货 2016-03-27
  • tcpdump输出详解

    在这里不得不再吐槽下国内整个IT粗糙浮躁,度娘下来的中文文档几尽抄袭~google下来的文档英文文档质量远高于国内中文文档.用ie或没有安装插件的浏览器访问,不然可能会有其它访问请求数据干扰分析 IP数据包结构 TCP数据包结构 // tcpdump需root权限 # tcpdump -x -i eth1 i…

    Linux干货 2015-04-15
  • 细述LVM

     前言:     LVM(Logical Volume Manager)是基于内核的一种逻辑卷管理器,LVM适合于管理大存储设备,并允许用户动态调整文件系统大小。此外,LVM的快照功能可以帮助我们快速备份数据。LVM为我们提供了逻辑概念上的磁盘,使得文件系统不再关心底层物理磁盘的概念。 看图识LVM &nbs…

    Linux干货 2015-06-15