阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

125次阅读
没有评论

共计 9137 个字符,预计需要花费 23 分钟才能阅读完成。

一、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.1

Real Server1:192.168.0.54 Real Server2:192.168.0.55

HA1:192.168.0.53 HA2;192.168.0.57

VIP:172.16.9.1

配置之前 keepalived 之前,先下载好 yum 软件包,配置好 http 的软件安装,解决好依赖关系,更有利于后面的进行

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

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

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

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

测试一下

Real Server1

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

Real Server2

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

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

Keepalived 的详细介绍 :请点这里
Keepalived 的下载地址 :请点这里

推荐阅读:

CentOS 6.3 下 Haproxy+Keepalived+Apache 配置笔记 http://www.linuxidc.com/Linux/2013-06/85598.htm

Haproxy + KeepAlived 实现 WEB 群集 on CentOS 6 http://www.linuxidc.com/Linux/2012-03/55672.htm

Keepalived+Haproxy 配置高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/56748.htm

Haproxy+Keepalived 构建高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/55880.htm

四、DR 上的相关软件的配置和安装

(1)下载 keepalived-1.2.7-5.el5.i386.rpm

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

(2) 安装 keepalived 软件,一定要解决依赖关系

安装之前一定要与服务器时间同步 ntpdate 172.16.9.1

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

(3)、ipvsadm 软件安装

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

五、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 的介绍

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.1

Real Server1:192.168.0.54 Real Server2:192.168.0.55

HA1:192.168.0.53 HA2;192.168.0.57

VIP:172.16.9.1

配置之前 keepalived 之前,先下载好 yum 软件包,配置好 http 的软件安装,解决好依赖关系,更有利于后面的进行

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

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

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

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

测试一下

Real Server1

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

Real Server2

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

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

Keepalived 的详细介绍 :请点这里
Keepalived 的下载地址 :请点这里

推荐阅读:

CentOS 6.3 下 Haproxy+Keepalived+Apache 配置笔记 http://www.linuxidc.com/Linux/2013-06/85598.htm

Haproxy + KeepAlived 实现 WEB 群集 on CentOS 6 http://www.linuxidc.com/Linux/2012-03/55672.htm

Keepalived+Haproxy 配置高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/56748.htm

Haproxy+Keepalived 构建高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/55880.htm

六、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
        }
    }
}
 

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

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

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

 

然后把 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 高可用集群来实现 Web 服务器负载均衡集群

启动 keepalived 服务;

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

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

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

访问虚拟 IP 地址

主备转换测试

# cd /etc/keepalived/

# touch down

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

在备用节点 node2 上查看

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

访问虚拟 IP

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

现在把 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 主机

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

node2 主机

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

测试

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

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

模拟 node1 出现故障

# cd /etc/keepalived/

# touch down

查看 node2 上虚拟 IP 地址

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

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

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

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

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计9137字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中