您的位置:首页 > 运维架构 > 网站架构

Keepalived高可用集群来实现web服务器负载均衡集群

2013-05-17 19:59 260 查看
Keepalived高可用集群来实现web服务器负载均衡集群一、Keepalived的介绍Keepalived是一个提供HA重要的底层工具,最早期的作用是为ipvs提供HA功能的,还是一个可以提供vrrp已经health-check功能的服务软件,可以只用它提供双机浮动的vip(vrrp虚拟路由功能),这样可以简单实现一个双机热备高可用功能。同时我们还可以利用LVS+Keepalived基于完整开源软件的架构可以为你提供一个负载均衡及高可用的服务器。 Keepalived是一个基于VRRP协议来实现的WEB 服务高可用方案,可以利用其来避免单点故障。一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。二、VRRP的介绍VRRP:Virtual Router Redundancy Protocol,是虚拟路由冗余协议,通过此协议我们可以把多个路由器做成一个虚拟路由器,从而来保证其中某个路由宕掉的时候不会造成我们内部外出网络的全部中断。VRRP中的各个路由器都有一个唯一的标识VRID,其范围为0-255,路由器对外表现为唯一的虚拟MAC地址,地址的格式为00-00-5E-00-01-[VRID]。主控路由器负责对ARP请求用该MAC地址做应答。这样,无论如何切换,保证给终端设备的是唯一一致的IP和MAC地址,减少了切换对终端设备的影响。其中的VRID中的0和255是保留的,0用于IP地址所有者主动放弃主控者角色时使用,255用于VRRP路由器的IP地址和虚拟路由器的接口IP地址相同时所拥有三、LVS的配置与安装,启用四台虚拟机,我选择是192.168.0.x.的网段,虚拟主机是172.16.9.1,由于不在一个网段,需要加一个路由Routdde add default gw 172.16.0.1Real Server1:192.168.0.54 Real Server2:192.168.0.55HA1:192.168.0.53 HA2;192.168.0.57VIP:172.16.9.1配置之前keepalived之前,先下载好yum软件包,配置好http的软件安装,解决好依赖关系,更有利于后面的进行

RIP不能被外部主机解析使用脚本vipset.sh进行设置,要用vipset.sh脚本如配置VIP和arp参数



测试一下Real Server1

Real Server2

Vipset.sh脚本如下所示:
#!/bin/bash
#
# Script to start LVS DR real server.
# description: LVS DR real server
#
. /etc/rc.d/init.d/functions
VIP=172.16.9.1          #VIP地址
host=`/bin/hostname` #定义host变量
case"$1"in
start) #start的时候设置本机arp不被外部主机解析
# Start LVS-DR real server onthismachine.
/sbin/ifconfig lo down
/sbin/ifconfig lo up
echo1> /proc/sys/net/ipv4/conf/lo/arp_ignore
echo2> /proc/sys/net/ipv4/conf/lo/arp_announce
echo1> /proc/sys/net/ipv4/conf/all/arp_ignore
echo2> /proc/sys/net/ipv4/conf/all/arp_announce
/sbin/ifconfig lo:0$VIP broadcast $VIP netmask255.255.255.255up
#配置vip在lo:0,并且设置广播地址和子网掩码,此处使用32位是保证此vip不能与其他地址通信。
/sbin/route add -host $VIP dev lo:0#增加路由
;;
stop) #stop的时候恢复到系统的初始化arp参数
# Stop LVS-DR real server loopback device(s).
/sbin/ifconfig lo:0down
echo0> /proc/sys/net/ipv4/conf/lo/arp_ignore
echo0> /proc/sys/net/ipv4/conf/lo/arp_announce
echo0> /proc/sys/net/ipv4/conf/all/arp_ignore
echo0> /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:0device
# 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}"
exit1
;;
Esac

四、DR上的相关软件的配置和安装 (1)下载keepalived-1.2.7-5.el5.i386.rpm

(2)安装keepalived软件,一定要解决依赖关系安装之前一定要与服务器时间同步 ntpdate 172.16.9.1

(3)、ipvsadm软件安装

五、LVS的配置包括两部分,虚拟主机组和虚拟主机
virtual_server 192.168.200.100 443 {        #设置VIP port
delay_loop 6                     #多少秒检查一次real server的健康状态
lb_algo rr                      #调度算法
lb_kind NAT                     #lvs模型
nat_mask 255.255.255.0              #虚拟VIP的掩码
persistence_timeout 50              #长连接时间
protocol TCP                     #协议类型
real_server 192.168.201.100 443 {          #定义real server
weight 1                          #定义权重
SSL_GET {                          #检查web服务的SSL状况
url {
path /
digest ff20ad2481f97b1754ef3e12ecd3a9cc
}
url {                          #检查服务器的web服务状况
path /mrtg/
digest 9b3a0c85a887a256d6939da88aabd8cd
}
connect_timeout 3           #连接超时时间
nb_get_retry 3             #重试次数
delay_before_retry 3         #重试连接时间间隔
}
}
}

六、keepalived配置文件的详解 (1)RS1里面的keepalived.conf上的配置
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 keepalivedpass
}
virtual_ipaddress {
172.16.9.1
}
}

virtual_server 172.16.9.1 80  {
delay_loop 6
lb_algo rr
lb_kind NAT
nat_mask 255.255.0.0
persistence_timeout 50
protocol TCP

real_server 192.168.0.54 80 {
weight 1
SSL_GET {
url {
path /
status_code 200

}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}

virtual_server 172.16.9.1 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.0.0
# persistence_timeout 50
protocol TCP

real_server 192.168.0.54 80 {
weight 2
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 1
}
}

real_server 192.168.0.55 {
weight 2
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 1
connect_port 80
}
}
}






然后把RS1上的keepalived.com复制到RS2上,并把其中的stata改成BACKUP,priority修改为100,其他内容不变 RS2里面的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 keepalivedpass
}
virtual_ipaddress {
172.16.9.1
}
}

virtual_server 172.16.9.1 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.0.0
# persistence_timeout 50
protocol TCP

real_server 192.168.0.54 80 {
weight 2
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 1
}
}

real_server 192.168.0.55 {
weight 2
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 1
connect_port 80
}
}
}


启动keepalived服务;





访问虚拟IP地址

主备转换测试# cd /etc/keepalived/# touch down

在备用节点node2上查看

访问虚拟IP

现在把down文件删除,MASTER节点会夺回资源,因为在node1上的优先级(101)比nod2上的优先级(100)高双主模式实现两个主机web服务同时开启,配置的VIP不同,让他们互为主从修改keepalived.conf配置文件(只需修改配置文件末尾“vrrp_instance VI_2”中的内容)
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.51.80/16 dev eth0 label eth0:1
}
track_script {
chk_httpd
chk_schedown
}

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"
}

在node2上启用“vrrp_instance VI_2”中的内容后,修改一下第二VIP地址与脚本名称(track_httpd, chk_schedown)修改完成后,启动keepalived服务,查看node1与node2上的VIP地址配置node1主机

node2主机

测试



模拟node1出现故障# cd /etc/keepalived/# touch down查看node2上虚拟IP地址

此时,访问172.16..9.1与192.16.53都是由node2主机返回结果


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息