天天看點

LVS+Keepalived 網站服務群集

1. 環境描述:

本實驗環境如下表所示,使用keepalived實作主、從排程器的熱備,進而建構兼有負載均衡、高可用兩種能力的LVS網站群集平台

主機

作業系統

IP位址

主要軟體

主排程器

CentOS 6.5 x86_64

192.168.100.111

keepalived-1.2.2.tar

從排程器

192.168.100.112

Web伺服器

192.168.100.113

RHEL 6.5 x86_64

192.168.100.110

用我的真機模拟網際網路來測試LVS+Keepalived網站服務群集。

為差別兩個排程器把排程器改名稱為

在192.168.100.111上編輯配置檔案/etc/sysconfig/network

修改下面一行

HOSTNAME=zhang   //主排程器

在192.168.100.112上編輯配置檔案/etc/sysconfig/network

HOSTNAME=DDQ-01   //從排程器

為差別兩個web伺服器把伺服器改名稱為

在192.168.100.110上編輯配置檔案/etc/sysconfig/network

HOSTNAME=server-01

在192.168.100.113上編輯配置檔案/etc/sysconfig/network

HOSTNAME=server-02

在典型的負載均衡群集中,包括三個層次的元件

第一層,負載排程器:這是通路整個群集系統的唯一入口,對外使用所有伺服器共有的群集位址。通常會配置主、備兩台排程器實作熱備份,當主排程器失效以後平滑替換至備用排程器,確定高可用性。

第二層,伺服器池:群集所提供的應用服務(如 HTTP、FTP)由伺服器池承擔,其中的每個節點具有獨立的RIP(Real IP,真實IP)位址,隻處理排程器分發過來的客戶機請求,當某個節點暫時失效時,負載排程器的容錯機制會将其隔離,等待錯誤排除以後再重新納入伺服器池。

第三層,共享存儲:為伺服器池中的所有節點提供穩定、一緻的檔案存取服務,確定整個群集的統一性,在Linux/UNIX環境中,共享存儲可以使用NAS裝置,或者提供NFS(Network File System,網絡檔案系統)共享服務的專用伺服器。

NFS共享存儲伺服器的基本配置和通路方法。

在CentOS 6 系統中,需要先安裝nfs-utils、rpcbind軟體包來提供NFS共享服務,前者用于NFS共享釋出和通路,後者用于RPC支援。

yum -y install nfs-utils rpcbind

chkconfig nfs on

chkconfig rpcbind on

設定共享目錄

NFS的配置檔案為/etc/exports,檔案内容預設為空(無任何共享),在配置檔案中設定共享資源時,記錄格式為“目錄位置 客戶機位址(權限選項)”。例如,若要将檔案夾/opt/wwwroot共享給192.168.100.0/24網段使用,允許讀寫操作,配置如下所示。

mkdir -p /opt/wwwroot

vi /etc/exports

添加下面一行

/opt/wwwroot 192.168.100.0/24(rw,sync,no_root_squash)

其中客戶機位址可以是主機名、IP位址、網段位址、還可以使用*、?通配符;權限中的rw表示允許讀寫(ro為隻讀,)sync表示同步寫入,no_root_squash表示當客戶機以root身份通路時賦予本地root權限(預設是root_squash,将作為nfsnobody使用者降級對待)

當需要将同一個目錄共享給不同的客戶機,且配置設定不同的權限時,隻要以空格分隔指定多個“客戶機(權限選項)”即可。例如,将、/var/ftp/public目錄共享給兩個客戶機,并分别給予隻讀、讀寫權限,配置如下

/var/ftp/pub 192.168.100.10(ro) 192.168.100.20(rw)

啟動NFS服務程式,手動加載NFS共享服務時,應先啟動rpcbind,然後再啟動nfs

service rpcbind start

service nfs start

netstat -anpt | grep rpcbind

showmount -e   //檢視本機釋出的NFS共享目錄

在客戶機中通路NFS共享資源

客戶機中也需要安裝rpcbind軟體包,并啟動rpcbind系統服務;另外,為了使用showmount查詢工具,建議将nfs-utils軟體包也一并安裝。

yum -y install rpcbind nfs-utils

在客戶機上使用“showmount -e NFS伺服器位址”檢視NFS伺服器端共享了哪些目錄

手動挂載NFS共享目錄

例如,将NFS伺服器共享的/opt/wwwroot目錄挂載到本地/var/www/html方式如下

mount NFS伺服器位址:/opt/wwwroot /var/www/html

為了測試實驗結果,各web伺服器采用不同網頁,NFS共享存儲服務就不再搭建了。實際上各web伺服器的網站文檔都存放在共享儲存設備中。

2. 實驗步驟:

1.  在主排程器上安裝keepalived工具并編輯其配置檔案

1)  在編譯安裝keepalived之前,必需先安裝核心開發包kernel-devel,以及openssl-devel、popt-devel等支援庫。還需要用到ipvsadm管理工具。

使用xshell遠端管理并進行相關配置

[root@zhang~]# yum -y install popt-devel kernel-devel openssl-devel

[root@zhang~]# yum -y install ipvsadm

[root@zhang~]# modprobe ip_vs   //加載ip_vs子產品

[root@zhang~]# service ipvsadm start   //開啟ipvsadm服務

[root@zhang~]# vi /etc/sysctl.conf    //編輯配置檔案,打開路由轉發功能

net.ipv4.ip_forward= 1

[root@zhang~]# sysctl -p    //重新加載剛才的配置檔案,使其生效

編譯安裝keepalived

把keepalived軟體包上傳到主排程器

<a href="http://s3.51cto.com/wyfs02/M02/6F/A7/wKioL1WkfxCwWbNwAAHakMQgHDY965.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M02/6F/AA/wKiom1WkfTuy4dPcAAO2BStG6UI894.jpg" target="_blank"></a>

注意:在哪個目錄下執行rz操作檔案就傳送到哪個目錄下

[root@zhangopt]# tar xzvf keepalived-1.2.2.tar.gz   //解壓keepalived軟體包

[root@zhangopt]# cd keepalived-1.2.2

[[email protected]]# yum -y install gcc gcc-c++   //安裝編譯工具

[[email protected]]# ./configure --prefix=/--with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64/   //對keepalived的參數進行配置

[[email protected]]# make &amp;&amp; make install   //編譯和安裝keepalived服務

[[email protected]]# chkconfig --add keepalived  //把keepalived添加到系統進行管理

[[email protected]]# chkconfig keepalived on

配置主排程器

[[email protected]]# vi /etc/keepalived/keepalived.conf

清空配置檔案,插入以下文本

! Configuration File for keepalived

global_defs {

   notification_email {

     [email protected]

     [email protected]

     [email protected]

   }

   [email protected]

   smtp_server 192.168.200.1

   smtp_connect_timeout 30

   router_id LVS_01    //主排程器名稱

}            

vrrp_instance VI_1 {

    state MASTER   //主排程器的熱備狀态

    interface eth0

    virtual_router_id 51

    priority 110   //主排程器的優先級

    advert_int 1

    authentication {    //主、從熱備認證資訊

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {    //指定群集漂移位址

        192.168.100.188

}

virtual_server 192.168.100.188 80 {    //虛拟伺服器位址、端口

        delay_loop 6   //健康檢查的間隔時間(秒)

        lb_algo rr    //輪詢(rr)排程算法

        lb_kind DR    //直接路由(DR)群集工作模式

        persistence_timeout60    //連接配接保持時間(秒)

        protocol TCP    //應用服務采用的是TCP協定

real_server 192.168.100.110 80 {    //真實web節點位址、端口

        weight 1     //節點的權重

        TCP_CHECK {    //健康檢查方式

        connect_port 80    //檢查的目标端口

        connect_timeout3    //連接配接逾時(秒)

        nb_get_retry 3    //重試次數

        delay_before_retry3   //重試間隔(秒)

        }

real_server 192.168.100.113 80 {

        weight 1

        TCP_CHECK {

             connect_port 80

             connect_timeout 3

             nb_get_retry 3

            delay_before_retry 3

     }

  }

<a href="http://s3.51cto.com/wyfs02/M02/6F/AA/wKiom1WkfX_Cv9GVAAOiH7q3bHo968.jpg" target="_blank"></a>

 2.  在從排程器上安裝keepalived并編輯其配置檔案

A.  使用相同的方式把keepalived軟體包上傳到從排程器

[root@DDQ-01~]# yum -y install popt-devel kernel-devel openssl-devel

[root@DDQ-01~]# yum -y install ipvsadm

[root@DDQ-01~]# modprobe ip_vs   //加載ip_vs子產品

[root@DDQ-01~]# service ipvsadm start   //開啟ipvsadm服務

[root@DDQ-01~]# vi /etc/sysctl.conf    //編輯配置檔案,打開路由轉發功能

[root@zhang~]# sysctl -p   //重新加載剛才的配置檔案,使其生效

[root@DDQ-01~]#tar xzvf keepalived-1.2.2.tar.gz   //解壓keepalived軟體包

[root@DDQ-01~]#cd keepalived-1.2.2

[[email protected]]# ./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64/    //對keepalived的參數進行配置

[[email protected]]# make &amp;&amp; make install   //編譯和安裝keepalived服務

[[email protected]]# chkconfig --add keepalived   //把keepalived添加到系統進行管理

[[email protected]]# chkconfig keepalived on   讓keepalived服務在2345級别開啟

[[email protected]]# service iptables stop  //關閉防火牆

B.  配置從排程器

從排程器的配置和主排程器上的配置基本相同,隻需要調整router_id、state、priority參數即可,其餘内容完全相同。

[[email protected]]# vi /etc/keepalived/keepalived.conf

清空配置檔案内容,添加以下文本

  notification_email {

     [email protected]      //從排程器的名稱

   }

  notification_email_from benet [email protected]

  smtp_server 192.168.200.1

  smtp_connect_timeout 30

  router_id LVS_02

    state BACKUP        //從排程器的熱備狀态

    virtual_router_id 51 //編号主與從的兩邊要一樣的

    priority 100        //從排程器的優先級

    advert_int 1

    authentication { //主、從熱備認證資訊

       auth_type PASS

    virtual_ipaddress {     //指定群集(虛拟伺服器位址),可以指定多個的   

virtual_server 192.168.100.188 80{ //虛拟伺服器位址(VIP)、端口 

     delay_loop 6        //健康檢查的間隔時間(秒)

     lb_algo rr          //輪詢(rr)排程算法

     lb_kind DR          //直接路由(DR)群集工作模式

     persistence_timeout 60  //連接配接保持時間(秒),若注釋掉加個"!"

     protocol TCP        //應用服務采用的是TCP協定

    real_server192.168.100.110 80 { //第一個web節點的位址、端口

       weight 1     //節點的權重

       TCP_CHECK {      //健康檢查方式

         connect_port 80 //檢查的目标端口

            connect_timeout 3    //連接配接去逾時(秒)

            nb_get_retry 3   //重試次數

            delay_before_retry 3 //重試間隔(秒)

    real_server 192.168.100.113 80 { //第二個web節點的位址、端口

       weight 1

         connect_port 80

             connect_timeout 3

             delay_before_retry 3

 }

[root@DDQ-01 keepalived-1.2.2]# servicekeepalived start   //開啟keepalived服務

 3.  配置web節點伺服器

1)  Server-01的配置

[root@server-01~]# yum -y install httpd    //安裝web伺服器

[root@server-01~]# echo "&lt;h1&gt;this is server-01&lt;/h1&gt;" &gt;/var/www/html/index.html    //建立一個網站測試頁

DR模式Web伺服器配置如下:

[root@server-01~]# vi web.sh   //編輯web伺服器配置腳本

添加以下内容

ifconfig lo:0 192.168.100.188 broadcast 192.168.100.188 netmask 255.255.255.255up

route add -host 192.168.100.188 dev lo:0

echo "1" &gt;/proc/sys/net/ipv4/conf/lo/arp_ignore

echo "2" &gt;/proc/sys/net/ipv4/conf/lo/arp_announce

echo "1" &gt;/proc/sys/net/ipv4/conf/all/arp_ignore

echo "2" &gt;/proc/sys/net/ipv4/conf/all/arp_announce

sysctl -p &amp;&gt;/dev/null

[root@server-01~]# sh web.sh

[root@server-01~]# service iptables stop   //關閉防火牆

[root@server-01~]# service httpd start   //開啟web伺服器

Server-02的配置

[root@server-02~]# yum -y install httpd    //安裝web伺服器

[root@server-02~]# echo "&lt;h1&gt;this is server-02&lt;/h1&gt;" &gt;/var/www/html/index.html    //建立一個網站測試頁

[root@server-02~]# vi web.sh   //編輯web伺服器配置腳本

ifconfig lo:0 192.168.100.188 broadcast 192.168.100.188 netmask255.255.255.255 up

[root@server-02~]# sh web.sh   //運作腳本

[root@server-02~]# service iptables stop   //關閉防火牆

[root@server-02~]# service httpd start    //開啟web伺服器

3. 測試LVS+Keepalived高可用群集

1.  在客戶機的浏覽器中,能夠通過LVS+Keepalived群集的漂移位址(192.168.100.188)正常通路web頁面内容,則驗證群集建構成功。

<a href="http://s3.51cto.com/wyfs02/M00/6F/AA/wKiom1Wkfa3yhJsaAADFNrxooHk101.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M01/6F/A7/wKioL1Wkf4XBzvBEAADraeMgscc600.jpg" target="_blank"></a>

對于同一個IP位址一直都是由同一台web伺服器為其提供服務,當伺服器出現故障時,另一台就會代替其工作,實作了業務的高可用。

使用[root@zhang ~]# tail /var/log/messages可以檢視主從切換以及伺服器的自動化加入和删除

<a href="http://s3.51cto.com/wyfs02/M00/6F/AA/wKiom1Wkfc_CIcZNAAT8revtf_Q105.jpg" target="_blank"></a>

在從排程器上檢視結果如下

<a href="http://s3.51cto.com/wyfs02/M01/6F/A7/wKioL1Wkf7-w62ghAAUFQoAWyrc784.jpg" target="_blank"></a>

2.  模拟主排程器失效,檢視web站點是否仍可以通路?

若可以正常通路則驗證排程器實作熱備切換

<a href="http://s3.51cto.com/wyfs02/M00/6F/A7/wKioL1Wkf82i3RKbAAHyS-XjH24167.jpg" target="_blank"></a>

修改客戶機IP位址,驗證web伺服器通路量的負載均

<a href="http://s3.51cto.com/wyfs02/M01/6F/AA/wKiom1WkfhKSmswoAALJKhzIO0I931.jpg" target="_blank"></a>

使用[root@zhang ~]# tail /var/log/messages

<a href="http://s3.51cto.com/wyfs02/M01/6F/A7/wKioL1Wkf_6T79TrAAPOFUNFcOA924.jpg" target="_blank"></a>

在從伺服器上檢視

<a href="http://s3.51cto.com/wyfs02/M02/6F/A7/wKioL1WkgA7icBFDAAUc-jYeLIE567.jpg" target="_blank"></a>

3.  模拟一台web伺服器故障,再次檢視日志資訊

<a href="http://s3.51cto.com/wyfs02/M02/6F/A7/wKioL1WkgDOz4aFNAAN4yxfF73A836.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M02/6F/AA/wKiom1Wkfl2yT_YuAAWDXiIGGCc070.jpg" target="_blank"></a>

恢複web服務,再次檢視日志資訊

<a href="http://s3.51cto.com/wyfs02/M01/6F/A7/wKioL1WkgEyTLY-7AAVDhOMRJGg698.jpg" target="_blank"></a>

以上測試驗證了LVS+Keepalived網站服務群集搭建成功

本文轉自Y.weisheng 51CTO部落格,原文連結:http://blog.51cto.com/yuan2/1674014,如需轉載請自行聯系原作者

繼續閱讀