第二十二周作業

1、請描述本地文件系統和分布式文件系統的特點;

本地文件系統:

本地文件系統主要是指Ext2,Ext3,Btrfs,XFS這類(很難概括,只好舉例子),它們通常提供以下功能:

1.擴展性:隨著系統容量的增加保持性能,不隨容量變化而導致性能震蕩。比如一個目錄下的海量文件,在EXT2/3中由于目錄設計問題會導致較大的性能問題。再比如EXT2/3中的Metadata的占用和inode的劃分可能會導致空間的浪費。

2.數據一致性
1)Checksum: Checksum與對應的數據塊分開放置,避免silent corruption
2)CoW事務: 寫時復制
3)Log: Log被一些文件系統用作WAL模式來加快寫操作,并且保證寫操作的原子性

3.多設備管理:傳統上Linux往往使用LVM進行多設備的管理,現代文件系統往往增加對多設備的支持。如ZFS和Btrfs會有存儲池模型對應LVM的邏輯卷組,文件系統會對底層的多設備進行并行的訪問。
1)快照和克隆:采用COW事務模型的文件系統通常具有這個特性
2)軟件RAID支持:現代文件系統通過對多設備的管理可以很好的支持軟件RAID,如Btrfs對Metadata進行RAID1的默認保護

4.針對SSD的優化: 除了SSD對于隨機讀這一特性的優化外,還有對SSD擦除操作的優化。另外,SSD在使用容量接近100%時會導致極差的寫入性能,文件系統也可以對SSD的分配策略和重平衡進行一定的優化。

5.壓縮和加密: 現在的IO速度遠遠跟不上CPU的發展,因此對磁盤文件進行壓縮讀寫是個很好的選擇,現代文件系統往往支持多種壓縮格式,而且可以支持整個文件系統的加密或者某個文件和目錄的加密

6.去重: 文件系統系統去重是個大話題,主要是計算塊的checksum方法或者客戶端計算文件的hash來決定是否是一個新文件。具體參考Deduplication。

?

本地文件系統架構圖:
第二十二周作業

分布式文件系統:

分布式文件系統的架構和實現有非常大的差異,如NFS這種傳統的基于存儲服務器的網絡文件系統,基于SAN的GPFS,然后現在的集群式架構,比如HDFS這種有中心的分布式,如GlusterFS這種無中心分布式,再如Ceph這種部分在內核態部分在用戶態等等。
由于架構上的差異和本身文件系統的設計目標,通常分布式文件系統可以根據接口類型分成塊存儲、對象存儲和文件存儲。如Ceph具備塊存儲(Experiment)、文件存儲和對象存儲的能力,GlusterFS支持對象存儲和文件存儲的能力。而MogileFS只能作為對象存儲并且通過key來訪問。

1.擴展能力: 毫無疑問,擴展能力是一個分布式文件系統最重要的特點。分布式文件系統中元數據管理一般是擴展的重要問題,GFS采用元數據中心化管理,然后通過Client暫存數據分布來減小元數據的訪問壓力。GlusterFS采用無中心化管理,在客戶端采用一定的算法來對數據進行定位和獲取。

2.高可用性: 在分布式文件系統中,高可用性包含兩層,一是整個文件系統的可用性,二是數據的完整和一致性。整個文件系統的可用性是分布式系統的設計問題,類似于NOSQL集群的設計,比如有中心分布式系統的Master服務器,網絡分區等等。數據完整性則通過文件的鏡像和文件自動修復等手段來解決,另外,部分文件系統如GlusterFS可以依賴底層的本地文件系統提供一定支持。

3.協議和接口: 分布式文件系統提供給應用的接口多種多樣,Http RestFul接口、NFS接口、Ftp等等POSIX標準協議,另外通常會有自己的專用接口。

4.彈性存儲: 可以根據業務需要靈活地增加或縮減數據存儲以及增刪存儲池中的資源,而不需要中斷系統運行。彈性存儲的最大挑戰是減小或增加資源時的數據震蕩問題。

5.壓縮、加密、去重、緩存和存儲配額: 這些功能的提供往往考驗一個分布式文件系統是否具有可擴展性,一個分布式文件系統如果能方便的進行功能的添加而不影響總體的性能,那么這個文件系統就是良好的設計。這點GlusterFS就做的非常好,它利用類似GNU/Hurd的堆棧式設計,可以讓額外的此類功能模塊非常方便的增加。

MogileFS/FastDFS架構圖:

第二十二周作業

2、總結常用的分布式文件系統的應用場景及常規的維護方式;

名稱 適用場景
MogileFS 適用于處理海量小文件
Ceph PB級的分布式文件系統
MooseFS 適用于處理海量小文件
Taobao Filesystem 適用于處理海量小文件
GlusterFS 適于用處理單個大文件
Google Filesystem 適用于處理單個大文件
Hadoop Distributed Filesystem 適用于處理單個大文件

3、從理論原理到實戰案例來闡述MogileFS體系;

第二十二周作業

Tacker’s Database(數據庫)
數據庫保存了Mogilefs的所有元數據,你可以單獨拿數據庫服務器來做,也可以跟其他程序跑在一起,數據庫 部分非常重要,類似郵件系統的認證中心那么重要,如果這兒掛了,那么整個Mogilefs將處于不可用狀態。因此最好是HA結構。

Storage nodes(存儲節點)
mogstored 程序的啟動將使本機成為一個存儲節點。啟動時默認去讀/etc/mogilefs/mogstored.conf 。mogstored啟動后,便可以通過mogadm增加這臺機器到cluster中。一臺機器可以只運行一個mogstored作為存儲節點即可,也可以同時運行其他程序。

Trackers(跟蹤器)
mogilefsd即 trackers程序,類似mogilefs的wiki上介紹的,trackers做了很多工作,Replication ,Deletion,Query,Reaper,Monitor等等。mogadm,mogtool的所有操作都要跟trackers打交 道,Client的一些操作也需要定義好trackers,因此最好同時運行多個trackers來做負載均衡。trackers也可以只運行在一臺機器 上,也可以跟其他程序運行在一起,只要你配置好他的配置文件即可,默認在/etc/mogilefs/mogilefsd.conf。

工具
主要就是mogadm,mogtool這兩個工具了,用來在命令行下控制整個mogilefs系統以及查看狀態等等。

Client
Client實際上是一個Perl的pm,可以寫程序調用該pm來使用mogilefs系統,對整個系統進行讀寫操作。

原理:
每次文件的上傳和讀取,都經過前端Trackers服務器,trackers服務器收到client端的請求,查詢數據庫,返回一個上傳或者是讀取的可用的后端StorageNode的地址,然后由client端直接操作后端StorageNode服務器。upload操作返回就是成功或者失敗的結果,read操作就是返回對應的查詢數據。

 

環境:

Tracker + Tracker database:192.168.0.21

Mogstored node1:192.168.0.22

Mogstored node2:192.168.0.23

 

 

### 安裝包
~]# ls mogilefs
MogileFS-Server-2.46-2.el6.noarch.rpm            Perlbal-doc-1.78-1.el6.noarch.rpm
MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm  perl-MogileFS-Client-1.14-1.el6.noarch.rpm
MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm  perl-Net-Netmask-1.9015-8.el6.noarch.rpm
MogileFS-Utils-2.19-1.el6.noarch.rpm             perl-Perlbal-1.78-1.el6.noarch.rpm
Perlbal-1.78-1.el6.noarch.rpm

### 在tracker和mogstored節點上安裝需要的包
~]# cd mogilefs
~]# yum install * -y

### 在tracker節點上安裝mysql
~]# yum install mysql-server -y
~]# vim /etc/my.cnf
[mysqld]
...
innodb_file_per_table=ON
skip_name_resolve
~]# /etc/init.d/mysql start
mysql> CREATE DATABASE mogdb charset utf8;
mysql> grant all on mogdb.* to 'moguser'@'192.168.0.%' identified by 'mogpass';
mysql> flush privileges;

### 初始化mogdb庫
~]# mogdbsetup --dbname=mogdb --dbuser=moguser --dbpass=mogpass
This will attempt to setup or upgrade your MogileFS database.
It won't destroy existing data.
Run with --help for more information.  Run with --yes to shut up these prompts.

Continue? [N/y]: y

Create/Upgrade database name 'mogdb'? [Y/n]: y

Grant all privileges to user 'moguser', connecting from anywhere, to the mogilefs database 'mogdb'? [Y/n]: y

### 修改配置文件
~]# vim /etc/mogilefs/mogilefsd.conf
db_dsn = DBI:mysql:mogdb:host=192.168.0.61
db_user = moguser
db_pass = mogpass
listen = 0.0.0.0:7001

### 啟動tracker###
~]# /etc/init.d/mogilefsd start

### 在mogstored節點1創建數據掛載點
mkdir -p /data/mogstored/DEV{1,2}
chown -R mogilefs.mogilefs /data/mogstored/
### 在mogstored節點2創建數據掛載點
mkdir -p /data/mogstored/DEV{3,4}
chown -R mogilefs.mogilefs /data/mogstored/

### 修改mogstored配置文件
vim /etc/mogilefs/mogstored.conf
maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /data/mogstored                  #修改數據文件目錄為實際路徑

### 啟動mogstored服務
/etc/init.d/mogstored start

### 在tracker上創建host
~]# mogadm host add 192.168.0.62 --ip=192.168.0.62 --port=7500 --status=alive
~]# mogadm host add 192.168.0.63 --ip=192.168.0.63 --port=7500 --status=alive
### 創建device
~]# mogadm device add 192.168.0.62 1       #最后的數字代表設備號,如:dev1
~]# mogadm device add 192.168.0.62 2
~]# mogadm device add 192.168.0.63 3
~]# mogadm device add 192.168.0.63 4
### 查看device狀態
~]# mogadm device list
192.168.0.62 [1]: alive
                    used(G)    free(G)   total(G)  weight(%)
   dev1:   alive      1.643    108.021    109.664        100
   dev2:   alive      1.643    108.021    109.664        100

192.168.0.63 [2]: alive
                    used(G)    free(G)   total(G)  weight(%)
   dev3:   alive      1.643    108.021    109.664        100
   dev4:   alive      1.643    108.021    109.664        100

### 創建一個名為files的域用來存儲文件
~]# mogadm domain add files

### 將本地的/etc/fstab文件上傳至files域,并命名為fstab.txt
~]# mogupload --trackers=192.168.0.61 --domain=files --key='/fstab.txt' --file='/etc/fstab'
### 查看files域中的文件
~]# moglistkeys --trackers=192.168.0.61 --domain=files
/fstab.txt
### 查看已上傳的fstab.txt文件的屬性信息
~]# mogfileinfo --trackers=192.168.0.61 --domain=files --key='/fstab.txt'
- file: /fstab.txt
     class:              default
  devcount:                    2
    domain:                files
       fid:                    3
       key:           /fstab.txt
    length:                  805
 - http://192.168.0.62:7500/dev1/0/000/000/0000000003.fid
 - http://192.168.0.63:7500/dev3/0/000/000/0000000003.fid

 ### 下載fstab.txt文件到本地,并另存為fstab_dfs.txt
 ~]# mogfetch --trackers=192.168.0.61 --domain=files --key='/fstab.txt' --file='/tmp/fstab_dfs.txt'

 

 

4、自動化運維工具ansible的應用示例

 

1.安裝ansible
~]# yum install ansible -y

 

2.修改配置文件,添加客戶端信息
~]# vim /etc/ansible/hosts
[websrvs] #組名稱可以自定義
192.168.0.121
192.168.0.131
192.168.0.141

 

3.與客戶端建立ssh公鑰認證(免密登錄)
~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.121
~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.131
~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.141

 

4.使用ping模塊進行ping測試
~]# ansible websrvs -m ping

 

5.使用command模塊遠程執行命令(此模塊不支持管道符)
#在目標主機上創建user1用戶
~]# ansible websrvs -m command -a “useradd user1”

 

6.使用shell模塊遠程執行命令(此模塊支持管道符)
#在目標主機上修改user1用戶的密碼
~]# ansible websrvs -m shell -a “echo “mageedu”|passwd –stdin user1”

 

7.使用copy模塊將本地文件遠程復制到目標主機
#將本地的/tmp/hello.txt文件copy到目標主機的/tmp目錄下
~]# ansible websrvs -m copy -a “src=/tmp/hello.txt dest=/tmp”

#將content中的字符串copy到目標主機的/tmp/hello.txt文件下,如果該文件已存在,將會覆蓋原文件內容
~]# ansible websrvs -m copy -a “content=’my name is mageedu\n’ dest=/tmp/hello.txt”

 

8.使用cron模塊遠程設置計劃任務
#在目標主機上創建一個名為Synctime的計劃任務,用來做時間同步
~]# ansible websrvs -m cron -a “minute=*/5 job=’/usr/sbin/ntpdate cn.pool.ntp.org &>/dev/null’ name=Synctime”

#刪除上面創建的Synctime計劃任務
~]# ansible websrvs -m cron -a “state=absent name=Synctime”

 

9.使用file模塊遠程修改文件權限
#修改目標主機上的/tmp/hello.txt文件的權限
~]# ansible websrvs -m file -a “path=/tmp/hello.txt owner=root group=root mode=777”

 

10.使用yum模塊遠程安裝軟件包
#在目標主機上yum安裝apache
~]# ansible websrvs -m yum -a “name=httpd state=latest”

 

11.使用service模塊遠程啟停服務
#在目標主機上啟動httpd服務
~]# ansible websrvs -m service -a “name=httpd state=started”

 

12.使用user模塊遠程管理用戶
#在目標主機上創建系統帳號user2,uid為306
~]# ansible websrvs -m user -a “name=user2 system=yes state=present uid=306”

#刪除上面創建的用戶
~]# ansible websrvs -m user -a “name=user2 system=yes state=absent”

原創文章,作者:N26-西安-方老喵,如若轉載,請注明出處:http://www.www58058.com/81786

(0)
N26-西安-方老喵N26-西安-方老喵
上一篇 2017-09-20 17:51
下一篇 2017-09-23 15:03

相關推薦

  • 關于nginx狀態監控字段的個人見解(求真相)

    今天看到了馬哥視頻其中一節對nginx狀態監控信息的介紹,對視頻ppt上的監控字段解析產生了一些疑問,ppt內容如下: active connections – 活躍的連接數量server accepts handled requests — 總共處理了xxx個連接 , 成功創建xxx次握手, 總共處理了xxx個請求reading — 讀取客戶端的連接數.w…

    Linux干貨 2016-07-12
  • HAProxy服務配置

    HAProxy 是一款提供高可用性、負載均衡以及基于TCP(第四層)和HTTP(第七層)應用的代理軟件。 相較與 Nginx,HAProxy 更專注與反向代理,因此它可以支持更多的選項,更精細的控制,更多的健康狀態檢測機制和負載均衡算法。 四層和七層負載均衡的區別: 四層: 通過分析IP層及TCP/UDP層的流量實現的基于“IP+端口”的負載均衡。 七層: …

    Linux干貨 2017-05-19
  • 學而時習之

    1、 Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 文件管理類命令 ls, 查看:cat,more,less,tail,head,tac 復制:cp 移動:mv 刪除:rm 創建:touch 元數據屬性:stat 查看內容類型:file 文本編輯器:nano,vi Linux的文件類型       &…

    Linux干貨 2016-09-24
  • Linux上功能強大的文本編輯工具—vim

    vim–Vi Improved是一款全屏文本編輯器 vi: Visual Interface,文本編輯器 可見,vim是vi的升級版,所以我們當然要學習vim! vim的功能強大,自然命令、用法也會種類繁多,想要用的得心應手自然是需要長期的實際操作的,正所謂工欲善其事必先利其器,我們要想能夠在linux上從容應對繁多的文本編輯,無疑vim編輯器是…

    Linux干貨 2016-08-12
  • 8.16

    for 循環是相對比較簡單的循環,任何一個循環里面都可以嵌套循環,用for可以解決簡單邏輯上的任何循環 。 有兩種基本格式:for i in " ";do         或者dor((i=0;i<=9;i++))可以嵌套if或者while等循環 if循環。最重要的是判斷的條件,if意為如果什…

    Linux干貨 2016-08-19
  • 計算機的組成部分

    運算器:負責數據的運算和邏輯運算。 存儲器:實現記憶功能的部件用來存放計算程序及參與運算的各種數據。 控制器:負責對程序規定的控制信息進行分析,控制并協調輸入,輸出操作或內存訪問。 輸入設備:實現計算程序和原始數據的輸入。 輸出設備:實現計算結果輸出。

    Linux干貨 2017-08-19
欧美性久久久久