一:Fastdfs 概括:
1.libevent 事件触发的网络库安装:
# yum install libevent libevent-devel
因为fastdfs的编译安装依赖libevent库。
2.Fastdfs源码下载安装:
https://code.google.com/p/fastdfs/downloads/list官方下载列表。
(1):解构浅谈:Fastdfs分为Tracker server 和 Storage server两部分,基本结构如下图所示。
客户端对于文件的上传和下载都需要和tracke rserver建立连接,并通过tracker的查询与调度,然后分配给客户端“合适”的存储空间storage server组进行数据的存储,大概流程如下图所示:
文件上传流程
文件下载流程
不难看出Tracker server对于整个fastdfs集群的重要性,fastdfs是对等分组的,因此不存在单点,Tracker和storage都可以横向扩展。此处不做详细解释,可参考:http://blog.csdn.net/luyee2010/article/details/9335591进行学习。
二:安装与配置:
(1):基本安装:fastdfs是不支持mount方式挂载的,任何形式的数据存储都需要API的方式来连接,因此fastdfs也支持了很多应用场景的模块:如nginx、php、java模块等(https://code.google.com/p/fastdfs/downloads/list)。
下面以nginx模块安装为测试,tracker端和storage端都需要安装源码包,只不过启动的时候是以不同的配置文件来区分,如:tracker.conf、storage.conf、client.conf等。
参考博文:http://250688049.blog.51cto.com/643101/1067985 (部署与问题汇总)
http://250688049.blog.51cto.com/643101/1069632 (问题汇总)
# wget http://fastdfs.googlecode.com/files/FastDFS_v3.03.tar.gz
# tar -zxvf FastDFS_v3.03.tar.gz
# cd FastDFS
# vim make.sh 将#WITH_HTTPD=1 修改成WITH_HTTPD=1 以支持 http
# ./make.sh
# ./make.sh install
(2):配置:tracker server端配置
安装:
# mkdir /data/fastdfs
# vi /etc/fdfs/tracker.conf
# base_path=/home/yuqing/fastdfs 修改为: base_path=/data/fastdfs
# http.server_port=8080 修改为:http.server_port=80
# ##include http.conf 修改为 #include http.conf “这里一个#紧跟字符串的方式代表include,注意这里的include http.conf不开启有可能会导致fastdfs启动失败。取决于编译的时候是否支持http。”
#reserved_storage_space = 4GB -> reserved_storage_space = 1GB “预留空间设置”
启动:
# /usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf
启动之后可以通过检查tracker日志的方式来看tracker进程是否启动成功: tail -f /data/fastdfs/logs/trackerd.log:
如下所示:tracker server端启动成功。
Tracker server集群添加新节点:
只需在storage server端修改配置文件并且重启即可。注意这里是个小坑:之前以为多个tracker节点的IP都写在同一行以空格或者逗号的形式隔开,而实际上是每行一个。
# vim /etc/fdfs/storage.conf
tracker_server=10.20.216.171:22122 # 多个tracker server的话每行一个。
tracker_server=10.20.216.172:22122 # 多个tracker server的话每行一个。
修改完配置文件后,重新启动即可:
# cp -r /usr/local/software/FastDFS/init.d/ /etc/init.d/ #将源码目录下的启动脚本复制到系统启动目录下
[root@yw-0-0 ~]# /etc/init.d/fdfs_trackerd restart
Usage: /etc/init.d/fdfs_trackerd {start|stop|status|restart|condrestart}
如下图:172和171分别为两个tracker节点。
(3) storage节点配置
Nginx服务器是安装在Storeage服务器上的,也就是说一般情况下它只提供对本Storeage服务器上的资源提供服务。只有在本机并没有需要获取的资源的情况下,才会进行特殊的处理。
安装nginx、fastdfs_nginx_module、FastDFS源码包。
Fastdfs:
解压完FastDFS源码包后,在执行./make的时候,之前提到过的#WITH_HTTPD=1 修改成WITH_HTTPD=1 以支持 http操作可以省略。因为nginx模块支持。
Fastdfs_nginx_module:
https://fastdfs-nginx-module.googlecode.com/files/fastdfs-nginx-module_v1.10.tar.gz #下载Fastdfs的nginx模块。(注意:这里的nginx模块版本如果和nginx不匹配会make不过去。这个1.10的版本和nginx的1.2.*都匹配。)
http://nginx.org/download/nginx-1.2.9.tar.gz #下载nginx的源码包。
解压Fastdfs_nginx_module。
[root@yw-0-0 src]# tar -zxvf fastdfs-nginx-module_v1.10.tar.gz
编译nginx支持Fastdfs。
[root@yw-0-0 nginx-1.2.3]# ./configure --prefix=/usr/local/nginx --add-module=/usr/local/software/fastdfs-nginx-module/src --with-pcre=/usr/local/software/pcre-8.30
[root@yw-0-0 nginx-1.2.3]# make && make install
配置:
修改storage server配置文件
]# vi /etc/fdfs/storage.conf #主要修改以下几项
group_name=group1 #fastdfs storage组名,因为存储是以组名区别的。
base_path=/data/fdfs_storage1 #放置data存储卷属性、状态和logs的目录。多个存储组可用同一个/data/fdfs_storage1目录。
store_path0=/data/fdfs_storage1 #放置存储数据的目录,实际都存储在/data/fdfs_storage1/data下(多个存储路径可设置多个,每个路径储存在单盘上提高IO吞吐)。
tracker_server=172.16.23.176:22122 # tracker组定义,多个组时每行一个。注意:fastdfs都是storage端主动去和tracker端进行连接的,当添加storage时只需在新增的storage端修改一下配置文件的tracker-server 地址就可以,当启动时会自动同步同组storage的数据。
tracker_server=172.16.23.177:22122
http.disabled=true #是否关闭自身的http模块,true为关闭、false为开启。利用nginx承载HTTP服务时,应当关闭内置HTTP服务。
http.server_port=80#HTTP-server的端口号,注意:所有storage-server集群中的http端口号需要一致,否则不一致的添加不到集群中。
Storage server多组设置:
当同一个storage节点机器上,需要创建多个(2个以上)storage组时(1个组1个mount目录,每个目录挂载到单盘上,不要有硬raid,单盘提升IO吞吐量),方法如下:
]# vi /etc/fdfs/storage.conf
group_name=group1 # 组名定义
group_name=meinv # 新增的组名meinv。注意:这里如果新增组的话,此storage组中的其他节点机器也要新增相同的组名,换句话说同一个集群中的storage.conf配置文件需要一致(如下内容必须一致,否则同组内的机器建立不了对等关系,不一样的状态为OFFLine)。
# path(disk or mount point) count, default value is 1
store_path_count=1 # 存储空间目录个数
# store_path#, based 0, if store_path0 not exists, it's value is base_path
# the paths must be exist #
store_path0=/data/fdfs_stroge1 # 数据存储的路径,路径个数与上面的count个数一致。并且此路径下的所有数据,存储的都是上面指定组下的数据。
#store_path1=/data/fdfs_stroge2
http.server_port=80
因此,如果需要建立多个组,并且严格要求以业务来区分的话。建议单独新建一个storage配置文件,如storage_liebao.conf,
[root@yw-0-0 fdfs]# cp /etc/fdfs/storage.conf /etc/fdfs/storage_liebao.conf
[root@yw-0-0 fdfs]# vim /etc/fdfs/storage_liebao.conf
group_name=liebao1
port=23001 # 由于默认的23000端口已被占用,因此开启一个新的23001端口。注意storage server集群中相同组的端口号需相同。
base_path=/data/fdfs_stroge_liebao
store_path_count=1
store_path0=/data/fdfs_stroge_liebao
如果需要删除组内一台storage节点的话,方法如下:
/usr/local/bin/fdfs_monitor /etc/fdfs/client.conf -h 172.16.23.176 delete group1 172.16.23.173 # 注意:如果被删除的storage server的状态是ACTIVE,也就是该storage server还在线上服务的情况下,是无法删除掉的。
[root@yw-0-0 fdfs_storage_game_pic]# fdfs_monitor
Usage: fdfs_monitor <config_file> [-h <tracker_server>] [list|delete <group_name> [storage_ip]]
修改mod_nginx―fastdfs配置模块。
]# cp /usr/local/software/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
]# vim /etc/fdfs/mod_fastdfs.conf
base_path=/home/storage # 和storage的base一样
tracker_server=172.16.23.176:22122 #
tracker_server=172.16.23.175:22122 #
group_name=group1 # 此台storage server所属的服务器组名
url_have_group_name =true # 在URL中是否包含group名称。
store_path0=/home/storage # 放置存储数据的目录。和storage的一样。
http.need_find_content_type=true # nginx下需要将http.conf中的参数http. need_find_content_type设置为true,apache设置为false(文档建议,个人测试中未设置)
修改nginx配置,添加到fastdfs的跳转
[root@storage]# vi /usr/local/nginx/conf/nginx.conf
location /group1/M00 # 不同的组可以设置多个跳转。
{
root /home/storage/data;
ngx_fastdfs_module;
}
启动:
依次启动tracker端、storage端、和storage端的nginx。
]# /etc/init.d/fdfs_trackerd start
]# /etc/init.d/fdfs_storaged start
]# nginx
启动完毕后,可以通过fdfs自带的stat程序查看集群状态:
[root@yw-0-0 ~]# fdfs_monitor
Usage: fdfs_monitor <config_file> [-h <tracker_server>] [list|delete <group_name> [storage_ip]]
[root@yw-0-0 ~]# fdfs_monitor /etc/fdfs/storage.conf # 如下图
至此,fastdfs的安装部署基本都已经完成,并且可以正常运行。下面就可以根据各自的场景创建自己的fastdfs存储集群啦!