一、使用背景
業務驅動技術需要,原來使用 FTP和 Tomcat upload目錄的缺陷日漸嚴重,受限於業務不斷擴大,想使用自動化構建,自動化部署,Zookeeper中心化,分布式RPC DUBBO等技術時,遇到文件存儲的瓶頸,因此需求一個使用分布式文件系統注入新的活力。
二、環境
參考 http://blog.csdn.net/hhq163/article/details/46536895 這個博主的博客安裝比較新 FastDFS 版本。
在 Docker 下 使用最小化安裝的 Centos6 調試完成。
需要 gcc-c++支持
三、目標
文件系統單機部署到多機部署的彈性伸縮。
四、注意
運行該腳本會檢測 gcc,會運行yum去安裝。
下載gz包完整度。如果不是我指定的數量則退出腳本。
主機IP需要更改,默認是172.17.0.2,請進入到腳本更改。
本腳本適合沒有安裝 nginx和 fastDfs的機器,請酌量。
腳本要改的變量都在腳本前面了,看着改。
五、代碼
1 #!/bin/bash 2 if [ -z $(rpm -qa | grep gcc-c++) ] 3 then 4 yum install -y gcc-c++ 5 fi 6 ######################## user property ######################################### 7 # 安裝tracker機器的IP地址,如果部署其他tracker機器需要更改此ip 8 ip=172.17.0.2 9 # 用戶路徑 10 base_path=/usrdata/fastdfs 11 #指定tracker端口 12 tracker_port=22122 13 #nginx 端口 14 nginx_port=80 15 ################################################################################ 16 17 #進入初始目錄 18 cd ~ 19 #創建數據目錄 20 mkdir -p $base_path 21 22 23 ############################### 1、軟件下載: ################################## 24 25 if [ -f V1.0.7*.gz ] 26 then 27 echo "" 28 else 29 wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz 30 fi 31 32 if [ -f fastdfs*module*.gz ] 33 then 34 echo "" 35 else 36 wget http://jaist.dl.sourceforge.net/project/fastdfs/FastDFS%20Nginx%20Module%20Source%20Code/fastdfs-nginx-module_v1.16.tar.gz 37 fi 38 39 if [ -f V5.05*.gz ] 40 then 41 echo "" 42 else 43 wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz 44 fi 45 46 if [ -f nginx-1.8.0*.gz ] 47 then 48 echo "" 49 else 50 wget http://nginx.org/download/nginx-1.8.0.tar.gz 51 fi 52 53 if [ -f pcre*.gz ] 54 then 55 echo "" 56 else 57 wget http://exim.mirror.fr/pcre/pcre-8.36.tar.gz 58 fi 59 60 if [ -f zlib*.gz ] 61 then 62 echo "" 63 else 64 wget http://zlib.net/zlib-1.2.8.tar.gz 65 fi 66 67 packages=`ls -l | grep 'gz$' | wc -l` 68 echo $packages 69 if [ $packages != 6 ] 70 then 71 echo "網絡錯誤,下載少東西了" 72 exit 73 fi 74 ######################### 判斷文件是否下載好了 end ############################### 75 76 #2、libfastcommon安裝: 77 cd ~ 78 cp V1.0.7.tar.gz /usr/local/ 79 tar -zxvf V1.0.7.tar.gz 80 cd libfastcommon-1.0.7 81 ./make.sh 82 ./make.sh install 83 rm -f /usr/local/V1.0.7.tar.gz 84 85 #libfastcommon.so默認安裝到了/usr/lib64/libfastcommon.so,而FastDFS主程序設置的lib目錄是/usr/local/lib,所以設置軟連接 86 ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so 87 ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so 88 ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so 89 ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so 90 91 #3、安裝FastDFS: 92 cd ~ 93 tar -zxvf V5.05.tar.gz -C /usr/local 94 cd /usr/local/fastdfs-5.05/ 95 96 ./make.sh 97 ./make.sh install 98 99 100 #配置文件設置: 101 cd /etc/fdfs 102 cp tracker.conf.sample tracker.conf 103 cp storage.conf.sample storage.conf 104 cp client.conf.sample client.conf 105 106 #詳細設置見附件 107 #tracker.conf配置中要修改的幾個項: 108 #bind_addr=172.17.0.2 109 #port=22122 110 #http.server_port=8181 111 sed -i "s#\(bind_addr\).*#\1=$ip#" tracker.conf 112 sed -i "s#\(^port\).*#\1=$tracker_port#" tracker.conf 113 sed -i "s#\(base_path\).*#\1=$base_path#" tracker.conf 114 sed -i "s#\(^http.server_port\).*#\1=8181#" tracker.conf 115 116 117 #storage.conf配置中要修改的幾個項: 118 #group_name=group1 119 #bind_addr=172.17.0.2 120 #port=23000 121 #base_path=/usrdata/fastdfs 122 #store_path0=/usrdata/fastdfs 123 #tracker_server=172.17.0.2:22122 124 #http.server_port=8888 125 sed -i "s#\(bind_addr\).*#\1=$ip#" storage.conf 126 sed -i "s#\(base_path\).*#\1=$base_path#" storage.conf 127 sed -i "s#\(store_path0\).*#\1=$base_path#" storage.conf 128 sed -i "s#\(tracker_server\).*#\1=$ip:$tracker_port#" storage.conf 129 sed -i "s#\(http.server_port\).*#\1=8888#" storage.conf 130 131 #(3)啟動 132 #啟動tracker storage.conf 133 fdfs_trackerd /etc/fdfs/tracker.conf 134 fdfs_storaged /etc/fdfs/storage.conf 135 136 ##############################4、安裝nginx插件:##################################### 137 #(1)安裝 138 cd ~ 139 tar -zxvf fastdfs-nginx-module_v1.16.tar.gz 140 141 142 #(2)config文件修改: 143 #vi config 144 #修改如下配置,我這里原來是 145 #CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/" 146 #改成 147 #CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/" 148 #這個是很重要的,不然在nginx編譯的時候會報錯的,我看網上很多在安裝nginx的fastdfs的插件報錯,都是這個原因,而不是版本不匹配。 149 cd fastdfs-nginx-module/src/ 150 sed -i "s#\(CORE_INCS=\"\$CORE_INCS \).*#\1/usr/include/fastdfs /usr/include/fastcommon/\"#" config 151 152 153 154 #修改配置 155 #group_name=group1 156 #tracker_server=172.17.0.2:22122 157 #store_path0=/usrdata/fastdfs 158 #base_path=/usrdata/fastdfs 159 #url_have_group_name = true 160 sed -i "s#\(group_name\).*#\1=group1#" mod_fastdfs.conf 161 sed -i "s#\(tracker_server\).*#\1=$ip:$tracker_port#" mod_fastdfs.conf 162 sed -i "s#\(store_path0\).*#\1=$base_path#" mod_fastdfs.conf 163 sed -i "s#\(base_path\).*#\1=$base_path#" mod_fastdfs.conf 164 sed -i "s#\(url_have_group_name\).*#\1=true#" mod_fastdfs.conf 165 166 cp mod_fastdfs.conf /etc/fdfs 167 168 169 170 #2)、配置文件服務器的軟連接 171 ln -s /usrdata/fastdfs/data /usrdata/fastdfs/data/M00 172 #(配置文件中stoage存放數據的路徑) 173 174 175 #同時將以下兩個文件復制到/etc/fdfs/ 176 cp /usr/local/fastdfs-5.05/conf/http.conf /etc/fdfs/ 177 cp /usr/local/fastdfs-5.05/conf/mime.types /etc/fdfs/ 178 179 180 #5、nginx安裝: 181 #在每個Storage服務器上安裝Nginx 182 183 #(1)pcre安裝: 184 cd ~ 185 tar -zxvf pcre-8.36.tar.gz 186 cd pcre-8.36 187 ./configure 188 make && make install 189 cd ../ 190 191 ln -s /usr/local/lib/libpcre.so.1 /lib64/ 192 193 #(2)zlib安裝: 194 cd ~ 195 tar -zxvf zlib-1.2.8.tar.gz 196 cd zlib-1.2.8 197 ./configure 198 make && make install 199 200 201 #(3)nginx安裝: 202 cd ~ 203 tar -zxvf nginx-1.8.0.tar.gz 204 cd nginx-1.8.0 205 ipath=`whoami` 206 ./configure --prefix=/usr/local/nginx --add-module=/$ipath/fastdfs-nginx-module/src 207 make 208 make install 209 210 211 212 213 #在server中添加 214 # 215 #location /group1/M00{ 216 # root /usrdata/fastdfs/data; 217 # ngx_fastdfs_module; 218 #} 219 220 #判斷文件內容是否已經寫入 221 nginxconf=`sed -n '/group1/p' /usr/local/nginx/conf/nginx.conf` 222 223 if [ -z $nginxconf ] 224 then 225 sed -i "s@#error_page.*@location /group1/M00{root /usrdata/fastdfs/data;ngx_fastdfs_module;}@" /usr/local/nginx/conf/nginx.conf 226 else 227 echo "nothing todo" 228 fi &> /dev/null 229 230 231 232 233 啟動: 234 kill -9 $(ps -A | grep nginx | cut -d "?" -f 1 ) &> /dev/null 235 /usr/local/nginx/sbin/nginx 236 237 238 安裝完成。 239 #6、測試文件上傳: 240 sed -i "s#\(base_path=\).*#\1$base_path#" /etc/fdfs/client.conf 241 sed -i "s#\(tracker_server=\).*#\1$ip:$tracker_port#" /etc/fdfs/client.conf 242 cd ~ 243 echo "hello world" > 1.txt 244 #/usr/bin/fdfs_test /etc/fdfs/client.conf upload 1.txt 245 result=`/usr/bin/fdfs_test /etc/fdfs/client.conf upload 1.txt |grep url | grep -v big` 246 echo "得到類似這樣的 $result" 247 curl ${result:17}
六、成功示意圖
輸出 hello world 為成功。