我计划在两台服务器上安装fdfs,ip分别是:192.168.68.133(1号服务器), 192.168.68.136(2号服务器),fdfs在两台服务器上的安装部署图如下。
1号服务器上安装tracker实例一个,storage实例2个,分别位于group1,group2两个不同的组中;2号服务器上也安装tracker实例一个,storage实例1个,这个storage和1号服务器中的其中一个storage位于同一个组中。下面给大家贴出具体配置。
1号服务器中,我们先: vim /usr/local/fastdfs/conf/storage_ids.conf
- # <id> <group_name> <ip_or_hostname>
- 100001 group1 192.168.68.133
- 100002 group2 192.168.68.133
- 100003 group1 192.168.68.136
在这个文件中为所有存储服务器指定id, 这样可以免更换ip带来的影响,也就是说当服务器ip发生改变后只需要更改这个文件中的ip地址即可。
编辑tracker.conf,vim /usr/local/fastdfs/conf/tracker.conf配置文件,以下仅仅列出我改过的或者我认为需要给大家说明的配置项,没有贴出的均保持配置文件中的默认值。
-
- # the tracker server port
- port=22122
-
- # the base path to store data and log files
- base_path=/var/fastdfs/tracker
-
- # the method of selecting group to upload files
- # 0: round robin
- # 1: specify group
- # 2: load balance, select the max free space group to upload file
- store_lookup=2
-
- # which group to upload file
- # when store_lookup set to 1, must set store_group to the group name
- store_group=group2
-
- #unix group name to run this program,
- #not set (empty) means run by the group of current user
- run_by_group=
-
- #unix username to run this program,
- #not set (empty) means run by current user
- run_by_user=
-
- # if use storage ID instead of IP address
- # default value is false
- # since V4.00
- use_storage_id = true
-
- # the max time of storage sync a file
- # default value is 300 seconds
- # since V2.00
- storage_sync_file_max_time = 300
-
现对上面列出的一些配置项进行解释:
port:tracker服务器的端口号,如果一台服务器上要运行多个tracker实例就需要更改此端口号以避免冲突。
base_path:tracker自身配置信息以及日志信息保存的位置,这个目录本不会占用太大的空间,但日志文件会随着使用而慢慢变大。
store_lookup:负载分配机制,2表示选择存储空间最大的组来保存文件。
run_by_group,run_by_user:指定运行tracker的用户组及用户,这是为了保存系统的安全,我们一般会为fdfs新建组及用户。
use_storage_id:使用存储服务器id替代ip地址,我们刚才编辑的storage_ids.conf中指定了每个实例的id。
storage_sync_file_max_time:同一组中的不同storate进行文件同步的时间,默认是5分钟内完成同步,你可以根据实际情况把这个值改小(改变这个值后可以观察到文件同步的效果,这个值不要设置得太小以避免造成系统同步网络压力)。
接下来我们配置本台服务器上的storage实例,先配置storage1.conf实例,这个实例位于group1中。
vim /usr/local/fastdfs/conf/storage1.conf,同样限于篇幅,我仅仅贴出重要配置项,其它的使用默认值。
- # the name of the group this storage server belongs to
- group_name=group1
-
- # the storage server port
- port=23001
-
- # the base path to store data and log files
- base_path=/var/fastdfs/storage1
-
- # store_path#, based 0, if store_path0 not exists, it's value is base_path
- # the paths must be exist
- store_path0=/var/fastdfs/store_group1_path0
- # tracker_server can ocur more than once, and tracker_server format is
- # "host:port", host can be hostname or ip address
- tracker_server=192.168.68.133:22122
- tracker_server=192.168.68.136:22122
- run_by_group=
- run_by_user=
现在对上面的配置项进行解释:
group_name:本storage实例所属的组名称。
port:storage的端口号,同一组的storage实例必须采用同样的端口号,这就是说同一组中的storage实例必须部署在不同学的机器上,因为同一台机器上的端口号不能相同。
base_path:本storage的配置数据及运行日志文件存放的位置,和tracker中的base_path含义相同。
store_path0:真正的用户上传文件保存的位置目录,fastDfs会在该目录下新建许多子目录,在第一次启动实例时会进行这个操作。store_path可以有多个,一般可以分配成单独的磁盘挂载点。
tracker_server:指定本storaged的信息会注册到哪些tracker中去,故这里的tracker_server可以配置多个。
run_by_group、run_by_user与tracker中的含义相同,不再细说。
接下来,我们再来看本服务器上的另一个storage实例,这个实例是运行在group2中的,端口号与上面配置的那个storage是不同的,请看配置关键项:
- # the name of the group this storage server belongs to
- group_name=group2
-
- # the storage server port
- port=23002
-
- base_path=/var/fastdfs/storage2
-
- # store_path#, based 0, if store_path0 not exists, it's value is base_path
- # the paths must be exist
- store_path0=/var/fastdfs/store_group2_path0
- # tracker_server can ocur more than once, and tracker_server format is
- # "host:port", host can be hostname or ip address
- tracker_server=192.168.68.133:22122
上面配置文件中的内容和storage1.conf中的类似,只不过group_name、port不相同,两个文件的保存路径也是不同的,经过这些配置后,我们就可以启动服务实例了。
先来启动tracker实例,先编辑启动脚本文,vim /etc/init.d/fdfs_trackerd。
- #!/bin/bash
- #
- # fdfs_trackerd Starts fdfs_trackerd
- #
- #
- # chkconfig: 2345 99 01
- # description: FastDFS tracker server
- ### BEGIN INIT INFO
- # Provides: $fdfs_trackerd
- ### END INIT INFO
- # Source function library.
- . /etc/init.d/functions
- FastDfs='/usr/local/fastdfs'
- CONF="$FastDfs/conf/tracker.conf"
- if [ ! -f $CONF ]; then
- echo "file $CONF does not exist!"
- exit 2
- fi
- PRG="$FastDfs/bin/fdfs_trackerd"
- if [ ! -f $PRG ]; then
- echo "file $PRG does not exist!"
- exit 2
- fi
- Stop="$FastDfs/bin/stop.sh"
- if [ ! -f $Stop ]; then
- echo "file $Stop does not exist!"
- exit 2
- fi
- Restart="$FastDfs/bin/restart.sh"
- if [ ! -f $Restart ]; then
- echo "file $Restart does not exist!"
- exit 2
- fi
- RETVAL=0
- start() {
- echo -n $"Starting FastDFS tracker server: "
- $PRG $CONF &
- RETVAL=$?
- echo
- return $RETVAL
- }
- stop() {
- echo -n $"Stop FastDFS tracker server: "
- $Stop $PRG $CONF
- RETVAL=$?
- return $RETVAL
- }
- rhstatus() {
- status fdfs_trackerd
- }
- restart() {
- $Restart $PRG $CONF &
- }
- case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- status)
- rhstatus
- ;;
- restart|reload)
- restart
- ;;
- condrestart)
- restart
- ;;
- *)
- echo $"Usage: $0 {start|stop|status|restart|condrestart}"
- exit 1
- esac
- exit $?
这篇启动脚本中,主要修改的地方是FastDfs及CONF变量参数,这两个用来指定tracker配置文件所在的位置。
完成编辑后,使用命令:sudo /etc/init.d/fdfs_trackerd start,即可完成服务器的启动,如果启动成功你可通过netstat -lnpt查看到tracker的端口号。
接下来,将fdfs_storaged拷贝为fdfs_storaged1,用于启动storage1实例,要修改的地方也是FastDfs及CONF参数,这两个参数用来指定storage1.conf文件的在的目录及配置文件的名称。
- #!/bin/bash
- #
- # fdfs_storaged Starts fdfs_storaged
- #
- #
- # chkconfig: 2345 99 01
- # description: FastDFS storage server
- ### BEGIN INIT INFO
- # Provides: $fdfs_storaged
- ### END INIT INFO
- # Source function library.
- . /etc/init.d/functions
- FastDfs='/usr/local/fastdfs'
- CONF="$FastDfs/conf/storage1.conf"
- if [ ! -f $CONF ]; then
- echo "file $CONF does not exist!"
- exit 2
- fi
- PRG="$FastDfs/bin/fdfs_storaged"
- if [ ! -f $PRG ]; then
- echo "file $PRG does not exist!"
- exit 2
- fi
- Stop="$FastDfs/bin/stop.sh"
- if [ ! -f $Stop ]; then
- echo "file $Stop does not exist!"
- exit 2
- fi
- Restart="$FastDfs/bin/restart.sh"
- if [ ! -f $Restart ]; then
- echo "file $Restart does not exist!"
- exit 2
- fi
- RETVAL=0
- start() {
- echo -n $"Starting FastDFS storage server: "
- $PRG $CONF &
- RETVAL=$?
- echo
- return $RETVAL
- }
- stop() {
- echo -n $"Stop FastDFS storage server: "
- $Stop $PRG $CONF
- RETVAL=$?
- return $RETVAL
- }
- rhstatus() {
- status fdfs_storaged
- }
- restart() {
- $Restart $PRG $CONF &
- }
- case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- status)
- rhstatus
- ;;
- restart|reload)
- restart
- ;;
- condrestart)
- restart
- ;;
- *)
- echo $"Usage: $0 {start|stop|status|restart|condrestart}"
- exit 1
- esac
-
- exit $?
好,该来启动storaged1实例了,命令: sudo /etc/init.d/fdfs_storaged1 start,如果是第一次启动会观察到创建存储目录的过程。
启动storaged2实例的过程和storaged1相同,先编辑fdfs_storaged2文件,再fdfs_storaged2 start即完成。
当1号服务器上的fdfs全部服务都成功启动后,我们可以看到如下目录结构会建立起来。
至此,1号服务器上的所有配置及服务启动工作已经完成。2号服务器的配置及服务实例启动与1号服务器基本相同,惟一需要大家要注意的是group的名称,port端口号等,要和1号服务器相“呼应”,同时,我们在2号服务器上也配置了一个tracker实例以保证高可用性。
好了,fastDFS的配置先告一段落,下一篇我们来聊聊客户端对fastDFS的调用,除了java客户端外,还包括tengine-2.0.1服务器上访问插件的配置。