2014年1月29日 星期三

架構安全的機房環控

    現代企業藉由資訊科技來提昇競爭能力,內部員工亦高度依賴著各類型的資訊系統來執行其各項業務,當企業身處在一個高度競爭的產業,而競爭者們的產品差異不大的情況下,企業資訊能力的強弱,可以是最後決勝的關鍵。

    企業資訊系統的核心在於資訊部門,而機房是則是資訊部門的心臟,如何維持一個安全且穩定運作的機房,讓所有資訊系統能正常的脈動,並將養份輸送到企業每一部份,是資訊部門一個重要的課題。

A)機房環境監控的基本需求

    機房建置有五大系統:電力、空調、消防、安全及環控,其中前四項必須在建置時期就應有妥善的規劃安排,環控則可在建置後,依需求來予以導入。

一個基本的機房環控,必須能監控如下資訊:
‧溫度
            ‧電源系統
            ‧空調系統
            ‧UPS
        ‧溼度
            ‧漏水
            ‧消防系統
            ‧門禁系統

但要能全部整合上述項目的環控系統,所費不貲,花費可能在數十至上百萬之譜,對於中小企業是不小的負擔,實際上,中小企業因為主機數量不多、機房不大、MIS人力配置精簡,並無迫切需求建置複雜的環控系統,但也不能完全不建置,否則MIS人員恐怕會夜夜不成眠,畢竟機房內的機電系統與機器的變數太多了,不是人為所能預料且控制的。

因此若要建置一套最基本、花費最低廉、且又能讓MIS放心休息的機房環控系統,我認為必須至少需能監控此三個項目:溫度、影像、UPS,若此三個數據皆正常,則代表機房目前處於安全的狀態。

  • 溫度:這項是機房監控項目中最重要且必要的一項,因為機房任何異常,最終都會帶來溫度這項指標的上升;當溫度上升時,最常見的情況是機房的冷氣或空調出現了問題,或者是大量的機器高速運轉產生熱源,既有的空調不足以應付,造成機房溫度逐步的上升;若高溫持續且MIS未及時降溫處理,則部份企需散熱,以大量硬碟為主的storage(磁碟陣列或NAS)機器會先當機,再來是loading較重的運算主機,然後其它的機架型機開始當機停止運轉,最後是網路相關設備;另一種最遭的情況是機房失火的可能性,這種可能性會伴隨著有其它監控項目的異常,比如部份網路、電力中斷、機器當機等等先發生後,繼之而來溫度會陡然上升的情況。
  • 主機服務:溫度指標是反應機房目前有無重大危險的指標,但此指標若正常,也不全然代表機房在正常的狀態;只是單一台主機當機,可能是機器本身問題,但若多台主機同時當機,可能是網路設備異常,或者是某段電源供應出問題,甚至是更嚴重危機的前召,此時,我們必須搭配溫度、網路、影像、UPS等監控值來判斷。
  • 網路:若網路出現問題,大部份的情況下也會有部份的主機服務無法偵測到,我們必須搭配相關項目來判定。
  • 影像:利用web camera,我們可以定時或者在發生異常時,自動拍下現場照況並email給管理人員參考;這是判斷機房有無重大的危險(如跳電、失火、陌失人進入)等等的依據。
  • UPS:目前的UPS系統皆有網路孔提供即時的log可導出或遠端監控,提供管理人員判定目前電力是否正常的資訊。

B)建構環控主機的考量

    設置環控主機時,需考量到不受機房異常狀況的影響而能夠持續的偵測,例如,當一台網路switch當機時,若環控主機剛好也在接該switch上,那麼我們就收不到監控的訊息了,因此:
  • 環控主機所在的網段,與Firewall之間的網路設備愈少愈好。
  • 環控主機所用的電源迴路,建議與機房的不同。
  • 環控主機儘量單獨放置於機房遠離機櫃的角落。

C)規劃環控主機的配置

2014年1月21日 星期二

使用 glusterfs 達成儲存空間的即時自動同步與高可用性

Gluster成立於2005年,並於同年發表他們的分散式儲存系統Gluster File System (GlusterFS) ,該產品是一個免費開源的檔案系統,它可以利用scale out的方式增加檔案儲存區塊,來存放高達數PT的資料,在目前Big Data火紅的時代,愈來愈受到注目。

GlusterFS已於2011為Redhat公司以1.36億美金收購;Redhat於收購GlusterFS之後,另外推出一個以GlusterFS為基礎的商業版本Redhat Storage(RHS),但其實RHS與GlusterFS這兩種版本基本上並無太大的差異,只是RHS包含有Redhat官方售後的技術支援和服務;雖然如此,但Redhat仍持續投入人力支援GlusterFS以免費開源模式的方式運作,由下表可看到GlusterFS被收購當年與2013的情況比較:

2011
2013
約20名開發人員
約75名開發人員
支援:NFS v3 and GlusterFS client
支援:NFS v3, GlusterFS client, SAMBA, QEMU, Swift API, libgfapi
新版本週期:約一年
新版本週期:約4~6個月
無OpenStack整合
支援OpenStack整合


  1. 基本概念:

  1. POSIX (Portable Operating System Interface)
中譯為「可移植作業系統介面」之意,由IEEE所定義規範,以驗証在UNIX 環境下應用程序的可移植性;GlusterFS是屬於POSIX-Compliant的一種分散式儲存系統,適用於任何UNIX/LINUX的系統。

  1. scale out與scale up
  我們先簡單介紹一下scale out與scale up這兩種擴增儲存空間的方式, 而這也是Glusterfs的核心概念。

Scale up: 傳統的擴增storage空間模式;當空間不夠時,便用新的、更大容量的storage來取代舊有的。
        
scale out: 是一種橫向擴展儲存空間的概念,和傳統的scale up方式不同,它不需要更動舊有的設備,只需加入新的storage到所謂的storage pool中。

Scale out具有擴充簡易、快速、設備不需停機、舊有的storage不需汰換、支援更大的儲存空間等特性,因此,scale out是這幾年相當流行的儲存概念。

  1. FUSE (Filesystem in Userspace)
翻譯成中文為「使用者空間的檔案系統」,它提供了一套與Linux kernel VFS溝通的介面模組,可讓使用者自行以非特權使用者的身分設定並掛接檔案系統;最常見應用FUSE功能的如sshfs,它可以讓使用者以SSH的方式模擬並掛載檔案系統,而且還享有原有的SSH加密功能。
File:FUSE structure.svg
其中,VFS(Virtual File System Switch)是作為Kernel與真正檔案系統溝通的中間層介面;由於目前檔案系統種類眾多,如BSD、FAT32、NTFS、EXT2、EXT3、JFS、JFS2、ReiserFS 等等,因此,VFS提供了一個統一且有規範的介面,我們可以把它想像為一個中間交換層,負責將各項檔案處理的需求(掛載、讀取、寫入、複製、刪除等),交由所對應的真實檔案系統去執行。

  1. 運作方式:
Brick是由最底層、實體的storage所提供的檔案空間;如下圖左側的brick1~brick6,是由node1,node2,node3,node4等四台storage所提供,再經由GLusterFS轉換為Volume1與Volume2兩個filesystem提供外部伺服器使用。


  1. Volume的組成:(圖示摘自Redhat官方說明)
如果我們將每一個bricks視為storage上的每一個slot,那麼,我們會在該storage上作出各種raid的格式,同樣的,GlusterFS也可以將這些bricks,組合下列三種基本的volume形式:
      1. Distributed volume:Gluster 會在volume中的所有的Bricks隨機分散地儲存檔案;換句話說,File1可能會儲存在BBrick1,而File2可能會儲存在其它不同的Brick;此種方式可以提供最大的儲存空間,但沒有任何的安全性,若底層有一台Storage掛了,則它所屬的Bricks上面的檔案都會消失,您只能從Storage所提供的raid機制,或者利用備份來還原所需的檔案。
   Illustration of a distributed volume consisting of two servers. Two files are shown on the server1 brick, and one file is shown on the server2 brick. The distributed volume is set to a single mount point.

Distributed volume的特性:
  • 檔案會隨機儲存在每個Brick。
  • GlusterFS沒有提供任何的安全性。
  • 檔案復原機制僅由底層的實體storage所提供。
  • 可提供最大的儲存空間

      1. Striped volume:檔案在儲存之前會被先切割成小塊之後,再儲存到不同的Bricks;所以,當讀寫一個大型的檔案時,由於它會被切割成多個小檔案,並同時寫入到不同的Bricks,因此,讀寫的效能與速度將會增加。
   Illustration of a Striped Volume
Striped volume的特性:
        • 與Distributed volume相同,GlusterFS沒有提供任何的安全性。
        • Distributed volume相同,安全性更低,只要任何一個Brick損壞,會造成所有儲存在此Brick檔案的損毀。
        • 檔案切片的數量應與Volume中的Bricks數目一致。
        • 能提供最有效率及最快速度的讀寫。

      1. Replicated volme:此方式能提供最佳的安全性,所有的Bricks會被分成指定數目的複本群組,檔案會同時儲存到這些群組Bricks,且個個群組的內容完全相同;因此,就算某個Brick、甚至於某台底層storage當機,也不會對檔案有任何的影響。
   Illustration of a Replicated Volume
Replicated volume的特性:
  • 當檔案的安全性考量為優先的時候,此為最佳選擇。
  • 檔案複本的數量最好與Brick數量一致;比如我們希望能有五個複本,那麼我們至少就該準備5個Bricks。
  • 能提供的儲存空間最少。
  • 檔案的存取效率與速度最低。

此外,此三種基本格式還可以加以混用合組,因此,愈多的nodes(實體storage),除了能增加Glusterfs的空間之外(Distributed)、亦會讓Glusterfs讀寫的效率更高(Striped),並且資料的安全性更高(Repliacted)

  1. Distributed Striped Volumes:Distributed striped volumes 與 striped volume很類似,額外的好處是您可以將檔案打散分佈在更多的Bricks,得到同時有大空間以及存取效率快速的好處。
   Illustration of a Distributed Striped Volume
Distributed Striped volume的特性:
  • 先將檔案打散,再儲存到不同的Bricks。
  • 可增加Distributed volume存取效率。
  • Bricks數量必須為stripe數目的倍數。
  • 安全性最低。
  • 可同時得到儲存空間大以及存取效率高的好處。

  1. Distributed Replicated Volumes:檔案會依次的寫入到各個Brick複本群組(而非Bricks),最常應用此方式的狀況是,當您空間需求很緊迫,但又不能喪失檔案安全性的時候。
   Illustration of a Distributed Replicated Volume
Distributed Replicated volume的特性:
  • 資料會依Distributed的方式儲存在各個Brick複本群組。
  • 可同時得到儲存空間以及安全性的好處。
  • 存取效率最低。

  1. 您還可以依自身的需求,組合出所需要的Volume形式;例如Striped Replicated Volumes:
          Illustration of a Striped Replicated Volume
Bricks的數量為每個Volume中的複本數目x檔案切片(strip)數目;Striped Replicated Volumes會先將每個Volume中的bricks依複本數分成數個複本群組,再將檔案切片後寫入;本方法適用於需要高速即時存取以及兼顧檔案安全性的情況。

另外一個較為複雜的是Distributed Striped Replicated Volumes;此種Volume會將 stripe後資料以distribute方式,放置於每個複本群組(Replicated Volume)中。
Illustration of a Distributed Striped Replicated Volume
此種方式兼顧了存取效率、安全性以及檔案空間,但也需要大量的nodes來實現,所需的bricks數目為stripe數目與複本數目的乘積。

  1. 各種Volume type的實作及說明,可參考Redhat官方的文件:https://access.redhat.com/site/documentation/en-US/Red_Hat_Storage/2.1/html/Administration_Guide/chap-User_Guide-Setting_Volumes.html

  1. 實作:建立一個Replicated volume

以下,我們使用VirtualBox,並安裝三台CentOS來搭建一個GlusterFS環境;其中,CentOS1作為GlusterFS主控台,且與CentOS2則作為GlusterFS storage,即前面所稱的node,CentOS3為client端。
     

  1. 在每台host修改/etc/hosts  :
加入
10.0.2.1   centos1
10.0.2.2   centos2
10.0.2.3   centos3

  1. 在每台host安裝XFS檔案系統支援:
Install XFS filesystem support
#yum install xfsprogs xfsdump

  1. 在centos1, centos2製作XFS storage:
Make storage with xfs filesystem on sdb1
  #fdisk /dev/sdb

#mkfs.xfs -i size=512 /dev/sdb1
#mkdir -p /data/gv0/brick1

Edit /etc/fstab file, add
/dev/sdb1               /data/gv0/brick1        xfs     defaults        1 2

#mount –a
#mount  → You should now see sdb1 mounted at /data/gv0/brick1

  1. 在centos1, centos2安裝Glusterfs server:

# wget -P /etc/yum.repos.d http://download.gluster.org/pub/gluster/glusterfs/LATEST/EPEL.repo/glusterfs-epel.repo
# yum install glusterfs-server

  1. Stop Selinux & Iptables
為了保險起見,我們先將Selinux及防火牆關閉,以避免一些不必要的異常錯誤。
Disable Selinux
    vi /etc/selinux/config
    Change SELINUX=enforcing  →  SELINUX=disabled
    And then reboot
Stop iptables
/etc/init.d/iptables stop
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]
  1. Start service
# service glusterd start
Starting glusterd:                                         [  OK  ]
# service glusterd status
glusterd (pid  4471) is running...

# chkconfig glusterd on
# chkconfig glusterfsd on

  1. Configure and start the trusted pool
    在Centos1:
[root@centos1 ~]# gluster peer probe centos2
peer probe: success
在Centos2:
[root@centos2 ~]# gluster peer probe centos1
peer probe: success
    在任一台皆可,建一個replica(Replicated Volume)
# gluster volume create gv0 replica 2 centos1:/data/gv0/brick1 centos2:/data/gv0/brick1 force
volume create: gv0: success: please start the volume to access data
# gluster volume start gv0
volume start: gv0: success
# gluster volume info

Volume Name: gv0
Type: Replicate
Volume ID: f57a57a9-dc28-40b2-bc45-d1473f0018db
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: centos1:/data/gv0/brick1
Brick2: centos2:/data/gv0/brick1

  1. 測試
    在centos3
# yum install glusterfs-fuse
# mount -t glusterfs centos1:/gv0 /mnt
# mount
/dev/mapper/vg_centos1-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
centos1:/gv0 on /mnt type fuse.glusterfs (rw,default_permissions,allow_other,max_read=131072)
# df -h
Filesystem                      Size  Used Avail Use% Mounted on
/dev/mapper/vg_centos1-lv_root  6.7G  3.4G  3.0G  54% /
tmpfs                           499M  232K  498M   1% /dev/shm
/dev/sda1                       485M   35M  426M   8% /boot
centos1:/gv0                    4.0G   33M  4.0G   1% /mnt

  1. 驗証

# vi /mnt/test  //write some test

You will find the same file on centos1 & centos2 in /data/gv0/brick1

  1. Shutdown centos2, and do some test on centos3
#df -h
Filesystem                      Size  Used Avail Use% Mounted on
/dev/mapper/vg_centos1-lv_root  6.7G  3.4G  3.0G  54% /
tmpfs                           499M  232K  498M   1% /dev/shm
/dev/sda1                       485M   35M  426M   8% /boot
centos1:/gv0                    4.0G   33M  4.0G   1% /mnt

# cat /mnt/test
this is a test

上方的步驟中,我們在centos1及centos2使用另一顆HD建立了xfs檔案系統,並將它掛載到/data/gv0/brick1,再建立一個Replicated Volume將此兩個bricks放入;之後我們便可以在其它(Centos3) client,使用mount -t glusterfs centos1:/gv0 方式將其掛載使用。
由於我們建立的是Replicated Volume,因此, client端所掛載的glusterfs目錄下所產生的任何檔案,也會在centos1, centos2的brick 目錄下(/data/gv0/brick1)看到相同的檔案複本。


  1. GlusterFS的應用與未來

  Cluster(叢集)的應用主要有四種,叢集儲存(Storage Cluster)、HA(High Available高可用)、Load Balance與High Performance等,每一種都可以適用於不同的需求,在目前「雲端」這個詞彙紅火的年代,相關的技術與應用若不與「雲端」扯上關係,似乎便趕不上流行;但GlusterFS是真正適合用於雲端服務架構底層免費開源的儲存系統,它同時具有高容量、高可靠性、高擴展性,而且,它沒有一般系統常見的SPoF(Single Point Of Failure)單點失效的問題,換句話說,GlusterFS沒有主要的控制主機,環境中任何一個node失效當機,都不會造成系統的異常或資料遺失;且由於scale-out、stripe的特性,使得GlusterFS能夠即時且彈性的擴增空間,並且非常適用於非結構性資料的大量雲端資料儲存

除了雲端的應用,GlusterFS也適用於一般企業內部,例如將所有老舊的storage整合起來,可充份利用舊機器的空間、也不用擔心資料的安全性;此外,也適用於需要computing運算環境的IC設計公司,可快速且彈性的調整所需要的儲存空間、並利用stripe volume加快運算時所需的快速存取;另外,若企業內有架設虛擬主機環境,亦可作為後端的storage平台,提供虛擬主機一個良好的儲存備援,避免因storage異常而造成整體虛擬主機環境的崩潰。