歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> Linux講座之打造高可靠性NFS集群(組圖)

Linux講座之打造高可靠性NFS集群(組圖)

日期:2017/2/27 9:28:05   编辑:更多Linux
  簡介    NFS 是Unix 世界最通用共享文件系統的方式,NFS Server 常扮演企業中重要的File Server。但是實務應用上時常遇到一個問題,當NFS Serverc Crash 會 造成所有NFS Client 相關Session 無法正常運作及終止。問題嚴重時,甚至NFS Client 及Server 都需reboot 才能解決問題。關於此問題,筆者嘗試用 RedHat Cluster Suite 架構HA 的機制來解決此問題,當主要的NFS Server 故障時,另一台備用的NFS Server 能立刻接手繼續提供NFS 服務。    測試環境    軟件    RedHat Enterprise Linux ES 版Update 2  RedHat Cluster Suite Update 2  硬件    x 86 服務器兩台  兩張網絡卡  Adaptec SCSI Card 29320-R 兩張  Proware Rackmount 3000I3 磁盤陣列     圖1:Proware Rackmount 3000I3 磁盤陣列    操作步驟:    1. High Availability NFS Cluster 架構規劃    筆者測試架構的簡圖如圖2。主要服務器node1 的ip 為192.168.0.201,備用服務器node2 的ip 為192.168.0.202,整個HA Cluster 對外的service ip 為192.168.0.200。     圖2:High Availability NFS Cluster 架構圖    2.設置Proware Rackmount 3000I3 磁盤陣列    這款磁盤陣列,很容易便可從面板上的「Sel」鍵設置成RAID 5 的磁盤(可參考其安裝手冊第五章)。假如SCSI 排線連接正確,從node1 或node2 執行「hwbrowser」應可看到Proware Rackmount 上的Share Disk(圖3)。    點擊查看大圖  圖3:hwbrowser 畫面    3.安裝Red Hat 集群管理員套件    用root 登入node1 安裝clumanager 與redhat-config-cluster 套件才能設置RedHat 集群管理員,將光盤收入光驅中,便會自動執行安裝程序(圖4)。請選 取「clumanager」及「redhat-config-cluster」套件進行安裝(圖5);在node2亦重復此步驟。    點擊查看大圖  圖4:Red Hat 集群管理安裝畫面     圖5:選取「clumanager」及「redhat-config-cluster」套件    或利用rpm 方式安裝:    [root@node2 RPMS]# rpm -ivh clumanager-1.2.12-1.i386.rpm  [root@node2 RPMS]# rpm -ivh redhat-config-cluster-1.0.2-1.1.noarch.rpm  [root@node1 root]# rpm -qa grep clu  clumanager-1.2.12-1  redhat-config-cluster-1.0.2-1.1    4.編輯 /etc/hosts    [root@node1 root]#vi /etc/hosts  127.0.0.1 localhost.localdomain localhost  192.168.0.201 node1.example.com node1  192.168.0.202 node2. example.com node2  並將此文件scp 至node2  [root@node1 root]#scp /etc/hosts node2:/etc/hosts    5.設置集群共享分區(Configuring Shared Cluster Partitions)    共享集群共享分區是用來存放集群的狀態信息,存放內容如下:    集群鎖定狀態  服務狀態  設置信息    每一個成員將會定期的寫入它的服務狀態到共享的儲存空間,共需要建立兩個集群共享分區:primary 及shadow。假如primary 的共享分區毀損了,集群成員還可以從shadow 或備用共享分區讀取信息,並且在同時修復primary 分區,資料的一致性是透過檢查碼(checksums) 來維護,而且任何在兩個分區間的不一致資料將會自動地修正。    假如一個成員在開機時無法寫入兩個共享的分區,它將不被允許加入集群。集群共享分區的需求如下:    兩個分區至少需要 10MB 的空間    共享的分區必須是 raw 裝置,它們不能含有文件系統。    共享分區只能由集群的狀態與設置信息所使用    [root@node1 root]# fdisk -l /dev/sdb  Disk /dev/sdb: 80.0 GB, 80018931712 bytes  255 heads, 63 sectors/track, 9728 cylinders  Units = cylinders of 16065 * 512 = 8225280 bytes  Command (m for help): p    <- 印出現有partition table  Disk /dev/sdb: 80.0 GB, 80018931712 bytes  255 heads, 63 sectors/track, 9728 cylinders  Units = cylinders of 16065 * 512 = 8225280 bytes  Device Boot Start End Blocks Id System  Command (m for help): n    <- 新增第一個共享分區  Command action  e extended  p primary partition (1-4)  p  Partition number (1-4): 1  First cylinder (1-9728, default 1):  Using default value 1  Last cylinder or +size or +sizeM or +sizeK (1-9728, default 9728): +20M    Command (m for help):   <- 新增第二個共享分區  Command action  e extended  p primary partition (1-4)  p  Partition number (1-4): 2  First cylinder (4-9728, default 4):  Using default value 4  Last cylinder or +size or +sizeM or +sizeK (4-9728, default 9728): +20M    Command (m for help): p    Disk /dev/sdb: 80.0 GB, 80018931712 bytes  255 heads, 63 sectors/track, 9728 cylinders  Units = cylinders of 16065 * 512 = 8225280 bytes    Device Boot Start End Blocks Id System  /dev/sdb1 1 3 24066 83 Linux  /dev/sdb2 4 6 24097+ 83 Linux  Command (m for help): w      <- 寫入partition table  The partition table has been altered!    Calling ioctl() to re-read partition table.    WARNING: Re-reading the partition table failed with error 16: 設備或系統資源忙碌中.  The kernel still uses the old table.  The new table will be used at the next reboot.  Syncing disks.  [root@node1 root]# reboot       <- 重新啟動    6.建立raw 裝置    在設置集群共享分區後,請在分區上建立raw 裝置,共享的分區上不能含有文件系統。要建立一個 raw 裝置,必需編輯 /etc/sysconfig/rawdevices 文件案來系結一個 raw 字符裝置到適當的區塊裝置以使得該raw 裝置可以被開啟、讀取與寫入。    [root@node1 root]# cat /etc/sysconfig/rawdevices  # raw device bindings  # format: <rawdev> <major> <minor>  # <rawdev> <blockdev>  # example: /dev/raw/raw1 /dev/sda1  # /dev/raw/raw2 8 5  /dev/raw/raw1 /dev/sdb1  /dev/raw/raw2 /dev/sdb2  [root@node2 root]# cat /etc/sysconfig/rawdevices  # raw device bindings  # format: <rawdev> <major> <minor>  # <rawdev> <blockdev>  # example: /dev/raw/raw1 /dev/sda1  # /dev/raw/raw2 8 5  /dev/raw/raw1 /dev/sdb1  /dev/raw/raw2 /dev/sdb2    編輯完/etc/sysconfig/rawdevices 文件後,可以重新開機 或者是執行下列指令來使其生效。    #service rawdevices restart    #使用 raw -aq 指令可查詢所有的raw 裝置    [root@node1 root]# raw -aq  /dev/raw/raw1: bound to major 8, minor 17  /dev/raw/raw2: bound to major 8, minor 18  7.設置集群名稱    選擇『主選單』=>『系統設置』=>『服務器設置』=>『集群』。    或在shell 提示符號下輸入redhat-config-cluster 指令。     圖6:設置集群名稱    8.設置Share Raw Device    選擇redhat-config-cluster 上的「Cluster」=>「Shared State」便可看到圖7 的畫面,填入正確的Raw Device。     圖7:Share Raw Device    9. 新增Cluster Member    選取「Member」,再點選「新增」的按鈕(圖8)。程序將會要求輸入Member名稱。請輸入Cluster 中一部系統的主機名稱或地址,請注意每一個Member 必須位於與執行redhat-config-cluster 的機器在同一子網絡中,而且必須在 DNS或每一部集群系統的 /etc/hosts 文件中已經定義了。請新增兩個Cluster Member「node1」及「node2」。(圖9)     圖8:新增Cluster Member     圖9:nfs_cluster 的成員    10.設置Failover Domain    「Failover Domain」是指提供某種服務,可互相備用的主機集合。一個Failover Domain 含有下列的特征:    Unrestricted — 指派給這個網域的一項服務可以在任何可用的成員(包括不列在此Failover Domain 內的主機)上執行  Restricted — 指派給這個網域的一項服務只能可以在Failover Domain 可用的成員上執行。  Unordered — 當一項服務被指派給一個Unordered 的Failover Domain,服務將執行於其上的成員將於未經優先級排列的可用Failover Domain 成員中來挑選。  Ordered —允許您在一個Failover Domain 中的成員間指定一個優先級,在清單頂部的成員便是最優先的,接下來便是清單中的第二個成員,依此類推。 選擇「Failover Domain」的卷標頁,再點選「新增」的按鈕。將會出現如圖10所示的「Failover Domain」對話窗口。     圖10:「Failover Domain」對話窗口    勾選「Restrict failover to only these members」防止在這裡未列出的任何成員接手指派給這個網域的一項服務。    勾選「Ordered Failover」依據網域中成員清單的位置來決定接管服務的優先權,較優先的成員將位於頂端。     圖11:設置「Failover Domain」的屬性    11.激活NFS 服務器    要建立High Availability NFS 服務,每一部集群成員都必須激活NFS 服務    # service nfs start <-- 馬上激活NFS 服務  #chkconfig nfs on <-- 重開機後亦自動激活NFS 服務  還有一點需特別注意:文件系統掛載以及集群NFS 服務所相關的匯出不應該收錄在/etc/fstab 或/etc/eXPorts 文件中。    12.利用「NFS Druid」來快速設置一個客戶端可存取的NFS 共享    a.激活Cluster 服務:「Cluster」=>「Start Cluster Service」  b. 激活NFS 設置向導:「Cluster」=>「Configure 」=>「Add Exports」=>  「NFS」    你將會看到如圖12 的畫面,然後按下「Forward」。     圖12:NFS Druid 畫面    c.利用「NFS Druid」將/dev/sdb export 給NFS Client,目錄名稱為 /data,步驟如圖13~圖15。這個部份有幾點需特別注意:    Service Name—在集群中用來辨識這個服務所使用的名稱  Service IP—集群的NFS 服務將被指定一個浮動的IP 地址,以用來與集群服務器的IP 地址做區分,這個IP 地址稱為「Service IP」。NFS Client 存取NFS, 是透過Service IP 而不是node1 或node2 的真實IP。  這是為了不讓NFS Client 知道是集群內那台服務器提供服務。這個浮動的 IP 位址將會設置在主要服務器(Master,在本例中是node1)。藉由使用這個方法,NFS 客戶端只知道浮動IP 地址,而不知道已經配置了集群的 NFS 服務器的事實。  如果主要服務器故障(node1),則此Service IP 會移轉至備用服務器(node2),如些一來,當主要服務器故障,備用服務器接管NFS 服務,NFS Client 完全不用做任何異動。  避免使用 exportfs –r  exportfs -r 指令將移除在 /etc/exports 文件中沒有特別指定的任何export 資訊,執行這個指令將會導致集群的NFS 服務變得無法被存取(直到服務被重新激活)。由於這個原因,建議您避免於已設置高存取性之NFS 服務的集群中使用exportfs -r 指令。如要回復不經意使用exportfs -r 指令,必須先停止然後再重新激活 NFS 集群服務。     圖13:export 與Client 選項     圖14:設置Service Name 與Service IP     圖15:選擇export 的Device    在「NFS Druid」的最後,點選「套用」來建立這個服務。並從「集群設置工具」中選擇「文件」=>「儲存」來儲存設置。    13.將node1 的/etc/cluster.XML 復制至node2    集群設置工具將集群服務與系統程序、集群成員與集群服務的信息儲存在/etc/cluster.xml 配置文件。所以當node1 巳完成設置後,請將/etc/cluster.xml 復制至node2 上,並激活node2 上的「clumanager」程序。    [root@node1 root]# scp /etc/cluster.xml node2:/etc/cluster.xml  root@node2's passWord:  cluster.xml 100% 1405  [root@node2 root]# service clumanager start  Starting Red Hat Cluster Manager...  Loading Watchdog Timer (softdog): [ OK ]  Starting Quorum Daemon:  14.修改node1 及node2 上的/etc/syslog.conf 指定Cluster Log 存放位置。    [root@node1 root]# vi /etc/syslog.conf  # Add for cluster  local4.* /var/log/cluster  # service syslog restart  [root@node2 root]# vi /etc/syslog.conf  # Add for cluster  local4.* /var/log/cluster  # service syslog restart  15.查看集群狀態    選擇 『集群』 => 『設置』 顯示集群狀態(圖16)。     圖16:集群狀態圖    16.測試High Availability NFS Cluster,下面是筆者的測試過程,用此來證明當node1 Crash 時,node2 確實可Take Over NFS 服務,達到High Availability 目的。    [root@FTP root]# showmount -e 192.168.0.200  Export list for 192.168.0.200:  /data *  [root@ftp root]#mkdir /mnt/nfs  [root@ftp root]#mount 192.168.0.200:/data /mnt/nfs  [root@ftp root]#mount  ...........  ...........  192.168.0.200:/data on /mnt/nfs type nfs (rw,addr=192.168.0.200)  [root@ftp root]# cd /mnt/nfs  此時將node1 電源關掉或執行「poweroff」指令仿真node1 Crash  [root@ftp nfs]# ls  此時大約會hang 5~10 秒,node1 便接管NFS 服務,ls 指令執行結果便會出現。    後記    本文筆者利用RedHat Cluster Suite 加上SCSI Share Disk 構建High Availability NFS Cluster。由於SAN 的流行,而且愈來愈多廠商對於Linux HA 解決方案感興趣,下期文章筆者將繼續介紹如何在SAN 環境下構建RedHat High Availability Cluster。




Copyright © Linux教程網 All Rights Reserved