fdfs集群部署:fastdfs+nginx+nginx_cache+nginx_model
事先关闭防火墙,或者部署后添加防火墙规则
1.安装依赖
yum install make cmake gcc gcc-c++
2.安装libfatscommon ###安装完成后,会生成两个lib文件:/usr/lib64/libfastcommon.so、/usr/lib64/libfdfsclient.so
unzip libfastcommon-master.zip -d /usr/local/fast/
cd /usr/local/fast/libfastcommon-master/
./make.sh
./make.sh install
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.所有节点安装fdfs
tar -zxvf FastDFS_v5.05.tar.gz -C /usr/local/fast
cd /usr/local/fast/FastDFS/
./make.sh
./make.sh install
服务脚本生成目录:/usr/bin/
4.配置tracker节点
cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
vim /etc/fdfs/tracker.conf
disabled=false # 启用配置文件
port=22122 # tracker服务器端口(默认22122)
base_path=/fastdfs/tracker # 存储日志和数据的根目录
mkdir -p /fastdfs/tracker
可选择关闭防火墙或者添加防火墙规则并重启防火墙: iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT
启动tracker:
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
5.配置存储节点
cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
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.137.162:22122 ### tracker服务器IP和端口
tracker_server=192.168.137.163:22122 ### tracker服务器IP和端口
http.server_port=8888 # http访问文件的端口
mkdir -p /fastdfs/storage
可选择关闭防火墙或者添加防火墙规则并重启防火墙: iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT
启动storage:
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
各节点启动后,使用tail -f /fastdfs/storage/logs/storaged.log命令监听存储节点的日志,可以看到存储节点链接到跟踪服务器,并提示哪一个为leader跟踪服务器,同时也能看到同一组中其它节点加入进来的日志信息。
所有存储节点都启动之后,可以在任一存储节点上使用如下命令查看集群的状态信息:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
2.7文件上传测试
1> 修改tracker服务器client.conf配置文件
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
vi /etc/fdfs/client.conf
base_path=/fastdfs/tracker
tracker_server=192.168.137.162:22122
tracker_server=192.168.137.163:22122
2> 执行文件上传命令
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /home/test/FastDFS_v5.05.tar.gz
返回以下ID号,说明文件上传成功:
group1/M00/00/00/wKiJpFkS0ByATie5AAVFOL7FJU4.tar.gz
group2/M00/00/00/wKiJplkS0CyAJyzTAAVFOL7FJU4.tar.gz
(从返回的ID号中也可以看出,同一个文件分别存储在两个组内group1和group2,但也有可能在同一组中,具体策略是由FastDFS根据服务器的存储情况来分配的)
2.8存储节点安装Nginx和fastdfs-nginx-module模块
安装fastdfs-nginx-module_v1.16.tar.gz
cd /home/test
tar -zxvf fastdfs-nginx-module_v1.16.tar.gz -C /usr/local/fast/
cd /usr/local/fast/fastdfs-nginx-module/src/
安装nginx所需的依赖包
yum install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel
cd /home/test
tar -zxvf nginx-1.6.2.tar.gz -C /usr/local/
cd /usr/local/nginx-1.6.2/
./configure --add-module=/usr/local/fast/fastdfs-nginx-module/src/
make && make install
3> 复制 fastdfs-nginx-module 源码中的配置文件到/etc/fdfs 目录,并修改
cp /usr/local/fast/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
vi /etc/fdfs/mod_fastdfs.conf
第一组存储服务器的mod_fastdfs.conf配置:
connect_timeout=10
base_path=/tmp
tracker_server=192.168.137.162:22122
tracker_server=192.168.137.163: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.confg配置与第一组的配置只有group_name不同:group_name=group2
4> 复制FastDFS源文件目录中HTTP相关的配置文件到/etc/fdfs目录
cd /usr/local/fast/FastDFS/conf
cp http.conf mime.types /etc/fdfs/
5> 创建数据存放目录的软链接
ln -s /fastdfs/storage/data/ /fastdfs/storage/data/M00 ##############这个有实际作用?
6> 配置fastdfs-nginx-module(Nginx简洁版样例)
vi /usr/local/nginx/conf/nginx.conf
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;
# FastDFS 文件访问配置(fastdfs-nginx-module模块)
location ~/group([0-9])/M00 {
ngx_fastdfs_module;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
注意:
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;后重新启动。
7.防火墙放开8888端口
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT
8.启动nginx
2.9跟踪节点安装Nginx和ngx_cache_purge模块,在 tracker 上安装的 nginx 主要为了提供 http 访问的反向代理、负载均衡以及缓存服务。
1> 安装Nginx所需的依赖包
yum install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel
2> 安装nginx和ngx_cache_purge模块
cd /home/test
tar -zxvf nginx-1.6.2.tar.gz -C /usr/local/
tar -zxvf ngx_cache_purge-2.3.tar.gz -C /usr/local/fast/
cd /usr/local/nginx-1.6.2
./configure --add-module=/usr/local/fast/ngx_cache_purge-2.3
make && make install
3> 配置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 -
r
e
m
o
t
e
u
s
e
r
[
remote_user [
remoteuser[time_local] “KaTeX parse error: Expected 'EOF', got '#' at position 16: request" ' #̲ …status
b
o
d
y
b
y
t
e
s
s
e
n
t
"
body_bytes_sent "
bodybytessent"http_referer” ’
# ‘“
h
t
t
p
u
s
e
r
a
g
e
n
t
"
"
http_user_agent" "
httpuseragent""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_cache_path /fastdfs/cache/nginx/proxy_cache levels=1:2 keys_zone=http-cache:500m max_size=10g inactive=30d;
proxy_temp_path /fastdfs/cache/nginx/proxy_cache/tmp;
#设置 group1 的服务器
upstream fdfs_group1 {
server 192.168.137.164:8888 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.137.165:8888 weight=1 max_fails=2 fail_timeout=30s;
}
#设置 group2 的服务器
upstream fdfs_group2 {
server 192.168.137.166:8888 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.137.167: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 配置文件的要求,创建对应的缓存目录:
shell> mkdir -p /fastdfs/cache/nginx/proxy_cache
shell> mkdir -p /fastdfs/cache/nginx/proxy_cache/tmp
4> 防火墙打开Nginx 8000 端口
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8000 -j ACCEPT
5> 启动Nginx
6> 文件访问测试
前面直接通过访问Storage节点中的Nginx访问文件:
http://192.168.137.164:8888/group1/M00/00/00/wKiJpFkS0ByATie5AAVFOL7FJU4.tar.gz
http://192.168.137.166:8888/group2/M00/00/00/wKiJplkS0CyAJyzTAAVFOL7FJU4.tar.gz
现在可以通过Tracker中的Nginx来进行访问:
(1)、通过 Tracker1 中的 Nginx 来访问
http://192.168.137.162:8000/group1/M00/00/00/wKiJpFkS0ByATie5AAVFOL7FJU4.tar.gz
http://192.168.137.162:8000/group2/M00/00/00/wKiJplkS0CyAJyzTAAVFOL7FJU4.tar.gz
(2)、通过 Tracker2 中的 Nginx 来访问
http://192.168.137.163:8000/group1/M00/00/00/wKiJpFkS0ByATie5AAVFOL7FJU4.tar.gz
http://192.168.137.163:8000/group2/M00/00/00/wKiJplkS0CyAJyzTAAVFOL7FJU4.tar.gz
由上面的文件访问效果可以看到,每一个Tracker中的Nginx都单独对后端的Storage组做了负载均衡,但整套FastDFS集群,如果想对外提供统一的文件访问地址,还需要对两个Tracker中的Nginx进行HA集群
对于以上安装的两个tracker,可以通过在上层添加nginx+keepalive+vip对外暴露,或者直接使用elb
原文链接https://www.cnblogs.com/hd3013779515/p/6884202.html