Centos7下FastDFS从安装到入门

2019-08-20

Github仓库

Github介绍: https://github.com/happyfish100/fastdfs

Github文档: https://github.com/happyfish100/fastdfs/wiki

FastDFS介绍

FastDFS 是用 c 语言编写的一款开源的分布式文件系统。FastDFS 为互联网量身定制, 充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用 FastDFS 很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

FastDFS 架构包括 Tracker server 和 Storage server。客户端请求 Tracker server 进行文 件上传、下载,通过 Tracker server 调度最终由 Storage server 完成文件上传和下载。

Tracker server 作用是负载均衡和调度,通过 Tracker server 在文件上传时可以根据一些 策略找到 Storage server 提供文件上传服务。可以将 tracker 称为追踪服务器或调度服务 器。

Storage server 作用是文件存储,客户端上传的文件最终存储在 Storage 服务器上, Storageserver 没有实现自己的文件系统而是利用操作系统 的文件系统来管理文件。可以将 storage 称为存储服务器。

centos live cd下载_centos live cd下载

服务端两个角色:

  • Tracker:管理集群,tracker 也可以实现集群。每个 tracker 节点地位平等。收集 Storage 集群的状态。
  • Storage:实际保存文件 Storage 分为多个组,每个组之间保存的文件是不同的。每 个组内部可以有多个成员,组成员内部保存的内容是一样的,组成员的地位是一致的,没有 主从的概念。

文件上传流程

centos live cd下载_centos live cd下载_02

客户端上传文件后存储服务器将文件 ID 返回给客户端,此文件 ID 用于以后访问该文 件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。

group1/M00/00/00/wKgrgF1Rp8uAeU2IAA-itrfn0m4.tar.gz
  • group1 组名:文件上传后所在的 storage 组名称,在文件上传成功后有 storage 服务器返回, 需要客户端自行保存。 虚拟磁盘路径:storage 配置的虚拟路径,与磁盘选项 store_path*对应。如果配置了
  • /M00 : store_path0 则是 M00,如果配置了 store_path1 则是 M01,以此类推。
  • /00/00:数据两级目录:storage 服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据 文件。
  • /wKgrgF1Rp8uAeU2IAA-itrfn0m4.tar.gz文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储 服务器 IP 地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。

文件下载流程

centos live cd下载_服务器_03

FastDFS安装

使用的系统软件

名称

说明

centos

7.x

libfatscommon

FastDFS分离出的一些公用函数包

FastDFS

FastDFS本体

fastdfs-nginx-module

FastDFS和nginx的关联模块

nginx

nginx1.15.4

编译环境

yum install git gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel wget vim -y

磁盘目录

说明

位置

所有安装包

/usr/local/src

数据存储位置

/home/dfs/

#这里我为了方便把日志什么的都放到了dfs

#创建数据存储目录
[root@server01 ~]# mkdir -p /home/dfs 
#切换到安装目录准备下载安装包
[root@server01 ~]# cd /usr/local/src

组件下载与安装

下面的步骤安装切换到安装目录下cd /usr/local/src进行开始。

安装libfatscommon

git clone https://github.com/happyfish100/libfastcommon.git --depth 1
cd libfastcommon/
./make.sh && ./make.sh install #编译安装

安装FastDFS

cd ../ #返回上一级目录
git clone https://github.com/happyfish100/fastdfs.git --depth 1
cd fastdfs/
./make.sh && ./make.sh install #编译安装
#配置文件准备
cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf #客户端文件,测试用
cp /usr/local/src/fastdfs/conf/http.conf /etc/fdfs/ #供nginx访问使用
cp /usr/local/src/fastdfs/conf/mime.types /etc/fdfs/ #供nginx访问使用

安装fastdfs-nginx-module

cd ../ #返回上一级目录
git clone https://github.com/happyfish100/fastdfs-nginx-module.git --depth 1
cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs

安装nginx

wget http://nginx.org/download/nginx-1.15.4.tar.gz #下载nginx压缩包
tar -zxvf nginx-1.15.4.tar.gz #解压
cd nginx-1.15.4/
#添加fastdfs-nginx-module模块
./configure --add-module=/usr/local/src/fastdfs-nginx-module/src/ 
make && make install #编译安装

(安装nginx(建议此处不要用yum方式安装nginx,因为需要添加模块,没有./configure))

 

单机部署

部署拓扑图

centos live cd下载_centos live cd下载_04

按照上面的命令就可用安装好相应的各个组件,那么下面来进行单机部署的配置。

关闭防火墙

service firewalld stop

tracker服务

tracker配置

#服务器ip为 192.168.43.128
vim /etc/fdfs/tracker.conf
#需要修改的内容如下
port=22122  # tracker服务器端口(默认22122,一般不修改)
base_path=/home/dfs  # 存储日志和数据的根目录

tracker服务相关命令

/etc/init.d/fdfs_trackerd start #启动tracker服务
/etc/init.d/fdfs_trackerd restart #重启动tracker服务
/etc/init.d/fdfs_trackerd stop #停止tracker服务
chkconfig fdfs_trackerd on #自启动tracker服务

启动tracker服务

[root@server01 src]# /etc/init.d/fdfs_trackerd start
Reloading systemd:                                         [  OK  ]
Starting fdfs_trackerd (via systemctl):                    [  OK  ]
[root@server01 src]#

storage服务

storage配置

vim /etc/fdfs/storage.conf
#需要修改的内容如下
port=23000  # storage服务端口(默认23000,一般不修改)
base_path=/home/dfs  # 数据和日志文件存储根目录
store_path0=/home/dfs  # 第一个存储目录
tracker_server=192.168.43.128:22122  # tracker服务器IP和端口
http.server_port=8888  # http访问文件的端口(默认8888,看情况修改,和nginx中保持一致)

启动storage服务相关命令

/etc/init.d/fdfs_storaged start #启动storage服务
/etc/init.d/fdfs_storaged restart #重动storage服务
/etc/init.d/fdfs_storaged stop #停止动storage服务
chkconfig fdfs_storaged on #自启动storage服务

启动storage服务

[root@server01 src]# /etc/init.d/fdfs_storaged start
Starting fdfs_storaged (via systemctl):                    [  OK  ]
[root@server01 src]#

client测试上传文件

vim /etc/fdfs/client.conf
#需要修改的内容如下
base_path=/home/dfs
tracker_server=192.168.43.128:22122    #tracker服务器IP和端口
#保存后测试,返回ID表示成功 如:group1/M00/00/00/xx.tar.gz
fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/nginx-1.15.4.tar.gz

执行如下:

centos live cd下载_nginx_05


nginx服务

配置nginx访问

vim /etc/fdfs/mod_fastdfs.conf
#需要修改的内容如下
tracker_server=192.168.43.128:22122  #tracker服务器IP和端口
url_have_group_name=true
store_path0=/home/dfs

#配置nginx.config
vim /usr/local/nginx/conf/nginx.conf
#添加如下配置
server {
    listen       8888;    ## 该端口为storage.conf中的http.server_port相同
    server_name  localhost;
    location ~/group[0-9]/ {
        ngx_fastdfs_module;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
    root   html;
    }
}

# 启动nginx服务
/usr/local/nginx/sbin/nginx #启动nginx
/usr/local/nginx/sbin/nginx -s reload #重启nginx

#测试下载
wget http://192.168.43.128:8888/group1/M00/00/00/wKgrgF1Rp8uAeU2IAA-itrfn0m4.tar.gz

启动nginx服务以及测试下载文件

[root@server01 src]# /usr/local/nginx/sbin/nginx
ngx_http_fastdfs_set pid=4818
[root@server01 src]# wget http://192.168.43.128:8888/group1/M00/00/00/wKgrgF1Rp8uAeU2IAA-itrfn0m4.tar.gz
--2019-08-12 14:03:36--  http://192.168.43.128:8888/group1/M00/00/00/wKgrgF1Rp8uAeU2IAA-itrfn0m4.tar.gz
Connecting to 192.168.43.128:8888... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1024694 (1001K) [application/octet-stream]
Saving to: ‘wKgrgF1Rp8uAeU2IAA-itrfn0m4.tar.gz’

100%[=================================================================================================================================>] 1,024,694   --.-K/s   in 0.02s   

2019-08-12 14:03:36 (40.9 MB/s) - ‘wKgrgF1Rp8uAeU2IAA-itrfn0m4.tar.gz’ saved [1024694/1024694]

[root@server01 src]# 
[root@server01 src]# ls
fastdfs  fastdfs-nginx-module  libfastcommon  nginx-1.15.4  nginx-1.15.4.tar.gz  wKgrgF1Rp8uAeU2IAA-itrfn0m4.tar.gz
[root@server01 src]#

可用看到已经下载成功,FastDFS的单机部署已完成。

分布式部署

分布式部署拓扑

centos live cd下载_服务器_06

分别在两台服务器都安装上Tacker以及Storage服务,在第一台服务安装Nginx进行下载服务的反向代理。 按照前面的步骤对两台服务器进行安装,安装完毕之后,下面来进行分布式配置。

tracker配置

配置每台服务器的tracker配置,都按照以下配置进行。

#服务器ip为 192.168.196.132,192.168.196.133
vim /etc/fdfs/tracker.conf
#需要修改的内容如下
port=22122  # tracker服务器端口(默认22122,一般不修改)
base_path=/home/dfs  # 存储日志和数据的根目录
# 启动服务
/etc/init.d/fdfs_trackerd start

storage配置

配置每台服务器的storage配置,都按照以下配置进行。

vim /etc/fdfs/storage.conf
#需要修改的内容如下
port=23000  # storage服务端口(默认23000,一般不修改)
base_path=/home/dfs  # 数据和日志文件存储根目录
store_path0=/home/dfs  # 第一个存储目录
tracker_server=192.168.196.132:22122  # 服务器1
tracker_server=192.168.196.133:22122  # 服务器2
http.server_port=8888  # http访问文件的端口(默认8888,看情况修改,和nginx中保持一致)
# 启动服务
/etc/init.d/fdfs_storaged start

client测试上传文件

两台服务器都配置一个client进行测试。

vim /etc/fdfs/client.conf
#需要修改的内容如下
base_path=/home/dfs
tracker_server=192.168.196.132:22122  # 服务器1
tracker_server=192.168.196.133:22122  # 服务器2
#保存后测试,返回ID表示成功 
fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/nginx-1.15.4.tar.gz

执行上传文件的返回结果:

[root@centos7-server02 nginx-1.15.4]# fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/nginx-1.15.4.tar.gz
group1/M00/00/00/wKjEhF1SQHKAEN6aAA-itrfn0m4.tar.gz
[root@centos7-server02 nginx-1.15.4]#
[root@server03 src]# fdfs_upload_file /etc/fdfs/client.conf 1.txt 
group1/M00/00/00/wKjEhV1SQLCAbAWtAAAABFqC_Qg891.txt
[root@server03 src]#

配置nginx访问

在其中一台配置nginx即可,如果要做负载均衡,可用两台都配置nginx,然后F5或者haproxy负载均衡。

vim /etc/fdfs/mod_fastdfs.conf
#需要修改的内容如下
tracker_server=192.168.196.132:22122  # 服务器1
tracker_server=192.168.196.133:22122  # 服务器2
url_have_group_name=true
store_path0=/home/dfs
#配置nginx.config
vim /usr/local/nginx/conf/nginx.conf
#在上方添加如下配置
server {
    listen       8888;    ## 该端口为storage.conf中的http.server_port相同
    server_name  localhost;
    location ~/group[0-9]/ {
        ngx_fastdfs_module;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
    root   html;
    }
}

# 启动nginx服务
/usr/local/nginx/sbin/nginx #启动nginx
/usr/local/nginx/sbin/nginx -s reload #重启nginx

测试通过nginx下载文件

wget http://192.168.196.132:8888/group1/M00/00/00/wKjEhF1SQHKAEN6aAA-itrfn0m4.tar.gz
wget http://192.168.196.132:8888/group1/M00/00/00/wKjEhV1SQLCAbAWtAAAABFqC_Qg891.txt

这是刚才测试上传的两个文件,通过nginx的8888端口 + File ID进行下载,下载成功则安装完成。

检测集群

/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
# 会显示会有几台服务器 有2台就会 显示 Storage 1-Storage 2的详细信息

相关说明

配置文件

tracker_server #有几台服务器写几个
group_name #地址的名称的命名
bind_addr #服务器ip绑定
store_path_count #store_path(数字)有几个写几个
store_path(数字) #设置几个储存地址写几个 从0开始

可能遇到的问题

如果不是root 用户 你必须在除了cd的命令之外 全部加sudo
如果不是root 用户 编译和安装分开进行 先编译再安装
如果上传成功 但是nginx报错404 先检查mod_fastdfs.conf文件中的store_path0是否一致
如果nginx无法访问 先检查防火墙 和 mod_fastdfs.conf文件tracker_server是否一致
如果不是在/usr/local/src文件夹下安装 可能会编译出错

 

-------------------------------

Centos7关闭防火墙方法(详解):

    centos7中的防火墙改成了firewall,使用iptables无作用,开放端口的方法如下:
     
    firewall-cmd --zone=public --add-port=80/tcp --permanent
     
    返回success为成功
    ######################################################################################
     
    命令含义:
     
    --zone #作用域
     
    --add-port=80/tcp #添加端口,格式为:端口/通讯协议
     
    --permanent #永久生效
     
    ######################################################################################
     
    systemctl restart firewalld.service  #重启防火墙
     
    systemctl stop firewalld.service #关闭防火墙
     
    netstat -lntp #查看监听(Listen)的端口
     
    netstat -lnp|grep 8080 #检查端口被哪个进程占用

注:此处仅为学习,所以直接关闭防火墙即可,如果在公司,则只能打开所用端口,不能关闭。
 

------------------------------------------------------------------------------------------------------------------------------------------------------

Missing artifact org.csource.fastdfs:fastdfs:jar:1.2,如何能把 fastdfs的jar包安装到本地的仓库中
 2018-09-02 1
 
如何能把 fastdfs的jar包安装到本地的仓库中(因为中央仓库没有FASTDFS的jar包地址)
1,首先去我的github上下载下来fastdfs的压缩包

直接下载地址:https://github.com/wangwei216/fastdfs-client-java-master

然后直接解压出来
 

centos live cd下载_服务器_07

 

2,使用cmd命令行 使用cd命令走到到你自己下载到的目录下,然后使用mvn clean install 直接打包到本地的maven仓库

 

centos live cd下载_服务器_08

 

 

3,然后添加到pom.xml文件中就不会报错了

<!-- 文件上传组件 -->
     <dependency>
       <groupId>org.csource</groupId>
       <artifactId>fastdfs-client-java</artifactId>
       <version>1.27-SNAPSHOT</version>
     </dependency>

总结:

    这种方式不仅适用于fastdfs的打包到本地的方法,而且还可以运用到所有中央仓库中没有jar包的方法,只要是中央仓库中没有的,都可以适用这中方式
    例如dubbo的jar包也可以适用这种,先把需要的jar包下载下来,然后使用cmd命令到本地文件,然后安装到本地maven仓库
 

---------------------------------------------------

centos 7下的nginx设置开机自动启动

-----------------------------------------------

如果不能自启,拿到下载地址后,会下载不了文件。

 

 2018-09-20 11:23:30 
 

centos 7以上是用Systemd进行系统初始化的,Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是克服 sysvinit 固有的缺点,提高系统的启动速度。关于Systemd的详情介绍在这里。

Systemd服务文件以.service结尾,比如现在要建立nginx为开机启动,如果用yum install命令安装的,yum命令会自动创建nginx.service文件,直接用命令:
systemcel enable nginx.service

设置开机启动即可。
在这里我是用源码编译安装的,所以要手动创建nginx.service服务文件。
开机没有登陆情况下就能运行的程序,存在系统服务(system)里,即:
/lib/systemd/system/

    在系统服务目录里创建nginx.service文件
    vi /lib/systemd/system/nginx.service
    nginx.service内容如下:

[Unit]
 Description=nginx
 After=network.target
  
 [Service]
 Type=forking
 ExecStart=/usr/local/nginx/sbin/nginx
 ExecReload=/usr/local/nginx/sbin/nginx -s reload
 ExecStop=/usr/local/nginx/sbin/nginx -s quit
 PrivateTmp=true
  
 [Install]
 WantedBy=multi-user.target

 -------------------------------------------------------------------------------

    设置开机启动

systemctl enable nginx.service
自此,重新centos后,nginx就自动启动了
 nginx其他命令:systemctl start nginx.service (启动nginx服务)
 systemctl stop nginx.service (停止nginx服务)
 systemctl enable nginx.service (设置开机自启动)
 systemctl disable nginx.service (停止开机自启动)
 systemctl status nginx.service (查看服务当前状态)
 systemctl restart nginx.service (重新启动服务)
 systemctl list-units --type=service (查看所有已启动的服务)
 ————————————————