欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

FastDFS集群文件系统搭建轻版教程(在线版)

程序员文章站 2022-05-09 21:09:50
...

FastDFS集群文件系统搭建轻版教程(在线版)

楔子

不知道啥意思但是一直想用这个词^_^,这个教程是在线版,需要连接网络,如果你的虚拟机是离线状态,可以参考这个教程。
http://还在写。。。别着急,,,

1.虚拟机搭建

首先你要有地方来装这个文件系统,这里我们的集群需要搭建六个个虚拟机,这个虚拟机怎么弄就不赘述了,要是不会的话,看看这个文档http://blog.csdn.net/xuchen1994/article/details/78652785

2.FastDFS文件系统架构

当你把虚拟机都装好了,IP也都配好了,确定能上网了,我们就可以简单看一下这个文件系统的架构了。
FastDFS集群文件系统有两个比较核心的元素分别是,Tracker和Storage,翻译过来叫跟踪器和存储器。跟踪器用于处理客户端的请求,存储器用于存储文件。
简单场景:客户端向跟踪器发出文件处理请求,跟踪器按照FastDFS的配置和它内部的算法返回一个最优的存储器的地址,客户端再按照这个地址访问存储器,进行文件操作

FastDFS集群文件系统搭建轻版教程(在线版)

当然这只是单点的FastDFS,我们的目标是集群文件系统,只有单点的话,文件系统就太脆弱了。

FastDFS集群文件系统搭建轻版教程(在线版)

我们的集群文件系统一共有六台虚拟机,分别是两台跟踪器和四台存储器,存储器分为两组,每组两个,跟踪器跟两个组都有关联,每个组内的存储器的内容是实时同步的。

IP 名称
192.168.29.21 tracker-group1
192.168.29.22 tracker-group2
192.168.29.23 storage-group1-1
192.168.29.24 storage-group1-2
192.168.29.25 storage-group2-1
192.168.29.26 storage-group2-2

另外为了达到高可用,负载均衡等等的目标,我们的跟踪器和存储器都要和Nginx集成,具体的原理就不赘述了(我也不懂)。

3.安装

现在开始的操作是所有六个节点全部执行

(1)安装软件和一些基础操作

gcc
yum install -y make cmake gcc gcc-c++automake autoconf libtool perl

vim
yum -y install vim*

unzip
yum install -y unzip zip

iptables-services
yum install iptables-services

关闭防火墙
(别问为什么,干就完了)
关闭
systemctl stop firewalld.service
禁止开机启动
systemctl disable firewalld.service
查看状态
firewall-cmd --state

下面用到的压缩包安装包什么的,直接百度,去官网下,这里不能传文件

(2)安装libfastcommon

<1>上传libfastcommon-master.zip到/usr/local/software下,进行解压:

命令:unzip libfastcommon-master.zip -d /usr/local/fast/

注:
1、这里注意一下命令的空格
2、简单介绍一下怎么往虚拟机里面拷贝文件,看这个文档http://blog.csdn.net/xuchen1994/article/details/78654977

<2>进入目录,编译安装

命令
cd /usr/local/fast/libfastcommon-master

命令
./make.sh

命令
./make.sh install

<3>进行软连接创建。FastDFS主程序设置目录为/usr/local/lib/,所以我们需要创建/usr/lib64/下的一些核心程序的软连接文件

命令
mkdir /usr/local/lib/

命令
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so

命令
ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so

命令
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so

命令
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so

(3)安装FastDFS

<1>进入目录,解压FastDFS(当然你要先把文件拷贝过去)
命令
cd /usr/local/software
命令
tar -zxvf FastDFS_v5.05.tar.gz -C /usr/loacl/fast/
<2>安装编译
命令
cd /usr/loacl/fast/FastDFS/
命令
./make.sh
命令
./make.sh install
<3>因为FastDFS服务脚本设置的bin目录为/usr/local/bin/下,但是实际我们安装在了/usr/bin/下面。所以我们需要修改FastDFS配置文件中的路径,也就是需要修改两个配置文件
命令
vim /etc/init.d/fdfs_storaged
命令(打一个冒号,然后敲命令)
%s+/usr/local/bin+/usr/bin
命令
vim /etc/init.d/fdfs_trackerd
命令(打一个冒号,然后敲命令)
%s+/usr/local/bin+/usr/bin

接下来的操作是跟踪器节点执行

(4)配置两台跟踪器节点(192.168.29.21&192.168.29.22)

<1>进入目录,copy一份配置文件

命令
cd /etc/fdfs/

命令
cp tracker.conf.sample tracker.conf

<2>编辑跟踪器文件

命令
vim tracker.conf
修改这个地方base_path=/fastdfs/tracker

<3>创建文件夹

命令
mkdir -p /fastdfs/tracker

<4>启动跟踪器

命令
/etc/init.d/fdfs_trackerd start

接下来我们要配置四个存储器节点

(5)配置存储节点(192.168.29.23&192.168.29.24&192.168.29.25&192.168.29.26)

<1>进入四台机器的配置文件目录,copy配置文件

命令
cd /etc/fdfs

命令
cp storage.conf.sample storage,conf

<2>编辑配置文件
命令
vim storage.conf

注意:23,24为group1,25,26为group2

内容为:
disabled=false #启用配置文件

group_name=group1 #组名,第一组为group1,第二组为group2

Port=23000 #storage端口号,同一个组的端口号必须相同

base_path=/fastdfs/storage #设置storage的日志目录

store_path_count=1 #存储路径个数,需要和store_path个数匹配

store_path0=/fastdfs/storage #设置存储路径

tracker_server=192.168.29.21 #tracker服务器的IP和端口

tracker_server=192.168.29.22 #多个tracker直接添加多条配置

Http.server_port=8888 #设置http端口号

<3>建立存储目录

存储目录需要和base_path=/fastdfs/storage保持一致,四个存储节点都建立

命令
mkdir -p /fastdfs/storage

<4>启动storage

命令
/etc/init.d/fdfs_storaged start

注意要先启动跟踪器再启动存储器

到这里我们的存储节点算是初步搭建完成了,你可以上传文件试试

4.测试

(1)搞一个跟踪器节点作客户端,上传文件试试

命令
cd /etc/fdfs

命令
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf

命令
vim /etc/fdfs/client.conf
修改内容
base_path=/fastdfs/tracker
tracker_server=192.168.29.21:22122
tracker_server=192.168.29.22:22122

命令
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/local/software/FastDFS_v5.05.tar.fz
最后这个是你要传的文件,你随便搞一个就行。你可以多传几个试试,看看同一个组的storage有没有同步,再看看每次传的时候都存到哪个组里了。

5配置Nginx

一、接下来的操作是在四个存储节点进行

(1)安装fastdfs-nginx

命令
cd /usr/local/software

命令
tar -zxvf fastdfs-nginx-module_v1.16.tar.gz -C /usr/local/fast/

命令
cd /usr/local/fast/fastdfs-nginx-module/src/

命令
vim /usr/local/fast/fastdfs-nginx-module/src/config
把第四行的两个local/删掉

(2)下载需要的依赖库文件

命令
yum install pcre

命令
yum install pcre-devel

命令
yum install zlib

命令
yum install zlib-devel

(3)解压安装nginx,加入模块

命令
cd /usr/local/software

命令
tar -zxvf nginx-1.12.2.tar.gz -C /usr/local/

命令
cd /usr/local/nginx-1.12.2/

命令
./configure --add-module=/usr/local/fast/fastdfs-nginx-module/src/

命令
make && make install

(4)配置nginx

命令
cd /usr/local/fast/fastdfs-nginx-module/src/

命令
cp /usr/local/fast/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/

命令
cd /etc/fdfs

命令
vim /etc/fdfs/mod_fastdfs.conf
修改内容:比如连接超时时间、跟踪器路径、group配置等等

connect_timeout=10
tracker_server=192.168.29.21:22122
tracker_server=192.168.29.22:22122
storage_server_port=23000
url_have_group_name = true
store_path0=/fastdfs/storage
group_name=group1  #第一组为group1,第二组为group2
group_count = 2
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/fastdfs/storage

[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/fastdfs/storage

保存退出,记得其他几个存储节点也要修改

(5)复制两个FastDFS的配置文件

命令
cd /usr/local/fast/FastDFS/conf

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

(6)创建软连接

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

(7)修改Nginx配置文件

命令
cd /usr/local/nginx/conf/

命令
vim nginx.conf
修改内容如下:

listen       8888;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location ~/group([0-9])/M00 {
            ngx_fastdfs_module;
        }

注意别把括号结构改错了,而且这里的端口号要和之前配置FastDFS存储中的storage.conf文件配置一致,也就是(http.server_port=8888)

(8)启动nginx

命令
/usr/local/nginx/sbin/nginx

二、接下来的操作在两个跟踪器执行

(1)解压,下载依赖,干就完了

命令
tar -zxvf ngx_cache_purge-2.3.tar.gz -C /usr/local/fast/

命令
yum install pcre

命令
yum install pcre-devel

命令
yum install zlib

命令
yum install zlib-devel

(2)解压nginx,加入模块

命令
cd /usr/local/software

命令
tar -zxvf nginx-1.12.2.tar.gz -C /usr/local/

命令
cd /usr/local/nginx-1.12.2/

命令
./configure --add-module=/usr/local/fast/fastdfs-nginx-module/src/

命令
make && make install

(3)配置nginx负载均衡和缓存

命令
vim /usr/local/nginx/conf/nginx.conf
修改内容如下:

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
    use epoll;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    #cache
    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    client_max_body_size 300m;

    proxy_redirect off;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_connect_timeout 90;
    proxy_send_timeout 90;
    proxy_read_timeout 90;
    proxy_buffer_size 16k;
    proxy_buffers 4 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;
    #setting
    proxy_cache_path /fastdfs/cache/nginx/proxy_cache levels=1:2
    keys_zone=http-cache:200m max_size=1g inactive=30d;
    proxy_temp_path /fastdfs/cache/nginx/proxy_cache/tmp;
    #group1
    upstream fdfs_group1{
        server 192.168.29.23:8888 weight=1 max_fails=2 fail_timeout=30s;
        server 192.168.29.24:8888 weight=1 max_fails=2 fail_timeout=30s;
    }
    #gruop2
    upstream fdfs_group2{
        server 192.168.29.25:8888 weight=1 max_fails=2 fail_timeout=30s;
        server 192.168.29.26:8888 weight=1 max_fails=2 fail_timeout=30s;
    }

    server {
        listen       8000;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location /group1/M00 {
            #root   html;
            #index  index.html index.htm;
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
            proxy_cache http-cache;
            proxy_cache_valid 200 304 12h;
            proxy_cache_key $uri$is_args$args;
            #group1 server setting
            proxy_pass http://fdfs_group1;
            expires 30d;
        }
        location /group2/M00{
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
            proxy_cache http-cache;
            proxy_cache_valid 200 304 12h;
            proxy_cache_key $uri$is_args$args;
            #group2 server setting
            proxy_pass http://fdfs_group2;
            expires 30d;
        }
        #cache authority
        location ~/purge(/.*){
            allow 127.0.0.1;
            allow 192.168.29.0/24;
            deny all;
            proxy_cache_purge http-cache $1$is_args$args;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

内容比较多,一定要仔细,不要错

(4)创建缓存目录

命令
mkdir -p /fastdfs/cache/nginx/proxy_cache
mkdir -p /fastdfs/cache/nginx/proxy_cache/tmp

(5)启动nginx

命令
/usr/local/nginx/sbin/nginx
查看命令
ps -el|grep nginx

(6)实现高可用节点,可以再简单修改一下配置

命令
cd /usr/local/nginx/conf/
vim /usr/local/nginx/conf/nginx.conf
添加以下内容

upstream fastdfs_tracker {
    server 192.168.29.21:8000 weight=1 max_fails=2 fail_timeout=30s;
    server 192.168.29.22:8000 weight=1 max_fails=2 fail_timeout=30s;
}
location /fastdfs{
    root   html;
    index  index.html index.htm;
    proxy_pass   http://fastdfs_tracker/;
    proxy_set_header Host  $http_host;
    proxy_set_header Cookie  $http_cookie;
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto  $scheme;
    client_max_body_size    300m;
    }

(7)重启nginx

命令
/usr/local/nginx/sbin/nginx
service keepalived start

到这里基本就配置完了,你可以登录浏览器访问你的文件路径