一键架设FastDFS分布式文件系统脚本,基于Centos6

一、使用背景

  业务驱动技术需要,原来使用 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 为成功。

posted @ 2016-06-24 23:26  曾玉飞  阅读(2728)  评论(0编辑  收藏  举报