fastdfs 集群 java_FastDFS集群部署(转载 写的比较好)

之前介绍过关于FastDFS单机部署,详见博文:FastDFS+Nginx(单点部署)事例

下面来玩下FastDFS集群部署,实现高可用(HA)

43047683d2108928c0336fce86a20187.png

服务器规划:

跟踪服务器1【主机】(Tracker Server):192.100.139.121

跟踪服务器2【备机】(Tracker Server):192.100.139.122

存储服务器1(Storage Server):192.100.139.121

存储服务器2(Storage Server):192.100.139.123

存储服务器3(Storage Server):192.100.139.124

操作系统:CentOS7

用户:root

数据存储目录:

应用

安装目录

Nginx

/opt/nginx

Fastdfs

/usr/bin

Keepalived

/usr/local

安装包

/home/yxgly/resources

è /usr/local/src

Tracker_data

/fastdfs/tracker

Storage_data

/fastdfs/storage

安装包:

FastDFS_v5.08.tar.gz:FastDFS源码

libfastcommon-master.zip:(从 FastDFS 和 FastDHT 中提取出来的公共 C 函数库)

fastdfs-nginx-module-master.zip:storage节点http服务nginx模块

nginx-1.10.0.tar.gz:Nginx安装包

ngx_cache_purge-2.3.tar.gz:图片缓存清除Nginx模块(集群环境会用到)

点击这里下载所有安装包

下载完成后,将压缩包解压到/usr/local/src目录下

一、所有tracker和storage节点都执行如下操作

1、安装所需的依赖包

yum install make cmake gcc gcc-c++

2、安装libfatscommon

48304ba5e6f9fe08f3fa1abda7d326ab.png

cd /usr/local/src

#安装unzip 命令: yum install -y unzip zip

unzip libfastcommon-master.zip

cd libfastcommon-master

## 编译、安装

./make.sh

./make.sh install

48304ba5e6f9fe08f3fa1abda7d326ab.png

3、安装FastDFS

cd /usr/local/src

tar -xzvf FastDFS_v5.08.tar.gz

cd FastDFS

./make.sh

./make.sh install

采用默认安装方式,相应的文件与目录检查如下:

1>服务脚本:

/etc/init.d/fdfs_storaged

/etc/init.d/fdfs_trackerd

2>配置文件(示例配置文件):

ll /etc/fdfs/

-rw-r--r-- 1 root root 1461 1月 4 14:34 client.conf.sample

-rw-r--r-- 1 root root 7927 1月 4 14:34 storage.conf.sample

-rw-r--r-- 1 root root 7200 1月 4 14:34 tracker.conf.sample

3>命令行工具(/usr/bin目录下)

48304ba5e6f9fe08f3fa1abda7d326ab.png

ll /usr/bin/fdfs_*

-rwxr-xr-x 1 root root 260584 1月 4 14:34 fdfs_appender_test

-rwxr-xr-x 1 root root 260281 1月 4 14:34 fdfs_appender_test1

-rwxr-xr-x 1 root root 250625 1月 4 14:34 fdfs_append_file

-rwxr-xr-x 1 root root 250045 1月 4 14:34 fdfs_crc32

-rwxr-xr-x 1 root root 250708 1月 4 14:34 fdfs_delete_file

-rwxr-xr-x 1 root root 251515 1月 4 14:34 fdfs_download_file

-rwxr-xr-x 1 root root 251273 1月 4 14:34 fdfs_file_info

-rwxr-xr-x 1 root root 266401 1月 4 14:34 fdfs_monitor

-rwxr-xr-x 1 root root 873233 1月 4 14:34 fdfs_storaged

-rwxr-xr-x 1 root root 266952 1月 4 14:34 fdfs_test

-rwxr-xr-x 1 root root 266153 1月 4 14:34 fdfs_test1

-rwxr-xr-x 1 root root 371336 1月 4 14:34 fdfs_trackerd

-rwxr-xr-x 1 root root 251651 1月 4 14:34 fdfs_upload_appender

-rwxr-xr-x 1 root root 252781 1月 4 14:34 fdfs_upload_file

48304ba5e6f9fe08f3fa1abda7d326ab.png

二、配置tracker服务器

1、复制tracker样例配置文件,并重命名

cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf

2、修改tracker配置文件

48304ba5e6f9fe08f3fa1abda7d326ab.png

vim /etc/fdfs/tracker.conf

# 修改的内容如下:

disabled=false # 启用配置文件

port=22122 # tracker服务器端口(默认22122)

base_path=/fastdfs/tracker # 存储日志和数据的根目录

store_group=group1

其它参数保留默认配置, 具体配置解释可参考官方文档说明:http://bbs.chinaunix.net/thread-1941456-1-1.html

48304ba5e6f9fe08f3fa1abda7d326ab.png

3、创建base_path指定的目录

mkdir -p /fastdfs/tracker

4、防火墙中打开tracker服务器端口( 默认为 22122)

48304ba5e6f9fe08f3fa1abda7d326ab.png

vi /etc/sysconfig/iptables

附加:若/etc/sysconfig 目录下没有iptables文件可随便写一条iptables命令配置个防火墙规则:如:

iptables -P OUTPUT ACCEPT

然后用命令:service iptables save 进行保存,默认就保存到 /etc/sysconfig/iptables 文件里。这时既有了这个文件。防火墙也可以启动了。接下来要写策略,也可以直接写在/etc/sysconfig/iptables 里了。

添加如下端口行:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT

重启防火墙

service iptables restart

48304ba5e6f9fe08f3fa1abda7d326ab.png

5、启动tracker服务器

/etc/init.d/fdfs_trackerd start

初次启动,会在/fastdfs/tracker目录下生成logs、data两个目录。

drwxr-xr-x 2 root root 4096 1月 4 15:00 data

drwxr-xr-x 2 root root 4096 1月 4 14:38 logs

检查FastDFS Tracker Server是否启动成功:

ps -ef | grep fdfs_trackerd

三、配置storage服务器

1、复制storage样例配置文件,并重命名

cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf

2、编辑配置文件

48304ba5e6f9fe08f3fa1abda7d326ab.png

vi /etc/fdfs/storage.conf

# 修改的内容如下:

disabled=false # 启用配置文件

port=23000 # storage服务端口

base_path=/fastdfs/storage # 数据和日志文件存储根目录

store_path0=/fastdfs/storage # 第一个存储目录

tracker_server=192.100.139.121:22122 # tracker服务器IP和端口

tracker_server=192.100.139.122:22122 #tracker服务器IP2和端口[Microsof1]

http.server_port=8888 # http访问文件的端口

其它参数保留默认配置, 具体配置解释可参考官方文档说明:http://bbs.chinaunix.net/thread-1941456-1-1.html

48304ba5e6f9fe08f3fa1abda7d326ab.png

3、创建基础数据目录

mkdir -p /fastdfs/storage

4、防火墙中打开storage服务器端口( 默认为 23000)

vi /etc/sysconfig/iptables

#添加如下端口行:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT

重启防火墙

service iptables restart

注:集群环境下

存储节点只做存储则只操作步骤三

5、启动storage服务器

/etc/init.d/fdfs_storaged start

初次启动,会在/fastdfs/storage目录下生成logs、data两个目录。

drwxr-xr-x 259 root root 4096 Mar 31 06:22 data

drwxr-xr-x 2 root root 4096 Mar 31 06:22 logs

检查FastDFS Tracker Server是否启动成功:

[root@gyl-test-t9 ~]# ps -ef | grep fdfs_storaged

root 1336 1 3 06:22 ? 00:00:01 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf

root 1347 369 0 06:23 pts/0 00:00:00 grep fdfs_storaged

四、文件上传测试(ip01)

1、修改Tracker服务器客户端配置文件

cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf

vim /etc/fdfs/client.conf

# 修改以下配置,其它保持默认

base_path=/fastdfs/tracker

tracker_server=192.100.139.121:22122 # tracker服务器IP和端口

tracker_server=192.100.139.122:22122 #tracker服务器IP2和端口

2、执行文件上传命令

#/usr/local/src/test.png 是需要上传文件路径

/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/test.png

返回文件ID号:group1/M00/00/00/tlxkwlhttsGAU2ZXAAC07quU0oE095.png

(能返回以上文件ID,说明文件已经上传成功)

Or :

/usr/bin/fdfs_test /etc/fdfs/client.conf upload client.conf

d47fe4e85798521fe6b394b3ef321227.png

五、在所有storage节点安装fastdfs-nginx-module

1、fastdfs-nginx-module 作用说明

FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组存储服务器之间需要进入文件复制,有同步延迟的问题。假设Tracker服务器将文件上传到了ip01,上传成功后文件ID已经返回给客户端。此时FastDFS存储集群机制会将这个文件同步到同组存储ip02,在文件还没有复制完成的情况下,客户端如果用这个文件ID在ip02上取文件,就会出现文件无法访问的错误。而fastdfs-nginx-module可以重定向文件连接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。(解压后的fastdfs-nginx-module在nginx安装时使用)

2、解压 fastdfs-nginx-module_v1.16.tar.gz

cd /usr/local/src

tar -xzvf fastdfs-nginx-module_v1.16.tar.gz

3、修改 fastdfs-nginx-module 的 config 配置文件

cd fastdfs-nginx-module/src

vim config

CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/"

修改为:

CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

4、安装编译 Nginx 所需的依赖包

yum install gcc gcc-c++ make automake autoconf libtool pcre* zlib openssl openssl-devel

5、编译安装 Nginx (添加 fastdfs-nginx-module 模块)

cd /usr/local/src/

tar -zxvf nginx-1.10.0.tar.gz

tar –zxvf ngx_cache_purge_2.3.tar.gz

cd nginx-1.10.0

./configure --prefix=/opt/nginx --add-module=/usr/local/src/fastdfs-nginx-module/src --add-module=/usr/local/src/ngx_cache_purge-2.3

make && make install

特别注意

很好的文档,但是文中有一处还请大家特别注意。在

五 5、编译安装 Nginx (添加 fastdfs-nginx-module 模块)

这个步骤执行

./configure --prefix=/opt/nginx --add-module=/usr/local/src/fastdfs-nginx-module/src --add-module=/usr/local/src/ngx_cache_purge-2.3

时,你的实际nginx的目录已经到 /opt/nginx下,相应的配置也得在这下面修改。

/usr/local/src 目录下得nginx还在·但是没用了。。被这问题困扰了大半天·希望大家不要踩这个坑了

7、复制 fastdfs-nginx-module 源码中的配置文件到/etc/fdfs 目录,并修改

48304ba5e6f9fe08f3fa1abda7d326ab.png

cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/

vi /etc/fdfs/mod_fastdfs.conf

修改以下配置:

connect_timeout=10

base_path=/tmp

tracker_server=192.100.139.121:22122 # tracker服务器IP和端口

tracker_server=192.100.139.122:22122 #tracker服务器IP2和端口

url_have_group_name=true #url中包含group名称

#在最后添加 [group1]

group_name=group1

storage_server_port=23000

store_path_count=1

store_path0=/fastdfs/storage

48304ba5e6f9fe08f3fa1abda7d326ab.png

8、复制 FastDFS 的部分配置文件到/etc/fdfs 目录

cd /usr/local/src/FastDFS/conf

cp http.conf mime.types /etc/fdfs/

9、在/fastdfs/storage 文件存储目录下创建软连接,将其链接到实际存放数据的目录

ln -s /fastdfs/storage/data/ /fastdfs/storage/data/M00

10、配置 Nginx

48304ba5e6f9fe08f3fa1abda7d326ab.png

user nobody;

worker_processes 1;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

sendfile on;

keepalive_timeout 65;

server {

listen 8888;

server_name 192.100.139.121;

location ~/group1/M00 {

ngx_fastdfs_module;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

}

upstream storage_server_group1{

server 192.100.139.121:8888 weight=10;

server 192.100.139.123:8888 weight=10;

server 192.100.139.124:8888 weight=10;

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

说明:

A、8888 端口值是要与/etc/fdfs/storage.conf 中的 http.server_port=8888 相对应, 因为 http.server_port 默认为 8888,如果想改成 80,则要对应修改过来。

B、Storage 对应有多个 group 的情况下,访问路径带 group 名,如/group1/M00/00/00/xxx, 对应的 Nginx 配置为:

location ~/group([0-9])/M00 {

ngx_fastdfs_module;

}

C、如查下载时如发现老报 404,将 nginx.conf 第一行 user nobody 修改为 user root 后重新启动。

11、防火墙中打开 Nginx 的 8888 端口

48304ba5e6f9fe08f3fa1abda7d326ab.png

vi /etc/sysconfig/iptables

添加:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT

#重启防火墙

service iptables restart

启动nginx : /opt/nginx/sbin/nginx

(重启 Nginx 的命令为:/opt/nginx/sbin/nginx -s reload)

48304ba5e6f9fe08f3fa1abda7d326ab.png

六、验证:通过浏览器访问测试时上传的文件

切换追踪服务器IP同样可以访问

http://192.100.139.121:8888/group1/M00/00/00/CmSKtFj13gyAen4oAAH0yXi-HW8296.png

http://192.100.139.122:8888/group1/M00/00/00/CmSKtFj13gyAen4oAAH0yXi-HW8296.png

七、Java API 客户端配置

2.在你的项目src/java/resources 下加入文件 fastdfs_client.conf

注意修改tracker服务器Ip地址

48304ba5e6f9fe08f3fa1abda7d326ab.png

connect_timeout = 2

network_timeout = 30

charset = ISO8859-1

http.tracker_http_port = 8888

http.anti_steal_token = no

tracker_server=192.100.139.121:22122

tracker_server=192.100.139.122:22122

default_group_name=group1

48304ba5e6f9fe08f3fa1abda7d326ab.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简析.NET Core 以及与 .NET Framework的关系

至2002微软公司推出.NET平台已近15年,在互联网快速迭代的浪潮中,许多语言已被淘汰,同时也有更多新的语言涌现,但 .Net 依然坚挺的站在系统开发平台的一线阵营中,并且随着.NET Core 即将到来(2016年6月27日)的正式版&am…

Jdk1.8 JUC源码增量解析(2)-atomic-LongAdder和LongAccumulator

转载自 Jdk1.8 JUC源码增量解析(2)-atomic-LongAdder和LongAccumulator功能简介:LongAdder是jdk1.8提供的累加器,基于Striped64实现。它常用于状态采集、统计等场景。AtomicLong也可以用于这种场景,但在线程竞争激烈的情况下,Long…

mysql 密码hash算法_如何用hash创建一个mySQL用户(‘sha256’,$salt.$password)?

我肯定错过了什么.我想为select-only事务设置数据库用户帐户,但mysql不允许我在创建用户帐户时选择密码的哈希方法.这失败了:GRANT SELECT ON myDB.* TO selectuserlocalhostIDENTIFIED BY hash(sha256, salted-myfakelongrandompasswordstring);错误1064(42000)&am…

为什么微软逐步转变为开源公司

微软目前拥有自己的 BSD Unix 操作系统,支持 Ubuntu 作为 Windows 10 的一个子系统,最近又将 Xamarin 软件开发工具包开源,所有这些意味着微软已不再是比尔盖茨和史蒂夫鲍尔默的微软了。 我知道这很难令人相信,但微软确实正大步走…

Jdk1.8 JUC源码增量解析(1)-atomic-Striped64

转载自 Jdk1.8 JUC源码增量解析(1)-atomic-Striped64功能简介:Striped64是jdk1.8提供的用于支持如Long累加器,Double累加器这样机制的基础类。Striped64的设计核心思路就是通过内部的分散计算来避免竞争(比如多线程CAS操作时的竞争)。Striped64内部包含…

java内部类选择题_java内部类详解(附相关面试题)

说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉。原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法。今天我们就来一探究竟。一.内部类基础在Java中&am…

开源,新的平台之战

近日,OpenDaylight项目的执行总监Neela Jacques在文章《开源的转变:一种新的平台战争》 中提到:开源已经成为软件公司业务战略的关键,是一种新的平台之战。 多年来,开源软件似乎处于技术产业的边缘。而如今&#xff0c…

java下载图片到手机相册_Unity保存图片到Android手机且更新相册

Android 保存图片到设备前言:在许多的应用或游戏中,大多都有保存图片或者截图等等的功能,这篇文档我们的目的是通过 Unity 保存图片,并且调用 Andorid 中的更新相册的原生方法.流程步骤:编写更新相册的 Android 原生接口 -> Unity 编写保存图片逻辑以及调用更新相册 Android…

如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例

转载自 如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例 wait, notify 和 notifyAll,这些在多线程中被经常用到的保留关键字,在实际开发的时候很多时候却并没有被大家重视。本文对这些关键字的使用进行了描述。 在 Java 中…

.NET Core 使用Dapper 操作MySQL

.NET Core 使用Dapper 操作MySQL 数据库, .NET Core 使用Dapper。 目前官方没有出.NET Core MySQL 驱动,但是已经有第三方进行改动封装出.NET Core MySQL Connector 预览版。 Dapper 也已经出了 .NET Core 预览版。 Dapper dot net 是一个轻量型的ORM&a…

Angular 2与TypeScript概览

迄今为止,在创建Web应用方面,AngularJS是当前最为流行的JavaScript框架。如今,Angular 2和TypeScript通过一种非常类似于Java 8的语法,使真正面向对象的Web开发成为了主流。 据Google的工程主管Brad Green介绍,有130万…

正确使用 Volatile 变量

转载自 Java 理论与实践 - 正确使用 Volatile 变量 - volatile 变量使用指南Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少&#xf…

java龟兔赛跑设计思路_JAVA程序设计(09)-----面对对象设计初级应用 龟兔赛跑

1.乌龟和兔子共有属性和方法 做成父类 避免重复代码package com.lovo;/*** 类: 动物* author Abe* 属性: 名字 步距 总距离 睡觉的日子*/public class Animal {protected String name;protected int step;protected int distance;protected int sleepDay…

16年国庆假期期间兼职所悟

2016年9月25日,学校放假了!!! 学校放假11天,10月7号才开学,除了晚上上个夜班之外别的时间都在闲着,这么大的自己感觉闲着真不是滋味,于是开始疯狂的在58上找工作,心里想…

python flask项目过程_Python 开发过程遇到的问题

另一方面,也是因为时间原因,没有事先系统了解 python 的具体内容,所以开发过程中基本都是拿 java 的东西往 python 里面套。比如:某个功能用 java 的 ArrayList 可以解决,那 python 中有没有类似的东西呢?j…

Java 中的双重检查(Double-Check)

转载自 Java 中的双重检查(Double-Check) 在 Effecitve Java 一书的第 48 条中提到了双重检查模式,并指出这种模式在 Java 中通常并不适用。该模式的结构如下所示: public Resource getResource() { if (resource null) { …

使用 Autofac 进行依赖注入

先说下为什么翻译这篇文章,既定的方向是架构,然后为了学习架构就去学习一些架构模式、设计思想。 突然有一天发现依赖注入这种技能。为了使得架构可测试、易维护、可扩展,需要架构设计为松耦合类型,简单的说也就是解耦。为了解耦前…

组合的示例代码 java_java实现Composite组合模式的实例代码

//20210121写在前面:刚期末考试完,考了面向对象,里边儿有23个设计模式,我寻思着考完挨个儿实现一下,本文实现组合模式组合模式核心思想类似文件夹的概念,构件树形结构,树形有叶子结点和文件夹结…

Java中的ThreadPoolExecutor类

转载自 Java中的ThreadPoolExecutor类在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了&…

webpack 前端构建

一、建立简单的项目目录 1、创建 manager 根目录(作为项目根目录)2、执行 npm init,在根目录manager下自动生成 package.json文件3、npm install webpack --save-dev,在项目中安装 webpack npm包4、在根目录下 创建 webpack.config.js,所有的…