|
在这里我们要讲Keepalived的使用,在讲Keepalived之前,我们要先讲讲VRRP的使用。因为Keepalived加入VRRP功能,使得现在的Keepalived具有服务器运行检测功能与HA Cluster功能。
一、VRRP定义
VRRP(Virtual Routing Redundent Protocol):虚拟路由冗余协议,它是一种协议,将多态物理设备组合成一台虚拟设备。
1、备份组中路由器的优先级
在一个备份组中,有一个主(master),多个从(slave),当主服务器(master)宕机了,从服务器就要取而代之,但是那么多从服务哪个取代呢?它有一个根据优先级的选举协议,优先级高的谁就成为主的了,或者让它工作在抢占模式下,谁反应快,谁就成为主的了。所以它是一主多从的工作机制,但是多个从平时都不上线,这就造成了资源的浪费,所以我们常见的就是一主一从,实际它是可以实现一主多从的。
VRRP优先级的取值范围为0~255(数值越大表名优先级越高),可配置的范围是1~254,优先级0为形同保留,255则是系统保留给IP地址拥有者,当路由器为IP地址拥有者时,其优先级始终为255,所以,当备份组内存在IP地址拥有者时,只要其工作正常,则为Master路由器。
在一个物理设备上,可以配置多个组,靠组ID区别不同的组。在同一个组内,所有的工作都在同一个组内工作的。
2、VRRP工作过程
(1)路由器使用VRRP功能后,会根据优先级确定自己在备份中的角色。优先级高的为Master,低的为Backup,Master定义发送VRRP通告报文,通知备份组中的其它路由器自己工作正常。Backup则启动定时器等待通告报文的到来。
(2)在抢占模式下,当Backup收到VRRP通告的报文后,会拿自己的优先级比较通报报文中的优先级,如果大于通告报文中的优先级,则成为Master ,如果小于通告报文中的优先级,则还是Backup。
(3)在非抢占模式下,只要Master路由器没有出现问题,备份组中的路由器始终保持着自己原来的状态,即使后来有的Backup有更高的优先级也不会成为Master。
(4)如果Backup的定时超时后仍然没有收到Master路由器发送来的VRRP通告报文,则认为Master已经无法正常工作了,此时Backup会认为自己是Master,并对外发送VRRP通告报文,备份组内的路由会根据优先级选举出来Master,承担报文的转发功能。
二、Keepalived定义及主要功能
Keepalived:最初目的为ipvs提供高可用功能的,所以我们实现ipvs高可用的时候我们使用Keepalived来配置更简
主要提供三个功能
1、IP:对IP地址实现飘移,依赖于ARRP协议
2、lvs:重新启用一份ipvs规则
3、health check:健康检查
三、配置安装Keepalived实现LVS服务的高可用
我们这里使用四台虚拟机,其中HA1和HA2当做高可用的Web服务,另外两个做成real server。这里我们要先在HA1和HA2上面安装keepalived,这个软件我们这些下载到本地了,大家配置了上官网上下载(keepalived-1.2.7-5.el5.i386.rpm) 软件包,因为安装这个包还需要解决依赖关系,所以这里我们还需要安装yum库,安装完成后我们就开始安装keepalived。
1、安装yum库
我们这里用挂载光盘来安装yum库,进而安装开发环境,需要安装Development Libraries和Development Tools,但是Development Tools默认都安装过了,所以我们这里安装一个就行了。安装完成后开发环境就安装成功了。
[root@localhost ~]# mkdir /mnt/cdrom ###创建cdrom目录
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom ###挂载光盘(当场有效,开机无效)
[root@localhost ~]# vim /etc/fstab ###在配置文件中挂载光盘(当场无效,开机有效)
/dev/cdrom /mnt/cdrom ext3 defaults 0 0
[root@localhost ~]# cd /etc/yum.repos.d/ ###进入yum.repos.d目录下面
[root@localhost yum.repos.d]# vim server.repo ###编辑server.repo
[base]
name=Server
baseurl=file:///mnt/cdrom/Server
enabled=1
gpgcheck=0
[root@localhost yum.repos.d]# yum groupinstall "Development Libraries"2、安装keepalived
# yum -y--nogpgcheck localinstall keepalived-1.2.7-5.el5.i386.rpm
# rpm -qlkeepalived ###查看配置文件
/etc/keepalived ###配置文件目录
/etc/keepalived/keepalived.conf ###主配置文件
/etc/keepalived/keepalived.conf.haproxy_example ###自己设置的主配置文件将haproxy配置成高可用功能了
/etc/keepalived/notify.sh ###这里我们设置的脚本,网上下载是没有的。
# scpkeepalived-1.2.7-5.el5.i386.rpm node1:/root ###把下载的软件包给前HA2发过去。
3、查看并解释配置文件。

四、配置real server
我们需要设置IP地址与director在同一个网段内,首先我们要先关闭selinux,然后安装http服务器进行访问测试,然后编辑网页,网页编辑完成后我们就要开启服务,下来进行网页测试。
#setenforce0 ###关闭selinux
# yum installhttpd ###安装http服务
# vim /var/www/html/index.html ###编辑网页
# service httpdrestart ###开启服务
我们这里使用的是一个脚本,此脚本只需要在real server中使用就行了。
# vim start.sh###编辑脚本,脚本内容如下:
#!/bin/bash
#
# Script to start LVS DR real server.
# description: LVS DR real server
#
. /etc/rc.d/init.d/functions
VIP=172.16.58.1
host=`/bin/hostname`
case "$1" in
start)
# Start LVS-DR real server on this machine.
/sbin/ifconfig lo down
/sbin/ifconfig lo up
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore ###设置相应级别
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce ###设置通告级别
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
;;
stop)
# Stop LVS-DR real server loopback device(s).
/sbin/ifconfig lo:0 down
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
;;
status)
# Status of LVS-DR real server.
islothere=`/sbin/ifconfig lo:0 | grep $VIP`
isrothere=`netstat -rn | grep "lo:0" | grep $VIP`
if [ ! "$islothere" -o ! "isrothere" ];then
# Either the route or the lo:0 device
# not found.
echo "LVS-DR real server Stopped."
else
echo "LVS-DR real server Running."
fi
;;
*)
# Invalid entry.
echo "$0: Usage: $0 {start|status|stop}"
exit 1
;;
esac
## chmod +x start.sh
# ./start.sh start
# ifconfig (显示的是只是添加的内容)
# scp start.sh172.16.58.10:/root/ ###将脚本复制到另一个real server上进行执行。五、修改主配置文件
1、修改HA1中的keepalived的配置文件
下面我们就去HA1和HA2中修改主配置文件,我们在修改主配置文件的时候首先就是要将主配置文件复制一份,然后在修改,这样避免出错后,无法修改。
! 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 ###状态(有两种,一种MASTER另一种BACKUP)【提示:只在初始的时候定义主、从】
interface eth0 ###在哪个接口上实现配置地址和完成选举
virtual_router_id 77 ###在VI_1下面定义的虚拟ID,必须要和别的人不一样
priority 101 ###优先级
advert_int 1 ###多长时间通告一次(这里是1秒钟)
authentication { ###认证
auth_type PASS ###表示用字符串来认证
auth_pass password ###生成随机串(最好是随机的)
}
virtual_ipaddress { ###提供虚拟IP(可以是一个,也可以是多个)
172.16.58.1
}
}
virtual_server 172.16.58.1 80 { ###定义虚拟服务器,后面是VIP,最后面是端口【提示:可以定义多个集群服务】
delay_loop 6
lb_algo wlc ####负载均衡调度方法,rr为轮询
lb_kind DR ###LVS的类型
nat_mask 255.255.0.0
protocol TCP ###端口协议使用TCP
real_server 172.16.58.8 80 { ###real server地址,端口
weight 1 ###权重
url {
path / ###获取web服务器的根目录,直接获取主页,显示200正常,显示404等为不正常
status_code 200
}
connect_timeout 2 ###多长时间探测一次(2s),如果3s中后获取不到,则为不健康
nb_get_retry 3 ###在探测不健康的时候要尝试几次(3次)
delay_before_retry 1 ###每一次尝试之前要延迟多长时间 (1s)
}
virtual_server 172.16.58.1 80 {
delay_loop 6
lb_algo wlc
lb_kind DR
nat_mask 255.255.0.0
protocol TCP
real_server 172.16.58.10 80 {
weight 1
url {
path /
status_code 200
}
connect_timeout 2
nb_get_retry 3
delay_before_retry 1
}
}
2、将HA1中配置文件复制到HA2中
修改好配置文件后,我们还需要将这个配置文件复制到HA2一份,不只是复制过去就行了,我们还需要修改配置文件的。

3、开启两个HA服务
#service keepalived start ###启动keepalived
#ip add show ###查看网络状态 
4、安装ipvsadm (两个服务上都要安装)
# ip add show
# servicekeepalived restart ###重启keepalived
# ipvsadm -L –n ###查看每一个real server对外所提供用户请求的次数
六、实现基于web服务的高可用集群(在HA1和HA2上)
1、工作图

简述:当客户端通过路由器访问我们的服务器的时候,只能访问到我们的MASTER服务器上,当MASTER出现问题的时候,它的VIP会飘移到BACKUP上,会替代MASTER而成为MASTER的。
2、编辑网页并进行测试
# service keepalived stop ###停止keepalived
# yum -y install httpd ###装好web服务
# vim /var/www/html/index.html ###编辑网页
node1 ###HA1网页内容
node2 ###HA2网页内容
# service httpd start ###启动服务首先确保服务不会成为高可用集群的故障,我们首先要启动服务,然后进行测试。
3、修改keepalived配置文件并设置脚本
这里我们还需要将配置文件中的内容修改,我们修改后的内容如下:
! 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
# check every 2 seconds
weight -2
# if failed, decrease 2 of the priority
fall 2
# require 2 failures for failures
rise 1
# require 1 sucesses for ok
}
vrrp_script chk_schedown {
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
interval 2
weight -2
}
vrrp_instance VI_1 {
interface eth0
# interface for inside_network, bound by vrrp
state MASTER
# Initial state, MASTER|BACKUP
# As soon as the other machine(s) come up,
# an election will be held and the machine
# with the highest "priority" will become MASTER.
# So the entry here doesn't matter a whole lot.
priority 101
# for electing MASTER, highest priority wins.
# to be MASTER, make 50 more than other machines.
virtual_router_id 51
# arbitary unique number 0..255
# used to differentiate multiple instances of vrrpd
# running on the same NIC (and hence same socket).
garp_master_delay 1
authentication {
auth_type PASS
auth_pass password
}
track_interface {
eth0
}
# optional, monitor these as well.
# go to FAULT state if any of these go down.
virtual_ipaddress {
172.16.58.1/16 dev eth0 label eth0:0
}
#addresses add|del on change to MASTER, to BACKUP.
#With the same entries on other machines,
#the opposite transition will be occuring.
#/ brd dev scope label
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"
}
#vrrp_instance VI_2 {
# interface eth0
# state MASTER # BACKUP for slave routers
# priority 101 # 100 for BACKUP
# virtual_router_id 52
# garp_master_delay 1
#
# authentication {
# auth_type PASS
# auth_pass password
# }
# track_interface {
# eth0
# }
# virtual_ipaddress {
# 172.16.58.2/16 dev eth0 label eth0:1
# }
# track_script {
# chk_httpd
# chk_mantaince_down
# }
#
# notify_master "/etc/keepalived/notify.sh master eth0:1"
# notify_backup "/etc/keepalived/notify.sh backup eth0:1"
# notify_fault "/etc/keepalived/notify.sh fault eth0:1"
#}
开始的时候我就说过,我们这里自己设置的有脚本,大家如果想配置,脚本的内容如下:
#vim notify.sh
脚本内容如下:
#!/bin/bash
# Author: MageEdu
# 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
4、在HA2上编辑keepalived的配置文件,完成后进行测试
# vim keepalived.conf
# service keepalived start ###启动keepalived
# ifconfig ###在主服务器上使用它
这时候我们给HA1上使用了别名,我们使用别名访问一下。
5、模拟MASTER出故障
这时候我们把主服务器的Web服务器停了,我们看看ip地址是否会飘移到从服务器上。从下面的两个图可以看到,它真的转移了,如果不相信我们可以测试下网页,我们可以看到它的页面内容也是我们原来设置从服务器的内容。
# service httpd stop ###停止主服务器的Web服务 主服务器上:
从服务器上:
6、测试一下:
七、双主模型
1、工作图:

简述:当客户端发送访问上面的服务器时,上面的服务器比较繁忙,我们就要用两台主机都进行工作,不过这里我们要使用两个虚拟IP地址,这两个虚拟IP地址是不一样的。我们这里是两个组,第一个组上面是主,下面是从,第二组下面是主,上面是从。如果有一个组中的MASTER挂了,它的VIP就会飘移到另一个组的上面。
2、修改配置文件
在上面基于web服务的高可用集群中,我们把keepalived配置文件中的最下面#开头的行开启了,开启后我们还要进行编辑,在HA1中将VI_2我们需要将state MASTER改为state BACKUP,我们把优先级改为100,只要比MASTER的优先级小就行。内容如下:
vrrp_instance VI_2 {
interface eth0
state BACKUP # BACKUP for slave routers
priority 100 # 100 for BACKUP
virtual_router_id 52
garp_master_delay 1
authentication {
auth_type PASS
auth_pass password
}
track_interface {
eth0
}
virtual_ipaddress {
172.16.58.2/16 dev eth0 label eth0:1
}
track_script {
chk_httpd
chk_mantaince_down
}
notify_master "/etc/keepalived/notify.sh master eth0:1"
notify_backup "/etc/keepalived/notify.sh backup eth0:1"
notify_fault "/etc/keepalived/notify.sh fault eth0:1"
}
# service keepalived restart ###启动keepalived服务器
#ifconfig 3、查看IP地址配置
查看HA1的IP地址配置:
查看HA2的IP地址配置:
4、测试:
5、模拟HA1发生故障
# cd /etc/keepalived/
# touch down
查看HA2上IP地址配置:

6、测试一下
我们会发现用172.16.58.6和172.16.58.7访问的都是由HA2返回的结果。
|
|