zoukankan      html  css  js  c++  java
  • 一键架设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 为成功。

  • 相关阅读:
    中文乱码—Servlet—SpringMVC
    (转+整理)C# BinaryFormatter进行序列化与反序列化
    (转)C# 之泛型详解
    (转)C#中base关键字的几种用法
    (转)C# Where关键词的用法
    (转)c# 断言类
    (转+整理)C#中动态执行代码
    (转)c# control.Invoke control.BeginInvoke
    (转)c# String与StringBuilder
    (转)winform之ListView
  • 原文地址:https://www.cnblogs.com/zengyufei/p/5615572.html
Copyright © 2011-2022 走看看