手把手教你搭建FastDFS集群(中)
上一篇博客,我們一起搭建了storage和tracker集群,FastDFS集群還未搭建完畢,不過由於篇幅過長,因此需要分成兩篇來寫。
一、tracker和storage集群上傳圖片測試
由於目前還沒有搭建完集群,因此我們暫且在tracker的一台設備上(我們就選擇192.168.156.5這台設備)使用client來上傳圖片進行測試。
1.進入到/etc/fdfs/目錄下,我們可以看到client.conf.sample這么一個配置文件,如下圖所示。
2.我們使用命令:cp client.conf.sample client.conf復制一份該文件並命名為client.conf,如下圖所示。
3.修改client.conf配置文件,使用命令:vim client.conf,需要修改的配置有base_path=/fastdfs/tracker、tracker_server=192.168.156.5:22122和
tracker_server=192.168.156.6:22122,如下圖所示。其中/fastdfs/tracker這個目錄我們已經創建過了,因此這時不需要再創建了。
4.下面我們來上傳一張圖片,我把/usr/local目錄下一張3.jpg圖片上傳,使用的命令:/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/local/3.jpg,可以看到這條命令由3部分組成,第一部分是/usr/bin/fdfs_upload_file,意思是指定要進行上傳文件操作,第二部分是/etc/fdfs/client.conf,意思是指定上傳操作使用的配置文件,這個配置文件就是我們上面剛配置過的client.conf文件,第三部分是/usr/local/3.jpg,意思是指定要上傳哪個目錄下的哪個文件。按回車執行上傳命令后,會返回一個串:group1/M00/00/00/wKicB1jjiFmAOUdkAAHk-VzqZ6w720.jpg,其中group1表示這張圖片被保存在了哪個組當中,M00代表磁盤目錄,如果電腦只有一個磁盤那就只有M00, 如果有多個磁盤,那就M01、M02...等等。00/00代表磁盤上的兩級目錄,每級目錄下是從00到FF共256個文件夾,兩級就是256*256個。wKicB1jjiFmAOUdkAAHk-VzqZ6w720.jpg表示被存儲到storage上的3.jpg被重命名的名字,這樣做的目的是為了防止圖片名字重復。
我們到兩組group所在的四台設備的/fastdfs/storage/data/00/00目錄下查看一下是否有我們剛才上傳的圖片,發現192.168.156.7和192.168.156.8兩台設備上有該圖片,而192.168.156.9和192.168.156.10兩台設備上沒有該圖片。這是由於192.168.156.7和192.168.156.8兩台設備屬於group1,而192.168.156.9和192.168.156.10屬於group2,返回的圖片信息中明確說明了存儲在了group1下面,因此可group2下面是沒有該圖片的。
我們在搭建集群的時候,配置的策略是輪詢策略,那么我們現在再上傳一次該圖片,看是否會存儲到group2下面。如下圖所示,發現這次返回的路徑信息中顯示存儲到了group2下面。
下面再到四台設備下的/fastdfs/storage/data/00/00目錄下查看下圖片信息,發現192.168.156.7和192.168.156.8這兩台設備的圖片還是剛才那一張,並沒有新增圖片。而192.168.156.9和192.168.156.10這兩台設備上新增了我們剛才上傳的圖片,這說明第二次上傳確實是存儲到了group2上面。
大家可以多次上傳圖片,就可以看到存儲確實是一次group1,一次group2,輪詢進行存儲的,如下圖所示。
這里說一個情況,那就是同處一個組的某台設備如果發生了故障,那么這時上傳的文件將只能存放到其它同組設備上,等故障設備修復后,同組的其它設備會自動將數據同步到該故障設備上,這個不用我們干預。
二、配置Ngnix
1.到目前為止,我們還是不能夠使用http方式來上傳或下載文件的,因此我們需要配置下nginx來達到這個目的。我們先關閉除兩個組所在的四台之外的其它所有設備,然后把剩下的這四台設備切換到/usr/local/software目錄下,如下圖所示。
2.這四台設備都需要執行同一個操作,那就是解壓fastdfs-nginx-module_v1.16.tar.gz,我們把命令:tar -zxvf fastdfs-nginx-module_v1.16.tar.gz -C /usr/local/fast/復制到下面那個輸入框中,默認情況下,在這個輸入框中輸入命令並按回車,命令執行的范圍是當前會話,為了同時在四台設備上執行同樣的命令,我們可以切換到"全部Xshell(X)"。如下圖所示。
切換到"全部Xshell(X)"后,如下圖所示,可以看到輸入框左邊的那個圖標切換成了多個窗口的圖標。這時我們把鼠標放到輸入框中,按回車便可同時在四台設備上執行相同的命令。
解壓信息如下圖所示,其它設備我就不一一截圖了。
3.四台設備都需要進入到/usr/local/fast/fastdfs-nginx-module/src/這個目錄下,因此我們把cd /usr/local/fast/fastdfs-nginx-module/src/命令放到下面的輸入框中並按回車。
我們可以看到在/usr/local/fast/fastdfs-nginx-module/src/這個目錄下有個config配置文件,我們需要修改下該文件。
我們在下面的全局輸入框中輸入"vim config"同時打開四台設備的該配置文件,如下圖所示,該配置文件的第四行我們需要做下修改,這是因為我們前面為了查看方便而把東西放到了/usr/local/include下,但是實際執行make install安裝時卻安裝在了/usr/include下面,也就是我們多了一層local目錄,因此我們需要把該行的兩個local目錄去掉。
去掉local目錄后如下圖所示。同樣的,我們把其它三台設備的這行配置也都去掉local目錄。
4.安裝nginx依賴包
把下面四條命令執行一遍。
yum install pcre
yum install pcre-devel
yum install zlib
yum install zlib-devel
5.安裝nginx
四台設備都進入到/usr/local/software目錄下,該目錄下nginx-1.6.2.tar.gz是nginx安裝包。
把解壓命令:tar -zxvf nginx-1.6.2.tar.gz -C /usr/local/輸入到下面的輸入框中,回車即可在這四台設備上同時執行解壓操作。
安裝完之后,我們都進入到/usr/local/nginx-1.6.2/目錄下,然后在下面的輸入框中輸入命令:./configure --add-module=/usr/local/fast/fastdfs-nginx-module/src/並按回車,在四台設備上都加入下模塊並進行檢查。
檢查信息如下圖所示。
檢查完之后,我們在下面輸入框中輸入命令make && make install,回車,四台設備同時執行編譯安裝操作。
安裝信息中沒有出現錯誤信息,說明我們的安裝成功,安裝完之后,我們到/usr/local/目錄下,可以看到多了一個nginx的文件夾,如下圖所示。
下面我們到/usr/local/fast/fastdfs-nginx-module/src/目錄下,我們還是在輸入框中輸入cd /usr/local/fast/fastdfs-nginx-module/src/並回車,四台設備都進入到該目錄下。
我們將cp mod_fastdfs.conf /etc/fdfs/復制到/etc/fdfs/目錄下,我們在下面輸入框中輸入命令cp mod_fastdfs.conf /etc/fdfs/並按回車,四台設備同時進行復制操作。
復制完之后,我們修改/etc/fdfs/目錄下的mod_fastdfs.conf,我們使用命令vim /etc/fdfs/mod_fastdfs.conf來編輯192.168.156.7上的該文件。
需要修改的地方如下:
connect_timeout=10
tracker_server=192.168.156.5:22122
tracker_server=192.168.156.6:22122
storage_server_port=23000//默認就是2300,不用做修改
url_have_group_name=true
store_path0=/fastdfs/storage
group_name=group1
group_count=2
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/fastdfs/storage
[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/fastdfs/storage
修改后如下圖所示。
我們把192.168.156.7上的這個配置文件復制到其它三台設備上,先到/etc/fdfs/目錄下,如下圖所示。
使用命令:scp mod_fastdfs.conf 192.168.156.8:/etc/fdfs/、scp mod_fastdfs.conf 192.168.156.9:/etc/fdfs/、scp mod_fastdfs.conf 192.168.156.10:/etc/fdfs/進行復制。
復制完之后,我們到8、9、10這三台設備上看下配置文件是否就是我們剛才復制過去的文件。由於192.168.156.8這台設備與192.168.156.7這台設備同屬group1,因此192.168.156.8這台設備不用做修改。我們只需把192.168.156.9和192.168.156.10這兩台設備的這個配置文件的group名稱改為group2即可。192.168.156.9的修改如下圖所示,192.168.156.10與之一樣。
接下來,我們需要把/usr/local/fast/FastDFS/conf/目錄下的http.conf和mime.types兩個文件復制到/etc/fdfs/目錄下,由於這四台設備的這步操作都一樣,因此我們在下面的輸入框中輸入cd /usr/local/fast/FastDFS/conf/並回車,都進入到該目錄下,然后輸入命令cp http.conf mime.types /etc/fdfs/並回車,在四台設備同時進行復制操作。
復制完之后,我們給四個節點都創建一下軟鏈接,由於步驟都一樣,因此在下面輸入框中輸入創建軟鏈接命令:ln -s /fastdfs/storage/data/ /fastdfs/storage/data/M00並同時執行就可以了。如下圖所示。
創建完軟鏈接之后,我們來配置下nginx,由於四個節點操作一樣,我們都進入到/usr/local/nginx/conf/這個目錄下,並使用命令vim nginx.conf來編輯該文件,我們需要修改的地方有listen端口,把它由80改成8888,至於原因,是因為我們在上篇博客搭建storage的時候使用的端口是8888,因此這里也需要使用8888。另一個修改的地方是location,修改代碼如下,路徑采用正則表達式來匹配,匹配group0到group9下的M00前綴。由於fastdfs與nginx的模塊結合,因此需要在location當中添加該模塊。
-
location ~ /group([0-9])/M00 {
-
ngx_fastdfs_module;
-
}
修改完192.168.156.7之后,我們把這個配置文件再復制到其它三台設備上。在用scp復制文件到其它設備的時候,反應很慢,加上-o GSSAPIAuthentication=no會快點,但還是不夠快,解決辦法是我們可以在/etc/hosts文件當中配置所有要通信的設備的IP和名稱的映射,這樣scp就很快了。
6.四台設備都啟動nginx,我們在下面的輸入框中輸入/usr/local/nginx/sbin/nginx並按回車,四台設備同時啟動nginx。
7.啟動完nginx之后,我們現在便可以通過http的方式訪問上傳到FastDFS上的文件了,比如我們現在再把那個3.jpg文件上傳一次並拿回顯地址去訪問,如下所示(注意:上傳是在192.168.156.5上進行的)。
-
[root@itcast05 local]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/local/3.jpg
-
group1/M0 0/00/00/wKicCFjj1xqAcN8EAAHk-VzqZ6w619.jpg
-
[root@itcast05 local]#
我們在地址欄輸入:http://192.168.156.7:8888/group1/M00/00/00/wKicCFjj1xqAcN8EAAHk-VzqZ6w619.jpg,這時我們訪問不到圖片,如下圖所示。
原因是我們的虛擬機的防火牆把端口8888給阻攔了,禁止外界訪問,解決方法有兩個:
1.關閉虛擬機的防火牆,並禁止開啟自啟動,大家可以參考:http://blog.csdn.net/u012453843/article/details/52411019這篇博客進行防火牆的關閉操作。
2.不關閉防火牆,只是讓外界可以訪問8888端口,這在實際環境中更實用,因此,我們采用方法2。
方法2的操作方法如下:
使用命令:vim /etc/sysconfig/iptables打開編輯界面,如下圖所示,我們添加的一行內容是:-A INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT
編輯完之后,保存退出,之后需要重新啟動防火牆,重啟的命令:service iptables restart,如下圖所示。
這樣192.168.156.7這台設備的防火牆我們便配置好了,其它三台設備我們也都配置一下防火牆。
配置過防火牆之后,我們再訪問http://192.168.156.7:8888/group1/M00/00/00/wKicCFjj1xqAcN8EAAHk-VzqZ6w619.jpg,這時我們便可以看到圖片了,如下圖所示: