上传下载分布式部署FASTDFS安装与配置
FASTDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用Linux虚拟机安装下载VMWARE:vmware可以从官网上下载
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测试目录下的测试代码
更多推荐
所有评论(0)