zoukankan      html  css  js  c++  java
  • (二)FastDFS 高可用集群架构学习---搭建

    一、单group 单磁盘 的 FastDFS 集群

      a、前期准备

        1、系统软件说明:

    名称 说明
    CentOS 7.x(安装系统)
    libfastcommon FastDFS分离出的一些公用函数包
    FastDFS FastDFS本体
    fastdfs-nginx-module FastDFS和nginx的关联模块,解决组内同步延迟问题
    nginx Web访问 storage Server 文件  

        2、设备准备

          

        3、基础环境准备

           目录准备:

    存放安装包: /opt/fastdfs
    日志和数据存储位置: /data/fastdfs
    nginx安装目录: /home/software/nginx

            #mkdir -p  /opt/fastdfs  /data/fastdfs  /home/software/nginx

          准备基础系统环境:

    1 yum groups install Development Tools -y
    2 yum install perl -y
    3 yum -y install vim wget lrzsz      #基础工具
    4 yum -y install gcc-c++ zlib-devel pcre-devel     #nginx 依赖

          安装包准备:

    libfastcommon https://github.com/happyfish100/libfastcommon/archive/V1.0.39.tar.gz
    FastDFS https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
    Nginx wget http://nginx.org/download/nginx-1.14.0.tar.gz
    fastdfs-nginx-module https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz

             

        b、部署集群

          1、装软件 

    ####安装 libfastcommon
    $ cd /opt/fastdfs
    $ tar -zxvf libfastcommon-1.0.39.tar.gz
    $ cd libfastcommon-1.0.39/
    $ ./make.sh
    $ ./make.sh install
    
    ####安装 FastDFS
    $ cd /opt/fastdfs
    $ tar -zxvf fastdfs-5.11.tar.gz
    $ cd fastdfs-5.11/
    $ ./make.sh
    $ ./make.sh install
    
    
    ####安装 fastdfs-nginx-module
    $ cd /opt/fastdfs
    $ tar -zxvf  fastdfs-nginx-module-1.20.tar.gz
    
    ####安装 Nginx
    $ cd /opt/fastdfs
    $ tar -zxvf nginx-1.14.0.tar.gz
    $ cd nginx-1.14.0
    $ ./configure --prefix=/home/software/nginx --add-module=/opt/fastdfs/fastdfs-nginx-module-1.20/src
    $ make && make install    ###如果报错:#include "common_define.h"    报错如下图:
      修改
    /opt/fastdfs/fastdfs-nginx-module-1.20/src/config 文件为如下:
        ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
        CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
    然后重新:
    $ ./configure --prefix=/home/software/nginx --add-module=/opt/fastdfs/fastdfs-nginx-module-1.20/src
    $ make && make install 

           

          

          2、配置 tracker server( node1和node2 配置)  

    $ mv /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf  #准备配置文件
    $ vim  /etc/fdfs/tracker.conf  #需要修改的内容如下
    bind_addr=服务器IP port
    =22122 # tracker服务器端口(默认22122,一般不修改) base_path=/data/fastdfs # 存储日志和数据的根目录
    max_connections=1024
    work_threads=4
    store_lookup=2 #load balance, select the max free space group to upload file
    store_server=0 #"0"代表轮询,下同
    store_path=0
    download_server=0
    reserved_storage_space = 25%
    log_level=debug
    run_by_group=root
    run_by_user=root
    #编辑启动文件 $ vim
    /usr/lib/systemd/system/fastdfs-tracker.service [Unit] Description=The FastDFS File server After=network.target remote-fs.target nss-lookup.target [Service] Type=forking ExecStart=/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start ExecStop=/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf stop ExecRestart=/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart [Install] WantedBy=multi-user.target #### 加载配置,启动服务 #### $ systemctl daemon-reload $ systemctl enable fastdfs-tracker.service $ systemctl start fastdfs-tracker.service $ netstat -tulnp #查看服务是否启动,端口是否打开

    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
    tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1034/master
    tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 2263/fdfs_trackerd

          3、配置 Storage server (node1,node2,node3 配置      

    $ mv /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf 
    $ vim /etc/fdfs/storage.conf   #需要修改的内容如下
    bind_addr=每服务器IP port
    =23000 # storage服务端口(默认23000,一般不修改) base_path=/data/fastdfs # 数据和日志文件存储根目录
    max_connections=1024
    work_threads=4
    sync_wait_msec=50 #同步文件时,如果从binlog中没有读到要同步的文件,休眠N毫秒后重新读取。0表示不休眠,立即再次尝试读取。出于CPU消耗考虑,不建议设置为0。如何希望同步尽可能快一些,可以将本参数设置得小一些,比如设置为10ms
    sync_interval=0
    sync_start_time=00:00
    sync_end_time=23:59
    write_mark_file_freq=500 # 同步完N个文件后,把storage的mark文件同步到磁盘.注:如果mark文件内容没有变化,则不会同步 store_path0
    =/data/fastdfs # 第一个存储目录
    subdir_count_per_path=256 tracker_server
    =192.168.3.50:22122 # tracker服务器IP和端口 tracker_server=192.168.3.53:22122 # tracker服务器IP和端口
    log_level=debug
    run_by_group=root
    run_by_user=root http.server_port
    =8888 # http访问文件的端口(默认8888,看情况修改,和nginx中保持一致) #编辑启动文件 $ vim /usr/lib/systemd/system/fastdfs-storage.service [Unit] Description=The FastDFS File server After=network.target remote-fs.target nss-lookup.target [Service] Type=forking ExecStart=/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start ExecStop=/usr/bin/fdfs_storaged /etc/fdfs/storage.conf stop ExecRestart=/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart [Install] WantedBy=multi-user.target #### 加载配置,启动服务 #### $ systemctl daemon-reload $ systemctl enable fastdfs-storage.service $ systemctl start fastdfs-storage.service $ netstat -tulnp #查看服务是否启动,端口是否打开

      Active Internet connections (only servers)
      Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
      tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1034/master
      tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 2263/fdfs_trackerd
      tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 597/rpcbind
      tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1115/sshd
      tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 2338/fdfs_storaged

    
    #### 查看集群状态 ####
    $ fdfs_monitor /etc/fdfs/storage.conf list

           

           4、置测试 Client(任意node上配置,用于测试上传文件)  

    $ mv /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
    $ vim /etc/fdfs/client.conf    #需要修改的内容如下
    connect_timeout=30
    network_timeout=60 base_path
    =/data/fastdfs tracker_server=192.168.3.50:22122 # tracker服务器IP和端口 tracker_server=192.168.3.53:22122 # tracker服务器IP和端口 #### 测试上传文件 aa.jpg #### $ fdfs_upload_file /etc/fdfs/client.conf aa.jpg #aa.jpg 为要上传的图片

    注:返回的文件名需要记录下后期web 访问时需要用到。
    返回如下:group1/M00/00/00/wKgDMmD5PSGAUexsAAYevEPlQIk762.jpg

           

        

        5、配置astdfs-nginx-module 和 Nginx (node1,node2,node3 配置 

    ####配置 fastdfs-nginx-module ####
    $ cp /opt/fastdfs/fastdfs-nginx-module-1.20/src/mod_fastdfs.conf /etc/fdfs
    $ vim /etc/fdfs/mod_fastdfs.conf   #需要修改的内容如下
    connect_timeout=2
    network_timeout=30
    group_name=group1 tracker_server
    =192.168.3.50:22122 # tracker服务器IP和端口 tracker_server=192.168.3.53:22122 # tracker服务器IP和端口 base_path=/data/fastdfs
    load_fdfs_parameters_from_tracker=true
    storage_sync_file_max_delay = 86400
    use_storage_id = false
    url_have_group_name = true #设置url中是否包含group名字,必须包含,否则无法正常反问到文件 store_path0
    =/data/fastdfs
    log_level=info
    #### 配置 Nginx #### $
    cp /opt/fastdfs/fastdfs-5.11/conf/http.conf /etc/fdfs/ #供nginx访问使用 $ cp /opt/fastdfs/fastdfs-5.11/conf/mime.types /etc/fdfs/ #供nginx访问使用 $ vim /home/software/nginx/conf/nginx.conf #修改和添加如下配置 修改端口:8888 添加配置:location /group1/ { root /data/fastdfs; ngx_fastdfs_module; } #具体如下图 $ cd /home/software/nginx/sbin $ ./nginx -V #查看安装详情 $ ./nginx -v #查看版本 $ ./nginx -t -c /home/software/nginx/conf/nginx.conf #检测配置文件 $ ./nginx #启动nginx $ pkill -9 nginx #停止nginx

           

           检测结果如下:is ok,表示配置没有问题

          

        6、浏览器访问:访问如下链接,均返回相同结果。

          http://192.168.3.50:8888/group1/M00/00/00/wKgDMmD5PSGAUexsAAYevEPlQIk762.jpg 

          http://192.168.3.53:8888/group1/M00/00/00/wKgDMmD5PSGAUexsAAYevEPlQIk762.jpg

          http://192.168.3.58:8888/group1/M00/00/00/wKgDMmD5PSGAUexsAAYevEPlQIk762.jpg   

             

    二、多group 多磁盘 的 FastDFS 集群  

    较之前变化如下:

      1、目录准备:

    存放安装包: /opt/fastdfs
    数据存储位置: /data/fastdfs
    nginx安装目录: /home/software/nginx
    磁盘存储目录: /data/dataN(N:表示磁盘编号)

    #mkdir -p  /opt/fastdfs  /data/fastdfs  /home/software/nginx

      2、设备变化

          

     

      3、配置变化:    

     

    #### storage.conf 、mod_fastdfs.conf  #####
    group_name= 更具规划分组写入名称,例:group1,group2,group3
    store_path_count= 2    # 磁盘数量,本案例中有两个磁盘
    store_path0=/data/data1
    store_path1=/data/data2
    
    #### nginx.conf ####
    添加配置:location /group1/ {      #此处名称为所属组名称,本案例:group1-3
                root /data/fastdfs;
                ngx_fastdfs_module;
            }

      4、多组模式。组内的每个Nginx 只能提供访问本组内部的数据,不能访问其他组数据,因此前边需要在加一层Nginx 代理。 

    yum -y install vim nginx    
    vim /etc/nginx/nginx.conf
    user root;
        include /etc/nginx/conf.d/*.conf;
    ## 添加如下信息   
        upstream fdfs_group01 {
           server 192.168.3.20:8888 weight=1 max_fails=2 fail_timeout=30s;
           server 192.168.3.51:8888 weight=1 max_fails=2 fail_timeout=30s;
        }
        upstream fdfs_group02 {
           server 192.168.3.38:8888 weight=1 max_fails=2 fail_timeout=30s;
           server 192.168.3.53:8888 weight=1 max_fails=2 fail_timeout=30s;
        }
        upstream fdfs_group03 {
           server 192.168.3.49:8888 weight=1 max_fails=2 fail_timeout=30s;
           server 192.168.3.58:8888 weight=1 max_fails=2 fail_timeout=30s;
        }
    
        server {
            listen       80;
            server_name  192.168.3.55;
            #root         /usr/share/nginx/html;
    
        location /group1/ {
            proxy_pass http://fdfs_group01;
        }
        location /group2/ {
            proxy_pass http://fdfs_group02;
        }        
        location /group3/ {
            proxy_pass http://fdfs_group03;
        }

     注:如果没有关闭SElinux,临时关闭,需要在fastdfs 节点上执行以下下命令Nginx 才可以被正常代理。

      # setenforce 0

      # setsebool -P httpd_can_network_connect 1

    在客户端访问如下链接均显示正常:

      192.168.3.55/group1/M00/00/00/wKgDFGD6b9KALiDLAAYevEPlQIk376.jpg
      192.168.3.55/group1/M01/00/00/wKgDFGD6cNGAXGzwAAT4rd1P2iI215.jpg
      192.168.3.55/group2/M00/00/00/wKgDNWD6cFyAEm30AAYevEPlQIk448.jpg
      192.168.3.55/group2/M01/00/00/wKgDJmD6cQOAXzi1AAT4rd1P2iI341.jpg
      192.168.3.55/group3/M00/00/00/wKgDOmD6cHuAcdpIAAT4rd1P2iI451.jpg
      192.168.3.55/group3/M01/00/00/wKgDMWD6cH6AD1ZQAAT4rd1P2iI173.jpg

     

     

     

     

     

    IT运维开发路上的点点滴滴。。。
  • 相关阅读:
    Bridge Design Pattern
    终于写了个自己的简单MVC框架!
    c 第1章的习题 列表 ! :)
    如何创建 linux 下的计划任务运行 php 文件?
    c 的开篇(自学 c 语言)
    一连串问题,都和.net framework有关
    信号与信号量的区别[转]
    永久设置SecureCRT的背景色和文字颜色方案[转]
    do...while(0)的妙用 【转】
    给Ubuntu软件升级命令 [转]
  • 原文地址:https://www.cnblogs.com/weijie0717/p/15046321.html
Copyright © 2011-2022 走看看