简介

Keepalived 起初是专门针对 LVS 设计的一款强大的辅助工具,主要用来提供故障切换和健康检查( Health Checking )功能——判断 LVS 负载调度器、节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后就会重新加入群集中。


Keepalived 采用 VRRP (虚拟路由冗余协议)热备份协议,和HSRP一样,只不过 HSRP 是思科私有的协议,VRRP 可以跑在很多设备上!VRRP 是以软件的方式实现 Linux 服务器的多机热备功能。


VRRP 工作原理:它是针对路由器的一种备份解决方案——由多台路由器组成一个热备份,通过公用的虚拟IP 地址对外 提供服务;一个组只有一个主路由,其他的路由器就会处于待命的状态,每隔一定的时间 (可以人为配置)待命的路由设备就会询问主路由器是否故障,如果一定的时间主路由没有给予回答,待命的路由就会抢占主的位置,而继续工作,此抢占会根据配置的优先级而决定。当然这里是接替虚拟 IP地址再次提供服务,而访问者在线下毫无感知!


这篇文章主要讲 LVS + Keepalived 的高可用 ,所以有需要的可以看看 LVS 负载均衡群集详解

使用 Keepalived 实现双机热备

配置前 IP 地址、 操作系统、用途规划,如下表

操作系统 IP地址 用途规划
RedHat 6.5 192.168.100.20 主调度服务器
RedHat 6.5 192.168.100.30 备调度服务器
-------- -------- --------
RedHat 6.5 192.168.100.40 第一台节点服务器
RedHat 6.5 192.168.100.50 第二胎节点服务器
-------- -------- --------
无操作系统 192.168.100.10 漂移地址(VIP)

Keepalived 安装与服务控制

(1)在编译安装 keepalived 之前,必须安装内即可开发包 kernel-devel ,还有 openssl-devel 、popt-devel 等支持库,当然 gcc 、gcc-c++ 没有的也装上,最后还需要用到 ipvsadm 管理工具。


[root@HedHat ~]# yum -y install popt-devel kernel-devel openssl-devel gcc gcc-c++


(2)使用指定的 Linux 内核位置对 keepalived 进行配置,并将安装的路径指定为根目录,这样就不需要再创建软连接。只有再使用 LVS 时,才需要参数 --with-kernel-dir。解压软件包、配置完成后再执行 make && make install
[root@HedHat ~]# tar -zxvf keepalived-1.2.13.tar.gz
[root@HedHat ~]# cd keepalived-1.2.13
[root@HedHat keepalived-1.2.13]# ./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-220.el6.i686/
[root@HedHat keepalived-1.2.13]# make && make install


(3)执行完 make install 后,会自动生成 /etc/init.d/keepalived 脚本文件,但是还需要手动添加为系统服务,这样就可以用 service、chkconfig 工具来对 Keepalived 服务程序进行管理。
[root@HedHat keepalived-1.2.13]# chkconfig --add keepalived
[root@HedHat keepalived-1.2.13]# chkconfig keepalived on


主服务器的配置

(1)Keepalived 服务的配置目录在 /etc/keepalived/keepalived.conf 。下面是对主配置文件的详解、与正确配置!


! Configuration File for keepalived

global_defs {
notification_email { //发送报警邮件br/>[email protected]
[email protected]/>[email protected]
}
notification_email_from [email protected] //指明报警邮件地址
smtp_server 192.168.200.1 //邮件地址
smtp_connect_timeout 30 //smtp 超时时间
router_id LVS_DR1 //本路由器的名称
}

vrrp_instance VI_1 { //定义 VRRP 热备是咧
state MASTER //热备状态 MASTER 表示主服务器,BACKUP 表示备用服务器
interface eth0 //承载VIP的物理接口
virtual_router_id 51 //虚拟路由器的 ID 号,每个热备组需要保持一致
priority 100 //优先级,数值越高,优先级越大
advert_int 1 //通告间隔秒数
authentication { //认证信息
auth_type PASS //认证类型
auth_pass 1111 //认证密码字符串
}
virtual_ipaddress { //指定漂移地址 (VIP)
192.168.100.10
}
}

virtual_server 192.168.100.10 80 { //LVS的配置段,设置LVS的VIP地址和端口
delay_loop 6 / /服务轮询时间的间隔
lb_algo rr //调度算法为:轮询 (rr)算法
lb_kind DR //群集类型为 DR
nat_mask 255.255.255.0 //子网掩码,可选项
persistence_timeout 50 //连接保持时长
protocol TCP //支持的协议为 TCP

real_server 192.168.100.40 80 { //配置节点服务器的 IP地址和端口
    weight 1 //权重
    TCP_CHECK {     //检测健康方式
        connect_port 80      //检测健康状态向 80 端口发送请求
        connect_timeout 3   //超时时间
        nb_get_retry 3        //重试次数
        delay_before_retry 3   //重试间隔多少秒
    }     
}

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

}


备用服务器配置

这里备用服务器和主服务器配置都一样,下面仅列出不一样的地方供参考。
router_id LVS_DR2//备用的服务器需要改名称
vrrp_instance VI_1 { //定义 VRRP 热备是咧
state BACKUP //热备状态 需要改为BACKUP
priority 90 //优先级需要小于主调度服务器


5配置负载调度器分配策略

(1)配置虚拟IP地址,采用虚接口的方式 (eth0:0),为网卡eth0绑定 VIP 地址,方便响应群集访问。VIP 地址是:192.168.100.10
[root@HedHat ~]# cd /etc/sysconfig/network-scripts
[root@HedHat network-scripts]# cp ifcfg-eth0 ifcfg-eth0:0
[root@HedHat network-scripts]# vim ifcfg-eth0:0
......... 省略部分信息

DEVICE=eth0:0
ONBOOT=yes
IPADDR=192.168.100.10
NETMACK=255.255.255.0


(2)配置负载分配策略,这里需要用到 ipvsadm 管理工具,安装工具、在配置策略
[root@HedHat ~]# yum install ipvsadm -y
[root@HedHat ~]# modprobe ip_vs
[root@HedHat ~]# ipvsadm -A -t 192.168.100.20:80 -s rr
[root@HedHat ~]# ipvsadm -a -t 192.168.100.20:80 -r 192.168.100.40 -g -w 1
[root@HedHat ~]# ipvsadm -a -t 192.168.100.20:80 -r 192.168.100.50 -g -w 1
[root@HedHat ~]# service ipvsadm save //保存分配策略
[root@HedHat ~]# chkconfig --add ipvsadm
[root@HedHat ~]# chkconfig ipvsadm on


(3)从调度服务器的分配策略也是一样,修改IP地址即可,这里不再演示


6配置第一台节点服务器

(1)调整 /proc 响应参数,对于 DR 群集模式来说,由于LVS 负载调度器和各个节点需要公用 VIP 地址,就要调整Linux 内核的重定向参数
[root@HedHat ~]# vim /etc/sysctl.conf
.............省略部分信息

net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

[root@HedHat ~]# sysctl -p


(2)使用虚接口 lo:0 来承载 VIP 地址,并为本机添加一条路由记录,讲访问 VIP 的数据限制在本地,以避免通信紊乱。
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vim ifcfg-lo:0
..........省略部分信息

DEVICE=lo:0
IPADDR=192.168.100.10
NETMASK=255.255.255.255 //这里注意需要子网掩码4个255
ONBOOT=yes

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


测试、总结

安装httpd,创建测试页面、启动httpd服务器程序。
关闭防火墙、setenforce 0
访问地址应该是 我们配置的VIP地址
模拟故障测试,关闭主调度服务器的虚接口 eth0:0 再次访问VIP 看看是否成功,成功的话就证明 Keepalived 配置成功。
也可以通过调度服务器的 /var/log/messages 日志文件,可以跟踪故障切换过程
也可以执行“ipvsadm -ln” “ipvsadm -lnc” 查看负载分配情况