keepalived支持LVS高可用服务以及支持web服务的高可用

keepalived支持LVS高可用服务

准备:四台主机,其中两台为高可用节点,IP地址分别外172.16.86.4172.16.86.5,两台为real serverIP地址分别为172.16.86.7172.16.86.8 html

1、首先让两台高可用节点时间同步,而后下载安装包并安装。咱们这里是老师准备好的,大家能够在网上自行下载。 node

节点1 linux

[root@node1 ~]# service ntpd stop web

[root@node1 ~]# ntpdate 172.16.0.1 vim

[root@node1 ~]# date bash

Thu May 16 11:01:39 CST 2013 服务器

[root@node1 ~]# lftp 172.16.0.1 ide

lftp 172.16.0.1:~> cd pub/Sources/keepalived/ 工具

lftp 172.16.0.1:/pub/Sources/keepalived> get get keepalived-1.2.7-5.el5.i386.rpm oop

[root@node1 ~]# yum -y --nogpgcheck localinstall keepalived-1.2.7-5.el5.i386.rpm

[root@node1 ~]# scp keepalived-1.2.7-5.el5.i386.rpm node2:/root/

节点2

[root@node2 ~]# service ntpd stop

[root@node2 ~]# ntpdate 172.16.0.1

[root@node2 ~]# date

Thu May 16 11:01:39 CST 2013

[root@node2 ~]#yum -y --nogpgcheck localinstall keepalived-1.2.7-5.el5.i386.rpm

2、为两台real server提供web服务提供网页,并配置DR模型。

RS1

[root@localhost ~]# yum install httpd -y

[root@localhost ~]#echo "RS1.magedu.com" > /var/www/html/index.html

[root@localhost ~]#echo 2 > proc/sys/net/ipv4/conf/all/arp_announce

[root@localhost ~]#echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce

[root@localhost ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

[root@localhost ~]#echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore

[root@localhost ~]# ifconfig lo:0 172.16.86.1 broadcast 172.16.86.1 netmask 255.255.255.255 up

[root@localhost ~]# route add -host 172.16.86.1 dev lo:0

[root@localhost ~]# ifconfig

RS2

[root@localhost ~]# yum install httpd -y

[root@localhost ~]#echo "RS2.magedu.com" > /var/www/html/index.html

[root@localhost ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

[root@localhost ~]#echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce

[root@localhost ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

[root@localhost ~]#echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore

[root@localhost ~]# ifconfig lo:0 172.16.86.1 broadcast 172.16.86.1 netmask 255.255.255.255 up

[root@localhost ~]# route add -host 172.16.86.1 dev lo:0

[root@localhost ~]# ifconfig

3、编辑两台高可用节点上keepalived的配置文件

节点1

[root@node1 ~]# cd /etc/keepalived/

[root@node1 keepalived]# ls

keepalived.conf  keepalived.conf.haproxy_example  notify.sh

[root@node1 keepalived]# vim keepalived.conf

! Configuration File for keepalived
global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from root@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass password
    }
    virtual_ipaddress {
        172.16.86.1/16 dev eth0 label eth0:0
    }
}
   virtual_server 172.16.86.1 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.0.0
    protocol TCP
    real_server 172.16.86.7 80 {
        weight 1
        HTTP_GET {
            url {
              path /
                status_code 200
            }
            connect_timeout 2
            nb_get_retry 3
            delay_before_retry 1
        }
    }
real_server 172.16.86.8 80 {
  weight 1
        HTTP_GET {
            url {
              path /
                status_code 200
            }
            connect_timeout 2
            nb_get_retry 3
            delay_before_retry 1
        }
    }
}

[root@node1 keepalived]# scp keepalived.conf node2:/etc/keepalived/

节点2

[root@node1 keepalived]# vim keepalived.conf

! Configuration File for keepalived
global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from root@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass password
    }
    virtual_ipaddress {
        172.16.86.1/16 dev eth0 label eth0:0
    }
}
   virtual_server 172.16.86.1 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.0.0
    protocol TCP
    real_server 172.16.86.7 80 {
        weight 1
        HTTP_GET {
            url {
              path /
                status_code 200
            }
            connect_timeout 2
            nb_get_retry 3
            delay_before_retry 1
        }
    }
real_server 172.16.86.8 80 {
  weight 1
        HTTP_GET {
            url {
              path /
                status_code 200
            }
            connect_timeout 2
            nb_get_retry 3
            delay_before_retry 1
        }
    }
}


4、在两台高可用节点上启动keepalived服务,并安装ipvsadm工具

[root@node1 ~]# service keepalived start

[root@node2 ~]# service keepalived start

若是节点1成为主的,那么节点1就会有IP地址

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

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

查看生成的规则:

网页测试:

刷新网页:

测试:若是把RS2web服务关掉

[root@station51 ~]# service httpd stop

Stopping httpd:                                            [  OK  ]

结果:

若是real server都出现故障,此时应该提供一个提示网页,因此要在这两台高可用节点上也安装web服务用来提供一个提示网页。

节点1

[root@node1 ~]# yum  -y install httpd

[root@node1 ~]#echo "Wronging now" > /var/www/html/index.html

[root@node1 ~]# service httpd start

节点2

[root@node2 ~]# yum  -y install httpd

[root@node2 ~]#echo "Wronging now" > /var/www/html/index.html

[root@node2 ~]# service httpd start

配置节点1和节点2keepalived配置文件

[root@node1 keepalived]# vim keepalived.conf

测试:全部real server都出现故障时登录网页的情况,先把real server 上的web服务所有关掉。

[root@localhost ~]# service httpd stop     ##关闭RS1web服务

Stopping httpd:                                            [  OK  ]

[root@localhost ~]# service httpd stop ##关闭RS2web服务

Stopping httpd:                                            [  OK  ]

登陆网页:

此时若是real service上的web服务又从新启动了,那么此时再访问就会去访问real server 上的web服务器提供的网页

模拟高可用节点坏掉的情境,编辑配置文件使其可以手动关闭其中任意一个高可用节点。

[root@node1 keepalived]# vim keepalived.conf

节点2的配置内容和节点1同样,而后重新启动服务

[root@node1 keepalived]# service keepalived restart

[root@node2 keepalived]# service keepalived restart

节点1:此时地址在节点1

/etc/keepalived目录下建立一个名为down的文件

[root@node1 keepalived]# touch down

节点1

节点2:此时地址已经转移到节点2

Keepalived支持web服务高可用功能

1、这里就用不到real server,分别在两个节点安装web服务,并提供网页。

[root@node1 ~]# service keepalived stop

[root@node1 ~]# yum -y  install httpd

[root@node1 ~]# echo "<h1>node1</h1>" > /var/www/html/index.html

[root@node1 ~]# service httpd start

测试网页:

[root@node2 ~]# service keepalived stop

[root@node2 ~]# yum -y  install httpd

[root@node2 ~]# echo "<h1>node2</h1>" > /var/www/html/index.html

[root@node1 ~]# service httpd start

测试网页:

2、编辑节点1keepalived的配置文件并提供脚本,编辑好后并复制给节点2一份。

[root@node1 keepalived]# vim keepalived.conf

! Configuration File for keepalived
global_defs {
   notification_email {
         linuxedu@foxmail.com
         mageedu@126.com
   }
   notification_email_from kanotify@magedu.com
   smtp_connect_timeout 3
   smtp_server 127.0.0.1
   router_id LVS_DEVEL
}
vrrp_script chk_httpd {
    script "killall -0 httpd"
    interval 2
    weight -2
    fall 2
    rise 1
}
vrrp_script chk_schedown {
   script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
   interval 2
   weight -2
}
vrrp_instance VI_1 {
    interface eth0
    state MASTER
    priority 101
virtual_router_id 51 
    garp_master_delay 1
    authentication {
        auth_type PASS
        auth_pass password
    }
    track_interface {
       eth0
    }
    virtual_ipaddress {
        172.16.86.1/16 dev eth0 label eth0:0
    }
 track_script {
        chk_httpd
        chk_schedown
    }
    notify_master "/etc/keepalived/notify.sh master"
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
}


脚本:在/etc/keepalived目录下提供一个名为notify.sh脚本

[root@node1 keepalived]# vim notify.sh

#!/bin/bash
# Author: MageEdu <linuxedu@foxmail.com>
# description: An example of notify script
ifalias=${2:-eth0:0}
interface=$(echo $ifalias | awk -F: '{print $1}')
vip=$(ip addr show $interface | grep $ifalias | awk '{print $2}')
#contact='linuxedu@foxmail.com'
contact='root@localhost'
workspace=$(dirname $0)
notify() {
    subject="$ip change to $1"
    body="$ip change to $1 $(date '+%F %H:%M:%S')"
    echo $body | mail -s "$1 transition" $contact
}
case "$1" in
    master)
        notify master
        exit 0;;
    backup)
        notify backup
        /etc/rc.d/init.d/httpd restart
        exit 0;;
    fault)
        notify fault
        exit 0;;
    *)
        echo 'Usage: $(basename $0) {master|backup|fault}'
        exit 1;;
esac


[root@node1 keepalived]# scp keepalived.conf notify.sh node2:/etc/keepalived/

在节点2修改复制过来的配置文件只需作以下改动。

[root@node1 keepalived]# service keepalived restart

[root@node2 keepalived]# service keepalived restart

登陆网页:

手动切换主节点到另一个节点上。

[root@node1 keepalived]# touch down

刷新网页:

只要删除/etc/keepalived目录下的down文件主节点仍是会切换到节点以1,到此一个结合脚原本提供web服务的高可用功能的服务就完成了