CentOS6.5環境搭建分佈式存儲FastDFS-5.0.5集羣詳細過程

FastDFS架構簡介php

FastDFS是一款開源的、分佈式文件系統(Distributed File System),由淘寶開發平臺部資深架構師餘慶開發。FastDFS 是包括一組 Tracker Server 和 Storage Server 的。Tracker Server 與 Storage Server 之間不直接通訊,其基本的信息由配置文件在系統啓動加載時獲知。多臺 Tracker Server 之間保證了 Tracker 的分佈式,Tracker Server 之間是對等的,防止了單點故障。 Storage Server 是分紅多個 Group,每一個 Group 中的Storage 都是互相備份的,也就是說,若是 Group1 有 Storage一、Storage二、Storage3,其容量分別是100GB、100GB、100GB,那麼 Group1 的存儲能力是 100GB,而不是 300GB,這就是互相備份的意思。進一步說,整個 Group 的存儲能力由該組中該儲能力最小的 Storage 決定。多個 Group 之間的存儲方式,能夠採用 round robin(輪訓)、load balanced(負載均衡)或指定 Group 的方式。另外一點相對於MS(Master-Slave)模式的優點,就是 Tracker Server 與 Master 是決然不一樣的,不只 master 有上面可能提到的單點故障問題,並且 client 與 master 之間可能會出現瓶頸。但 FastDFS 架構中,Tracker Server 不會稱爲系統瓶頸,數據最終是與一個 available 的 Storage Server 進行傳輸的。css

上傳流程html

咱們能夠經過 FastDFS 對文件的上傳過程,來初步瞭解 FastDFS 的基本架構。首先客戶端 client 發起對 FastDFS 的文件傳輸動做,是經過鏈接到某一臺 Tracker Server 的指定端口來實現的,Tracker Server 根據目前已掌握的信息,來決定選擇哪一臺 Storage Server ,而後將這個Storage Server 的地址等信息返回給 client,而後 client 再經過這些信息鏈接到這臺 Storage Server,將要上傳的文件傳送到給 Storage Server上。nginx

總結c++

簡單總結一下,FastDFS的特色包括(1)高可靠性:無單點故障;(2)高吞吐量:只要 Group 足夠多,數據流量是足夠分散的。瀏覽器

 

FastDFS部署:緩存

一、機器分佈服務器

Tracker 192.168.100.106:22122 CentOS網絡

Group1-Storage1 192.168.100.106:23001 CentOS架構

Group1-Storage1 192.168.100.125:23001 CentOS

 

二、須要到的軟件和版本(軟件存放位置:/root/soft)

 

說明:nginx主要實現負載均衡、緩存等功能

 

三、建立相關文件夾

配置tracker所需的base_path: /opt/fastdfs_tracker

配置storage所需的日誌目錄:fastdfs_storage_info。備註:存儲storage之間同步文件等日誌的

配置storage所需的存儲文件目錄: /opt/fastdfs_storage_data。備註: 這個目錄是用來存儲文件的

 

以上三個文件將在後續的tracker.conf和storage.conf、mod_fastdfs.conf中用到

 

四、安裝libfastcommon-1.0.7.zip (注意:先檢查是否安裝unzip、zip、gcc、perl等)

unzip libfastcommon-1.0.7.zip

cd libfastcommon-1.0.7

sh make.sh && sh make.sh install

 

perl安裝:

wget http://www.cpan.org/src/5.0/perl-5.20.2.tar.gz

              tar zxvf perl-5.20.2.tar.gz               

              mkdir /usr/local/perl

              ./Configure -des -Dprefix=/usr/local/perl -Dusethreads -Uversiononly

              make

              make install

              perl -version   

 

注意:上述安裝路徑在/usr/lib64/,FastDFS主程序設置lib目錄是/usr/local/lib,建立軟鏈接以下: 

             ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so

             ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so

             ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so

             ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so

 

五、安裝fastdfs-5.05.tar.gz:

tar -zxvf fastdfs-5.05.tar.gz

cd fastdfs-5.05

./make.sh && ./make.sh install

 

進入/etc/fdfs這個目錄,若是有配置文件存在,則安裝成功

 

 

 

 

以上步驟在tracker和storage機器上都須要執行

 

六、配置tracker (192.168.100.106)

進入/etc/fdfs文件夾,執行命令: cp  tracker.conf.sample  tracker.conf。

      編輯tracker.conf,執行命令: vi  tracker.conf ,配置成以下:

disabled=false #false表明開啓配置文件

bind_addr= #空表明全部host,也能夠指定host

port=22122 #tracker默認開啓的端口號

connect_timeout=30 #鏈接超時時間

network_timeout=60 #網絡超時時間

base_path=/opt/fastdfs_tracker #存放store的數據和日誌文件

max_connections=256 #容許最大鏈接數

accept_threads=1 #容許的線程數

work_threads=4 #工做線程數,必須小於等於max_connections

store_lookup=2 #選擇上傳文件方式0:輪詢,1:指定組,2:負載均衡

store_group=group1 #上傳到組group1

store_server=0 #上傳到storage,0:輪詢,1:IP順序,2:服務器順序

store_path=0 #上傳文件到哪一個路徑0:輪詢,2:負載均衡

download_server=0 #指定下載服務器0:輪詢,1:使用源服務器

reserved_storage_space = 10% #保留的存儲空間

log_level=info #日誌等級

run_by_group= #選擇用戶組,空表明當前用戶組

run_by_user= #選擇用戶,空表明當前用戶

allow_hosts=* #容許訪問的IP,*表明所有

sync_log_buff_interval = 10 #同步日誌buff到磁盤的間隔時間

check_active_interval = 120 #檢查storage狀態間隔時間

thread_stack_size = 64KB #線程的堆棧大小,必須大於等於64KB

storage_ip_changed_auto_adjust = true #storageIP改變是自動調整

storage_sync_file_max_delay = 86400 #同步文件的最大延遲

storage_sync_file_max_time = 300 #同步文件的最大時間

use_trunk_file = false #是否使用中繼文件存儲小文件

slot_min_size = 256 #存儲文件的最小單位,必須大於等於4KB

slot_max_size = 16MB #存儲文件的最大單位,必須大於slot_min_size

trunk_file_size = 64MB #中繼文件的大小,必須大於等於4MB

trunk_create_file_advance = false #是否容許建立中繼文件超前

trunk_create_file_time_base = 02:00 #建立trunk文件的時間基準

trunk_create_file_interval = 86400 #建立trunk文件的時間間隔

trunk_create_file_space_threshold = 20G

trunk_init_check_occupying = false

trunk_init_reload_from_binlog = false

trunk_compress_binlog_min_interval = 0

use_storage_id = false

storage_ids_filename = storage_ids.conf

id_type_in_filename = ip

store_slave_file_use_link = false

rotate_error_log = false

error_log_rotate_time=00:00

rotate_error_log_size = 0

log_file_keep_days = 0

use_connection_pool = false

connection_pool_max_idle_time = 3600

http.server_port=8080

http.check_alive_interval=30

http.check_alive_type=tcp

http.check_alive_uri=/status.htm

 

配置文件詳細註解參考:

http://blog.csdn.net/xingjiarong/article/details/50752586

 

啓動tracker: /usr/local/bin/fdfs_trackerd  /etc/fdfs/tracker.conf  start (start\stop\restart)

檢測是否啓動成功:netstat -lntup|grep fdfs_trackerd

 

 

設置開機啓動:

echo "/usr/bin/fdfs_trackerd  /etc/fdfs/tracker.conf  start" >> /etc/rc.d/rc.local

 

七、配置storage (192.168.100.106\192.168.100.125)

進入/etc/fdfs文件夾,執行命令: cp  storage.conf.sample  storage.conf

編輯storage.conf,執行命令: vi storage.conf ,配置成以下:

disabled=false

group_name=group1

bind_addr=

client_bind=true

port=23001

connect_timeout=30

network_timeout=60

heart_beat_interval=30

stat_report_interval=60

base_path=/opt/fastdfs_storage_info

max_connections=256

buff_size = 256KB

accept_threads=1

work_threads=4

disk_rw_separated = true

disk_reader_threads = 1

disk_writer_threads = 1

sync_wait_msec=50

sync_interval=0

sync_start_time=00:00

sync_end_time=23:59

write_mark_file_freq=500

store_path_count=1

store_path0=/opt/fastdfs_storage_data

subdir_count_per_path=256

tracker_server=192.168.100.106:22122

log_level=info

run_by_group=

run_by_user=

allow_hosts=*

file_distribute_path_mode=0

file_distribute_rotate_count=100

fsync_after_written_bytes=0

sync_log_buff_interval=10

sync_binlog_buff_interval=10

sync_stat_file_interval=300

thread_stack_size=512KB

upload_priority=10

if_alias_prefix=

check_file_duplicate=0

file_signature_method=hash

key_namespace=FastDFS

keep_alive=0

use_access_log = false

rotate_access_log = false

access_log_rotate_time=00:00

rotate_error_log = false

error_log_rotate_time=00:00

rotate_access_log_size = 0

rotate_error_log_size = 0

log_file_keep_days = 0

file_sync_skip_invalid_record=false

use_connection_pool = false

connection_pool_max_idle_time = 3600

http.domain_name=

http.server_port=8888

 

配置文件詳細註解參考:

http://blog.csdn.net/xingjiarong/article/details/50752586

 

啓動storage: /usr/local/bin/fdfs_storage  /etc/fdfs/storage.conf  start

檢測是否啓動成功:netstat -lntup|grep fdfs_storaged

 

檢測啓動狀態:/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

       查看192.168.100.106:23001 是ACTIVE狀態便可

 

設置開機自動啓動:

echo "/usr/bin/fdfs_trackerd  /etc/fdfs/storage.conf  start" >> /etc/rc.d/rc.local

 

八、安裝nginx

storage中安裝nginx,主要是爲了爲提供http的訪問服務,同時解決group中storage服務器的同步延遲問題。而tracker中安裝nginx,主要是爲了提供http訪問的反向代理、負載均衡以及緩存服務 

yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

 

a、在storage中安裝nginx (192.168.100.106\192.168.100.125)

tar -zxvf nginx1.7.8.tar.gz

tar -zxvf fastdfs-nginx-module_v1.16.tar.gz

cd /root/soft/fastdfs-nginx-module/src

編輯config文件,找到包含CORE_INCS這個一行,將路徑中local所有去掉,變爲CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

cd nginx1.7.8

--prefix=/opt/nginx --add-module=/root/soft/fastdfs-nginx-module/src

make && make install

 

編輯nginx.conf文件以下:

 

 

 

 

 

 

 

 

 

 

 

 

將http.conf和mime.types拷貝到/etc/fdfs/下,若是不執行這一步,啓動nginx時會報錯。

cp /root/soft/fastdfs-5.05/conf/http.conf /etc/fdfs/

cp /root/soft/fastdfs-5.05/conf/mime.conf /etc/fdfs/

將mod_fastdfs.conf這個文件拷貝到 /etc/fdfs 目錄下

cp /root/soft/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/

編輯mod_fastdfs.conf 文件以下:

connect_timeout=2

network_timeout=30

base_path=/opt/fastdfs_storage_info

load_fdfs_parameters_from_tracker=true

storage_sync_file_max_delay = 86400

use_storage_id = false

storage_ids_filename = storage_ids.conf

tracker_server=192.168.100.106:22122

storage_server_port=23001

group_name=group1

url_have_group_name = true

store_path_count=1

store_path0=/opt/fastdfs_storage_data

log_level=info

log_filename=

response_mode=proxy

if_alias_prefix=

flv_support = true

flv_extension = flv

group_count = 1

[group1]

group_name=group1

storage_server_port=23001

store_path_count=1

store_path0=/opt/fastdfs_storage_data

store_path1=/opt/fastdfs_storage_data

 

配置文件詳細註解參考:

http://blog.csdn.net/xingjiarong/article/details/50752586

 

創建軟鏈接:

ln  -s  /opt/fastdfs_storage_data/data  /opt/fastdfs_storage_data/data/M00

 

啓動nginx: /opt/nginx/sbin/nginx

 

b、在tracker中安裝nginx

tar -zxvf nginx1.7.8.tar.gz

tar -zxvf fastdfs-nginx-module_v1.16.tar.gz

cd /root/soft/fastdfs-nginx-module/src

編輯config文件,找到包含CORE_INCS這個一行,將路徑中local所有去掉,變爲CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

cd nginx1.7.8

--prefix=/opt/nginx --add-module=/root/soft/fastdfs-nginx-module/src --add-module=/root/soft/ngx_cache_purge-2.1 --with-http_ssl_module --with-pcre=/root/soft/pcre-8.40 --with-zlib=/root/soft/zlib-1.2.11

make && make install

 

編輯nginx.conf文件以下:

 

啓動nginx:/opt/nginx/sbin/nginx

 

九、測試並上傳文件

編輯client.conf 文件,編輯內容以下:

 

 

 

 

 

 

測試上傳文件:

echo "this is a test file -- hello world" >> test.txt

/usr/bin/fdfs_test /etc/fdfs/client.conf upload test.txt #上傳

生成以下url,並複製到瀏覽器訪問

 

 

以上測試說明成功,而且兩臺stroage同步成功了

 

測試負載均衡辦法:停掉192.168.100.125或者192.168.100.106的storage再進行上傳測試

 /usr/local/bin/fdfs_storage  /etc/fdfs/storage.conf  stop

 

 

十、PHP安裝FasfDFS擴展模塊

cd /root/soft/fastdfs-5.05/client

make && make install

cd /root/soft/fastdfs-5.05/php_client

 

/usr/local/php/bin/phpize

./configure --with-php-config=/usr/local/php/bin/php-config

make && make install

cd /etc/fdfs

vi client.conf

tracker_server=192.168.100.106:22122 //根據環境填寫IP地址及端口號

 

在php.ini配置文件中加載fastdfs

cat fastdfs_client.ini >> /usr/local/php/etc/php.ini

 

新增nginx配置以下:

server {

listen 8080;

server_name localhost;

access_log /data/wwwlogs/access_nginx_cms.log combined;

root /opt/nginx/html;

index index.html index.htm index.php forum.php;

location /nginx_status {

access_log off;

allow 127.0.0.1;

deny all;

}

error_page 404 /404.html;

location ~ [^/]\.php(/|$) {

fastcgi_pass 192.168.100.106:9000;

fastcgi_index index.php;

include /usr/local/nginx/conf/fastcgi_params;

include fastcgi.conf;

}

location \(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {

expires 30d;

access_log off;

}

location \(js|css)?$ {

expires 7d;

access_log off;

}

}

 

重啓nginx和php

/opt/nginx/sbin/nginx -s reload

或者

pkill -9 nginx

/opt/nginx/sbin/nginx

 

kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`

或者

pkill -9 php

/usr/local/php/sbin/php-fpm

 

測試:在瀏覽器中輸入:http://192.168.100.106:8080/fastdfs_test.php

若是出現相似於如下截圖則表示成功

 

相關文章
相關標籤/搜索