当前位置:   article > 正文

分布式文件系统FastDFS看这一篇就够了(文件上传下载、单机部署及集群部署)_go-fastdfs漏洞(1)_gofastdfs集群部署方案

gofastdfs集群部署方案
        <artifactId>commons-io</artifactId>          
        <version>2.4</version>      
        </dependency>         
    </dependencies>  
</project>  
  • 1
  • 2
  • 3
  • 4
  • 5

#### 2.2.2.新建fdfs\_client.conf文件,在我们的itoo中,我们建立在(src/main/resources底下)



> 
> connect\_timeout = 2  
>  network\_timeout = 30  
>  charset = UTF-8  
>  http.tracker\_http\_port = 80  
>  #没什么用  
>  http.anti\_steal\_token = no  
>  http.secret\_key = FastDFS1234567890  
>  tracker\_server = 192.168.17.112:22122  
>  #tracker\_server = 192.168.0.119:22122
> 
> 
> 


#### 2.2.3.实现文件上传



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

public void save(HttpServletRequest request,HttpServletResponse response){
String videoName=request.getParameter(“videoName”);
String videoType=request.getParameter(“videoType”);
String videoDesc=request.getParameter(“videoDesc”);
String videoPath=request.getParameter(“videoPath”);
String picturePath=request.getParameter(“picturePath”);

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
Date uploadTime=null;  
try {  
    uploadTime = formatter.parse(formatter.format(new Date()));  
} catch (ParseException e) {  
    // TODO Auto-generated catch block 
    e.printStackTrace();  
}  
  
JacksonJsonUntil jackJsonUtil =new JacksonJsonUntil ();  
  
String dataBaseName = "itoo\_video";  

Video video=new Video();  
video.setUserName("why");  
video.setUserID("why");       
video.setVideoName(videoName);  
video.setVideoPath(videoPath);  
video.setVideoType(videoType);  
video.setVideoDesc(videoDesc);    
video.setDataBaseName(dataBaseName);  
video.setPicturePath(picturePath);  
video.setUploadTime(uploadTime);  
  
uploadFileService.save(video);        
  
   jackJsonUtil.beanToJson(response,video);  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

}

/*
* 上传文件
*/
@RequestMapping(value={“/upload”})
@ResponseBody
public void upload( MultipartFile file, HttpServletRequest request,HttpServletResponse response){

String ext_Name = file.getOriginalFilename().split("\\.")[1];  
String videoName=file.getOriginalFilename().split("\\.")[0];  
  
   byte[] bytes = null;  
try {  
    bytes = file.getBytes();  
} catch (IOException e) {  
    e.printStackTrace();  
}  
String videoPath=uploadFile(bytes,ext_Name);  
  
JacksonJsonUntil jackJsonUtil =new JacksonJsonUntil ();  
  
Video video=new Video();  
video.setVideoPath(videoPath);  
video.setVideoName(videoName);        
  
jackJsonUtil.beanToJson(response,video);  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

}

public String uploadFile(byte[] byteFile, String ext_file) {
// 拼接服务区的文件路径
StringBuffer sbPath = new StringBuffer();
sbPath.append(“http://192.168.22.252”);
try {
// 初始化文件资源
ClientGlobal
.init(“C:\Users\alsr\Desktop\ITOO-5.0\itoo-video-Test\dmsd-itoo-video-parent\dmsd-itoo-video-web\src\main\resources\fdfs_client.conf”);

    // 链接FastDFS服务器,创建tracker和Stroage 
    TrackerClient trackerClient = new TrackerClient();  
    TrackerServer trackerServer = trackerClient.getConnection();  
    StorageServer storageServer = null;  
    StorageClient storageClient = new StorageClient(trackerServer,  
            storageServer);  
    //利用字节流上传文件 
    String[] strings = storageClient.upload\_file(byteFile, ext_file, null);  

    for (String string : strings) {  
        sbPath.append("/" + string);  
        System.out.println(string);  
    }  
    // 全路径 
    System.out.println(sbPath);  
} catch (IOException | MyException e) {  
    e.printStackTrace();  
}  
return sbPath.toString();  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

}


只要我们能正常接收到一个json类型的字符串(url地址),就证明我们已经上传成功了,如果不信,可以直接用浏览器去验证一下,看看能不能得到文件展示。


#### 2.2.4.FastDFS实现文件下载



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

public void testDownload() {
try {
ClientGlobal.init(conf_filename);
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getConnection();
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer, storageServer);
byte[] b = storageClient.download_file(“group1”, “M00/00/00/wKgRcFV_08OAK_KCAAAA5fm_sy874.conf”);
System.out.println(b);
IOUtils.write(b, new FileOutputStream(“D:/”+UUID.randomUUID().toString()+“.conf”));
}
catch (Exception e) {
e.printStackTrace();
}
}


#### 2.2.5.FastDFS获取将上传文件信息



  • 1
  • 2
  • 3
  • 4
  • 5

public void testGetFileInfo(){
try {
ClientGlobal.init(conf_filename);
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getConnection();
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer, storageServer);
FileInfo fi = storageClient.get_file_info(“group1”, “M00/00/00/wKgRcFV_08OAK_KCAAAA5fm_sy874.conf”);
System.out.println(fi.getSourceIpAddr()); System.out.println(fi.getFileSize());
System.out.println(fi.getCreateTimestamp()); System.out.println(fi.getCrc32());
}
catch (Exception e) {
e.printStackTrace();
}
}


#### 2.2.6.FastDFS获取文件名称



  • 1
  • 2
  • 3
  • 4
  • 5

public void testGetFileMate(){
try {
ClientGlobal.init(conf_filename);
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getConnection();
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer,
storageServer);
NameValuePair nvps [] = storageClient.get_metadata(“group1”,“M00/00/00/wKgRcFV_08OAK_KCAAAA5fm_sy874.conf”);
for(NameValuePair nvp : nvps){
System.out.println(nvp.getName() + “:” + nvp.getValue());
}
} catch (Exception e) {
e.printStackTrace();
}
}


#### 2.2.7.FastDFS实现删除文件



  • 1
  • 2
  • 3
  • 4
  • 5

public void testDelete(){
try {
ClientGlobal.init(conf_filename);
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getConnection();
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer,storageServer);
int i = storageClient.delete_file(“group1”,“M00/00/00/wKgRcFV_08OAK_KCAAAA5fm_sy874.conf”);
System.out.println( i==0 ? “删除成功” : “删除失败:”+i);
} catch (Exception e) {
e.printStackTrace();
}
}


#### 2.2.8.FastDFS查询文件



  • 1
  • 2
  • 3
  • 4
  • 5

//查询文件
@Test
public void testQueryFile() throws IOException, MyException {
ClientGlobal.initByProperties(“config/fastdfs‐client.properties”);
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getConnection();
StorageServer storageServer = null;
StorageClient storageClient = new StorageClient(trackerServer,storageServer);
FileInfo fileInfo = storageClient.query_file_info(“group1”,“M00/00/01/wKhlQFrKBSOAW5AWAALcAg10vf4862.png”);
System.out.println(fileInfo);
}


## 三、FastDFS+Nginx(单点部署)事例


### 3.1.服务器规划



> 
> 跟踪服务器(**Tracker Server**):ip01  
>  存储服务器(**Storage Server**):ip02  
>  操作系统:**CentOS7**  
>  用户:**root**  
>  数据存储目录:`/fastdfs/tracker`  
>  安装包:  
>  `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`目录下


### 3.2.所有tracker和storage节点都执行如下操作


1、安装所需的依赖包



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

yum install make cmake gcc gcc-c++


2、安装libfatscommon



  • 1
  • 2
  • 3
  • 4
  • 5

cd /usr/local/src
#安装unzip 命令: yum install -y unzip zip
unzip libfastcommon-master.zip
cd libfastcommon-master
#编译、安装
./make.sh
./make.sh install


3、安装FastDFS



  • 1
  • 2
  • 3
  • 4
  • 5

cd /usr/local/src
tar -xzvf FastDFS_v5.08.tar.gz
cd FastDFS
./make.sh
./make.sh install


采用默认安装方式,相应的文件与目录如下:  
 1> 服务脚本:



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

/etc/init.d/fdfs_storaged
/etc/init.d/fdfs_trackerd


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



  • 1
  • 2
  • 3
  • 4
  • 5

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目录下)



  • 1
  • 2
  • 3
  • 4
  • 5

-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


### 3.3.配置tracker服务器


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



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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


2> 修改tracker配置文件



  • 1
  • 2
  • 3
  • 4
  • 5

vim /etc/fdfs/tracker.conf


修改的内容如下:



  • 1
  • 2
  • 3
  • 4
  • 5

disabled=false # 启用配置文件
port=22122 # tracker服务器端口(默认22122)
base_path=/fastdfs/tracker # 存储日志和数据的根目录


其它参数保留默认配置, 具体配置解释可参考官方文档说明:[FastDFS配置文件详解](https://bbs.csdn.net/topics/618540462)


3> 创建base\_path指定的目录



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

mkdir -p /fastdfs/tracker


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



  • 1
  • 2
  • 3
  • 4
  • 5

vi /etc/sysconfig/iptables


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




  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

iptables -P OUTPUT ACCEPT


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


添加如下端口行:



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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


重启防火墙



  • 1
  • 2
  • 3
  • 4
  • 5

service iptables restart


5> 启动tracker服务器



  • 1
  • 2
  • 3
  • 4
  • 5

/etc/init.d/fdfs_trackerd start


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



  • 1
  • 2
  • 3
  • 4
  • 5

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是否启动成功:



  • 1
  • 2
  • 3
  • 4
  • 5

ps -ef | grep fdfs_trackerd


![在这里插入图片描述](https://img-blog.csdnimg.cn/b25bc84bf05741689141f0342b75f42d.png)


### 3.4.配置storage服务器


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



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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


2> 编辑配置文件



  • 1
  • 2
  • 3
  • 4
  • 5

vi /etc/fdfs/storage.conf


修改的内容如下:



  • 1
  • 2
  • 3
  • 4
  • 5

disabled=false # 启用配置文件
port=23000 # storage服务端口
base_path=/fastdfs/storage # 数据和日志文件存储根目录
store_path0=/fastdfs/storage # 第一个存储目录
tracker_server=ip01:22122 # tracker服务器IP和端口
http.server_port=8888 # http访问文件的端口


其它参数保留默认配置, 具体配置解释可参考官方文档说明:[FastDFS配置文件详解](https://bbs.csdn.net/topics/618540462)


3> 创建基础数据目录



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

mkdir -p /fastdfs/storage


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



  • 1
  • 2
  • 3
  • 4
  • 5

vi /etc/sysconfig/iptables


#添加如下端口行:



  • 1
  • 2
  • 3
  • 4
  • 5

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


重启防火墙



  • 1
  • 2
  • 3
  • 4
  • 5

service iptables restart


5> 启动storage服务器



  • 1
  • 2
  • 3
  • 4
  • 5

/etc/init.d/fdfs_storaged start


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



  • 1
  • 2
  • 3
  • 4
  • 5

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是否启动成功:



  • 1
  • 2
  • 3
  • 4
  • 5

[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


### 3.5.文件上传测试(ip01)


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



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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


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



  • 1
  • 2
  • 3
  • 4
  • 5

base_path=/fastdfs/tracker
tracker_server=ip01:22122


2> 执行文件上传命令



  • 1
  • 2
  • 3
  • 4
  • 5

#/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,说明文件已经上传成功)


### 3.6.在所有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`



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

cd /usr/local/src
tar -xzvf fastdfs-nginx-module_v1.16.tar.gz


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




  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

cd fastdfs-nginx-module/src
vi 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(`nginx-1.10.0.tar.gz`)到`/usr/local/src` 目录


5>安装编译 Nginx 所需的依赖包



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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


6>编译安装 Nginx (添加 fastdfs-nginx-module 模块)



  • 1
  • 2
  • 3
  • 4
  • 5

cd /usr/local/src/
tar -zxvf nginx-1.10.0.tar.gz
cd nginx-1.10.0
./configure --add-module=/usr/local/src/fastdfs-nginx-module/src
make && make install


比对 nginx下Makefile



  • 1
  • 2
  • 3
  • 4
  • 5

default: build

clean:
rm -rf Makefile objs

build:
$(MAKE) -f objs/Makefile

install:
$(MAKE) -f objs/Makefile install

modules:
$(MAKE) -f objs/Makefile modules

upgrade:
/usr/local/nginx/sbin/nginx -t

    kill -USR2 'cat /usr/local/nginx/logs/nginx.pid'
    sleep 1
    test -f /usr/local/nginx/logs/nginx.pid.oldbin

    kill -QUIT 'cat /usr/local/nginx/logs/nginx.pid.oldbin'
  • 1
  • 2
  • 3
  • 4
  • 5

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



  • 1
  • 2
  • 3
  • 4
  • 5

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


8>修改以下配置:



  • 1
  • 2
  • 3
  • 4
  • 5
 connect_timeout=10
 base_path=/tmp
 tracker_server=ip01:22122
 storage_server_port=23000
 group_name=group1
 url_have_group_name = true
 store_path0=/fastdfs/storage
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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



  • 1
  • 2
  • 3
  • 4
  • 5

cd /usr/local/src/FastDFS/conf

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


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



  • 1
  • 2
  • 3
  • 4
  • 5

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


11>配置 Nginx



  • 1
  • 2
  • 3
  • 4
  • 5

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 localhost;
    location ~/group([0-9])/M00 {
        ngx_fastdfs_module;
    }
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root html;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

}


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 配置为:



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
 location ~/group([0-9])/M00 {
     ngx_fastdfs_module;
}
  • 1
  • 2
  • 3

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


12> 防火墙中打开 Nginx 的 8888 端口



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

vi /etc/sysconfig/iptables



  • 1
  • 2

添加:

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

#重启防火墙
service iptables restart


启动 Nginx



  • 1
  • 2
  • 3
  • 4
  • 5

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


13>通过浏览器访问测试时上传的文件



  • 1
  • 2
  • 3
  • 4
  • 5

http://ip:port/group1/M00/00/00/tlxkwlhttsGAU2ZXAAC07quU0oE095.png
or
http://ip/group1/M00/00/00/tlxkwlhttsGAU2ZXAAC07quU0oE095.png


## 四、FastDFS集群部署(实现高可用(HA))


![在这里插入图片描述](https://img-blog.csdnimg.cn/d74db793d82e43c5b9ee0145b5f65428.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA55m95aSn6ZSF,size_20,color_FFFFFF,t_70,g_se,x_16)


### 4.1.准备


1.服务器规划:



> 
> 跟踪服务器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/resourcese /usr/local/src |
| Tracker\_data | /fastdfs/tracker |
| Storage\_data | /fastdfs/storage |


2.安装包



> 
> `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目录下


### 4.2.所有tracker和storage节点都执行如下操作


1、安装所需的依赖包



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67

yum install make cmake gcc gcc-c++


2、安装libfatscommon



  • 1
  • 2
  • 3
  • 4
  • 5

cd /usr/local/src
#安装unzip 命令: yum install -y unzip zip
unzip libfastcommon-master.zip
cd libfastcommon-master
编译、安装
./make.sh
./make.sh install


3、安装FastDFS



  • 1
  • 2
  • 3
  • 4
  • 5

cd /usr/local/src
tar -xzvf FastDFS_v5.08.tar.gz
cd FastDFS
./make.sh
./make.sh install


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


1> 服务脚本:



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

/etc/init.d/fdfs_storaged
/etc/init.d/fdfs_trackerd


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



  • 1
  • 2
  • 3
  • 4
  • 5

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目录下)



  • 1
  • 2
  • 3
  • 4
  • 5

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


### 4.3.配置tracker服务器


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



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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


2、修改tracker配置文件



  • 1
  • 2
  • 3
  • 4
  • 5

vim /etc/fdfs/tracker.conf


修改的内容如下:



  • 1
  • 2
  • 3
  • 4
  • 5

disabled=false # 启用配置文件
port=22122 # tracker服务器端口(默认22122)
base_path=/fastdfs/tracker # 存储日志和数据的根目录
store_group=group1


其它参数保留默认配置, 具体配置解释可参考官方文档说明:[FastDFS配置文件详解](https://bbs.csdn.net/topics/618540462)  
 3、创建base\_path指定的目录



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

mkdir -p /fastdfs/tracker


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



  • 1
  • 2
  • 3
  • 4
  • 5

vi /etc/sysconfig/iptables


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



  • 1
  • 2
  • 3
  • 4
  • 5

iptables -P OUTPUT ACCEPT


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



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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


重启防火墙



  • 1
  • 2
  • 3
  • 4
  • 5

service iptables restart


5、启动tracker服务器



  • 1
  • 2
  • 3
  • 4
  • 5

/etc/init.d/fdfs_trackerd start


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



  • 1
  • 2
  • 3
  • 4
  • 5

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是否启动成功:



  • 1
  • 2
  • 3
  • 4
  • 5

ps -ef | grep fdfs_trackerd


### 4.4.配置storage服务器


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



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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


2、编辑配置文件



  • 1
  • 2
  • 3
  • 4
  • 5

vi /etc/fdfs/storage.conf


修改的内容如下:



  • 1
  • 2
  • 3
  • 4
  • 5

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访问文件的端口


其它参数保留默认配置, 具体配置解释可参考官方文档说明:[FastDFS配置文件详解](https://bbs.csdn.net/topics/618540462)  
 3、创建基础数据目录



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

mkdir -p /fastdfs/storage


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



  • 1
  • 2
  • 3
  • 4
  • 5

vi /etc/sysconfig/iptables


#添加如下端口行:



  • 1
  • 2
  • 3
  • 4
  • 5

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


重启防火墙



  • 1
  • 2
  • 3
  • 4
  • 5

service iptables restart


注:集群环境下  
 **追踪+存储节点**操作**步骤一、步骤二、步骤三**


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


5、启动storage服务器



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

/etc/init.d/fdfs_storaged start


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



  • 1
  • 2
  • 3
  • 4
  • 5

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是否启动成功:



  • 1
  • 2
  • 3
  • 4
  • 5

[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


### 4.5.文件上传测试(ip01)


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



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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


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



  • 1
  • 2
  • 3
  • 4
  • 5

base_path=/fastdfs/tracker
tracker_server=192.100.139.121:22122 # tracker服务器IP和端口
tracker_server=192.100.139.122:22122 #tracker服务器IP2和端口





还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!


王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。


对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!


【完整版领取方式在文末!!】


***93道网络安全面试题***


![](https://img-blog.csdnimg.cn/img_convert/6679c89ccd849f9504c48bb02882ef8d.png)








![](https://img-blog.csdnimg.cn/img_convert/07ce1a919614bde78921fb2f8ddf0c2f.png)





![](https://img-blog.csdnimg.cn/img_convert/44238619c3ba2d672b5b8dc4a529b01d.png)





内容实在太多,不一一截图了


### 黑客学习资源推荐


最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!


对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

#### 1️⃣零基础入门


##### ① 学习路线


对于从来没有接触过网络安全的同学,我们帮你准备了详细的**学习成长路线图**。可以说是**最科学最系统的学习路线**,大家跟着这个大的方向学习准没问题。


![image](https://img-blog.csdnimg.cn/img_convert/acb3c4714e29498573a58a3c79c775da.gif#pic_center)


##### ② 路线对应学习视频


同时每个成长路线对应的板块都有配套的视频提供:


![image-20231025112050764](https://img-blog.csdnimg.cn/874ad4fd3dbe4f6bb3bff17885655014.png#pic_center)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/745198
推荐阅读
  

闽ICP备14008679号