歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux管理 >> Linux維護

在Linux上實現高可用服務

  高可用服務可算是當前企業應用中的一個熱門了。高可用服務(High-Availability Service)是指用兩台或更多機器來運行服務(比如http、NFT、Oracle等),當主服務 器down機後,其它的副服務器就自動接管服務,當主服務器回復到正常狀態時,再自動將服務從副服務器上接管回來。大家都知道在服務器領域中Linux操作系統本身就具有很高的穩定性,然而在實際應用中,可能會要求系統具備更高的穩定性。這時候就需要構建高可用服務來保證系統能提供不間斷的服務。許多商家都提供了Linux上的高可用產品,比如:Rose HA、Turbo HA Cluster Server、SGI FailSafe Server等,不過Linux上也有免費的高可用產品,比如High-Availability Linux Project,它是一個高可用性Linux項目。利用它,我們可以在Linux上構建各種高可用的服務。本文就將利用heartbeat實現高可用的http服務。

  下面先介紹一下這次實驗的軟硬件情況:

  A. 硬件

  服務器:2台, 都具有雙網卡,一塊用於連接到網絡,一塊用於雙機互連。
  心跳線:特殊的串口線,用於串口信息的檢測。
  網線:交叉網線,用於雙機互連的。支持heartbeat的UDP協議通訊。

  B. 軟件

  操作系統:RedHat 9.0
  服務:Apache (兩台服務器上的apache設置和內容完全一致)
  HA軟件:heartbeat 1.0.4 for RedHat 9.0
  C. 網絡信息

  服務器1
  主機名:ha1.bogus.sh.cn
  eth0: 192.168.2.1(接入LAN)
  eth1: 10.0.0.1(接心跳線)

  服務器2
  主機名:ha2.bogus.sh.cn
  eth0: 192.168.2.2(接入LAN)
  eth1: 10.0.0.2(接心跳線)

  對外服務的IP:192.168.1.3

  下面是具體的安裝過程:

  1、安裝heartbeat

  我們選擇heartbeat1.0.4,它是2003/10/14更新的,也是當前最新的穩定版本。另外還有heartbeat-beta1.1.3,不過如果你是第一次安裝,沒有需要和以前的版本配合的話,就不要選這個。

  因為我們使用的操作系統是Red Hat 9.0,所以我們直接用相應版本的rpm包來安裝。

  heartbeat 1.0.4 for RedHat 9.0主要包有以下4個:
  heartbeat-1.0.4-2.rh.9.i386.rpm
  heartbeat-ldirectord-1.0.4-2.rh.9.i386.rpm
  heartbeat-pils-1.0.4-2.rh.9.i386.rpm
  heartbeat-stonith-1.0.4-2.rh.9.i386.rpm

  不過這些包都依賴其它的一些包,它們可以在這裡中找到:

  ipvsadm-1.21-1.rh.9.um.1.i386.rpm
  libnet-1.1.0-1.rh.9.um.1.i386.rpm
  perl-Authen-SASL-2.03-1.rh.9.um.1.noarch.rpm
  perl-Convert-ASN1-0.16-2.rh.9.um.1.noarch.rpm
  perl-IO-Socket-SSL-0.92-1.rh.9.um.1.noarch.rpm
  perl-ldap-0.2701-1.rh.9.um.1.noarch.rpm
  perl-Mail-IMAPClient-2.2.7-1.rh.9.um.1.noarch.rpm
  perl-Net-SSLeay-1.23-1.rh.9.um.1.i386.rpm
  perl-XML-NamespaceSupport-1.08-1.rh.9.um.1.noarch.rpm
  perl-XML-SAX-0.12-1.rh.9.um.1.noarch.rpm

  下面給出筆者的安裝順序:

  rpm -ivh heartbeat-pils-1.0.4-2.rh.9.i386.rpm
  rpm -ivh heartbeat-stonith-1.0.4-2.rh.9.i386.rpm
  rpm -ivh heartbeat-1.0.4-2.rh.9.i386.rpm
  rpm -ivh ipvsadm-1.21-1.rh.9.um.1.i386.rpm
  rpm -ivh perl-Net-SSLeay-1.23-1.rh.9.um.1.i386.rpm
  rpm -ivh perl-IO-Socket-SSL-0.92-1.rh.9.um.1.noarch.rpm
  rpm -ivh perl-Convert-ASN1-0.16-2.rh.9.um.1.noarch.rpm
  rpm -ivh perl-XML-NamespaceSupport-1.08-1.rh.9.um.1.noarch.rpm
  rpm -ivh perl-XML-SAX-0.12-1.rh.9.um.1.noarch.rpm
  rpm -ivh --nodeps perl-Authen-SASL-2.03-1.rh.9.um.1.noarch.rpm
  rpm -ivh --nodeps perl-Mail-IMAPClient-2.2.7-1.rh.9.um.1.noarch.rpm
  (注:以上兩個包還有依賴關系,可以從cpan.org上找到tar包安裝,然後就用--nodeps強行安裝)
  rpm -ivh perl-ldap-0.2701-1.rh.9.um.1.noarch.rpm
  rpm -ivh heartbeat-ldirectord-1.0.4-2.rh.9.i386.rpm

  2、配置heartbeat

  heartbeat的配置有以下三個文件,它們是:
  ha.cf      主要配置文件
  haresources   資源配置文件
  authkeys     關於認證信息

  前兩個文件應該是所有人都可讀的,而authkeys是只有root才可讀可寫的。

  2.1. /etc/hd.d/ha.cf

  這個文件主要負責定義媒體和設置參數,是heartbeat的主要配置文件。這裡我們的ha.cf文件內容如下:

  node ha1.bogus.sh.cn
  node ha2.bogus.sh.cn
  serial /dev/ttyS0
  baud 19200
  deadtime 5
  keepalive 1
  initdead 30
  udp eth1
  udpport 694

  下面是對ha.cf的相關解釋:

  keepalive 1
  該參數指定兩次 heartbeat 之間的秒數。在本實驗中,每秒一次 heartbeat。

  deadtime 5
  該參數指定等待聲明主機死機的時間。指定 10 表示 heartbeat 將在節點停止響應 10 秒之後啟動故障轉移。

  initdead 30
  該參數指定heartbeat首次啟動時deadtime應該為多久。因為當heartbeat在引導時啟動時,還需要給網絡啟動留出時間,所以這個時間要設得長一些。

  udpport 694
  該參數指定heartbeat發送UDP包時所使用的端口。

  udp eth1
  該參數指定在哪個接口上發送heartbeat。

  node ha1.bogus.sh.cn與node ha2.bogus.sh.cn
  該參數告訴 heartbeat 使用哪些主機。節點名的正確性是非常重要的。節點名應與命令uname -n所顯示的名稱一致。

  serial /dev/ttyS0
  該參數指定在心跳線接在哪一個串口上。

  baud 19200
  該參數串口通訊的波特率。

  2.2. /etc/ha.d/haresources

  這個文件指定同步的服務以及主機是什麼。兩台機器上的這個文件一定要一致。我們設定的是高可用服務是Apache,它對外的IP是192.168.2.3,所以haresources的內容應該如下:
ha1.bogus.sh.cn 192.168.2.3 httpd

  其中httpd是啟動腳本的名稱。heartbeat會先從/etc/ha.d/resource.d和/etc/rc.d/init.d的目錄中去尋找httpd這個啟動腳本,這裡因為我們采用的apache是Redhat自帶的apache,在/etc/rc.d/下面就有一個httpd的啟動腳本,所以heartbeat就可以利用httpd start/stop來啟動或停止apache服務了。NextPage###  2.3. /etc/ha.d/authkeys

  有三種認證方式:crc, md5, and sha1. sha1是最難破解的,md5其次,crc最次。

  這個文件的格式如下:

  auth <number>
  <number> <authmethod> [<authkey>]

  這裡我們的authkeys文件內容如下:

  auth 1
  1 sha1 sha1 myAuthkey

  然後將其權限設為600,以提高安全性。注意:如果不做這一步,heartbeat可能無法正常運作。
  chmod 600 authkeys

  2.4 另一台服務器的配置

  對於另一台服務器就也重復做以上的設定,如:
  vi /etc/ha.d/ha.cf
  vi /etc/ha.d/haresources
  vi /etc/ha.d/authkeys
  chmod 600 authkeys

  在兩台機器上的haresources和authkeys應該完全相同。ha.cf也應該相同,除非你的心跳線是連接不同的串口的或者交叉網線連接的網卡不同。

  3、啟動heartbeat

  首先關閉兩台機器的高可用服務,因為heartbeat 啟動時會自動服務打開,這裡的高可用服務是apache,我們可以用以下命令來關閉它們:
  /etc/rc.d/init.d/httpd stop

  然後,可以通過以下命令先後在兩台機器上啟動heartbeat:
  /etc/rc.d/init.d/heartbeat start

  用以下命令可以查看到heartbeat在運行中的log:
  tail -f /var/log/ha-log

  用以下命令可以關閉heartbeat服務
  /etc/rc.d/init.d/heartbeat stop

  4、測試

  heartbeat服務啟動以後,就可以開始測試了。為了區分apache服務是來自於哪一台服務器,我們在apache的index.html中加上主機名。這樣我們通過訪問主頁就能夠區分是哪一台服務器在提供apache了。

  一開始,我們訪問http://192.168.2.3,看到的是ha1的頁面,然後我們想辦法讓ha1斷開一下,比如關機或重啟。然後,我們刷新頁面,不久就可以看到頁面變成ha2的了,這表示ha2已經接管了ha1的apache服務,我們在ha2上察看,可以發現它已經自動掛上了192.168.2.3個IP了,而且apache服務也已經啟動了。然後我們再讓ha1重新運作起來,這時候,我們再次刷新頁面,不久就可以看到頁面又變回到ha1的了,而ha2上的apache服務也自動關閉了。在整個過程中,對外的apache服務幾乎沒有受到什麼影響。

  5、結束語

  heartbeat是遵守GPL發行的開源軟件,這就提供了一個低成本的高可用解決方案,利用heartbeat,還可以構築其它的高可用服務,比如LDAP、DataBsee、NFS、FTP等等。另外heartbeat也可以很方便的移植到其它類UNIX平台中去,更詳細資料可從其官方網站中找到。

Copyright © Linux教程網 All Rights Reserved