FastDFS 是用 c 語言編寫的一款開源的分佈式文件系統。FastDFS 爲互聯網量身定製,充分考慮了冗餘備份、負載均衡、線性擴容等機制,並注重高可用、高性能等指標,使用 FastDFS很容易搭建一套高性能的文件服務器集羣提供文件上傳、下載等服務。java
FastDFS 架構包括 Tracker server 和 Storage server。客戶端請求 Tracker server 進行文件上傳、下載,經過 Tracker server 調度最終由 Storage server 完成文件上傳和下載。數組
Tracker server 做用是負載均衡和調度,經過 Tracker server 在文件上傳時能夠根據一些策略找到 Storage server 提供文件上傳服務。能夠將 tracker 稱爲追蹤服務器或調度服務器。瀏覽器
Storage server 做用是文件存儲,客戶端上傳的文件最終存儲在 Storage 服務器上,Storageserver 沒有實現本身的文件系統而是利用操做系統 的文件系統來管理文件。能夠將storage稱爲存儲服務器。
服務端兩個角色:服務器
客戶端上傳文件後存儲服務器將文件 ID 返回給客戶端,此文件 ID 用於之後訪問該文件的索引信息。文件索引信息包括:組名,虛擬磁盤路徑,數據兩級目錄,文件名。架構
(1)建立Maven工程fastDFSdemo
因爲FastDFS客戶端jar包並無在中央倉庫中,因此須要使用下列命令手動安裝jar包到Maven本地倉庫(將jar包放到d盤setup目錄)。負載均衡
mvn install:install-file -DgroupId=org.csource.fastdfs -DartifactId=fastdfs -Dversion=1.2 -Dpackaging=jar -Dfile=d:\setup\fastdfs_client_v1.20.jar
pom.xml中引入maven
<dependency> <groupId>org.csource.fastdfs</groupId> <artifactId>fastdfs</artifactId> <version>1.2</version> </dependency>
(2)添加配置文件fdfs_client.conf ,將其中的服務器地址設置爲192.168.25.133分佈式
# connect timeout in seconds # default value is 30s connect_timeout=30 # network timeout in seconds # default value is 30s network_timeout=60 # the base path to store log files base_path=/home/fastdfs # tracker_server can ocur more than once, and tracker_server format is # "host:port", host can be hostname or ip address tracker_server=192.168.25.133:22122 #standard log level as syslog, case insensitive, value list: ### emerg for emergency ### alert ### crit for critical ### error ### warn for warning ### notice ### info ### debug log_level=info # if use connection pool # default value is false # since V4.05 use_connection_pool = false # connections whose the idle time exceeds this time will be closed # unit: second # default value is 3600 # since V4.05 connection_pool_max_idle_time = 3600 # if load FastDFS parameters from tracker server # since V4.05 # default value is false load_fdfs_parameters_from_tracker=false # if use storage ID instead of IP address # same as tracker.conf # valid only when load_fdfs_parameters_from_tracker is false # default value is false # since V4.05 use_storage_id = false # specify storage ids filename, can use relative or absolute path # same as tracker.conf # valid only when load_fdfs_parameters_from_tracker is false # since V4.05 storage_ids_filename = storage_ids.conf #HTTP settings http.tracker_server_port=80 #use "#include" directive to include HTTP other settiongs ##include http.conf
(3)建立java類,main方法代碼以下:ide
// 一、加載配置文件,配置文件中的內容就是 tracker 服務的地址。 ClientGlobal.init("D:/maven_work/fastDFS-demo/src/fdfs_client.conf"); // 二、建立一個 TrackerClient 對象。直接 new 一個。 TrackerClient trackerClient = new TrackerClient(); // 三、使用 TrackerClient 對象建立鏈接,得到一個 TrackerServer 對象。 TrackerServer trackerServer = trackerClient.getConnection(); // 四、建立一個 StorageServer 的引用,值爲 null StorageServer storageServer = null; // 五、建立一個 StorageClient 對象,須要兩個參數 TrackerServer 對象、StorageServer 的引用 StorageClient storageClient = new StorageClient(trackerServer, storageServer); // 六、使用 StorageClient 對象上傳圖片。 //擴展名不帶「.」 String[] strings = storageClient.upload_file("D:/pic/benchi.jpg", "jpg", null); // 七、返回數組。包含組名和圖片的路徑。 for (String string : strings) { System.out.println(string); }
控制檯輸出以下結果:性能
group1 M00/00/00/wKgZhV4r9uSAZvkZAAaZOWtmGtU020.jpg
在瀏覽器輸入:
http://192.168.25.133/group1/M00/00/00/wKgZhV4r9uSAZvkZAAaZOWtmGtU020.jpg