很幸运参与零售云快消平台的公有云搭建及孵化项目。零售云快消平台源于零售云家电3C平台私有项目,是与公司业务强耦合的。为了适用于全场景全品类平台,集团要求项目平台化,我们抢先并承担了此任务。并由我来主要负责平台建设及项目落地。

 今天讲解在零售云快消平台中使用的图片服务FastDFS集群搭建说明,此集群模式是根据单机版的安装说明,在之前已经分享过一篇 一张图讲解单机FastDFS图片服务器安装步骤(修订版),改造成最少机器分布式集群安装说明。

FastDFS是什么?

 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
 FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
--- 来源于百度百科

FastDFS 简介

FastDFS分两部分,跟踪器(tracker)和存储节点(storage)。

 Tracker是FastDFS的协调者,负责管理所有的storage server和group,每个storage在启动后会连接Tracker,告知自己所属的group等信息,并保持周期性的心跳,tracker根据storage的心跳信息,建立group==>[storage server list]的映射表。

 Storage 是以组(卷,group或volume)为单位组织,一个group内包含多台storage机器,数据互为备份,存储空间以group内容量最小的storage为准,所以建议group内的多个storage尽量配置相同,以免造成存储空间的浪费。

FastDFS是由2008年开始采用C语言研发致今在维护更新,已经广泛使用,创始人余庆 现以有他自己的公众号: 微信号: fastdfs100 , FastDFS官方 github https://github.com/happyfish100/ 已经有多个相关组件

最少机器高可用总览图

在以下配置中没有说明VIP的配置,后面会对VIP详细说明。
VIP的目的是统一负载storageserver,storageserver的伸缩性不影响使用方的。

一、环境准备

软件版本说明:

libfastcommon 使用的版本: libfastcommon-1.0.41.tar.gz

FastDFS 使用的版本: fastdfs-6.01.tar.gz

fastdfs-nginx-module 使用的版本:fastdfs-nginx-module-1.21.tar.gz

nginx 使用的版本: nginx-1.16.1.tar.gz

操作系统:CentOS 7.X

最低高可用

四台机器 分配情况:

TrackerServer1 :192.168.0.1

TrackerServer2 :192.168.0.2

StorageServer1:192.168.0.3

StorageServer2:192.168.0.4

Tracker服务器准备上传文件

准备上传/opt/apps 目录下:

  1. libfastcommon-1.0.41.tar.gz
  2. fastdfs-6.01.tar.gz

Storage服务器准备上传文件

准备上传/opt/apps 目录下:

  1. libfastcommon-1.0.41.tar.gz
  2. fastdfs-6.01.tar.gz
  3. fastdfs-nginx-module-1.21.tar.gz
  4. nginx-1.16.1.tar.gz

二、安装过程

TrackerServer1安装过程

1、安装 libfastcommon-1.0.41.tar.gz

  1. tar -zxvf libfastcommon-1.0.41.tar.gz
  2. cd libfastcommon-1.0.41/
  3. ./make.sh
  4. ./make.sh install

2、安装 FastDFS

  1. tar -zxvf fastdfs-6.01.tar.gz
  2. cd fastdfs-6.01/
  3. ./make.sh
  4. ./make.sh install
  5. #配置文件准备
  6. cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
  7. cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
Tracker Server 配置
  1. vim /etc/fdfs/tracker.conf

修改配置如下:

  1. #tracker server端口号
  2. port=22122
  3. #存储日志和数据的根目录
  4. base_path=/opt/fastdfs/tracker

3、开放防火墙端口

1)打开跟踪端口
  1. vim /etc/sysconfig/iptables
2)添加以下端口行:
  1. -A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT
3)重启防火墙
  1. service iptables restart

4、启动Tracker

  1. /etc/init.d/fdfs_trackerd start

TrackerServer2安装过程

安装步骤同TrackerServer1

StorageServer1安装过程

1、安装 libfastcommon-1.0.41.tar.gz

  1. tar -zxvf libfastcommon-1.0.41.tar.gz
  2. cd libfastcommon-1.0.41/
  3. ./make.sh
  4. ./make.sh install

2、安装 FastDFS

  1. tar -zxvf fastdfs-6.01.tar.gz
  2. cd fastdfs-6.01/
  3. ./make.sh
  4. ./make.sh install
  5. #配置文件准备
  6. cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
  7. cd /opt/apps/fastdfs-6.01/conf
  8. cp http.conf mime.types /etc/fdfs/
Storage Server 配置
  1. vim /etc/fdfs/storage.conf

修改配置如下:

  1. #storage server端口号
  2. port=23000
  3. #数据和日志文件存储根目录
  4. base_path=/opt/fastdfs/storage
  5. #第一个存储目录
  6. store_path0=/opt/fastdfs/storepath0
  7. #tracker服务器IP和端口
  8. tracker_server=192.168.0.1:22122
  9. tracker_server=192.168.0.2:22122
  10. #http访问文件的端口(默认8888,看情况修改,和nginx中保持一致)
  11. http.server_port=8888

3、安装Nginx和 fastdfs-nginx-module

1)安装fastdfs-nginx-module
  1. #解压fastdfs-nginx-module
  2. tar -zxvf fastdfs-nginx-module-1.21.tar.gz
  3. cd fastdfs-nginx-module-1.21/
  4. cp ./src/mod_fastdfs.conf /etc/fdfs
2)安装Nginx
  1. #解压nginx
  2. tar -zxvf nginx-1.16.1.tar.gz
  3. cd nginx-1.16.1/
  4. #安装nginx_http_image_filter_module
  5. yum -y install gd-devel
  6. #安装依赖组件
  7. yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel
  8. #关联模块配置
  9. ./configure --add-module=../fastdfs-nginx-module-1.21/src --prefix=/usr/local/nginx --with-http_image_filter_module
  10. #编译nginx
  11. make
  12. #安装nginx
  13. make install
3)查看是否安装成功
  1. /usr/local/nginx/sbin/nginx -V

查看插件是否安装成功

  1. [root@FastDFS nginx-1.16.1]# /usr/local/nginx/sbin/nginx -V
  2. nginx version: nginx/1.16.1
  3. built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC)
  4. configure arguments: --add-module=../fastdfs-nginx-module-1.21/src --prefix=/usr/local/nginx --with-http_image_filter_module
  5. [root@FastDFS nginx-1.16.1]#
4)修改Nginx配置

修改nginx.conf配置

  1. vim /usr/local/nginx/conf/nginx.conf

修改配置如下:

  1. user nobody;
  2. worker_processes 1;
  3. events {
  4. worker_connections 1024;
  5. }
  6. http {
  7. include mime.types;
  8. default_type application/octet-stream;
  9. sendfile on;
  10. #tcp_nopush on;
  11. #keepalive_timeout 0;
  12. keepalive_timeout 65;
  13. #gzip on;
  14. server {
  15. listen 8888;
  16. server_name localhost;
  17. location ~/group1/M00 {
  18. ngx_fastdfs_module;
  19. }
  20. location / {
  21. root html;
  22. index index.html index.htm;
  23. }
  24. #error_page 404 /404.html;
  25. # redirect server error pages to the static page /50x.html
  26. #
  27. error_page 500 502 503 504 /50x.html;
  28. location = /50x.html {
  29. root html;
  30. }
  31. }
  32. upstream storage_server_group1 {
  33. server 192.168.0.3:8888 weight=10;
  34. server 192.168.0.4:8888 weight=10;
  35. }
  36. }

修改mod_fastdfs.conf配置

  1. vim /etc/fdfs/mod_fastdfs.conf

修改配置如下:

  1. #
  2. connect_timeout=10
  3. #tracker服务器IP和端口
  4. tracker_server=192.168.0.1:22122
  5. tracker_server=192.168.0.2:22122
  6. #是否启用group组名
  7. url_have_group_name=true
  8. #
  9. store_path0=/opt/fastdfs/storepath0

5、开放防火墙端口

1)打开跟踪端口
  1. vim /etc/sysconfig/iptables
2)添加以下端口行:
  1. -A INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT
  2. -A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT
3)重启防火墙
  1. service iptables restart

4、启动Storage

  1. /etc/init.d/fdfs_storaged start

5、启动Nginx

  1. #启动
  2. /usr/local/nginx/sbin/nginx
  3. #停止
  4. /usr/local/nginx/sbin/nginx -s stop
  5. #重启
  6. /usr/local/nginx/sbin/nginx -s reload

StorageServer2安装过程

安装步骤同StorageServer1安装过程

测试上传图片

使用TrackerServer1机器进行测试

1、Client配置
  1. vim /etc/fdfs/client.conf

修改配置如下:

  1. #
  2. base_path=/opt/apps/fastdfs/client
  3. #tracker服务器IP和端口
  4. tracker_server=192.168.0.1:22122
  5. tracker_server=192.168.0.2:22122
2、准备上传的图片
3、上传图片
  1. fdfs_upload_file /etc/fdfs/client.conf test.jpg

或使用以下命令测试

  1. fdfs_test /etc/fdfs/client.conf upload test.jpg

测试结果

  1. [root@ecsf-toj5rfb9 apps]# fdfs_test /etc/fdfs/client.conf upload test.jpg
  2. This is FastDFS client test program v6.01
  3. Copyright (C) 2008, Happy Fish / YuQing
  4. FastDFS may be copied only under the terms of the GNU General
  5. Public License V3, which may be found in the FastDFS source kit.
  6. Please visit the FastDFS Home Page http://www.csource.org/
  7. for more detail.
  8. [2019-11-13 17:53:15] DEBUG - base_path=/opt/fastdfs/client, connect_timeout=10, network_timeout=60, tracker_server_count=2, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0
  9. tracker_query_storage_store_list_without_group:
  10. server 1. group_name=, ip_addr=6.0.36.217, port=23000
  11. server 2. group_name=, ip_addr=6.0.36.218, port=23000
  12. group_name=group1, ip_addr=192.168.0.4, port=23000
  13. storage_upload_by_filename
  14. group_name=group1, remote_filename=M00/00/00/BgAk2l3L0oSAAhsuAAHf-RXvI9M055.jpg
  15. source ip address: 192.168.0.4
  16. file timestamp=2019-11-13 17:53:08
  17. file size=122873
  18. file crc32=367993811
  19. example file url: http://192.168.0.4/group1/M00/00/00/BgAk2l3L0oSAAhsuAAHf-RXvI9M055.jpg
  20. storage_upload_slave_by_filename
  21. group_name=group1, remote_filename=M00/00/00/BgAk2l3L0oSAAhsuAAHf-RXvI9M055_big.jpg
  22. source ip address: 192.168.0.4
  23. file timestamp=2019-11-13 17:53:08
  24. file size=122873
  25. file crc32=367993811
  26. example file url: http://192.168.0.4/group1/M00/00/00/BgAk2l3L0oSAAhsuAAHf-RXvI9M055_big.jpg

本文由博客一文多发平台 OpenWrite 发布!

再次感谢!!! 您已看完全文,欢迎关注微信公众号猿码 ,你的支持是我持续更新文章的动力!

一张图讲解最少机器搭建FastDFS高可用分布式集群安装说明的更多相关文章

  1. ElasticSearch 高可用分布式集群搭建,与PHP多线程测试

    方案: 使用HAproxy:当其中一台ElasticSearch Master宕掉时,ElasticSearch集群会自动将运行正常的节点提升为Master,但HAproxy不会将失败的请求重新分发到 ...

  2. 搭建 MySQL 高可用高性能集群

    什么是MySQL集群,什么是MySQL集群,如果你想知道什么是MySQL集群,我现在就带你研究. MySQL 是一款流行的轻量级数据库,很多应用都是使用它作为数据存储.作为小型应用的数据库,它完全可以 ...

  3. 搭建高可用kubernetes集群(keepalived+haproxy)

    序 由于单master节点的kubernetes集群,存在master节点异常之后无法继续使用的缺陷.本文参考网管流程搭建一套多master节点负载均衡的kubernetes集群.官网给出了两种拓扑结 ...

  4. 亿级Web系统搭建:单机到分布式集群

    亿级Web系统搭建:单机到分布式集群 当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压 ...

  5. 搭建高可用mongodb集群(四)—— 分片(经典)

    转自:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还 ...

  6. [转]搭建高可用mongodb集群(四)—— 分片

    按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...

  7. [转]搭建高可用mongodb集群(二)—— 副本集

    在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...

  8. 搭建高可用mongodb集群(四)—— 分片

    按照上一节中<搭建高可用mongodb集群(三)—— 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的 ...

  9. 搭建高可用mongodb集群(二)—— 副本集

    在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...

随机推荐

  1. .Net Core API使用ODP.NET操作Oracle数据库

    .Net Core API使用ODP.NET操作Oracle数据库 1.下载Oracle.ManagerDataAccess.Core. 右键依赖项——管理NuGet程序包. 在浏览选项中查询Orac ...

  2. Ubuntu分区方案

    swap: 4G(跟你自己内存一样大):主分区:空间起始位置:用于交换空间 /boot: 300M(太小会导致软件无法升级):逻辑分区:空间起始位置:EXT4:/boot /: 30G:主分区:空间起 ...

  3. jar包的多层级maven依赖的坑与正确传递方法

    这个问题简述起来就是项目加载jar包但是无法加载jar包的依赖 这是一个maven的特性吗? 问题发生前 程序猿经常自己写一些库实现或收集常用的逻辑方法(算法和设计模式等等),以方便多个项目使用,避免 ...

  4. SpringBoot系列:Spring Boot集成Spring Cache,使用RedisCache

    前面的章节,讲解了Spring Boot集成Spring Cache,Spring Cache已经完成了多种Cache的实现,包括EhCache.RedisCache.ConcurrentMapCac ...

  5. python中使用logging将日志写入文件或输出到控制台

    import logging import os class Logger: def __init__(self, name=__name__): # 创建一个loggger self.__name ...

  6. vue,element列表大数据卡顿问题,vue列表渲染慢,element表格渲染慢,表格渲染慢(卡),表格全选卡

    https://github.com/livelyPeng/pl-table 一个表格组件(完美解决万级数据渲染卡顿问题),流畅渲染万级数据并不会影响到el-table的原有功能 分析: 前端UI框架 ...

  7. XML利用接口显示并导入到数据库

    //控制器代码 /// <summary> /// 页面 /// </summary> /// <returns></returns> public A ...

  8. 【Bug】解决 java.sql.SQLSyntaxErrorException 异常

    java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax 错误 错误详情: Caused by: java.sql. ...

  9. macport命令--笔记

    macport命令:sudo port sync //同步本地和全球的ports tree,但不检查自己是否有更新.sudo port install python36 //安装python36sud ...

  10. 【构建工具】《Maven实战》读书笔记

    Maven是我们在做Java开发过程中用经常用到的一个辅助工具.本篇博客是我学习Maven的一个记录博客,学习过程主要参考<Maven实战>这本书.同时也参考了Maven的官方文档. 1. ...