fastdfs/doc/en/fastdfs/install.rst

319 lines
10 KiB
ReStructuredText

Installation
======================
Copy right 2009 Happy Fish / YuQing
FastDFS may be copied only under the terms of the GNU General
Public License V3, which may be found in the FastDFS source kit.
Please visit the FastDFS Home Page for more detail.
* English language: http://english.csource.org/
* Chinese language: http://www.csource.org/
Installing FastDFS from Source
--------------------------------
step 1. download libfastcommon source package from github and install it
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
the github address:
https://github.com/happyfish100/libfastcommon.git
step 2. download FastDFS source package and unpack it,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
::
tar xzf FastDFS_v5.x.tar.gz
for example:
::
tar xzf FastDFS_v5.08.tar.gz
step 3. enter the FastDFS dir
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
::
cd FastDFS
step 4. execute
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
::
./make.sh
step 5. make install
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
::
./make.sh install
step 6. edit/modify the config file of tracker and storage
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
step 7. run server programs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
start the *tracker* server:
::
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
in Linux, you can start fdfs_trackerd as a service:
::
/sbin/service fdfs_trackerd start
start the *storage* server:
::
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
in Linux, you can start fdfs_storaged as a service:
::
/sbin/service fdfs_storaged start
step 8. run test program
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
run the client test program:
::
/usr/bin/fdfs_test <client_conf_filename> <operation>
/usr/bin/fdfs_test1 <client_conf_filename> <operation>
for example, upload a file:
::
/usr/bin/fdfs_test conf/client.conf upload /usr/include/stdlib.h
step 9. run monitor program
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
run the monitor program:
::
/usr/bin/fdfs_monitor <client_conf_filename>
tracker server config file sample please see conf/tracker.conf
storage server config file sample please see conf/storage.conf
client config file sample please see conf/client.conf
Item detail
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
1. server common items
+-----------------------+--------+---------+------+
| item name | type | default | Must |
+=======================+========+=========+======+
| base_path | string | | Y |
+-----------------------+--------+---------+------+
| disabled | boolean| false | N |
+-----------------------+--------+---------+------+
| bind_addr | string | | N |
+-----------------------+--------+---------+------+
| network_timeout | int | 30(s) | N |
+-----------------------+--------+---------+------+
| max_connections | int | 256 | N |
+-----------------------+--------+---------+------+
| log_level | string | info | N |
+-----------------------+--------+---------+------+
| run_by_group | string | | N |
+-----------------------+--------+---------+------+
| run_by_user | string | | N |
+-----------------------+--------+---------+------+
| allow_hosts | string | \* | N |
+-----------------------+--------+---------+------+
| sync_log_buff_interval| int | 10(s) | N |
+-----------------------+--------+---------+------+
| thread_stack_size | string | 1M | N |
+-----------------------+--------+---------+------+
memo::
* base_path is the base path of sub dirs:
data and logs. base_path must exist and it's sub dirs will
be automatically created if not exist.
$base_path/data: store data files
$base_path/logs: store log files
* log_level is the standard log level as syslog, case insensitive
# emerg: for emergency
# alert
# crit: for critical
# error
# warn: for warning
# notice
# info
# debug
* allow_hosts can ocur more than once, host can be hostname or ip address,
"*" means match all ip addresses, can use range like this: 10.0.1.[1-15,20]
or host[01-08,20-25].domain.com, for example:
allow_hosts=10.0.1.[1-15,20]
allow_hosts=host[01-08,20-25].domain.com
2. tracker server items
+-----------------------+--------+---------+------+
| item name | type | default | Must |
+=======================+========+=========+======+
| port | int | 22000 | N |
+-----------------------+--------+---------+------+
| store_lookup | int | 0 | N |
+-----------------------+--------+---------+------+
| store_group | string | | N |
+-----------------------+--------+---------+------+
| store_server | int | 0 | N |
+-----------------------+--------+---------+------+
| store_path | int | 0 | N |
+-----------------------+--------+---------+------+
| download_server | int | 0 | N |
+-----------------------+--------+---------+------+
| reserved_storage_space| string | 1GB | N |
+-----------------------+--------+---------+------+
memo::
* the value of store_lookup is:
0: round robin (default)
1: specify group
2: load balance (supported since V1.1)
* store_group is the name of group to store files.
when store_lookup set to 1(specify group),
store_group must be set to a specified group name.
* reserved_storage_space is the reserved storage space for system
or other applications. if the free(available) space of any stoarge
server in a group <= reserved_storage_space, no file can be uploaded
to this group (since V1.1)
bytes unit can be one of follows:
# G or g for gigabyte(GB)
# M or m for megabyte(MB)
# K or k for kilobyte(KB)
# no unit for byte(B)
3. storage server items
+--------------------------+--------+---------+------+
| item name | type | default | Must |
+==========================+========+=========+======+
| group_name | string | | Y |
+--------------------------+--------+---------+------+
| tracker_server | string | | Y |
+--------------------------+--------+---------+------+
| port | int | 23000 | N |
+--------------------------+--------+---------+------+
| heart_beat_interval | int | 30(s) | N |
+--------------------------+--------+---------+------+
| stat_report_interval | int | 300(s) | N |
+--------------------------+--------+---------+------+
| sync_wait_msec | int | 100(ms) | N |
+--------------------------+--------+---------+------+
| sync_interval | int | 0(ms) | N |
+--------------------------+--------+---------+------+
| sync_start_time | string | 00:00 | N |
+--------------------------+--------+---------+------+
| sync_end_time | string | 23:59 | N |
+--------------------------+--------+---------+------+
| store_path_count | int | 1 | N |
+--------------------------+--------+---------+------+
| store_path0 | string |base_path| N |
+--------------------------+--------+---------+------+
| store_path# | string | | N |
+--------------------------+--------+---------+------+
|subdir_count_per_path | int | 256 | N |
+--------------------------+--------+---------+------+
|check_file_duplicate | boolean| 0 | N |
+--------------------------+--------+---------+------+
| key_namespace | string | | N |
+--------------------------+--------+---------+------+
| keep_alive | boolean| 0 | N |
+--------------------------+--------+---------+------+
| sync_binlog_buff_interval| int | 60s | N |
+--------------------------+--------+---------+------+
memo::
* tracker_server can ocur more than once, and tracker_server format is
"host:port", host can be hostname or ip address.
* store_path#, # for digital, based 0
* check_file_duplicate: when set to true, must work with FastDHT server,
more detail please see INSTALL of FastDHT. FastDHT download page:
http://code.google.com/p/fastdht/downloads/list
* key_namespace: FastDHT key namespace, can't be empty when
check_file_duplicate is true. the key namespace should short as possible
How to create RPM packages
---------------------------
.. code-block:: shell
yum -y install gcc rpm-build git re2c php php-cli php-devel
.. code-block:: bash
#!/usr/bin/env bash
set -eu
mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
if [ ! -d /opt/src/fastdfs/build ]; then
mkdir -p /opt/src/fastdfs/build
cd /opt/src/fastdfs
git clone https://github.com/happyfish100/fastdfs.git
git clone https://github.com/happyfish100/libfastcommon.git
fi
cd /opt/src/fastdfs
# fastdfs build require libfastcommon
rsync -az --exclude=.git --delete /opt/src/fastdfs/libfastcommon/ /opt/src/fastdfs/build/libfastcommon-1.0.27/
# fastdfs tracker and stroage
rsync -az --exclude=.git --delete /opt/src/fastdfs/fastdfs/ /opt/src/fastdfs/build/fastdfs-5.0.8/
# fastdfs_client for php extension
rsync -az --exclude=.git --delete /opt/src/fastdfs/fastdfs/php_client/ /opt/src/fastdfs/build/fastdfs_client-5.0.8/
cd /opt/src/fastdfs/build
tar zcf fastdfs-5.0.8.tar.gz fastdfs-5.0.8/
tar zcf fastdfs_client-5.0.8.tar.gz fastdfs_client-5.0.8/
tar zcf libfastcommon-1.0.27.tar.gz libfastcommon-1.0.27/
cp -f *.tar.gz ~/rpmbuild/SOURCES/
cp -f fastdfs-5.0.8/fastdfs.spec ~/rpmbuild/SPECS/fastdfs.spec
cp -f fastdfs_client-5.0.8/fastdfs_client.spec.in ~/rpmbuild/SPECS/fastdfs_client.spec
cp -f libfastcommon-1.0.27/libfastcommon.spec ~/rpmbuild/SPECS/libfastcommon.spec
cd ~
rpmbuild -bb ~/rpmbuild/SPECS/libfastcommon.spec
rpm -ivh --replacepkgs --replacefiles ~/rpmbuild/RPMS/x86_64/libfastcommon*
rpmbuild -bb ~/rpmbuild/SPECS/fastdfs.spec
rpm -ivh --replacepkgs --replacefiles ~/rpmbuild/RPMS/x86_64/libfdfsclient*
rpmbuild -bb ~/rpmbuild/SPECS/fastdfs_client.spec
ls ~/rpmbuild/RPMS/x86_64