池偏一 | 博客 DEDICATED OPERATION AND MAINTENANCE DEVELOPMENT.
登录
X
X
  • FastDFS 双tracker负载均衡 及多组存储配置
  • 应用场景: 三台服务器分别做三组存储,并且需要两台tracker地址做主备关系,当一台down机后需要另外一台可以提供正常的访问连接


    #注:此处不考虑存储数据安全性,如果需要保障数据不丢失,可以分别每台存储配置两组group(相同group之间数据会自动备份) ,三台服务器group分别为:


    第一台服务器:group1  group2


    第二台服务器:group1 group3


    第三台服务器:group2 group3




    需求图如下:


    image.png




    一: 为三台服务器分别部署FASTDFS + Nginx-fastdfs模块


    -- 安装所需依赖:


    1. 安装libfastcommon


    cd /opt
    yum install git xz gcc g++ gcc-c++ autoconf automake make unzip  -y
    git clone https://github.com/happyfish100/libfastcommon.git
    cd libfastcommon/
    ./make.sh
    ./make.sh install



    #设置环境变量或创建软链接


    export LD_LIBRARY_PATH=/usr/lib64/
    ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so



    2.  安装libevent


    cd /opt
    wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
    tar zxvf libevent-2.0.21-stable.tar.gz
    cd libevent-2.0.21-stable
    ./configure --prefix=/usr/local/
    make clean
    make && make install
    ls –al /usr/lib | grep libevent(或ls –al /usr/local/lib | grep libevent)

    #如果有返回结果则安装正常

    ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib/libevent-2.0.so.5
    ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5





    -- 安装配置FastDFS


    1.下载安装fastdfs


    https://sourceforge.net/projects/fastdfs/files/?source=navbar(该网址下载所需版本FastDFS 此处使用4.0.6为例)

    cd /opt
    tar -zxvf FastDFS_4.06.tar.gz
    cd FastDFS
    ./make.sh
    ./make.sh install



    2. 创建文件存放路径


    mkdir -p /home/fastdfs/tracker   #创建tracker文件存放路径
    mkdir -p /home/fastdfs/storage    #创建storage 文件存放路径
    mkdir -p /home/fastdfs/client    #创建client 文件存放路径

    cd /etc/fdfs/    

    #查看目录下文件是否齐全,应该有client.conf http.conf mime.types     storage.conf tracker.conf  5个文件,如果没有,libevent 安装有问题



    3. 修改配置文件(172.18.4.217-218 由于每台均作为tracker 所以需要全部配置,而172.18.4.219只作为存储服务器所以不需要配置tracker.conf ;每台服务器配置内容如组名,存放路径等按真实情况填入 )



    vim /etc/fdfs/tracker.conf #编辑tracker配置文件

    disabled=false #启用配置文件
    bind_addr=     #解析主机地址,空则解析所有主机
    port=22122     #tracker服务端口
    connect_timeout=30   #连接超时时间30S
    network_timeout=60   #网络超时时间60S    
    base_path=/usr/share/fastdfs/tracker   #tracker基础数据存储路径及日志存放路径
    max_connections=256  #最大并发连接数
    work_threads=4         #工作线程数,最好和cpu核数保持一致
    store_lookup=0         #选择上传文件模式 0代表group轮询 1指定特定group 2选择空间最大的group
    #store_group=        #上传文件组,如果模式为1,则必须设置成核特定group一致的组名
    store_server=0        #选择存储服务器上传文件 0代表轮询,1根据通过IP第的顺序 2通过优先级
    store_path=0        #选择哪块存储盘上传文件 0代表轮询,2代表优先最大存储空间盘(路径)
    download_server=0    #选择哪台存储服务器下载文件0代表轮询,1代表当前文件上传的源服务器
    reserved_storage_space = 10% #系统保留存储空间10%
    ######其余都默认就好
    vim /etc/fdfs/storage.conf #编辑存储配置文件
    group_name=group1   #存储组名
    client_bind=true          #当连接其他服务器时解析该主机地址
    port=23000                #storage端口 23000
    base_path=/usr/share/fastdfs/storage  #基础存储数据和日志文件
    store_path0=/usr/share/fastdfs/storage #group 所占用的目录或硬盘,有几个写几个
    tracker_server=172.18.4.217:22122  #指定tracker1服务器
    tracker_server=172.18.4.218:22122  #指定tracker2服务器
    vim /etc/fdfs/client.conf
    base_path=/usr/share/fastdfs/client   #基础数据和日志文件
    tracker_server=172.18.4.217:22122   #tracker1服务器
    tracker_server=172.18.4.218:22122   #tracker2服务器



    -- 下载安装nginx 及 nginx-fastdfs模块


    1. 下载安装配置fastdfs-nginx   


    https://sourceforge.net/projects/fastdfs/files/?source=navbar 下载nginx-fastdfs模块压缩包

    cd /opt/
    tar zxvf fastdfs-nginx-module-v1.16.tar.gz
    cd fastdfs-nginx-module/src
    cp mod_fastdfs.conf /etc/fdfs/ #将mod_fastdfs.conf 拷贝到fdfs下进行配置
    vim  /etc/fdfs/mod_fastdfs.conf
    base_path=/home/fastdfs/storage  #修改成和storage 存放路径一致
    tracker_server=172.12.4.201:22122    #配置成tracker server 地址和端口
    url_have_group_name = true #url 中是否包组名
    store_path0=/home/fastdfs/storage #文件存放路径,与storage 一致
    group_count = 0 #0代表单组,非零代表多组,一般设置几就为几组
    group_count = 1
    [group1]
    group_name=group1
    storage_server_port=23000
    store_path_count=1
    store_path0=/usr/share/fastdfs/storage



    2. 下载所需依赖库


    https://sourceforge.net/projects/pcre/files/ #下载所需PCRE

    cd /opt
    tar xf pcre-8.12.tar.gz
    https://sourceforge.net/projects/zlib/ #下载zlib
    tar xf zlib-1.2.8.tar.xz




    3. 下载安装nginx


    wget http://nginx.org/download/nginx-1.8.1.tar.gz  #下载nginx
    tar -zxvf ngin-1.8.1.tar.gz
    cd nginx-1.8.1
    ./configure --prefix=/usr/local/nginx --with-zlib=/opt/zlib-1.2.8     --with-pcre=/opt/pcre-8.12 --add-module=/opt/fastdfs-nginx-module/src
    make && make install

      


    -- 配置nginx


      第一台:172.18.4.217  

                    #172.18.4.217 nginx配置


    vim /usr/local/nginx/conf/nginx.conf
    user root;  
    worker_processes 4;  
    events {  
    worker_connections 40960;
    use epoll;
    }  
    error_log /usr/local/nginx/logs/error.log;  
    pid /usr/local/nginx/logs/nginx.pid;  
    http {  
    server_names_hash_bucket_size 128;  
    client_header_buffer_size 32k;  
    large_client_header_buffers 4 32k;  
    client_max_body_size 300m;  
    sendfile on;  
    tcp_nopush on;  
    proxy_redirect off;  
    proxy_set_header Host $http_host;  
    proxy_set_header X-Real-IP $remote_addr;  
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
    proxy_connect_timeout 90;  
    proxy_send_timeout 90;  
    proxy_read_timeout 90;  
    proxy_buffer_size 16k;  
    proxy_buffers 4 64k;  
    proxy_busy_buffers_size 128k;  
    proxy_temp_file_write_size 128k;  
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '  
    '$status $body_bytes_sent "$http_referer" '  
    '"$http_user_agent" "$http_x_forwarded_for"';  
    access_log /usr/local/nginx/logs/access.log main;  
    upstream fdfs_group1 {
    server 172.18.4.217:8080 weight=1 max_fails=2 fail_timeout=30s;
    }  
    upstream fdfs_group2 {
    server 172.18.4.218:8080 weight=1 max_fails=2 fail_timeout=30s;
    }  
    upstream fdfs_group3 {
    server 172.18.4.219:8080 weight=1 max_fails=2 fail_timeout=30s;
    }
    include /usr/local/nginx/conf.d/*.conf;  
    }



                    #172.18.4.217 tracker.conf 配置


    vim /usr/local/nginx/conf.d/tracker.conf
    server {  
    listen 80;
    server_name 172.18.4.217;  
    location ~ /group1/M00 {
    proxy_next_upstream http_502 http_504 error timeout invalid_header;  
    proxy_pass http://fdfs_group1;  
    expires 30d;  
    }  
    location ~ /group2/M00 {
    proxy_next_upstream http_502 http_504 error timeout invalid_header;  
    proxy_pass http://fdfs_group2;  
    expires 30d;  
    }  
    location ~ /group3/M00 {
    proxy_next_upstream http_502 http_504 error timeout invalid_header;  
    proxy_pass http://fdfs_group3;  
    expires 30d;  
    }  
    }


                    #172.18.4.217 storage.conf配置


    server {
    listen    8080;
    server_name    172.18.4.217;
    location ~ /group1/M00 {
    root    /usr/share/fastdfs/storage/data;
    index    index.html index.htm;
    ngx_fastdfs_module;
    }
    }

     




            第二台:172.18.4.218




    vim /usr/local/nginx/conf/nginx.conf
    user root;  
    worker_processes 4;  
    events {  
    worker_connections 40960;
    use epoll;
    }  
    error_log /usr/local/nginx/logs/error.log;  
    pid /usr/local/nginx/logs/nginx.pid;  
    http {  
    server_names_hash_bucket_size 128;  
    client_header_buffer_size 32k;  
    large_client_header_buffers 4 32k;  
    client_max_body_size 300m;  
    sendfile on;  
    tcp_nopush on;  
    proxy_redirect off;  
    proxy_set_header Host $http_host;  
    proxy_set_header X-Real-IP $remote_addr;  
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
    proxy_connect_timeout 90;  
    proxy_send_timeout 90;  
    proxy_read_timeout 90;  
    proxy_buffer_size 16k;  
    proxy_buffers 4 64k;  
    proxy_busy_buffers_size 128k;  
    proxy_temp_file_write_size 128k;  
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '  
    '$status $body_bytes_sent "$http_referer" '  
    '"$http_user_agent" "$http_x_forwarded_for"';  
    access_log /usr/local/nginx/logs/access.log main;  
    upstream fdfs_group1 {
    server 172.18.4.217:8080 weight=1 max_fails=2 fail_timeout=30s;
    }  
    upstream fdfs_group2 {
    server 172.18.4.218:8080 weight=1 max_fails=2 fail_timeout=30s;
    }  
    upstream fdfs_group3 {
    server 172.18.4.219:8080 weight=1 max_fails=2 fail_timeout=30s;
    }
    include /usr/local/nginx/conf.d/*.conf;  
    }
    vim /usr/local/nginx/conf.d/tracker.conf
    server {
    listen 80;
    server_name 172.18.4.218;
    location ~ /group1/M00 {
    proxy_next_upstream http_502 http_504 error timeout invalid_header;
    proxy_pass http://fdfs_group1;
    expires 30d;
    }
    location ~ /group2/M00 {
    proxy_next_upstream http_502 http_504 error timeout invalid_header;
    proxy_pass http://fdfs_group2;
    expires 30d;
    }
    location ~ /group3/M00 {
    proxy_next_upstream http_502 http_504 error timeout invalid_header;
    proxy_pass http://fdfs_group3;
    expires 30d;
    }
    }
    vim /usr/local/nginx/conf.d/storage.conf
    server {
    listen  8080;
    server_name     172.18.4.218;
    location ~ /group2/M00 {
    root    /usr/share/fastdfs/storage/data;
    index   index.html index.htm;
    ngx_fastdfs_module;
    }
    }



            第三台:172.18.4.219


    vim /usr/local/nginx.conf
    user  root;
    worker_processes  4;
    events {
    worker_connections  40960;
    }
    http {
    include     mime.types;
    default_type        application/octet-stream;
    sendfile    on;
    keepalive_timeout   65;
    server {
    listen  8080;
    server_name     172.18.4.219;
    location / {
    root        html;
    index       index.html index.htm;
    }
    location ~ /group3/M00 {
    root        /usr/share/fastdfs/storage/data;
    index       index.html index.htm;
    ngx_fastdfs_module;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
    root        html;
    }
    }
    }


    #配置完成,接下来启动服务并测试:


    172.18.4.217-218 三个进程全启动,172.18.4.219 只需要启动storage 和nginx 即可


    usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf
    /usr/local/bin/fdfs_storaged /etc/fdfs/storage.conf
    /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

    检查是否启动成功:


    ps aux |grep fdfs
    netstat -ntpl |grep fdfs
    ps aux |grep nginx
    netstat -ngpl |grep nginx
    fdfs_monitor /etc/fdfs/client.conf 查看状态是否正常


    编辑3个文件: 

    echo “1111” >>/opt/1.txt && echo “2222” >>/opt/2.txt && echo “3333” >>/opt/3.txt

    上传文件:


    usr/local/bin/fdfs_test /etc/fdfs/client.conf upload 1.txt 
    /usr/local/bin/fdfs_test /etc/fdfs/client.conf upload 2.txt 
    /usr/local/bin/fdfs_test /etc/fdfs/client.conf upload 3.txt

    #返回结果中会把上传完成的url 打印出来,看三个上传的url group是否轮询变化,如果停掉172.18.4.217 的tracker 返回url是不是地址变成172.18.4.218,


    如都成功则 复制URL在浏览器中打开看是否正常


  • posted @ 2019-01-29 by 池偏一 阅读(107) 评论(0)
© 2017 池偏一 | 赣ICP备 17014207号