Centos7 单节点安装 FastDFS + FastDHT服务

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  = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle =  1

net.ipv4.tcp_fin_timeout = 30

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=22122  #侦听端口

http.server_port=80  #配置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   # 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:22122

#如果有多个则配置多个tracker

#tracker_server=192.168.101.4:22122

#侦听端口

port=23000

#配置http端口

http.server_port=8888

  (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=80

tracker_server=192.168.1.245:22122

#与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:22122

#tracker_server=192.168.172.20:22122 #(多个tracker配置多行)

#tracker_server=tracker:22122

url_have_group_name=true        #url中包含group名称

store_path_count=1

#指定文件存储路径(上面配置的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  2;

 

pid  /var/run/nginx/nginx.pid;

 

worker_rlimit_nofile 65535;

 

events {

    worker_connections  65535;

}

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 128;

    client_header_buffer_size 32k;

    large_client_header_buffers 4 32k;

    client_max_body_size 8m;

 

    sendfile        on;

    tcp_nopush      on;

    tcp_nodelay     on;

    keepalive_timeout  65;

 

    fastcgi_connect_timeout 300;

    fastcgi_send_timeout 300;

    fastcgi_read_timeout 300;

    fastcgi_buffer_size 64k;

    fastcgi_buffers 4 64k;

    fastcgi_busy_buffers_size 128k;

    fastcgi_temp_file_write_size 128k;

 

    gzip on;

    gzip_min_length 1k;

    gzip_buffers 4 16k;

    gzip_http_version 1.0;

    gzip_comp_level 2;

    gzip_types text/plain application/x-javascript text/css application/xml;

    gzip_vary on;

 

    server {

        listen       80;

        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   500 502 503 504  /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          100000

*               hard    nofile          100000

*               soft    nproc           100000

*               hard    nproc           100000

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=64 -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=1

#include /etc/fdht/fdht_servers.conf   ##(本行前有#表示打开,如果想关闭此选项,则应该为##开头)

(14)修改/etc/fdht/目录下的配置文件fdht_servers.conf,依次修改如下内容:

vim /etc/fdht/fdht_servers.conf

group_count = 1

group0 = 192.168.1.245:11411

(15)修改/etc/fdht/目录下的fdhtd.conf文件,依次修改如下内容:

vim /etc/fdht/fdhtd.conf

port=11411

bash_path= /fastdfs/fastdht #(该目录必须是已经存在的,前面已经创建过了)

#include /etc/fdht/fdht_servers.conf  ##(本行前有#表示打开,如果想关闭此选项,则应该为##开头)

(16)配置/etc/fdfs/目录下的storage.conf文件,依次修改如下内容:

vim /etc/fdfs/storage.conf

#是否检测上传文件已经存在。如果已经存在,则建立一个索引链接以节省磁盘空间

check_file_duplicate=1

#当上个参数设定为1时 , 在FastDHT中的命名空间

key_namespace=FastDFS

#长连接配置选项,如果为0则为短连接 1为长连接

keep_alive=1

#此处特别需要注意配置,## 开头才是注释

#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 0

至此,搭建配置、验证完毕。

猜你喜欢

转载自www.cnblogs.com/eos666/p/9830630.html