您的位置:首页 > 其它

上传下载分布式部署FASTDFS安装与配置

2015-12-17 14:48 441 查看
FASTDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题
FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用

Linux虚拟机安装

下载VMWARE:

vmware
可以从官网上下载,也可以下下载破解版的,本测试采用的是vmware11
Linux系统采用的是Centos6.5
在创建虚拟机的时候可能会遇到Vt-x处于禁用状态,无法创建,这时需进入bios启动,将IntelVirtual
Technology开启即可。

配置NAT静态网

打开Vmware的编辑-虚拟网路编辑器

选择NAT模式
窗口下方有子网ip192.168.128.0
子网掩码255.255.255.0
查看NAT设置的网关192.168.128.2

修改网络配置文件ifcfg-eth0

进入文件目录:

命令:cd/etc/sysconfig/sysconfig-scripts

编辑文件

vi ifcfg-eth0

加入:
IPADDR=192.168.128.10
//VMnet8同网段即可
NETMASK=255.255.255.0
//子网掩码
GATEWAY=192.168.128.2
//网关
ARPCHECK=no

更改:

ONBOOT=yes
//激活网卡

BOOTPROTO=static
//static静态dhcp动态none

增加dns

vi /etc/resolv.conf
添加

nameserver
8.8.8.8

nameserver
8.8.4.4

修改主机名

vi /etc/sysconfig/network
修改hostname为你心仪的主机名

vi /etc/hosts
修改127.0.0.1后的localhost.localdomain为主机名

重启网卡:
命令:service
network restart
注:centos6.5网卡默认开启了ARPCHECK,需要加入ARPCHECK=no,否则会报:
Determining if ip address192.168.128.10 is already in use

安装fastdfs

安装libevent

因为fastdfs中引用了libevent的类库,通过ssh客户端将libevent安装包传到虚拟机/usr目录下

解压libevent-2.0.22-stable.tar.gz

tar -zxvf libevent-2.022-stable.tar.gz
//解压

mv libevent-2.022-stable
libevent
//重命名

编译安装libevent

cd libevent
//进入libevent主目录

./configure -prefix=/usr
//生成makefile文件为编译做准bei

发现错Error: no acceptable C compiler
found in $PATH,这是没有安装gcc套件
yuminstall gcc
//安装gcc套件
安装gcc时候发现有报错Loaded
plugins: fastestmirror Loading mirror speeds fromcached hostfile,这是因为yum开启了镜像下载,fastestmirror插件会根据响应速度来判断下载地址,因为地域等原因,下载不下来。解决方法:

方法一:yum--disableplugin=fastestmirror
update

方法二:vi/etc/yum/pluginconf.d/fastestmirror.conf
更改为enable=0
再次运行yum–y
install gcc,问题解决,开始下载,直至complete
回过头来在次运行

./configure
-prefix=/usr //可以不指定prefix,
默认安径/usr/local/bin,
/usr/local/lib

make && make install && make clean
//编译
安装删除临时文件

ln -s /usr/lib/libevent*
/lib64/ //创建安装文件的软连接

安装fastDFs

编译安装fastDFS

将fastDFS-4.06.tar.gz
解压,并进入解压后的目录,执行编译
安装

./make.sh
//编译

编译的时候需要gcc
,perl脚本,gcc前文已安装
,此时还需要安装perl

yum–y install perl

./make.sh install
//安装
,路径如下图

如果没有报错,则应该是安装成功了,这是进入/etc/fdfs
就可以看到配置文件了,如下图

克隆虚拟机

因为分布式部署,需要多台虚拟机,而如果在从头开始创建虚拟机的话,无疑是将上述的安装步骤再多做一次,而且,像perl,gcc等又需要下载编译安装,无疑是没必要的,而且,上面安装配置在每台机器上都一样,所以,就需要将上述配置的虚拟机克隆多份,用来做storage
克隆操作需要先关闭虚拟机,
在vmware我的计算机区域右键虚拟机,点击管理,点击下一步,下一步,选择完全克隆,等待完成
克隆完成后需要稍加稍加配置才能使用,因为其mac地址跟被克隆的机器一样。

修改mac地址:

vi/etc/udev/rules.d/70-persistent-net.rules //编辑网卡设备
内容如下:

# PCIdevice0x1022:0x2000 (pcnet32)

SUBSYSTEM=="net",ACTION=="add",DRIVERS=="?*",ATTR{address}=="00:0c:29:16:f4:f0",ATTR{type}=="1",KERNEL=="eth*", NAME="eth0"

# PCI device0x1022:0x2000 (pcnet32)

SUBSYSTEM=="net",ACTION=="add",DRIVERS=="?*", ATTR{address}=="00:0c:29:52:45:97",ATTR{type}=="1",KERNEL=="eth*", NAME="eth1"

注释第一个网卡,放开第二个网卡,并修改eth1位eth0,并记录mac地址(ATTR{address})

修改网络配置信息

Vi
/etc/sysconfig/network-scripts/ifcfg-eth0
修改mac地址为记录的mac地址,ipaddr修改为同网段的ip
保存
注:1和2的步骤还可以这样做
删除步骤一中的文件70-persistent-net.rules,删除步骤2中ifcfg-eth0的HADDR配置 重启机
上面的配置,无论是配置tracker,还是storage,都是一样的,区别的就是接下来的配置

配置Tracker

编辑tracker配置:
vi /etc/fdfs/tracker.conf
//编辑tracker的配置文件

修改base_path:

base_path=/opt/fastdfs_tracker
//上传文件的信息和日志信息存放目录,需提前建好
,其他配置自行配置

启动taracker

/usr/local/bin/fdfs_trackerd
/etc/fdfs/tracker.conf

其他命令:

停止tracker命令:/usr/local/bin/stop.sh
/usr/local/bin/fdfs_trackerd
重启tracker命令:/usr/local/bin/restart.sh
/usr/local/bin/fdfs_trackerd
删除一个storage节点:
/usr/local/bin/fdfs_monitor/etc/fdfs/storage.conf delete group1
192.168.128.221

查看tracker启动成功与否:

netstat –unltp|grep fdfs
//查看端口号及监听情况
端口默认22122
如下图:

查看日志信息:

tail-100f /opt/fastdfs_tracker/logs/trackerd.log

配置防火墙设置端口22122可访问

tracker.conf配置文件的默认端口为22122,需要将此端口设置为可访问

vi/etc/sysconfig/iptables

添加(不同linux命令稍有不同,参考iptables中命令):
-AINPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT

将服务加入到开机启动

vi
/etc/rc.d/rc.local
//编辑配置文件

加入命令:

/usr/local/bin/fdfs_trackerd
/etc/fdfs/tracker.conf restart
这样,就完成开机即启动tracker服务端了

配置服务器Storag

配置storage.conf

vi /etc/fdfs/storage.conf
//编辑配置文件

配置信息:
disabled=false //启用配置文件
false启用;true不启用
group_name=group1
//组名,根据实际情况修改
多台服务器可配置不同的组,各组之间是独立的,互不影响
port=23000
//设置storage的端口号,默认是23000,同一个组的storage端口号必须一致
base_path=/opt/fastdfs_storage_info //设置storage的日志目录(需预先创建)
store_path_count=1
//存储路径个数,需要和下面store_path*个数匹配
store_path0=/opt/fastdfs_storage_data //存储路径
tracker_server=192.168.224.20:22122 //tracker服务器的IP端口号,可配置多个tracker_server
http.server_port=8888 //storage
端口号
保存修改
更对配置信息查看配置文件的注释信息

启动storag

/usr/local/bin/fdfs_storaged
/etc/fdfs/storage.conf
//启动

注:此时可能会出现光标一直顿住,没有切换到新的命令行,这是没启动成功

有可能是tracker端防火墙没有设置22122端口可访问的原因,或者直接关闭防火墙:

serviceiptables stop(即时生效,重启失效)

chkconfig iptables off (重启机器后生效)

检查storage是否注册到tracker中

/usr/local/bin/fdfs_monitor
/etc/fdfs/storage.conf
//将打印注册信息
信息特别多,不再展示

将storage服务加入到开机启动

vi /etc/rc.d/rc.local
//编辑配置文件

加入命令:

/usr/local/bin/fdfs_storaged
/etc/fdfs/storage.conf
restart
这样,就完成开机即启动storage服务端了
注:如果tracker服务端的防火墙没有关闭,或者没设置22122端口可访问,就加入到开机启动,下次开机可能会导致此服务器启动不起来。

测试上传文件

本案例直接在tracker服务端做测试(也可以创建一个虚拟机做client端)

配置client.conf

vi
/etc/fdfs/client.conf

base_path=/opt/fastdfs_tracker
//存放路径

tracker_server=192.168.128.220:22122
//tracker服务器IP地址和端口号

http.tracker_server_port=8080

#include
http.conf //双#变成单#

测试上传

在/usr下新建test.txt文件(自己随意)
/usr/local/bin/fdfs_test
/etc/fdfs/client.conf
upload
/usr/test.txt
返回如下信息则上传成功:
可以在/opt/fastdfs_storage_datam(此路径为配置storage.conf时候配置的)目录下找到上传的文件。因为fastfds4.05以后删除了内置的web
http服务,所以通过日志中的file url 用浏览器访问了

fastdfs-client-java测试

下载源码

源码下载地址:
https://github.com/happyfish100/fastdfs-client-java

下载并解压后
修改src目录下的配置文件fdfs_client.conf

connect_timeout= 2

network_timeout= 30

charset =utf-8
//设置编码格式
http.tracker_http_port= 8080
//调度服务器(tracker)的端口号
http.anti_steal_token= no
//是否生成token
http.secret_key= FastDFS1234567890
//如果生成token,则根据此key去生成
tracker_server= 192.168.128.220:22122
//tracker的ip和端口号

编译源码

设置完成后编译源码成jar文件
在命令窗口输入ant
,将源码的src目录下的build.xml拖至命令行,回车即可(前提是已经设置了ant的环境变量)
将src/build目录下打包的jar包拷贝至工程lib目录
注:源码中的test目录下的java文件为原作者的测试代码,可不必打包,需修改build.xml。

测试上传下载

TrackerClient tracker =
newTrackerClient();

TrackerServer trackerServer =tracker.getConnection();
StorageServer storageServer = null;
StorageClient client =

new StorageClient(trackerServer,storageServer);

NameValuePair[] meta_list = new NameValuePair[2];
//为上传文件设置元数据信息

meta_list[0]= new
NameValuePair("width",
"800");

meta_list[1] = new NameValuePair("heigth",
"600");
byte[] file_buff = "this is atest".getBytes(ClientGlobal.g_charset);
results = client.upload_file(file_buff,"txt",
meta_list); //上传
文件
int no=
client.set_metadata(group_name,remote_filename,meta_list,ProtoCommon.STORAGE_SET_METADATA_FLAG_MERGE);
String group_name = results[0];
String remote_filename = results[1];
file_buff = client.download_file(group_name,
remote_filename); //下载文件
int errno = client.delete_file(group_name,remote_filename);
//删除服务器文件

更详细的java
API请参考下载的源码和test测试目录下的测试代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: