成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:如何實現文件的大規模分布式存儲?

存儲 存儲軟件 分布式
在生產環境中,往往需要對FastDFS實現高可用,進而實現文件的大規模分布式存儲。那么,如何實現FastDFS的高可用呢?今天,我們就基于CentOS 8服務器來搭建FastDFS高可用集群環境。

 [[344018]]

作者個人研發的在高并發場景下,提供的簡單、穩定、可擴展的延遲消息隊列框架,具有精準的定時任務和延遲隊列處理功能。自開源半年多以來,已成功為十幾家中小型企業提供了精準定時調度方案,經受住了生產環境的考驗。為使更多童鞋受益,現給出開源框架地址:

https://github.com/sunshinelyz/mykit-delay

寫在前面

在生產環境中,往往需要對FastDFS實現高可用,進而實現文件的大規模分布式存儲。那么,如何實現FastDFS的高可用呢?今天,我們就基于CentOS 8服務器來搭建FastDFS高可用集群環境。

服務器版本

我們在服務器的命令行輸入如下命令來查看服務器的內核版本。

  1. [root@localhost lib]# cat /etc/redhat-release  
  2. CentOS Linux release 8.1.1911 (Core)  

可以看到,集群中每臺服務器的內核版本為:release 8.1.1911 (Core)。

服務器規劃

這里,我們總共規劃了6臺服務器,分別為:2臺tracker服務器,4臺storage服務器,其中2臺storage服務器為group1,兩臺storage服務器為group2。具體如下所示。

  • tracker服務器

tranker1:192.168.175.101

tracker2:192.168.175.102

  • storage服務器

storage1:192.168.175.103 group1

storage2:192.168.175.104 group1

storage3:192.168.175.105 group2

storage4:192.168.175.106 group2

環境準備

下載FastDFS

在每臺服務器上執行如下命令下載FastDFS。

  1. [root@localhost source]# wget https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz 
  2. [root@localhost source]# wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.22.tar.gz 
  3. [root@localhost source]# wget https://github.com/happyfish100/libfastcommon/archive/V1.0.43.tar.gz 

安裝環境依賴

在每臺服務器上執行如下命令安裝FastDFS所依賴的環境。

  1. [root@localhost dest]# yum install gcc gcc-c++ 
  2. [root@localhost dest]# yum install libtool zlib zlib-devel openssl openssl-devel 
  3. [root@localhost dest]# yum -y install pcre pcre-devel libevent libevent-devel perl unzip net-tools wget 

安裝FastDFS

安裝libfastcommon

在每臺服務器上依次執行如下命令。

(1)解壓libfastcommon的壓縮包

  1. [root@localhost source]# tar -zxvf V1.0.43.tar.gz 

(2)編譯并安裝編譯并安裝

  1. [root@localhost source]# cd libfastcommon-1.0.43/ 
  2. [root@localhost libfastcommon-1.0.43]# ./make.sh && ./make.sh install 

(3)檢查執行的結果,看安裝是否成功

  1. [root@localhost libfastcommon-1.0.43]# ls /usr/lib64|grep libfastcommon 
  2. libfastcommon.so 
  3.  
  4. [root@localhost libfastcommon-1.0.43]# ls /usr/lib|grep libfastcommon 
  5. libfastcommon.so 

安裝fastdfs

在每臺服務器上依次執行如下命令。

(1)解壓fastdfs

  1. [root@localhost source]# tar -zxvf V6.06.tar.gz 

(2)安裝fastdfs

  1. [root@localhost source]# cd fastdfs-6.06/ 
  2. [root@localhost fastdfs-6.06]# ./make.sh && ./make.sh install 

(3)檢查fastdfs是否安裝成功

  1. [root@localhost fastdfs-6.06]# ls /usr/bin|grep fdfs 
  2. fdfs_appender_test 
  3. fdfs_appender_test1 
  4. fdfs_append_file 
  5. fdfs_crc32 
  6. fdfs_delete_file 
  7. fdfs_download_file 
  8. fdfs_file_info 
  9. fdfs_monitor 
  10. fdfs_regenerate_filename 
  11. fdfs_storaged 
  12. fdfs_test 
  13. fdfs_test1 
  14. fdfs_trackerd 
  15. fdfs_upload_appender 
  16. fdfs_upload_file 

安裝部署tracker服務

復制tracker的配置文件

在兩臺tracker服務器上,依次執行如下命令。

  1. [root@localhost fastdfs-6.06]# cd /etc/fdfs/ 
  2. [root@localhost fdfs]# cp client.conf.sample client.conf 
  3. [root@localhost fdfs]# cp tracker.conf.sample tracker.conf 

注意:無須生成storage.conf文件,這兩臺tracker不做為storage。

安裝Nginx

在兩臺tracker服務器上,依次執行如下命令。

注意:tracker上不需要安裝fastdfs-nginx-module

(1)解壓Nginx

  1. [root@localhost source]# tar -zxvf nginx-1.17.8.tar.gz 

(2)nginx配置,http_stub_status_module 模塊

  1. [root@localhost fdfs]# cd /usr/local/source/nginx-1.17.8/ 
  2. [root@localhost nginx-1.17.8]# ./configure --prefix=/usr/local/soft/nginx --with-http_stub_status_module  

(3)編譯安裝Nginx

  1. [root@localhost nginx-1.17.8]# make && make install 

(4)檢查安裝是否成功

  1. [root@localhost nginx-1.17.8]# ls /usr/local/soft/ | grep nginx 
  2. nginx 

(5)查看指定的編譯參數是否起作用

  1. [root@localhost fdfs]# /usr/local/soft/nginx/sbin/nginx -V 
  2. nginx version: nginx/1.17.8 
  3. built by gcc 8.3.1 20190507 (Red Hat 8.3.1-4) (GCC)  
  4. configure arguments: --prefix=/usr/local/soft/nginx --with-http_stub_status_module  

配置并啟動FastDFS

在兩臺tracker上,配置并啟動FastDFS。

(1)創建tracker服務所需的目錄

  1. [root@localhost fdfs]# mkdir /data/fastdfs 
  2. [root@localhost fdfs]# mkdir /data/fastdfs/tracker 
  3. [root@localhost fdfs]# chmod 777 /data/fastdfs/tracker 

(2)配置tracker服務,修改 tracker.conf 文件

  1. [root@localhost fdfs]# vi /etc/fdfs/tracker.conf 

只修改base_path一項的值為我們在上面所創建的目錄即可

  1. base_path = /data/fastdfs/tracker 

(3)啟動 tracker 服務

  1. [root@localhost fdfs]# /etc/init.d/fdfs_trackerd start 

(4)檢查tracker服務啟動是否成功

  1. [root@localhost fdfs]# ps auxfww | grep fdfs 
  2. root      15067  0.0  0.0  12320   964 pts/0    S+   15:14   0:00  |   |           \_ grep --color=auto fdfs 
  3. root      15026  0.0  0.1  90160  5940 ?        Sl   15:13   0:00 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf 

說明:能看到 fdfs_trackerd,表示tracker服務啟動成功。

(5)檢查tracker服務是否已綁定端口 22122

  1. [root@localhost dest]# netstat -anp | grep 22122 
  2. tcp        0      0 0.0.0.0:22122           0.0.0.0:*               LISTEN      15026/fdfs_trackerd  

說明:22122端口是在/etc/fdfs/tracker.conf中定義的,如下所示:

  1. # the tracker server port 
  2. port = 22122 

配置client.conf

兩臺tracker上,配置client.conf,配置fastdfs的客戶端使用的配置文件。

(1)配置client.conf

  1. [root@localhost fdfs]# vi /etc/fdfs/client.conf 

以下兩項配置用到的tracker目錄和服務器地址端口

  1. base_path = /data/fastdfs/tracker 
  2. tracker_server = 192.168.175.101:22122 
  3. tracker_server = 192.168.175.102:22122 

說明:兩臺tracker上的client.conf配置相同

(2)從客戶端的配置可以看到:客戶端只需要了解tracker_server的信息。tracker server作用也正是負載均衡和調度

(3)Storage server作用是文件存儲,客戶端上傳的文件最終存儲在 Storage 服務上

測試文件

用client.conf上傳文件測試。

(1)從tacker上傳一個文件

  1. [root@0268c2dc2bf6 ~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/a.txt             

注意返回的是group1,我們可以group1下面的兩臺機器均找到此txt文件:

  • storage1上
  1. [root@d5d19e99e782 docker_tmp]# ls /data/fastdfs/storage/data/00/00 
  2. rBEABF5aTEeAXHF4AAAABHf4XZU792.txt 
  • storage2上
  1. [root@f201111d0698 docker_tmp]# ls /data/fastdfs/storage/data/00/00 
  2. rBEABF5aTEeAXHF4AAAABHf4XZU792.txt 

(2)指定group上傳文件

如果想指定上傳到某個group怎么辦?例如:指定上傳到group2

  1. [root@0268c2dc2bf6 ~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/a.txt 192.168.175.105:23000 
  2. group2/M00/00/00/rBEABl5aUAqAXLCZAAAABHf4XZU043.txt 

說明:指定group2中任一臺的ip和端口即可。

(3)查看效果

  • storage3上
  1. [root@494ac47d63f8 fdfs]# ls /data/fastdfs/storage/data/00/00 
  2. rBEABl5aUAqAXLCZAAAABHf4XZU043.txt 
  • storage4上
  1. [root@59fa1efff362 fdfs]# ls /data/fastdfs/storage/data/00/00 
  2. rBEABl5aUAqAXLCZAAAABHf4XZU043.txt 

安裝部署storage服務

生成默認配置文件

四臺storage上:生成啟動fastdfs默認的配置文件。

  1. [root@localhost fastdfs-6.06]# cd /etc/fdfs/ 
  2. [root@localhost fdfs]# cp storage.conf.sample storage.conf 
  3. [root@localhost fdfs]# cp client.conf.sample client.conf 

說明:不需要生成tracker.conf,因為storage上不再運行tracker服務

安裝Nginx

四臺storage上:安裝nginx及fastdfs-nginx-module

(1)解壓nginx

  1. [root@localhost source]# tar -zxvf nginx-1.17.8.tar.gz 

(2)解壓fastdfs-nginx-module

  1. [root@localhost source]# tar -zxvf V1.22.tar.gz 

(3)修改config文件,把/usr/local 替換成 /usr

  1. [root@localhost source]# cd fastdfs-nginx-module-1.22/ 
  2. [root@localhost fastdfs-nginx-module-1.22]# cd src 
  3. [root@localhost src]# vi config 

(4)Nginx配置,添加fastdfs-nginx-module和http_stub_status_module 模塊

  1. [root@localhost fdfs]# cd /usr/local/source/nginx-1.17.8/ 
  2. [root@localhost nginx-1.17.8]# ./configure --prefix=/usr/local/soft/nginx --with-http_stub_status_module --add-module=/usr/local/source/fastdfs-nginx-module-1.22/src/ 

(5)編譯安裝nginx

  1. [root@localhost nginx-1.17.8]# make && make install 

(6)檢查安裝是否成功

  1. [root@localhost nginx-1.17.8]# ls /usr/local/soft/ | grep nginx 
  2. nginx 

(7)查看指定的編譯參數是否起作用

  1. [root@localhost fdfs]# /usr/local/soft/nginx/sbin/nginx -V 
  2. nginx version: nginx/1.17.8 
  3. built by gcc 8.3.1 20190507 (Red Hat 8.3.1-4) (GCC)  
  4. configure arguments: --prefix=/usr/local/soft/nginx --with-http_stub_status_module --add-module=/usr/local/source/fastdfs-nginx-module-1.22/src/ 

配置并啟動storage服務

四臺storage上:配置并啟動storage服務

(1)創建storage服務所需的目錄

  1. [root@localhost fdfs]# mkdir /data/fastdfs/storage 
  2. [root@localhost fdfs]# chmod 777 /data/fastdfs/storage/ 

(2)配置storage服務

編輯storage的配置文件:

  1. [root@localhost fdfs]# vi /etc/fdfs/storage.conf 

各配置項包括:

  1. group_name = group1 
  2. #配置base_path為上面所創建的storage目錄 
  3. base_path = /data/fastdfs/storage 
  4. #store_path :存儲所在的目錄,可以設置多個,注意從0開始 
  5. store_path0 = /data/fastdfs/storage 
  6. #tracker_server的ip和端口 
  7. tracker_server = 192.168.175.101:22122 
  8. tracker_server = 192.168.175.102:22122  
  9. #指定http服務的端口 
  10. http.server_port = 80 

配置的不同之處:

  1. 192.168.175.103   group_name = group1 
  2. 192.168.175.104   group_name = group1 
  3. 192.168.175.105   group_name = group2 
  4. 192.168.175.106   group_name = group2 

(3)啟動storage服務

  1. [root@localhost fdfs]# /etc/init.d/fdfs_storaged start 
  2. 正在啟動 fdfs_storaged (via systemctl):                   [  確定  ] 

(4)檢查storage服務啟動是否成功

  1. [root@localhost fdfs]# ps auxfww | grep fdfs 
  2. root      15630  0.0  0.0  12320   972 pts/0    S+   15:46   0:00  |   |           \_ grep --color=auto fdfs 
  3. root      15026  0.0  0.1 155696  6964 ?        Sl   15:13   0:00 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf 
  4. root      15573  2.7  1.7 150736 66292 ?        Sl   15:45   0:02 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf 

說明:看到fdfs_storaged,表示storage服務啟動成功

(5)檢查storage服務是否已綁定到端口:23000

  1. [root@localhost fdfs]# netstat -anp | grep 23000 
  2. tcp        0      0 0.0.0.0:23000           0.0.0.0:*               LISTEN      15573/fdfs_storaged  

說明:23000 端口是在配置文件 /etc/fdfs/storage.conf中定義的,如下:

  1. # the storage server port 
  2. port = 23000 

配置fastdfs-nginx-module

四臺存儲服務器上:配置fastdfs-nginx-module

(1)生成配置文件

  1. [root@localhost nginx-1.17.8]# cp /usr/local/source/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/ 

(2)編輯配置文件

  1. [root@localhost nginx-1.17.8]# vi /etc/fdfs/mod_fastdfs.conf 

配置以下幾項

  1. group_name=group1 
  2. connect_timeout=10 
  3. tracker_server=192.168.175.101:22122 
  4. tracker_server=192.168.175.102:22122 
  5. url_have_group_name = true 
  6. store_path0=/data/fastdfs/storage 
  7. group_count = 2 
  8.  
  9. [group1] 
  10.  
  11. group_name=group1 
  12. storage_server_port=23000 
  13. store_path_count=1 
  14. store_path0=/data/fastdfs/storage 
  15.  
  16. [group2] 
  17.  
  18. group_name=group2 
  19. storage_server_port=23000 
  20. store_path_count=1 
  21. store_path0=/data/fastdfs/storage 

說明:最上面的group_name:當機器屬于group1這組時,值為group1;當機器屬于group2這組時,值為group2。

說明:url_have_group_name = true。注意:這一項不要漏掉,會導致nginx不正常工作

(3)復制另兩個web訪問用到配置文件到fdfs配置目錄下:

  1. [root@d5d19e99e782 /]# cp /usr/local/source/fastdfs-6.06/conf/http.conf /etc/fdfs/ 
  2. [root@d5d19e99e782 /]# cp /usr/local/source/fastdfs-6.06/conf/mime.types /etc/fdfs/ 

配置Nginx

四臺存儲服務器上:配置nginx

編輯nginx的配置文件:

  1. [root@localhost conf]# vi /usr/local/soft/nginx/conf/nginx.conf 

在server listen 80 的這個server配置下面,

增加一個location

  1. location ~/group([0-9]) { 
  2.     root  /data/fastdfs/storage/data; 
  3.     ngx_fastdfs_module; 
  4.  

啟動nginx

(1)啟動Nginx

  1. [root@localhost storage]# /usr/local/soft/nginx/sbin/nginx 

(2)檢查nginx是否已成功啟動

  1. [root@localhost storage]# ps auxfww | grep nginx 
  2. root      24590  0.0  0.0  12320   980 pts/0    S+   16:44   0:00  |   |           \_ grep --color=auto nginx 
  3. root      24568  0.0  0.0  41044   428 ?        Ss   16:44   0:00  \_ nginx: master process /usr/local/soft/nginx/sbin/nginx 
  4. nobody    24569  0.0  0.1  74516  4940 ?        S    16:44   0:00      \_ nginx: worker process 

配置tracker服務

配置tracker服務

說明:這一步等待四臺storage server配置完成后再進行。使用n=Nginx做upstream負載均衡的原因:可以通過一個地址訪問后端的多個group

(1)文件上傳完成后,從瀏覽器訪問各個storage的Nginx即可:

例如:

  1. http://192.168.175.103/group1/M00/00/00/rBEABF5aTRiAEuHwAAAABHf4XZU322.txt 
  2. http://192.168.175.104/group1/M00/00/00/rBEABF5aTRiAEuHwAAAABHf4XZU322.txt 
  3. http://192.168.175.105/group2/M00/00/00/rBEABl5aUAqAXLCZAAAABHf4XZU043.txt 
  4. http://192.168.175.106/group2/M00/00/00/rBEABl5aUAqAXLCZAAAABHf4XZU043.txt 

說明:各臺storage server的ip地址后面跟著上傳時所返回的地址。注意:只能訪問各臺機器所在的group,

  • 如果想通過統一的ip地址進行訪問
  • 需要在Nginx中通過upstream訪問到后端的機器
  • 此Nginx應運行在tracker上

(2)配置nginx.conf

  1. [root@0268c2dc2bf6 ~]# vi /usr/local/soft/nginx/conf/nginx.conf 

內容:

添加 upstream到后端的storage。

  1. upstream fdfs_group1 { 
  2.                 server 192.168.175.103:80 weight=1  max_fails=2 fail_timeout=30s; 
  3.                 server 192.168.175.104:80 weight=1  max_fails=2 fail_timeout=30s; 
  4.    } 
  5.  
  6.    upstream fdfs_group2 { 
  7.                 server 192.168.175.105:80 weight=1 max_fails=2 fail_timeout=30s; 
  8.                 server 192.168.175.106:80 weight=1 max_fails=2 fail_timeout=30s; 
  9.    } 

針對帶有group的url進行處理

  1. location /group1 { 
  2.     proxy_next_upstream http_502 http_504 error timeout invalid_header; 
  3.     proxy_pass http://fdfs_group1; 
  4.     expires 30d; 
  5.   
  6.  location /group2 { 
  7.      proxy_next_upstream http_502 http_504 error timeout invalid_header; 
  8.      proxy_pass http://fdfs_group2; 
  9.      expires 30d; 
  10.  

(3)重啟測試

  1. [root@0268c2dc2bf6 ~]# /usr/local/soft/nginx/sbin/nginx -s stop 
  2. [root@0268c2dc2bf6 ~]# /usr/local/soft/nginx/sbin/nginx 

在瀏覽器中訪問:

  1. http://192.168.175.101/group1/M00/00/00/rBEABF5aTRiAEuHwAAAABHf4XZU322.txt 
  2. http://192.168.175.101/group2/M00/00/00/rBEABl5aUAqAXLCZAAAABHf4XZU043.txt 

本文轉載自微信公眾號「冰河技術」,可以通過以下二維碼關注。轉載本文請聯系冰河技術公眾號。   

 

責任編輯:武曉燕 來源: 冰河技術
相關推薦

2017-10-27 08:40:44

分布式存儲剪枝系統

2017-10-17 08:33:31

存儲系統分布式

2024-09-24 16:30:46

分布式鎖Redis數據中間件

2022-08-11 18:27:50

面試Redis分布式鎖

2016-01-12 14:59:40

分布式存儲分布式存儲架構

2017-09-04 08:49:17

存儲原理架構

2013-03-22 14:44:52

大規模分布式系統飛天開放平臺

2021-06-03 08:55:54

分布式事務ACID

2020-10-15 19:22:09

Menger機器學習強化學習

2024-06-26 11:55:44

2022-12-02 07:19:46

分布式數據庫數據分片

2023-09-11 11:22:22

分布式數據庫數據庫

2025-05-16 08:58:47

Mongodb分布式存儲

2024-10-07 08:52:59

分布式系統分布式 IDID

2017-09-11 15:19:05

CoCoA機器學習分布式

2024-02-22 17:02:09

IDUUID雪花算法

2018-12-13 17:49:41

曙光

2023-01-12 08:24:45

ZookeeperZK服務器

2024-08-07 08:15:47

2022-11-25 17:29:27

分布式事務
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲视频二区 | 成人欧美一区二区三区1314 | 久久久久国产精品一区二区 | 在线午夜电影 | 久草.com | 色妹子综合网 | 波多野结衣二区 | 精品一区二区视频 | 亚洲国产成人精品女人久久久 | 丁香久久 | 日本久久一区 | 国产97在线看 | 日本超碰在线 | 黄色毛片大全 | 欧美精品在欧美一区二区 | 国产精品久久国产精品 | 欧美一级欧美一级在线播放 | 国产高清在线 | 日韩一区在线播放 | 久久性色 | 国产免费看 | 在线国产一区二区三区 | 亚洲乱码国产乱码精品精98午夜 | 黄色网毛片 | 久久国产欧美一区二区三区精品 | 亚洲永久免费观看 | 日本一区二区电影 | 亚洲成人国产综合 | 亚洲人成人一区二区在线观看 | 自拍在线 | 人人鲁人人莫人人爱精品 | 奇米久久久 | 国产视频不卡一区 | 国产乱码精品一区二区三区中文 | 久久久久国产一区二区三区四区 | 综合久 | 亚洲成人一区二区 | 日韩一区二区在线播放 | 久草在线免费资源 | 欧美一级免费看 | 欧美自拍第一页 |