分布式文件系統(DFS)
指文件系統管理的物理存儲資源不一定直接連接在本地節點上
而是通過計算機網絡與節點相連
分布式文件系統的設計基於客戶機/服務器模式
一個典型的網絡可能包括多個多個用戶訪問的服務器
對等特性允許一些系統扮演客戶機和服務器的雙重角色
分布式文件系統的特點
分布式文件系統可以有效解決數據的存儲和管理難題
將固定於摸個地點的某個文件系統,擴展到任意多個地點/多個文件系統
眾多的節點組成一個文件系統網絡
每個節點可以分布在不同的地點,通過網絡進行節點間的通信和數據傳輸
使用分布式文件系統時,無需關心數據是存儲在哪個節點上
或者是從哪個節點獲取的,只需要像使用本地文件系統一樣管理和存儲文件系統中的數據
衡量分布式文件系統的優劣
數據的存儲方式
無論采用何種存儲方式,目的都是為了保證數據的存儲安全和方便獲取
數據的讀取速率
包括響應用戶讀取文件的請求,定位數據文件所在的節點,讀取實際硬盤中數據文件的時間
不同節點間的數據傳輸時間以及一部分處理器的處理時間等
數據的安全機制
采取冗余,備份,鏡像等方式
常用的分布式文件系統
Lustre
一個大規模的,安全可靠的,具備高可用的集群文件系統,他是由sun公司開發和維護
Hadoop
不僅是一個用於存儲的分布式文件系統,而是設計用來在由通過計算機設備組成的大型集群上執行分布式應用的框架
OpenAFS
一套開源的分布式文件系統,允許系統之間通過局域網和廣域網來分享檔案和資源
googleFS
一個可擴展分布式文件系統,用於大型的,分布式的,對大量數據進行訪問的應用
服務器角色
與單機的文件系統不同,分布式文件系統不是將這些數據放在一塊硬盤上,由上層操作系統來管理
數據存放在一個服務器集群上,由集群中的服務器各盡其責,通力合作,提供整個文件系統的服務
重要的服務器包括:
主控服務器
數據服務器
主控服務器:
master管理各個數據服務器收集它們的信息,了解所有數據服務器的生存現狀
然后給它們分配任務
主控服務器上放着所有的文件目錄信息,要找一個文件,必須先訪問它
數據服務器:
存放數據的服務器,設計為冗余模式
主要的工作模式就是定期向主控服務器匯報其狀況,然后等待並處理命令,更快更安全的存放好數據
數據分布
以塊的方式存儲
把文件數據切成數據塊,將數據塊存儲在數據服務器上
以獨立文件的方式存儲
每台數據服務器存儲獨立的文件,每台數據服務器存儲相同的文件,實現冗余及負載均衡
——————————————————————————————————————————————————————————
FastDFS
一款開源分布式文件系統,用純c語言實現,支持linux freebsd aix等unix系統
功能包括文件存儲,文件同步,文件訪問 文件上傳,下載等
解決了大容量存儲和負載均衡的問題
特別適合以文件為載體的在線服務,如相冊網站,視頻網站等
FastDFS服務器端有兩個角色:跟蹤器(tracker)和存儲節點(storage)
跟蹤器:主要做調度工作,在訪問上起負載均衡的作用
存儲節點:完成文件管理的所有功能,即存儲,同步和提供存取接口,同時對文件的元數據進行管理
FastDFS系統結構
跟蹤器和存儲節點都可以由一台或多台服務器構成
跟蹤器和存儲節點中的服務器均可以隨時增加或下線而不會影響線上服務
跟蹤器中的所有服務器都是對等的,可以根據服務器的壓力情況隨時增加或減小
采用了分組存儲方式
集群由一個或多個組構成,集群存儲總容量為集群中所有組的存儲容量之和
一個組由一台或多台存儲服務器組成,同組內的多台存儲節點服務器之間是互備關系
同組存儲服務器上的文件是完全一致的
文件上傳,下載,刪除等操作可以在組內任意一台存儲服務器節點上進行
一個組的存儲容量為該組內存儲服務器容量最小那個
采用分組存儲方式的好處是靈活,可控性較強
一個分組服務器訪問壓力大時,可以在該組增加存儲服務器來充服務能力(縱向擴容)
當系統容量不足時,可以增加組來擴充(橫向擴容)
不同組內的存儲服務器之間不會相互通信,同組內的存儲服務器之間會相互連接進行文件同步
binlog中只記錄文件名,不記錄問價內容
文件同步只在同組內的存儲服務器之間進行,采用push方式,即源頭服務器同步給目標服務器
搭建配置FastDFS服務器
環境:准備4台服務器,第一台作為tracker,后三台作為storage並為storage准備磁盤
qemu-img create -f qcow2 /var/lib/libvirt/images/st1.img 20G
qemu-img create -f qcow2 /var/lib/libvirt/images/st2.img 20G
qemu-img create -f qcow2 /var/lib/libvirt/images/st3.img 20G
地址規划:主機tarcker :192.168.4.1
主機storage1:192.168.4.2
主機storage2:192.168.4.3
主機storage3:192.168.4.4
FastDFS官網:http://bbs.chinaunix.net/forum-240-1.html
安裝配置tracke服務器(源碼安裝,別忘了gcc gcc-c++)
需要三個依賴包
libevent-devel-1.4.13-4.el6.x86_64.rpm
libevent-doc-1.4.13-4.el6.noarch.rpm
libevent-headers-1.4.13-4.el6.noarch.rpm
[root@tracker ~]# yum -y install lib*
[root@tracker ~]# tar -xf FastDFS_v4.06.tar.gz
[root@tracker FastDFS]# ./make.sh
[root@tracker FastDFS]# ./make.sh install
[root@tracker FastDFS]# cp init.d/fdfs_trackerd /etc/init.d/
[root@tracker ~]# mkdir -pv /data/fastdfs
[root@tracker FastDFS]# vim /etc/fdfs/tracker.conf(修改配置文件)
# the base path to store data and log files
base_path=/data/fastdfs(工作目錄,寫剛剛創建的目錄)
# max concurrent connections this server supported
max_connections=4096(最大線程數,默認256)
# if use storage ID instead of IP address
# default value is false
# since V4.00
use_storage_id = true(默認false,改為true)
[root@tracker FastDFS]# cp conf/storage_ids.conf /etc/fdfs/(拷貝配置文件)
[root@tracker FastDFS]# vim /etc/fdfs/storage_ids.conf(修改配置文件)
1000001 group1 192.168.4.2(寫storage的主機)
1000001 group1 192.168.4.3
1000001 group1 192.168.4.4
[root@tracker FastDFS]# /etc/init.d/fdfs_trackerd start; chkconfig fdfs_trackerd on
[root@tracker FastDFS]# netstat -tlnp | grep :22122(查看端口,確定服務啟動)
tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 2490/fdfs_trackerd
安裝配置storage服務器,及准備磁盤(三台主機主機做相同的操作)
需要三個依賴包
libevent-devel-1.4.13-4.el6.x86_64.rpm
libevent-doc-1.4.13-4.el6.noarch.rpm
libevent-headers-1.4.13-4.el6.noarch.rpm
[root@storage1 ~]# yum -y install lib*
[root@storage1 ~]# tar -xf FastDFS_v4.06.tar.gz
[root@storage1 FastDFS]# ./make.sh
[root@storage1 FastDFS]# ./make.sh install
[root@storage1 FastDFS]# cp init.d/fdfs_storaged /etc/init.d/
[root@storage1 ~]# mkdir -pv /data/fastdfs
[root@storage1 ~]# vim /etc/fdfs/storage.conf(修改配置文件)
# the base path to store data and log files
base_path=/data/fastdfs(工作目錄)
max_connections=4096(最大並發數)
store_path_count=1(幾個路徑寫幾個)
store_path0=/data/fastdfs(第一條路徑)
tracker_server=192.168.4.1:22122(tracker服務器地址)
upload_priority=10(優先級)
[root@storage1 ~]# parted /dev/vdb(分區)
(parted) mklabel gpt
(parted) mkpart primary ext4 1M -1
[root@storage1 ~]# mkfs.ext4 /dev/vdb1(格式化)
[root@storage1 ~]# blkid /dev/vdb1(查看uuid號)
/dev/vdb1: UUID="75889d5b-a85b-4028-b50d-c5dfc6bd136f" TYPE="ext4"
[root@storage1 ~]# vim /etc/fstab(開機自動掛載)
UUID=75889d5b-a85b-4028-b50d-c5dfc6bd136f /data/fastdfs/ ext4 defaults 0 0
[root@storage1 ~]# mount -a(檢查配置文件有沒有錯誤)
[root@storage1 ~]# /etc/init.d/fdfs_storaged start; chkconfig fdfs_storaged on
storage會為用戶創建輔助文件
[root@storage1 ~]# cat /data/fastdfs/data/.data_init_flag 初始化信息
[root@storage1 ~]# cat /data/fastdfs/data/storage_stat.dat 統計信息
[root@storage1 ~]# cat /data/fastdfs/data/sync/binlog.index 當前binlog文件索引號
[root@storage1 ~]# cat /data/fastdfs/data/sync/binlog.000 日志
配置FastDFS客戶端
[root@python ~]# mkdir bin(創建一個bin目錄)
[root@tracker ~]# cd /usr/local/bin/(在服務器端把配置文件復制過去)
[root@tracker ~]# scp fdfs_delete_file fdfs_upload_file fdfs_download_file fdfs_test /etc/fdfs/client.conf 192.168.4.5:/root/bin
[root@python bin]# vim client.conf
# the base path to store log files
base_path=/root/bin(工作目錄)
tracker_server=192.168.4.1:22122(tracker主機ip)
[root@python bin]# ./fdfs_upload_file client.conf /etc/passwd(測試上傳文件)
group1/M00/00/00/wKgEAlnHD3CAM8WTAAAEIOv-_n85532326(文件存放處及上傳后的文件名)
[root@python bin]# ./fdfs_download_file client.conf group1/M00/00/00/wKgEAlnHD3CAM8WTAAAEIOv-_n85532326 passwd(測試下載。下載后的文件名)
[root@python bin]# ./fdfs_delete_file client.conf group1/M00/00/00/wKgEAlnHD3CAM8WTAAAEIOv-_n85532326(刪除文件)
[root@storage1 ~]# ls /data/fastdfs/data/00/00/(storage服務器端查看上傳的文件)
配置web訪問,在storage服務器上安裝nginx fastdfs-nginx-module(nginx模塊)
[root@storage1 ~]# yum -y install pcre ocre-devel zlib zlib-decel
[root@storage1 ~]# tar -xf fastdfs-nginx-module_v1.16.tar.gz
[root@storage1 ~]# tar -xf nginx-1.8.0.tar.gz
[root@storage1 ~]# useradd -s /sbin/nologin nginx
[root@storage1 nginx-1.8.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --add-module=/root/fastdfs-nginx-module/src/
[root@storage1 nginx-1.8.0]# make
[root@storage1 nginx-1.8.0]# make install
[root@storage1 ~]# cp fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/(把配置文件拷貝到/etc/fdfs下)
[root@storage1 ~]# vim /etc/fdfs/mod_fastdfs.conf
tracker_server=192.168.4.1:22122(tracker服務器ip)
url_have_group_name = true(改為true)
store_path0=/data/fastdfs(本地存儲路勁)
[root@storage1 ~]# vim /usr/local/nginx/conf/nginx.conf(修改nginx配置文件)
location / {
ngx_fastdfs_module;
}
[root@storage1 ~]# /usr/local/nginx/sbin/nginx(啟動服務)
ngx_http_fastdfs_set pid=10522
客戶端測試,先上傳文件,再通過web方式查看
[root@python bin]# ./fdfs_upload_file client.conf /root/xx.txt
group1/M00/00/00/wKgEAlnHG_2AKp4iAAAAC7Shv9I745.txt
[root@python bin]# firefox http://192.168.4.2/group1/M00/00/00/wKgEAlnHG_2AKp4iAAAAC7Shv9I745.txt
——————————————————————————————————————————————————————————————————————————————