FastDFS集群部署文档,以及使用 Git


FastDFS集群 应用场景说明

1.FastDFS主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡。

2.FastDFS实现了软件方式的RAID,可以使用廉价的IDE硬盘进行存储 ,支持存储服务器在线扩容。

3.FastDFS特别适合大中型网站使用,用来存储资源文件(如:图片、文档、音频、视频等等。

127.0.0.1 FastDFS
文件存储路径:/var/lib/fast-dfs/storage/path0/data/
web端:ip+端口+文件路径
eg:http://127.0.0.1/zhimegroup1/M00/00/00/CgpvZllI3-6ASBmHAAClaGOUOq8246.jpg
http://fastdfs.daily.huha.me/zhimegroup1/M00/00/00/CgpvZllI3-6ASBmHAAClaGOUOq8246.jpg
#online环境
版本:V5.11
10.8.81.63	fastdfs-tracker1
10.8.81.64	fastdfs-tracker2
10.8.82.2	fastdfs-storage
文件存储路径:/var/lib/fast-dfs/storage/path0/data/
web端:ip+端口+文件路径
eg:http://10.8.82.2/zhimegroup1/M00/00/00/CghSAllwXVSATP3CAAPbx_ZgX0U535.jpg
注:程序以root用户启动
yum install -y gc gcc gcc-c++ gcc* pcre pcre-devel zlib zlib-devel openssl openssl-devel
wget -O libfastcommon.tar.gz https://codeload.github.com/happyfish100/libfastcommon/tar.gz/V1.0.35 && tar xf libfastcommon.tar.gz 
wget -O fastdfs.tar.gz https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz && tar xf fastdfs.tar.gz
wget http://nginx.org/download/nginx-1.13.9.tar.gz && tar xf nginx-1.13.9.tar.gz
wget –O fastdfs-nginx-module.zip https://codeload.github.com/happyfish100/fastdfs-nginx-module/zip/master  && unzip fastdfs-nginx-module.zip
wget https://ftp.pcre.org/pub/pcre/pcre-8.41.tar.gz && tar xf pcre-8.41.tar.gz
cd pcre-8.41
./configure --prefix=/usr/local/pcre-8.41 --libdir=/usr/local/lib/pcre --includedir=/usr/local/include/pcre && make && make install
解压以上:  tar xf  ***.tar.gz
cd libfastcommon-1.0.35/ && ./make.sh && ./make.sh install
mv /root/fastdfs-5.11/ /root/fastdfs/ && ./make.sh && ./make.sh install
cd conf
cp http.conf anti-steal.jpg mime.types /etc/fdfs/
mkdir -p /var/lib/fast-dfs/tracker
mkdir -p /var/lib/fast-dfs/storage/{base,path0}
mkdir -p /var/lib/fast-dfs/client
mkdir -p /var/lib/fast-dfs/nginx-module
cp -p /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
cp -p /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
cp -p /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
修改配置文件:
vi /etc/fdfs/tracker.conf
base_path=/var/lib/fast-dfs/tracker
store_group=zhimegroup2

vi /etc/fdfs/storage.conf
group_name=zhimegroup1
base_path=/var/lib/fast-dfs/storage/base
store_path0=/var/lib/fast-dfs/storage/path0
tracker_server=192.168.10.3:22122   # 不能设置:127.0.0.1

vi /etc/fdfs/client.conf
base_path=/var/lib/fast-dfs/client
tracker_server=192.168.10.3:22122   # 不能设置:127.0.0.1
设置tracker服务开机启动: chkconfig fdfs_trakcerd on
启动:
fdfs_trackerd /etc/fdfs/tracker.conf start
fdfs_storaged /etc/fdfs/storage.conf start
centos7编译安装nginx:  https://abc.htmltoo.com/thread-635.htm
cd /root/nginx-1.12.2
./configure --prefix=/usr/local/nginx --add-module=/root/fastdfs-nginx-module-master/src
make && make install
cp /root/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/
vi /usr/local/nginx/conf/nginx.conf
server {
       listen       80;
       server_name  localhost;
       location ~ /zhimegroup[0-9]/M00 {
              ngx_fastdfs_module;
       }
}
vi /etc/fdfs/mod_fastdfs.conf
base_path=/var/lib/fast-dfs/nginx-module
tracker_server=192.168.10.3:22122   # 不能设置:127.0.0.1
url_have_group_name = true
store_path0=/var/lib/fast-dfs/storage/path0
group_name=zhimegroup1

fastdfs 添加组
vi /etc/fdfs/mod_fastdfs.conf
--
group_count = 2
[group2]
group_name=zhimegroup2
storage_server_port=24000
store_path_count=1
store_path0=/var/lib/fast-dfs/storage/path2
--
vi /etc/fdfs/storage.conf
--
group_name=zhimegroup2
base_path=/var/lib/fast-dfs/storage/base2
store_path0=/var/lib/fast-dfs/storage/path2
http.server_port=8889
--
mkdir -pv /var/lib/fast-dfs/storage/{base2,path2}
chown -R admin.admin /var/lib/fast-dfs/storage/* # (base2 path2)

#把nginx加入系统变量
echo 'export PATH=$PATH:/usr/local/nginx/sbin'>>/etc/profile && source /etc/profile

#设置开机启动,添加一行:
vi /etc/rc.local 
/usr/local/nginx/sbin/nginx

#设置执行权限
# chmod 755 /etc/rc.local

#启动:
nginx   # 启动
nginx -s reload   # 重新载入配置文件
nginx -s reopen   # 重启 
nginx -s stop     # 停止 Nginx

#防火墙中打开Nginx端口(默认的 80) 
vi /etc/sysconfig/iptables   - 80   # service iptables restart

vi /usr/local/nginx/conf/nginx.conf
添加如下行,将 /group1/M00 映射到 /ljzsg/fastdfs/file/data
location /group1/M00 {
    alias /ljzsg/fastdfs/file/data;
}
nginx -s reload  # nginx -s reload

#命令说明:
上传文件:/usr/bin/fdfs_upload_file   <config_file> <local_filename>
下载文件:/usr/bin/fdfs_download_file <config_file> <file_id> [local_filename]
删除文件:/usr/bin/fdfs_delete_file <config_file> <file_id>
查看存储节点: /usr/bin/fdfs_monitor /etc/fdfs/client.conf
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
/usr/bin/fdfs_monitor /etc/fdfs/client.conf
移除某一集群分组节点:/usr/bin/fdfs_monitor /etc/fdfs/client.conf delete group1 192.168.1.106
启动顺序:tracker-->storage-->nginx

关闭:
killall fdfs_trackerd
killall fdfs_storaged
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf stop
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf stop
启动:
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
重启:
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

#上传测试
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/logo.png
上传成功后返回文件ID号:group1/M00/00/00/wKgz6lnduTeAMdrcAAEoRmXZPp870.png
返回的文件ID由group、存储目录、两级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成。
http://127.0.0.1/group1/M00/00/00/wKgz6lnduTeAMdrcAAEoRmXZPp870.png
http://fastdfs.daily.huha.me/group1/M00/00/00/wKgz6lnduTeAMdrcAAEoRmXZPp870.png

#查看tracker和storage进程: netstat -unltp|grep fdfs   
 2个进程: 22122-fdfs_trackerd   23000-fdfs_storaged


做多机分布式集群

跟踪服务器负载均衡节点1:192.168.1.206 dfs-nginx-proxy-1
跟踪服务器负载均衡节点2:192.168.1.207 dfs-nginx-proxy-2
跟踪服务器1:192.168.1.200 dfs-tracker-1
跟踪服务器2:192.168.1.201 dfs-tracker-2
存储服务器1:192.168.1.202 dfs-storage-group1-1
存储服务器2:192.168.1.203 dfs-storage-group1-2
存储服务器3:192.168.1.204 dfs-storage-group2-1
存储服务器3:192.168.1.205 dfs-storage-group2-2
HA虚拟IP:192.168.1.208
HA软件:Keepalived

一.单机部署,见上节.

二.说明:每个节点执行相同的操作.

1.配置跟踪节点(192.168.1.200,192.168.1.201)

vi /etc/fdfs/tracker.conf

2.配置存储节点group1: 192.168.1.202,192.168.1.203  group2: 192.168.1.204,192.168.1.205)

vi /etc/fdfs/storage.conf

# 修改的内容如下:
disabled=false                      # 启用配置文件
port=23000                          # storage服务端口
group_name=group1                   # 组名(第一组为group1,第二组为group2,依次类推...)
base_path=/fastdfs/storage          # 数据和日志文件存储根目录
store_path0=/fastdfs/storage        # 第一个存储目录,第二个存储目录起名为:store_path1=xxx,其它存储目录名依次类推...
store_path_count=1                  # 存储路径个数,需要和store_path个数匹配
tracker_server=192.168.0.200:22122  # tracker服务器IP和端口
tracker_server=192.168.0.201:22122  # tracker服务器IP和端口
http.server_port=8888               # http访问文件的端口

3.文件上传测试

vi /etc/fdfs/client.conf

base_path=/fastdfs/tracker
tracker_server=192.168.1.200:22122
tracker_server=192.168.1.201:22122

执行文件上传命令:

/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/FastDFS_v5.05.tar.gz

返回以下ID号,说明文件上传成功:
group1/M00/00/00/wKgBh1Xtr9-AeTfWAAVFOL7FJU4.tar.gz
group2/M00/00/00/wKgBiVXtsDmAe3kjAAVFOL7FJU4.tar.gz
(从返回的ID号中也可以看出,同一个文件分别存储在两个组内group1和group2,但也有可能在同一组中,

具体策略是由FastDFS根据服务器的存储情况来分配的)

4.存储节点安装Nginx和fastdfs-nginx-module模块。  

说明:每个节点执行相同的操作

第一组存储服务器的mod_fastdfs.conf配置

connect_timeout=10
base_path=/tmp
tracker_server=192.168.1.200:22122
tracker_server=192.168.1.201:22122
storage_server_port=23000
group_name=group1                       # 第一组storage的组名
url_have_group_name=true
store_path0=/fastdfs/storage
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

第二组存储服务器的mod_fastdfs.conf配置

第二组的mod_fastdfs.confg配置与第一组的配置只有group_name不同

vi /usr/local/nginx/conf/nginx.conf

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       8888;
        server_name  localhost;
 
        # FastDFS 文件访问配置(fastdfs-nginx-module模块)
        location ~/group([0-9])/M00 {
            ngx_fastdfs_module;
        }

注意:

A、8888 端口值要与/etc/fdfs/storage.conf 中的 http.server_port=8888 相对应,因为 http.server_port 默认为 8888,如果想改成 80,则要对应修改过来。

B、Storage 对应有多个 group 的情况下,访问路径带 group 名,如:http://xxxx/group1/M00/00/00/xxx, 对应的 Nginx 配置为:

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

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

启动nginx,通过浏览器访问测试时上传的文件

http://192.168.1.202:8888/group1/M00/00/00/wKgBh1Xtr9-AeTfWAAVFOL7FJU4.tar.gz
http://192.168.1.204:8888/group2/M00/00/00/wKgBiVXtsDmAe3kjAAVFOL7FJU4.tar.gz

5.跟踪节点安装Nginx和ngx_cache_purge模块

说明:每个节点执行相同的操作

tracker节点:192.168.1.200,192.168.1.201
在 tracker 上安装的 nginx 主要为了提供 http 访问的反向代理、负载均衡以及缓存服务。

A.安装nginx和ngx_cache_purge模块

cd /usr/local/src
tar -zxvf nginx-1.10.0.tar.gz
tar -zxvf ngx_cache_purge-2.3.tar.gz
cd nginx-1.10.0
./configure --prefix=/opt/nginx --sbin-path=/usr/bin/nginx --add-module=/usr/local/src/ngx_cache_purge-2.3
make && make install

B.配置Nginx,设置tracker负载均衡以及缓存

vi /usr/local/nginx/conf/nginx.conf

user  nobody;
worker_processes  1;
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  65;
    #gzip on;
 
    #设置缓存
    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; #设置缓存存储路径、存储方式、分配内存大小、磁盘最大空间、缓存期限 
    proxy_temp_path /fastdfs/cache/nginx/proxy_cache/tmp;
 
    #设置 group1 的服务器
    upstream fdfs_group1 {
         server 192.168.1.202:8888 weight=1 max_fails=2 fail_timeout=30s;
         server 192.168.1.203:8888 weight=1 max_fails=2 fail_timeout=30s;
    }
 
    #设置 group2 的服务器
    upstream fdfs_group2 {
         server 192.168.1.204:8888 weight=1 max_fails=2 fail_timeout=30s;
         server 192.168.1.205: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;
 
        #设置 group 的负载均衡参数
        location /group1/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;
            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;
            proxy_pass http://fdfs_group2;
            expires 30d;
        }
 
        #设置清除缓存的访问权限
        location ~/purge(/.*) {
            allow 127.0.0.1;
            allow 192.168.1.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; 
        }
    } 
}

按以上 nginx 配置文件的要求,创建对应的缓存目录:

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

c.防火墙打开Nginx 8000 端口,启动nginx,z 设置开机启动。

d.文件访问测试:

前面直接通过访问Storage节点中的Nginx访问文件:
http://192.168.1.202:8888/group1/M00/00/00/wKgBh1Xtr9-AeTfWAAVFOL7FJU4.tar.gz
http://192.168.1.204:8888/group2/M00/00/00/wKgBiVXtsDmAe3kjAAVFOL7FJU4.tar.gz

现在可以通过Tracker中的Nginx来进行访问:
(1)、通过 Tracker1 中的 Nginx 来访问
http://192.168.1.200:8000/group1/M00/00/00/wKgBh1Xtr9-AeTfWAAVFOL7FJU4.tar.gz
http://192.168.1.200:8000/group2/M00/00/00/wKgBiVXtsDmAe3kjAAVFOL7FJU4.tar.gz
(2)、通过 Tracker2 中的 Nginx 来访问
http://192.168.1.201:8000/group1/M00/00/00/wKgBh1Xtr9-AeTfWAAVFOL7FJU4.tar.gz
http://192.168.1.201:8000/group2/M00/00/00/wKgBiVXtsDmAe3kjAAVFOL7FJU4.tar.gz
由上面的文件访问效果可以看到,每一个Tracker中的Nginx都单独对后端的Storage组做了负载均衡,

但整套FastDFS集群,如果想对外提供统一的文件访问地址,还需要对两个Tracker中的Nginx进行HA集群。

6.配置Tracker服务器高可用、反向代理与负载均衡:

使用Keepalived + Nginx组成的高可用负载均衡集群,做两个Tracker节点中Nginx的负载均衡。

1> 安装keepalived与Nginx

分别在192.168.1.206和192.168.1.207两个节点安装Keepalived与Nginx。
keepalived安装与配置:https://abc.htmltoo.com/thread-636.htm

Nginx的安装与配置:见上节

2> 配置Keeyalived + Nginx高可用

请参考《Keepalived+Nginx实现高可用(HA)》: https://abc.htmltoo.com/thread-637.htm

注意:将VIP的IP地址修改为192.168.1.208

3> 配置nginx对tracker节点的负载均衡

2个节点的Nginx配置相同,如下所示:

vi /usr/local/nginx/conf/nginx.conf

user  root;
worker_processes  1;
events {
    worker_connections  1024;
    use epool;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
 
    ## FastDFS Tracker Proxy
    upstream fastdfs_tracker {
         server 192.168.1.200:8000 weight=1 max_fails=2 fail_timeout=30s;
         server 192.168.1.201:8000 weight=1 max_fails=2 fail_timeout=30s;
    }
 
    server {
        listen       80;
        server_name  localhost;
        location / {
            root html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root html;
        }
 
        ## FastDFS Proxy
        location /dfs {
            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;
        }
    } 
}

4> 重启192.168.1.206 和 192.168.1.207 中的Nginx: nginx -s reload

5> 通过虚拟IP访问文件测试:

现在可以通过 Keepalived+Nginx 组成的高可用负载集群的 VIP(192.168.1.208)来访问 FastDFS 集群中的文件了:
http://192.168.1.208/dfs/group1/M00/00/00/wKgBh1Xtr9-AeTfWAAVFOL7FJU4.tar.gz

http://192.168.1.208/dfs/group2/M00/00/00/wKgBiVXtsDmAe3kjAAVFOL7FJU4.tar.gz

注意:千万不要使用 kill -9 命令强杀 FastDFS 进程,否则可能会导致 binlog 数据丢失。


参考网址: https://www.2cto.com/kf/201611/560911.html

签名:这个人很懒,什么也没有留下!
最新回复 (0)
返回