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
下一篇 2016-05-05

相关推荐

  • 开发团队的效率

    我之前写过一篇叫《加班与效率》的文章,从概念上说了一些我对“效率”的认识,但是那篇文章趋于概念化,对于一些没有经历过这样的环境的同学来说,可能会觉得太抽象了。很早以前就想写一篇更具体一点的,可执行的文章与《加班与效率》这篇文章相辉映,并再把我两年前在杭州QCon上的那个“鼓吹工程师文化”的《建一支强大的小团队》(新浪微盘)的观点再加强一下。 但是我遇到了一些…

    Linux干货 2016-08-15
  • 重构-改善既有代码的设计:编写代码22宗罪(三)

    1 Duplicated  Code重复代码        不同的地方出现相同的程序结构:         如果你在一个以上的地点看到相同的程序结构,那么可以肯定:设法将它们和而为一,程序会变得更好。最常见的“重复代码”就是一个类内的两个函数含有相同的表达式。另一种常见…

    Linux干货 2015-04-07
  • MySQL-MMM安装指南(Multi-Master Replication Manager for MySQL)

    最基本的MMM安装必须至少需要2个数据库服务器和一个监控服务器下面要配置的MySQL Cluster环境包含四台数据库服务器和一台监控服务器,如下: function ip hostname server id monitoring host 192.168.0.10 mon – master 1 192.168.0.11 db1 1 maste…

    Linux干货 2015-05-01
  • 译文-Symbolic一个基于func集中式管理平台[原创]

    Symbolic是一个开源的企业平台,旨在建立、配置和管理您的庞大分布式数据中心为目的开源框架,代表了目前最先进的数据中心解决方案的集中管理平台。 特征 属于RedHat认证协议栈的应用 具于func后端应用 支持 RHEL、Centos及Fedora 先进的拖放标签管理(Ajax) 提供Cobbler支持 灵活管理操作用户、主机 组和权限管理标记 先进的基…

    Linux干货 2015-03-27
  • 在虚拟机上使用CentOS6的两个iso文件创建本地yum仓库和http仓库

    yum客户端和服务器端都是本虚拟机 一、创建本地磁盘访问的yum仓库 条件和要求: a.guest虚拟机需要添加2个光驱,分别装载CentOS6.4发行版的DVD1和DVD2 b.DVD1和DVD2的挂载目录分别是:/media/cdrom/下的os和extras,并设置开机挂载 c.使用CentOS-Media.repo作为yum客户端配置文件,将其他re…

    Linux干货 2015-09-22
  • Nginx反向代理的常用调度算法

    upstream 调度算法 1.rr 按客户端请求顺序把客户端的请求逐一分配到不同的后端的服务器,这相当于lvs中的rr算法。如果后端服务器岩机(默认情况下只检测80端口,如果后端报502,404,403,503,还是会直接返给用户),岩机服务器会被自动剔除,使用户访问不受影响,请求会分配给正常的服务器 2.weight(权重) 在轮询算法的基础上加上权重(…

    Linux干货 2016-06-01