共计 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 的软件安装,解决好依赖关系,更有利于后面的进行
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
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
(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 的介绍
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 的软件安装,解决好依赖关系,更有利于后面的进行
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
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
}
}
}
然后把 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 主机返回结果