fastdfs集羣版搭建(一)- storage集羣搭建與統一入口訪問

前言

  接着上篇博客:詳細的最新版fastdfs單機版搭建,今天來說講fastdfs的集羣搭建,限於篇幅,今天先搭建stoarge集羣,並實現統一的http訪問方式;html

  沒看我上篇博客的小夥伴,最好先去瞅一眼,這篇博客不少都是基於上篇博客的;java

  不懂fastfds原理的,能夠先去看看:分佈式文件系統FastDFS設計原理,瞭解了原理以後,再來看這篇博客會輕鬆不少;nginx

環境準備

  一、機器準備

    VIP:192.168.1.200centos

    centos211(192.168.1.211):nginx + keepalived master服務器

    centos212(192.168.1.212:nginx + keepalived backupapp

    centos210(192.168.1.210):tracker負載均衡

    fastdfs4(192.168.1.209):trackertcp

    fastdfs3(192.168.1.208):storage(group2) + fastdfs-nginx-module + nginx分佈式

    fastdfs2(192.168.1.207):storage(group2) + fastdfs-nginx-module + nginxide

    fastdfs1(192.168.1.206):storage(group1) + fastdfs-nginx-module + nginx

    fastdfs  (192.168.1.205):storage(group1) + fastdfs-nginx-module + nginx

  二、最終各組件之間的關係圖以下

fastdfs安裝

  不管是tracker仍是storage的搭建,都是在fastdfs的基礎上進行的,安裝好了fastdfs以後,配置tracker或者storage就能夠啓動tracker服務或者storage服務了;fastdfs安裝可參考詳細的最新版fastdfs單機版搭建

tracker配置

  本文只是簡單利用了tracker集羣上傳了圖片,更多的tracker集羣 + nginx配置我放在下篇博客講解

  兩臺tracker機器配置能夠徹底一致,只須要在trackerd.conf修改以下配置項

         base_path=/data/fastdfs/tracker

  建立數據目錄並啓動tracker服務,注意是兩臺

         [root@centos210 fdfs]# mkdir -p /data/fastdfs/tracker

         [root@fastdfs4 ~]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

storage配置

  group1

    兩臺機器配置能夠徹底同樣,修改storage.conf以下配置項

      base_path=/data/fastdfs/storage

      store_path0=/data/fastdfs/storage

      tracker_server=192.168.1.209:22122

      tracker_server=192.168.1.210:22122

      group_name=group1

    啓動group1的兩臺,並查看日誌

      [root@fastdfs data]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf

      [root@fastdfs logs]# tailf /data/fastdfs/storage/logs/storaged.log

      fastdfs(205)

      

      fastdfs1(206)

      

  group2

    兩臺機器配置能夠徹底同樣,修改storage.conf以下配置項

      base_path=/data/fastdfs/storage

      store_path0=/data/fastdfs/storage

      tracker_server=192.168.1.209:22122

      tracker_server=192.168.1.210:22122

      group_name=group2

    啓動group2的兩臺,並查看日誌

      [root@fastdfs data]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf

      [root@fastdfs logs]# tailf /data/fastdfs/storage/logs/storaged.log

      fastdfs2(207)

      

      fastdfs3(208)

      

  能夠看到storage都已所有連上tracker,其中tracker 209做爲tracker leader 

  tracker高可用性

    從上圖中咱們能夠看到192.168.1.209這臺設備是做爲tracker的leader的,咱們如今人爲關掉192.168.1.209的tracker

    [root@fastdfs4 data]# /usr/bin/stop.sh /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf

    

    storage上日誌

      [root@fastdfs3 ~]#  tailf /data/fastdfs/storage/logs/storaged.log

      fastdfs3(208)

      

      fastdfs2(207)

      

      fastdfs1(206)

      

      fastdfs(205)

      

    210已經做爲tracker leader了,而tracker 209已經連不上了,由於209的tracker服務停了;再啓動209的tracker服務

      [root@fastdfs4 ~]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf

    storage上日誌

      fastdfs3(208)

      

      fastdfs2(207)

      

      fastdfs1(206)

      

      fastdfs(205)

      

    能夠看到4臺storage機器都已經從新鏈接上209的tracker了,只是tracker leader還是110

java-client圖片上傳

  上傳實現可參考上篇博客中實現,只是此次tracker是集羣,包括兩臺機器;我示例是一張圖片上傳了兩次,輸出信息以下:

2
組名:group2
路徑: M00/00/00/wKgBz1shMB2Abls1AABHO7x65CM887.jpg
2
組名:group2
路徑: M00/00/00/wKgB0FshMB2AIBQXAABHO7x65CM071.jpg

  根據輸出信息可知:group2的兩臺機器上有圖片,而group1的機器上沒有,我看具體到機器上看下

    

    

    

    

  group2/M00/00/00/wKgB0FshMB2AIBQXAABHO7x65CM071.jpg,其中group1表示這張圖片被保存在了哪一個組當中,M00表明磁盤目錄,若是電腦只有一個磁盤那就只有M00, 若是有多個磁盤,那就M0一、M02...等等

fastdfs-nginx-module配置

  到目前爲止,咱們只是實現了經過java-client上傳圖片,仍是不能經過http來訪問圖片,經過配置fastdfs-nginx-module和nginx來實現http的圖片訪問

  FastDFS 經過 Tracker 服務器,將文件放在 Storage 服務器存儲,可是同組存儲服務器之間須要進入文件複製流程,有同步延遲的問題。假設 Tracker 服務器將文件上傳到了 192.168.1.207,上傳成功後文件 ID已經返回給客戶端,此時 FastDFS 存儲集羣機制會將這個文件同步到同組存儲 192.168.1.208,在文件尚未複製完成的狀況下,客戶端若是用這個文件 ID 在 192.168.1.208上取文件,就會出現文件沒法訪問的錯誤。而 fastdfs-nginx-module 能夠重定向文件鏈接到源服務器(192.168.1.207)上取文件,避免客戶端因爲複製延遲致使的文件沒法訪問錯誤。

  在storage服務所在的機器配置fastdfs-nginx-module,4臺機器的配置基本同樣,示例中則只展現一臺機器(fastdfs3)的配置

  

  解壓圖中fastdfs-nginx-module-master.zip

              [root@fastdfs2 00]# cd /opt

    [root@fastdfs2 opt]# unzip -o fastdfs-nginx-module-master.zip -d /usr/local

  拷貝配置文件

    [root@fastdfs2 opt]# cd /usr/local/fastdfs-nginx-module-master/src

    [root@fastdfs2 src]# cp mod_fastdfs.conf /etc/fdfs/

  編輯配置文件

    [root@fastdfs2 src]# cd /etc/fdfs/

    [root@fastdfs2 fdfs]# vi mod_fastdfs.conf

  修改的地方以下:

base_path=/data/fastdfs/storage
connect_timeout=10                        #保留默認值也能夠
tracker_server=192.168.1.209:22122
tracker_server=192.168.1.210:22122
url_have_group_name = true                #url中是否加上group名
store_path0=/data/fastdfs/storage
group_name=group2                        #當前storage所屬的組名
group_count = 2                    #組的數量,示例中共兩組:group一、group2

[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/data/fastdfs/storage

[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/data/fastdfs/storage
View Code

  同組的storage上的mod_fastdfs.conf想通,異組的mod_fastdfs.conf也只是group_name不一樣,各個storage上的mod_fastdfs.conf具體修改項以下:

       fastdfs2(207),與fastdfs3同組,mod_fastdfs.conf修改項同樣

base_path=/data/fastdfs/storage
connect_timeout=10                        #保留默認值也能夠
tracker_server=192.168.1.209:22122
tracker_server=192.168.1.210:22122
url_have_group_name = true                #url中是否加上group名
store_path0=/data/fastdfs/storage
group_name=group2                        #當前storage所屬的組名
group_count = 2                    #組的數量,示例中共兩組:group一、group2

[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/data/fastdfs/storage

[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/data/fastdfs/storage
View Code

       fastdfs1(206)與fastdfs(205)同組,mod_fastdfs.conf修改項同樣

base_path=/data/fastdfs/storage
connect_timeout=10                        #保留默認值也能夠
tracker_server=192.168.1.209:22122
tracker_server=192.168.1.210:22122
url_have_group_name = true                #url中是否加上group名
store_path0=/data/fastdfs/storage
group_name=group1                    #當前storage所屬的組名
group_count = 2                    #組的數量,示例中共兩組:group一、group2

[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/data/fastdfs/storage

[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/data/fastdfs/storage
View Code

nginx安裝與配置

  storage方的nginx

    fastdfs-nginx-module配置好了以後,仍是不能經過http請求訪問storage中的圖片,由於沒有http服務;部署nginx提供http服務,集成fastdfs-nginx-module;具體可參考個人博客:詳細的最新版fastdfs單機版搭建,裏面有講到集成過程。全部的storage服務器都須要配置

    集成好了,配置nginx配置文件:nginx-fdfs.conf

      fastdfs(205)

user root;
worker_processes 1;
events {
    use epoll;

    worker_connections  1024;
}
http {
    server {
        listen       8888;
        server_name  192.168.1.205;

        location ~/group[1]/M00/{
                #root /home/FastDFS/fdfs_storage/data;
                ngx_fastdfs_module;
        }
    }
    server {
        listen 8080;
        server_name 192.168.1.205;
        location / {
            root   html;
            index  index.html index.htm;
        }
    }
}
View Code

      fastdfs(206)

user root;
worker_processes 1;
events {
    use epoll;

    worker_connections  1024;
}
http {
    server {
        listen       8888;
        server_name  192.168.1.206;

        location ~/group[1]/M00/{
                #root /home/FastDFS/fdfs_storage/data;
                ngx_fastdfs_module;
        }
    }
    server {
        listen 8080;
        server_name 192.168.1.206;
        location / {
            root   html;
            index  index.html index.htm;
        }
    }
}
View Code

      fastdfs(207)

user root;
worker_processes 1;
events {
    use epoll;

    worker_connections  1024;
}
http {
    server {
        listen       8888;
        server_name  192.168.1.207;

        location ~/group[2]/M00/{
                #root /home/FastDFS/fdfs_storage/data;
                ngx_fastdfs_module;
        }
    }
    server {
        listen 8080;
        server_name 192.168.1.207;
        location / {
            root   html;
            index  index.html index.htm;
        }
    }
}
View Code

      fastdfs(208)

user root;
worker_processes 1;
events {
    use epoll;

    worker_connections  1024;
}
http {
    server {
        listen       8888;
        server_name  192.168.1.208;

        location ~/group[2]/M00/{
                #root /home/FastDFS/fdfs_storage/data;
                ngx_fastdfs_module;
        }
    }
    server {
        listen 8080;
        server_name 192.168.1.208;
        location / {
            root   html;
            index  index.html index.htm;
        }
    }
}
View Code

    以nginx-fdfs.conf爲配置文件來啓動storage上的nginx:

      [root@fastdfs3 sbin]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx-fdfs.conf

    自此storage方的nginx就配置好了

       對外提供服務的nginx

    VIP:192.168.1.200

    centos211:nginx + keepalived master

    centos212:nginx + keepalived backup

    兩臺nginx實現對外服務的高可用,具體搭建過程可參考:nginx實現請求的負載均衡 + keepalived實現nginx的高可用

    nginx的配置文件同樣:

user  root;
worker_processes  1;
events {
    worker_connections  1024;
    use epoll;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    #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  logs/access.log  main;
    sendfile       on;
    tcp_nopush     on;
    keepalive_timeout  65;
    #gzip on;

    #設置 group1 的服務器
    upstream fdfs_group1 {
         server 192.168.1.205:8888 weight=1 max_fails=2 fail_timeout=30s;
         server 192.168.1.206:8888 weight=1 max_fails=2 fail_timeout=30s;
    }

    #設置 group2 的服務器
    upstream fdfs_group2 {
         server 192.168.1.207:8888 weight=1 max_fails=2 fail_timeout=30s;
         server 192.168.1.208:8888 weight=1 max_fails=2 fail_timeout=30s;
    }

    server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;

        #設置 group 的負載均衡參數
        location /group1/M00 {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_pass http://fdfs_group1;
        }

        location /group2/M00 {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_pass http://fdfs_group2;
        }

        #error_page  404              /404.html;
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root html; 
        }
    } 
}
View Code

    nginx、keepalived都配置好了後,先啓動nginx,再啓動keepalived

  最終效果

    訪問http://192.168.1.200/group2/M00/00/00/wKgB0FshMB2AIBQXAABHO7x65CM071.jpg,出現以下美女

總結

  一、瞭解fastdfs的原理很重要,只有理解了搭建起來才順暢;

  二、fastdfs-nginx-module的做用要了解清楚,不是充當nginx的角色哦;

  三、對於內存過小的機器,我以爲仍是不必搭建這個集羣了;我8G內存,啓8個虛擬機中途直接死機了一次......

相關文章
相關標籤/搜索