Keepalived 起初是专门针对 LVS 设计的一款强大的辅助工具,主要用来提供故障切换和健康检查( Health Checking )功能——判断 LVS 负载调度器、节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后就会重新加入群集中。
Keepalived 采用 VRRP (虚拟路由冗余协议)热备份协议,和HSRP一样,只不过 HSRP 是思科私有的协议,VRRP 可以跑在很多设备上!VRRP 是以软件的方式实现 Linux 服务器的多机热备功能。
VRRP 工作原理:它是针对路由器的一种备份解决方案——由多台路由器组成一个热备份,通过公用的虚拟IP 地址对外 提供服务;一个组只有一个主路由,其他的路由器就会处于待命的状态,每隔一定的时间 (可以人为配置)待命的路由设备就会询问主路由器是否故障,如果一定的时间主路由没有给予回答,待命的路由就会抢占主的位置,而继续工作,此抢占会根据配置的优先级而决定。当然这里是接替虚拟 IP地址再次提供服务,而访问者在线下毫无感知!
这篇文章主要讲 LVS + Keepalived 的高可用 ,所以有需要的可以看看 LVS 负载均衡群集详解
1· 配置前 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) |
2·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
3·主服务器的配置
(1)Keepalived 服务的配置目录在 /etc/keepalived/keepalived.conf 。下面是对主配置文件的详解、与正确配置!
! Configuration File for keepalived
global_defs {
notification_email { //发送报警邮件br/>acassen@firewall.loc
failover@firewall.locbr/>sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc //指明报警邮件地址
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 //支持的协议为 TCPreal_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 } }
}
4·备用服务器配置
这里备用服务器和主服务器配置都一样,下面仅列出不一样的地方供参考。
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” 查看负载分配情况
原文:http://blog.51cto.com/13746824/2162848