天天看點

前端httpd+keepalived加後端heartbeat+nfs+drbd實作httpd服務的高效應用及資源統一管理

本文四台機器:Centos6.0

lv1、lv2兩台機器做httpd的前端,使用keepalived做高可用;虛拟出一個vip供client通路。

node1、node2應用drbd技術實作檔案鏡像存儲,虛拟出一個vip做nfsserver_ip供httpd服務,友善配置,資料的統一管理;

涉及應用技術;httpd、keepalived、drbd、nfs、heartbeat

如圖:

lv1: 192.168.182.130

lv2: 192.168.182.129     VIP:192.168.182.200 該vip供client通路

node1:192.168.182.133

node2:192.168.182.134  VIP:192.168.182.150  該VIP充當nfsserver進行挂載  

首先關閉了selinux、iptables;當然真實環境并非如此,我們進行分别配置即可

一、開始配置,lv1、lv2;進行測試前端是否正常

1、分别執行:yum install -y httpd ipvsadm keepalived

為了分别出lv1、lv2的頁面差別,分别在頁面辨別lv1、lv2

2、接下來配置keepalived;

lv1:上配置

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

  notification_email {

    [email protected]

  }

  notification_email_from [email protected]

  smtp_server 127.0.0.1

  smtp_connect_timeout 30

  router_id LV_ha

}

vrrp_instance httpd {

   state MASTER

   interface eth0

   virtual_router_id 51

   priority 100

   advert_int 1

   authentication {

       auth_type PASS

       auth_pass 1111

   }

   virtual_ipaddress {

       192.168.182.200

virtual_server 192.168.182.200 80 {

   delay_loop 2

   lb_algo rr

   lb_kind DR

   persistence_timeout 50

   protocol TCP

   real_server 192.168.182.130 80 {

       weight 3

   notify_down    /var/www/httpd.sh

   TCP_CHECK {

   connect_timeout    3

   nb_get_retry    3

   delay_before_retry    3

   connect_port 80

       }

lv2:配置

   real_server 192.168.182.129 80 {

分别在lv1、lv2建立httpd.sh

vim /var/www/httpd.sh

#!/bin/sh

pkill    keepalived

#####

chmod +x httpd.sh

現在為此測試上面的是否正常,是否正常轉移

發現現在是lv1在提供服務,在vrrp中也可以看到( priority 100);

現在在lv1停掉httpd

現在發現是lv2在提供服務,現在當你啟動lv1上的httpd和keepalived的服務後,httpd會自動切換會lv1上;這裡不示範了;

二:現在開始node1、node2配置drbd+heartbeat+nfs并進行測試;

1、配置hosts,安裝drbd、heartbeat、nfs

1>、node1、node2:

vim hosts

192.168.182.133    node1

192.168.182.134    node2

2>、drbd安裝

yum -y install gcc kernel-devel kernel-headers flex

wget http://oss.linbit.com/drbd/8.4/drbd-8.4.3.tar.gz

 tar zxvf drbd-8.4.3.tar.gz

   cd drbd-8.4.3

   ./configure --prefix=/usr/local/drbd --with-km

   make KDIR=/usr/src/kernels/2.6.32-71.el6.i686/

  make install

   mkdir -p /usr/local/drbd/var/run/drbd

    cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/rc.d/init.d

    chkconfig --add drbd

    chkconfig drbd on

    cd drbd

    cp drbd.ko /lib/modules/`uname -r`/kernel/lib/

    depmod

    modprobe drbd

确定加載了drbd子產品

到此兩台機器的drbd安裝完畢;開始config

首先需要在node1、node2;fdisk新增的disk(這裡我新增了一個8G的disk來做drbd),切記不可格式化

node1:

cd /usr/local/drbd/etc/drbd.d

mv global_common.conf global_common.conf.bak

vim global_common.conf

global    {

   usage-count    yes;  #是否參加DRBD使用者統計,預設yes

   common    {

   net    {

      protocol    C;  #使用drbd的第三種同步協定,表示收到遠端主機的寫入确認後,則認為寫入完成.

vim r0.res

resource    r0    {

       on node1    {   #每個主機的說明以on開頭,後面是hostname

       device    /dev/drbd1;   #drbd裝置名

       disk    /dev/sdb1;  #/dev/drbd1使用的磁盤分區是/dev/sdb1。

       address    192.168.182.133:7789;    #設定DRBD的監聽端口,用于與另一台主機通信。

       meta-disk    internal;

       on node2    {

       device    /dev/drbd1;

       disk    /dev/sdb1;

       address    192.168.182.134:7789;

将上面這個配置檔案分别複制到兩台主機的/etc/drbd.d目錄下。

2、 啟動DRBD

在兩個節點執行

在啟動DRBD之前,你需要分别在兩台主機的sdb1分區上,建立供DRBD記錄資訊的資料塊.分别在兩台主機上執行: 

[root@Centos ~]# drbdadm create-md r0 或者執行drbdadm create-md all

[root@Centos ~]# drbdadm create-md r0

在兩個節點啟動服務

[root@Centos ~]#/etc/init.d/drbd start

最好同時啟動

在任意節點檢視節點狀态

對輸出的含義解釋如下:

ro表示角色資訊,第一次啟動drbd時,兩個drbd節點預設都處于Secondary狀态,

ds是磁盤狀态資訊,“Inconsistent/Inconsisten”,即為“不一緻/不一緻”狀态,表示兩個節點的磁盤資料處于不一緻狀态。“UpToDate/UpToDate”。即為“實時/實時”狀态了。

Ns表示網絡發送的資料包資訊。

Dw是磁盤寫資訊

Dr是磁盤讀資訊

設定主節點

由于預設沒有主次節點之分,因而需要設定兩個主機的主次節點,選擇需要設定為主節點的主機,然後執行如下指令:

drbdsetup /dev/drbd1 primary --o

第一次執行完此指令後,在後面如果需要設定哪個是主節點時,就可以使用另外一個指令:

drbdadm primary r0或者drbdadm primary all

執行此指令後,開始同步兩台機器對應磁盤的資料

從輸出可知:

   “ro狀态現在變為“Primary/Secondary”,“ds”狀态也變為“UpToDate/Inconsistent”,也就是“實時/不一緻”狀态,現在資料正在主備兩個主機的磁盤間進行同步,且同步進度為8.4%,同步速度每秒10M左右。

等待片刻,再次檢視同步狀态,輸出如下:

可以看到同步完成了,并且“ds“狀态也變為“UpToDate/UpToDate”了。即為“實時/實時”狀态了。

格式化disk

mkfs.ext4 /dev/drbd1

接下了就可以mount 使用了

3、安裝heartbeat、nfs

yum install heartbeat nfs libnet -y

cp /usr/share/doc/heartbeat-3.0.4/authkeys ha.cf haresources /etc/ha.d/

1、node1配置ha.cf

logfile    /var/log/ha-log

logfacility    local0

keepalive 2

deadtime 30

warntime 10

initdead 120

udpport    694

ucast eth0 192.168.182.134

auto_failback off

node node1

node node2

ping 192.168.182.2

respawn root /usr/lib/heartbeat/ipfail

++++++++++++++++++++++++++++++++

node2的ha.cf和上面一樣,隻是ucast eth0 192.168.182.133(對方IP)

配置/etc/ha.d/authkeys

auth 2

#1 crc

2 sha1 heartbeat

#3 md5 Hello!

node2同上

配置/etc/ha.d/haresources 

node1 IPaddr::192.168.182.150/24/eth0 drbddisk::r0 Filesystem::/dev/drbd1::/mnt::ext4 nfs

chmod 600 authkeys

cp /usr/local/drbd/etc/ha.d/resource.d/drbddisk /etc/ha.d/resource.d/

啟動heartbeat

/etc/init.d/heartbeat start

現在為止:你會發現node1上網卡

将node1上heartbeat關閉:你會發現node2

自動挂載,drbd狀态自動切換,vip自動漂移全部正常

分别在node1、node2上配置nfs共享目錄

[root@node2 ~]# vim /etc/exports 

/root/data      *(rw)

[root@node2 ~]# exportfs -r

[root@node2 ~]# exportfs -u

/root/data        <world>

4、接下來怎麼在前面的兩台lv上面挂載充當httpd服務的主目錄;

lv1、lv2:

mount -t nfs 192.168.182.150:/root/data /var/www/html

可以把這個寫到fstab中,開機啟動

192.168.182.150:/root/data    /var/www/html    nfs    defaults    0    0

5、接下來進行測試了:

1>、我們在node1中的/root/data/ 中建立index.html;期中内容:node+heartbeat+test

2>、現在我們将lv1當機掉進行測試也是一樣的,不影響

3>、現在我們将node1宕掉,node間的服務會切換到node2,然後修改index.html的内容進行分别

這裡新增了two一個辨別

node1:/etc/init.d/heartbeat stop

node2:

[root@node2 data]# vim index.html 

node+heartbeat+test two

現在再通路vip

一切正常!ok

這樣友善統一管理了資源,并且實作了可靠性;

本文轉自 西索oO 51CTO部落格,原文連結:http://blog.51cto.com/lansgg/1208485

繼續閱讀