一键架设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 为成功。