Centos7 单节点安装 FastDFS + FastDHT服务
1、安装gcc(编译时需要)
FastDFS是C语言开发,安装FastDFS需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc
yum install -y gcc gcc-c++
2、安装libevent(运行时需求)
若安装了桌面图形界面,就不需要安装;FastDFS依赖libevent库;
yum -y install libevent libevent-devel
3、安装libfastcommon 并优化tcp
libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库。
(1)下载
git clone https://github.com/happyfish100/libfastcommon.git
(2)切换到目录
cd /usr/local/libfastcommon
(3)编译安装
./make.sh #编译
./make.sh install #安装
安装后的截图:
(4)优化一下内核
vim /etc/sysctl.conf
net.ipv4.tcp_syncookies = net.ipv4.tcp_tw_reuse = net.ipv4.tcp_tw_recycle = net.ipv4.tcp_fin_timeout =
sysctl -p
4、安装FastDFS
(1)上传 FastDFS_v5.08.tar.gz 到 centos 上;
(2)将 FastDFS_v5.08.tar.gz 解压至/usr/local/下
tar xzvf FastDFS_v5.08.tar.gz -C /usr/local/
(3)切换目录到: /usr/local/FastDFS/ 下,编译和安装;
cd /usr/local/FastDFS/
./make.sh && ./make.sh install #编译之后接着进行安装
安装后的截图:
(4)安装成功将安装目录下的conf下的文件拷贝到/etc/fdfs/下;
cp /usr/local/FastDFS/conf/* /etc/fdfs/
5、配置和启动tracker
(1)切换目录到: /etc/fdfs/ 目录下;
(2)拷贝一份新的tracker配置文件
cp tracker.conf.sample tracker.conf
(3)修改tracker.conf 配置文件
vim tracker.conf
base_path=/fastdfs/fdfs_tracker/ port= #侦听端口 http.server_port= #配置http端口
(4)创建 /fastdfs/fdfs_tracker/ 目录
mkdir -p /fastdfs/fdfs_tracker/
(5)启动tracker,运行如下命令:
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
注意:在 /fastdfs/fdfs_tracker/ 目录下生成两个目录, 一个是数据,一个是日志;
6、配置和启动storage
(1)切换目录到: /etc/fdfs/ 目录下;
(2)拷贝一份新的storage配置文件
cp storage.conf.sample storage.conf
(3)修改storage.conf ;
vim storage.conf
group_name=group1 base_path=/fastdfs/fdfs_storage store_path_count= # 1个存储目录 #store存放文件的位置(store_path) store_path0=/fastdfs/fdfs_storage/fdfs_storage_0 #一个目录对应一块硬盘 #如果有多个挂载磁盘则定义多个store_path,如下 #store_path1=/fastdfs/fdfs_storage/fdfs_storage_1 #store_path2=/fastdfs/fdfs_storage/fdfs_storage_2 #配置tracker服务器:IP tracker_server=192.168.1.245: #如果有多个则配置多个tracker #tracker_server=192.168.101.4: #侦听端口 port= #配置http端口 http.server_port=
(4)创建 /fastdfs/fdfs_storage/fdfs_storage_0目录
mkdir -p /fastdfs/fdfs_storage/fdfs_storage_0
(5)启动storage, 运行命令如下:
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
ls /fastdfs/fdfs_storage/fdfs_storage_0
显示目录如下:
7、使用FastDFS自带工具测试
(1)切换目录到 /etc/fdfs/ 目录下;
(2)拷贝一份新的client配置文件
cp client.conf.sample client.conf
(3)修改client.conf ;
vim client.conf,
base_path=/fastdfs/fdfs_client http.tracker_server_port= tracker_server=192.168.1.245: #与tracker配置的http.server_port端口一致,保存路径生成的URL就是80端口访问 #注意:若tracker有多个,可以配置多个,如下: #tracker_server=...... #tracker_server=......
(4)拷贝一张图片 fdfs_test.png 到Centos服务器上的 /tmp 目录下;
(5)进行测试,运行如下:(运行测试程序,读取/etc/fdfs/client.conf 文件,上传/tmp目录下的fdfs_test.png文件)
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /tmp/fdfs_test.png
以上图中的文件地址:
http://192.168.1.245/group1/M00/00/00/wKgB9VuwhmeAfNulAACDdns27_Y436_big.png
对应storage服务器上的
/fastdfs/fdfs_storage/fdfs_storage_0/data/00/00/wKgB9VuwhmeAfNulAACDdns27_Y436_big.png文件;
注:由于现在还没有和nginx整合无法使用http下载。
(6)防火墙开启相应的端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --zone=public --add-port=22122/tcp –permanent
firewall-cmd --zone=public --add-port=23000/tcp –permanent
firewall-cmd --zone=public --add-port={80/tcp,8080/tcp,22122/tcp,23000/tcp} --permanent # 一样的
firewall-cmd --reload
firewall-cmd --list-all
8、FastDFS 和nginx整合
8.1 在tracker上安装 nginx
在每个tracker上安装nginx,的主要目的是做负载均衡及实现高可用。如果只有一台tracker可以不配置nginx。
一个tracker对应多个storage,通过nginx对storage负载均衡;
8.2 在storage 上安装nginx
(1)上传 fastdfs-nginx-module.tar.gz 到Centos服务器上;
(2)解压 fastdfs-nginx-module.tar.gz 到 /usr/local目录下;
tar -xzf fastdfs-nginx-module.tar.gz -C /usr/local/
(3)切换目录到: /usr/local/fastdfs-nginx-module/src/ 目录下
cd /usr/local/fastdfs-nginx-module/src/
(4)修改config文件,将文件中的所有 /usr/local/ 路径改为 /usr/
默认就都是/usr路径了,所以此处不用更改。
(5)将fastdfs-nginx-module/src下的mod_fastdfs.conf拷贝至/etc/fdfs/下
cp mod_fastdfs.conf /etc/fdfs/
(6)并修改 /etc/fdfs/mod_fastdfs.conf 的内容;
vi /etc/fdfs/mod_fastdfs.conf
base_path=/fastdfs/fdfs_nginx tracker_server=192.168.1.245: #tracker_server=192.168.172.20: #(多个tracker配置多行) #tracker_server=tracker: url_have_group_name=true #url中包含group名称 store_path_count= #指定文件存储路径(上面配置的store路径) store_path0=/fastdfs/fdfs_storage/fdfs_storage_0
(7)将libfdfsclient.so拷贝至/usr/lib下(默认就在,不用修改)
cp /usr/lib64/libfdfsclient.so /usr/lib/
(8)创建目录
mkdir -p /var/temp/nginx/client
mkdir -p /fastdfs/fdfs_nginx
8.3 Nginx的安装
(1)上传 nginx-1.10.2.tar.gz 到Centos服务器上;
(2)解压 nginx-1.10.2.tar.gz 到 /usr/local目录下;
tar -zxvf nginx-1.10.2.tar.gz -C /usr/local/src
(3)安装nginx的依赖库
yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel
(4)进入nginx解压的目录下:
cd /usr/local/src/nginx-1.10.2/
(5)加入模块命令配置
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--add-module=/usr/local/fastdfs-nginx-module/src
注意:上边将临时文件目录指定为/var/temp/nginx,需要在/var下创建temp及nginx目录;
(6)编译并安装
make && make install
安装成功后查看生成的目录,如下所示:
ls /usr/local/nginx/
删除解压包:
rm -rf /usr/local/src/nginx-1.10.2/
(7)拷贝配置文件到 /etc/fdfs 下;
cd /usr/local/FastDFS/conf
cp http.conf mime.types /etc/fdfs/
(8)修改nginx配置文件
mkdir -p /usr/local/nginx/logs # 创建logs目录
cd /usr/local/nginx/conf/
vim nginx.conf
##----------------------------------------- user nobody; worker_processes ; pid /var/run/nginx/nginx.pid; worker_rlimit_nofile ; events { worker_connections ; } 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 /var/log/nginx/access.log main; error_log /var/log/nginx/error.log error; server_names_hash_bucket_size ; client_header_buffer_size 32k; large_client_header_buffers 32k; client_max_body_size 8m; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout ; fastcgi_connect_timeout ; fastcgi_send_timeout ; fastcgi_read_timeout ; fastcgi_buffer_size 64k; fastcgi_buffers 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; gzip on; gzip_min_length 1k; gzip_buffers 16k; gzip_http_version 1.0; gzip_comp_level ; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; server { listen ; server_name 192.168.1.245; location / { root html; index index.html index.htm; } location /group1/M00/ { root /fastdfs/fdfs_storage/fdfs_storage_0; ngx_fastdfs_module; } error_page /50x.html; location = /50x.html { root html; } } } ##-----------------------------------------
说明:
(a.) server_name指定本机ip;
(b.) location /group1/M00/:
group1为nginx 服务FastDFS的分组名称,M00是FastDFS自动生成编号,
对应store_path0=/home/fdfs_storage,如果FastDFS定义store_path1,这里就是M01
-----------------------------------------
(9)配置打开文件数大小
vim /etc/security/limits.conf
# End of file * soft nofile * hard nofile * soft nproc * hard nproc
ulimit -n 100000 #即时生效
(10)nginx的启动
cd /usr/local/nginx/sbin/
./nginx
查询nginx进程
(11) fastdfs 和 nginx 服务的开机自启动:
chmod +x /etc/rc.local
#start fastdfs /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart /usr/local/nginx/sbin/nginx exit 0
9、在浏览器中访问上传到fastDFS的图片
因为Centos系统有防火墙,需要先开放相应的端口,才可以在浏览器中访问;
http://192.168.1.245/group1/M00/00/00/wKgB9VuwhmeAfNulAACDdns27_Y436_big.png
10、整合FastDHT服务
(1)简介:
由于FastDFS本身不能对重复上传的文件进行去重,而FastDHT可以做到去重。FastDHT是一个高性能的分布式哈希系统,它是基于键值对存储的,而且它需要依赖于Berkeley DB作为数据存储的媒介,同时需要依赖于libfastcommon。
(2)下载FastDHT_v1.23.tar.gz,下载地址:
https://code.google.com/archive/p/fastdht/downloads
FastDHT:FastDHT_v1.23.tar.gz
(3)下载Berkeley DB,下载地址:
http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/downloads/index.html
Berkeley DB:db-18.1.25.tar.gz
(4)安装Berkeley DB,将db-18.1.25.tar.gz上传到/usr/local/src目录下。
(5)解压安装包
tar -xzf db-18.1.25.tar.gz -C /usr/local/src/
(6)进入build_unix目录,必须是这个目录
cd /usr/local/src/db-18.1.25/build_unix
(7)执行命令(一定要是进入上面的目录后,使用相对路径执行命令):
../dist/configure --prefix=/usr/local/db-18.1.25
make && make install
rm -rf /usr/local/src/db-18.1.25/
ls /usr/local/db-18.1.25/
(8)DB安装完毕,会在/usr/local目录下生成目录db-18.1.25
(9)安装FastDHT,将FastDHT_v1.23.tar.gz拷贝到/usr/local目录下,解压:
cd /usr/local
tar -xzf FastDHT_v1.23.tar.gz
mv FastDHT fastdht
(10)进入fastdht目录,修改make.sh文件,修改:
CFLAGS=’-Wall -D_FILE_OFFSET_BITS= -D_GNU_SOURCE -I/usr/local/db-18.1.25/include/ -L/usr/local/db-18.1.25/lib/’
注:标红部分为要加入的内容。
(11)进入fastdht目录,编译安装:
编译前,一定要确认是否已经安装了libevent、libevent-devel 和libfastcommon依赖安装包。
yum -y install libevent libevent-devel
libfastcommon # 编译安装
cd /usr/local/fastdht/
./make.sh
./make.sh install
注:依赖包,一般在安装FastDFS的时候就安装了,但libevent-devel这个依赖包在大部分博客文章中未提到需要安装,如果不安装这个包,编译百分百过不去,是个大坑。
安装成功后fastdht被安装在/etc/fdht目录下,生成3个配置文件
cd /etc/fdht/ && ls
(12)配置FastDHT,创建fastdht目录:
mkdir -p /fastdfs/fastdht
(13)修改/etc/fdht/目录下的配置文件fdht_client.conf,依次修改如下内容:
vim /etc/fdht/fdht_client.conf
base_path=/fastdfs/fastdht #(该目录必须是已经存在的) keep_alive= #include /etc/fdht/fdht_servers.conf ##(本行前有#表示打开,如果想关闭此选项,则应该为##开头)
(14)修改/etc/fdht/目录下的配置文件fdht_servers.conf,依次修改如下内容:
vim /etc/fdht/fdht_servers.conf
group_count = group0 = 192.168.1.245:
(15)修改/etc/fdht/目录下的fdhtd.conf文件,依次修改如下内容:
vim /etc/fdht/fdhtd.conf
port= bash_path= /fastdfs/fastdht #(该目录必须是已经存在的,前面已经创建过了) #include /etc/fdht/fdht_servers.conf ##(本行前有#表示打开,如果想关闭此选项,则应该为##开头)
(16)配置/etc/fdfs/目录下的storage.conf文件,依次修改如下内容:
vim /etc/fdfs/storage.conf
#是否检测上传文件已经存在。如果已经存在,则建立一个索引链接以节省磁盘空间 check_file_duplicate= #当上个参数设定为1时 , 在FastDHT中的命名空间 key_namespace=FastDFS #长连接配置选项,如果为0则为短连接 1为长连接 keep_alive= #此处特别需要注意配置,## 开头才是注释 #include /etc/fdht/fdht_servers.conf
(17)执行如下命令:
cp /usr/local/db-18.1.25/lib/libdb-18.so /usr/lib/ # 库文件
cp /usr/local/db-18.1.25/lib/libdb-18.so /usr/lib64/ # 库文件
#开放端口11411
firewall-cmd --zone=public --add-port=11411/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all
(18)启动FastDHT:
fdhtd /etc/fdht/fdhtd.conf restart
启动报错(未加载库文件):
解决办法:
ldconfig # 重新加载
ldd /usr/local/bin/fdhtd
#重新启动服务,成功。
fdhtd /etc/fdht/fdhtd.conf restart
(20)重启一下fdfs_trackerd和fdfs_storaged服务,便于后面的测试:
如果启动服务报错(这是个大坑,能查到的资料有限):
解决办法:
因为是库文件受到损坏导致的,所以需要把库文件删除后再重新安装一遍。
rm -rf /usr/lib64/libfastcommon.so
rm -rf /usr/lib/libfastcommon.so
rm -rf /usr/local/lib/libfastcommon.so.1
rm -rf /usr/local/libfastcommon
然后重新解压安装一次libfastcommon依赖包,再重启服务就不报错了。
(21)测试多次上传同一个文件,通过客户端命令测试上传:
cd /tmp
echo “This is a test” > /tmp/fast-test
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /tmp/fast-test #这条命令才会去重
注:/usr/bin/fdfs_test /etc/fdfs/client.conf upload /tmp/fast-test #这条命令是不会去重的。
(22)上传成功后返回路径,查看storage存储对应存储路径,发现返回的为一个软链接,之后每次重复上传的fast-test都是返回一个指向第一次上传的文件的软链接。也就保证了文件只保存了一份。
需要说明的是,FastDFS不会返回原始文件的索引,返回的全部都是软链接,当所有的软链接都被删除的时候,原始文件也会从FastDFS中被删除。
(23) fastdfs 、fdhtd和 nginx 服务的开机自启动:
chmod +x /etc/rc.local
#start fastdfs /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart /usr/local/bin/fdhtd /etc/fdht/fdhtd.conf restart /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart /usr/local/nginx/sbin/nginx exit
至此,搭建配置、验证完毕。