MogileFS的實現和bug解決

来源:https://www.cnblogs.com/shenxm/archive/2018/02/22/8459256.html
-Advertisement-
Play Games

MogileFS的實現 解決MogileFS的bug問題 ...


MogileFS的實現

準備三個主機:
    centos7.1:tracker節點、database節點、storage節點:192.168.213.251
    centos7.2、centos7.3:storage節點:192.168.213.251/252/253
    註意關掉防火牆,iptables -F
1》在三個節點安裝如下軟體包
    yum install perl-Net-Netmask perl-IO-String perl-Sys-Syslog perl-IO-AIO    #先用yum安裝安裝環境需要的包
    ls     #將如下安裝包下載到本地,再用yum本地安裝如下包
    MogileFS-Server-2.46-2.el7.centos.noarch.rpm #核心服務
    MogileFS-Server-mogilefsd-2.46-2.el7.centos.noarch.rpm #tracker節點
    MogileFS-Server-mogstored-2.46-2.el7.centos.noarch.rpm #storage節點
    MogileFS-Utils-2.19-1.el7.centos.noarch.rpm #mogilefs的一些管理工具,如mogadm
    perl-Danga-Socket-1.61-1.el6.rf.noarch.rpm #依賴包
    perl-MogileFS-Client-1.14-1.el7.centos.noarch.rpm
    perl-Perlbal-1.78-1.el6.noarch.rpm 
    [root@node1 app]#yum localinstall ./*  -y #在三個節點上都要安裝
2》在centos7.1上操作
    yum install mariadb-server
    systemctl start mariadb
    ss -nlt
    mogdbsetup --help        #初始化資料庫的命令
    mogdbsetup --dbuser=mogile  --dbpass=123    #進行初始化資料庫,會創建了一個mogilefs的資料庫,同時裡面有很多表,授權了一個mogile用戶在任何主機都可以連接到此資料庫
    vim /etc/mogilefs/mogilefsd.conf  #修改tracker的配置文件
            db_dsn = DBI:mysql:mogilefs:host=127.0.0.1 #指明資料庫的主機
            db_user = mogile #授權的用戶
            db_pass = 123 #授權的密碼
            listen = 0.0.0.0:7001
    systemctl start mogilefsd #啟動tracker服務
    ss -nltu #發現監聽在tcp/7001埠
3》在三個節點上對storage節點進行配置
    vim /etc/mogilefs/mogstored.conf #配置storage節點
        maxconns = 10000 #最大併發連接
        httplisten = 0.0.0.0:7500 #監聽的埠
        mgmtlisten = 0.0.0.0:7501 #管理命令監聽的埠
        docroot = /app/mogdata/  #指明數據存放的目錄,一般這個目錄要使用單獨的磁碟進行掛載,本實驗就使用目錄代替了,沒有單獨掛載磁碟
    mkdir /app/mogdata
    chown mogilefs:mogilefs /app/mogdata -R
    systemctl start mogstored #啟動storage服務
    ss -nlt #發現監聽的是7500埠
4》在centos7.1上的操作
    添加主機到trackers中,這樣storage節點才能被tracker節點所管理,並將主機信息註冊到資料庫中
    mogadm check #查看狀態
    mogadm host add centos7.1 --ip=192.168.213.251 --port=7500 --status=alive #添加storage節點的主機到tracker中
    mogadm host add centos7.2 --ip=192.168.213.252 --port=7500 --status=alive
    mogadm host add centos7.3 --ip=192.168.213.253 --port=7500 --status=alive
    mogadm check #此時再查看發現三個節點都被添加進來了
    mogadm host list #可以查看添加的主機
5》在三個節點上的設置
    mkdir /app/mogdata/dev1 #在三個主機上創建三個目錄dev1、dev2、dev3做為存儲設備,1、2、3為設備的ID號,必須唯一
    chown -R mogilefs:mogilefs /app/mogdata/dev1/ #修改許可權,註意三個節點都要操作
6》在centos7.1節點的操作,添加存儲設備到集群中
    mogadm device add centos7.1 1
    mogadm device add centos7.2 2
    mogadm device add centos7.3 3
    mogadm device list
        centos7.1 [1]: alive
                            used(G)    free(G)   total(G)  weight(%)
           dev1:   alive      0.032     39.011     39.043        100
        
        centos7.2 [2]: alive
                            used(G)    free(G)   total(G)  weight(%)
           dev2:   alive      0.031     39.012     39.043        100
        
        centos7.3 [3]: alive
                            used(G)    free(G)   total(G)  weight(%)
           dev3:   alive      0.031     39.012     39.043        100

    mogadm check
        Checking trackers...
          127.0.0.1:7001 ... OK
        
        Checking hosts...
          [ 1] centos7.1 ... OK
          [ 2] centos7.2 ... OK
          [ 3] centos7.3 ... OK
        
        Checking devices...
          host device         size(G)    used(G)    free(G)   use%   ob state   I/O%
          ---- ------------ ---------- ---------- ---------- ------ ---------- -----
          [ 1] dev1            39.043      0.032     39.011   0.08%  writeable   0.0
          [ 2] dev2            39.043      0.032     39.011   0.08%  writeable   0.0
          [ 3] dev3            39.043      0.032     39.011   0.08%  writeable   0.0
      ---- ------------ ---------- ---------- ---------- ------
                 total:   117.130      0.097    117.034   0.08%
    cd dev1/ ;ls   #發現目錄中已經有東西了
        test-write  usage
    cd test-write/ ;ls   #此目錄是tracker節點測試storage節點是否是好的,會定期往目錄裡面寫一些東西來判斷個節點是不是可用的
        test-write-21  test-write-35  test-write-44  test-write-49  test-write-55  test-write-7   test-write-8   test-write-87  test-write-93
        test-write-23  test-write-40  test-write-47  test-write-53  test-write-64  test-write-76  test-write-84  test-write-9
mogadm device mark centos1 1 readonly   #可將某個設備標記為只讀狀態,共有這幾種狀態(alive,dead,down,drain,readonly)
7 》添加創建域和類在centos7.1上的操作
    mogadm domain add m25 #添加一個域m25
    mogadm domain list #我們發現只要創建一個域,就會生成一個預設的class,並且副本數量為2個
         domain               class                mindevcount   replpolicy   hashtype
        -------------------- -------------------- ------------- ------------ -------
         m25                  default                   2        MultipleHosts() NONE   
    mogadm class --help
    mogadm class add m25 img --mindevcount=3     #在m25域中添加一個類為在img,並指定最小的副本數量為3個
    mogadm class add m25 doc --mindevcount=2
    mogadm domain list            #可以發現已經創建兩個類了,現在就可以向這兩個類中上傳數據了
         domain               class                mindevcount   replpolicy   hashtype
        -------------------- -------------------- ------------- ------------ -------
         m25                  default                   2        MultipleHosts() NONE   
         m25                  doc                       2        MultipleHosts() NONE   
         m25                  img                       3        MultipleHosts() NONE   
8》上傳數據(centos7上需要先解決bug問題)
    在centos7.1上
        mogupload --help #上傳
        cd /app
        find /usr/share/ -iname *.jpg -exec cp {} ./ \; #拷貝一些圖片文件到當前目錄
        mogupload --tracker=172.18.21.107:7001 --domain=m25 --class=img --key=night --file=night.jpg #註意這裡要指定tracker,不然傳不上去,要設置一個key,根據這個key才能進行查找
        md5sum night.jpg
        a1cb1ab93a2d2b81e7943fbc0283f83f  night.jpg
        
    在centos7.2上
        cd /app/data/dev2/
        tree 0/ #在節點2上查看,發現已經存到設備目錄下,註意格式是這種格式的
        0/
        └── 000
            └── 000
                └── 0000000002.fid
        md5sum 0/000/000/0000000002.fid #哈希運算的結果是一樣的,說明是同一個文件
        a1cb1ab93a2d2b81e7943fbc0283f83f  0/000/000/0000000002.fid
9》查詢
    在trackers上
        mogfileinfo --trackers=192.168.213.251:7001 --domain=m25 --key=night #在一個域內key必須是唯一的
        - file: night
             class:                  img
          devcount:                    1
            domain:                  m25
               fid:                    2
               key:                night
            length:               569714
         
         - http://192.168.213.252:7500/dev2/0/000/000/0000000002.fid 
         - http://192.168.213.253:7500/dev3/0/000/000/0000000002.fid 
         - http://192.168.213.251:7500/dev1/0/000/000/0000000002.fid 
            #告訴我們如何可以查到這個數據可以輸入這個網址下載下來就可以看到剛纔上傳的圖片了
        moglistkeys -tracker=192.168.213.251:7001 --domain=m25 #查看這個域內的所有key
            night
    可以創建一個配置文件指明trackers是誰就不用每次輸入命令的時候指定了
        vim /etc/mogilefs/mogilefs.conf  
            trackers=172.18.21.107:7001
        moglistkeys --domain=m25
            night                        
        mogdelete --domain=m25 --key=night #刪除指定的文件
        mogupload --domain=M25 --class=img --key=fish --file=/app/fish.jpg
        mogfileinfo --domain=M25 --key=fish
            - file: fish
                 class:                  img
              devcount:                    3
                domain:                  M25
                   fid:                    7
                   key:                 fish
                length:                 3225
             - http://192.168.213.253:7500/dev3/0/000/000/0000000007.fid
             - http://192.168.213.252:7500/dev2/0/000/000/0000000007.fid
             - http://192.168.213.251:7500/dev1/0/000/000/0000000007.fid
        
    
    資料庫中查詢
        MariaDB [mogilefs]> select * from file; #進入資料庫中也可以查看一些信息
        +-----+------+-------+--------+---------+----------+
        | fid | dmid | dkey  | length | classid | devcount |
        +-----+------+-------+--------+---------+----------+
        |   3 |    1 | puppy |   3461 |       1 |        1 |
        |   4 |    1 | sky   |   2964 |       2 |        1 |
        +-----+------+-------+--------+---------+----------+
        MariaDB [mogilefs]> select * from domain;
        +------+-----------+
        | dmid | namespace |
        +------+-----------+
        |    1 | m25       |
        +------+-----------+
        MariaDB [mogilefs]> select * from class;
        +------+---------+-----------+-------------+----------+------------+
        | dmid | classid | classname | mindevcount | hashtype | replpolicy |
        +------+---------+-----------+-------------+----------+------------+
        |    1 |       1 | img       |           3 |     NULL | NULL       |
        |    1 |       2 | doc       |           2 |     NULL | NULL       |
        +------+---------+-----------+-------------+----------+------------+
    關閉主機
        mogadm host mark centos7.1 down #也可以將主機設置為down狀態
        mogadm host list
            centos7.1 [1]: down
              IP:       192.168.213.251:7500
            
            centos7.2 [2]: alive
              IP:       192.168.213.252:7500
            
            centos7.3 [3]: alive
              IP:       192.168.213.253:7500
        mogadm host mark centos7.1 alive

解決MogileFS的bug問題

cd data/dev1/ ;ls #發現其他節點上並沒有我們上傳的數據目錄
    test-write  usage
ls   #只有上傳東西的節點上才有
    0  test-write  usage

註意:
    說明MogileFS在centos7上有個致命的bug,就是沒有複製副本到其他的節點上
解決方法如下:
    yum -y install make gcc unzip perl-DBD-MySQL perl perl-CPAN perl-YAML perl-Time-HiRes   #先安裝perl環境,三個storage主機都要安裝
    wget http://pkgs.fedoraproject.org/repo/pkgs/perl-Sys-Syscall/Sys-Syscall-0.23.tar.gz/be6dc2d791684a6f8abb3dd39ff2d1de/Sys-Syscall-0.23.tar.gz  #下載軟體包到本地,也可以在google上搜索Syscall-0.23.tar.gz 
    在三個節點上都要安裝此源碼包
    在三個節點上進行編譯安裝Sys-Syscall
        tar -xf Sys-Syscall-0.23.tar.gz 
        cd Sys-Syscall-0.23/
        perl Makefile.PL 
            Checking if your kit is complete...
            Looks good
            Warning: prerequisite Test::More 0 not found.
            Writing Makefile for Sys::Syscall
        make && make instal
    在centos7.1節點上重啟下麵的三個服務
        systemctl restart mogilefsd 
        systemctl restart mogstored 
        systemctl restart mariadb
    在centos7.2和centos7.3節點上重啟mogstored服務,這裡需要註意,編譯安裝完Sys-Syscall後一定要重啟三個節點的所有服務,不然不會生效
        systemctl restart mogstored
    在centos7.1上
        #mogupload --tracker=192.168.213.251:7001 --domain=m25 --class=img --key=morning --file=/app/morning.jpg #再上傳一個文件
        tree 0
        0
        └── 000
            └── 000
                ├── 0000000002.fid
                └── 0000000004.fid
        
        2 directories, 2 files
    在centos7.2和centos7.3上
        tree 0
        0
        └── 000
            └── 000
                ├── 0000000002.fid
                └── 0000000004.fid
        
        2 directories, 2 files
        發現在三個節點上結果相同文件

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 MatrixTree定理是用來解決生成樹計數問題的有利工具 比如說 "這道題" MatrixTree定理的演算法流程也非常簡單 我們記矩陣$A$為無向圖的度數矩陣 記矩陣$D$為無向圖的鄰接矩陣 $A$矩陣是除了對角線之外各個點值都為$0$的矩陣,$A[i][i]$表示$i$號點的度數 $D$矩 ...
  • 一. 認證系統概要 create_user 創建用戶 authenticate 驗證登錄 login 記住用戶的登錄狀態 logout 退出登錄 is_authenticated 判斷用戶是否登錄 login_required 判斷用戶是否登錄的裝飾器 二. 創建用戶和驗證登錄 1. 當用戶註冊的時 ...
  • VS for Mac連接Git的時候遇到個奇怪的問題, 無法將已存在的解決方案綁定並提交到GitHub中去. VS版本7.3.3 問題復現 以為自己操作有問題, 新建項目測試一下, 新建的時候沒有勾選"Use git"選項, 新建好的項目預設選中瞭解決方案的根, 但打開Version Control ...
  • 微軟 ASP.NET 團隊近日正式開源了Blazor,這是一個Web UI框架,可通過WebAssembly在任意瀏覽器中運行 .Net。 Blazor旨在簡化快速的單頁面 .Net 瀏覽器應用的構建過程,它雖然使用了諸如 CSS 和 HTML 之類的 Web 技術,但它使用 C#語言和 Razor ...
  • 背景 SqlSugar是一款國產ORM,除了擁有媲美原生的性能 另外還有滿足各種需求的功能,簡單好用一分鐘就能夠輕鬆上手。 2.x版本正式在自已公司內部項目使用 3.x版本得到了更多公司的喜歡不過也會抱怨有很多不足 4.x版本17年5月發佈後得到的評價超出了我的預期, 剛發佈的時候做了大量的單元測試 ...
  • ssh使用密鑰進行認證可以實現免密登錄。 生成私鑰和公鑰 執行以下命令: 進入交互模式後可以不設置密鑰存放路徑和設置密碼,直接按回車即可。此時會在當前用戶的家目錄下的.ssh目錄下生成密鑰文件,即公鑰文件id_rsa.pub和私鑰文件id_rsa。 預設採用的是rsa演算法,也可以指定其它的演算法。 接 ...
  • iptables介紹 iptables Netfilter 組件 三種報文流向 iptables的組成 netfilter表和鏈對應的關係 數據包過濾匹配和傳輸過程 路由功能發生的時間點 iptables規則 1)規則rule : 1 根據規則的匹配條件嘗試匹配報文,對匹配成功的報文根據規則定義的處 ...
  • FastDFS的實現 環境 FastDFS的實現 FastDFS實現nginx代理 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...