提到Keepalived必要先来说说VRRP
VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)是一种容错协议。主要实现在路由与交换处提供冗余能力。而keepalived就是利用VRRP协议来实现高可用能力的。
H3C有一篇介绍VRRP的文档,写的很详细,想了解的可以看一下:
地址:
http://www.h3c.com.cn/products___technology/technology/dependability/other_technology/technology_recommend/200904/631528_30003_0.htm
Keepalived完全遵守VRRP协议。
Keepalived是采用模块化的设计,不同的模块实现不同的功能。结合VRRP协议,keepalived可以实现IP地址的转移和ipvs规则的转移。在Director遇到故障时我们可以通过将其地址和规则转移到一个闲置的Director上,也就是通过转移来实现Director高可用。
Web的高可用就是在我们的所有的realserver都不能正常工作时,也要能给用户反馈信息,告诉用户此网站并没有关闭,只是遇到故障处于修复当中。
下面我们看一下完整的配置过程:
配置两台realserver:
首先同步时间,配置IP(这里不再给出步骤);
修改内核参数:
# sysctl -w net.ipv4.conf.eth0.arp_announce=2
# sysctl -w net.ipv4.conf.all.arp_announce=2
# sysctl -w net.ipv4.conf.eth0.arp_ignore=1
# sysctl -w net.ipv4.conf.all.arp_ignore=1
给realserver添加VIP地址,利用别名来完成:
# ifconfig eth0:0 172.16.22.222 netmask 255.255.255.255 broadcast 172.16.22.222
添加一条路由,使来自172.16.22.222主机的请求通过eth0:0来响应:
# route add -host 172.16.22.222 dev eth0:0
提供web服务:
# yum -y install httpd
(两台realserver步骤相同)
给两台realserver提供不同的页面,以便测试使用
Realserver1:
# vim /var/www/html/index.html
node110
Realserver2:
# vim /var/www/html/index.html
node120
(这里的页面与Director无关,只是为了简便)
启动服务:
# service httpd start
配置两台Director(一主一从):
同步时间,最好提供任务计划每几分钟同步一次(略)
配置主机名,并给两个Director配置互信功能:
Master Director:
配置主机名:
# hostname node110.dilve.com
修改配置文件,使其主机名在重启主机后依然有效:
# vim /etc/sysconfig/network
HOSTNAME=node110.dilve.com
使配置的主机名可以被主机使用IP地址解析到:
# vim /etc/hosts
# IP地址主机名
172.16.22.210node110.dilve.com node110
172.16.161.20node120.dilve.com node120
给其与node120配置互信功能:
# ssh-keygen -t rsa -f /root/.ssh/id_rsa -P ''
# ssh-copy-id -i .ssh/id_rsa.pub root@node120.dilve.com
Slave Director:
# hostname node120.dilve.com
# vim /etc/sysconfig/network
HOSTNAME=node120.dilve.com
# vim /etc/hosts
# IP地址主机名
172.16.22.210node110.dilve.com node110
172.16.161.20node120.dilve.com node120
# ssh-keygen -t rsa -f /root/.ssh/id_rsa -P ''
# ssh-copy-id -i .ssh/id_rsa.pub root@node110.dilve.com
为Director提供keepalived服务:
Redhat 6.4之前的版本没有提供此项服务,需要编译安装,这里准备好了rpm软件包,直接在ftp上下载安装(内部网络):
# wget ftp://172.16.0.1/pub/Sources/keepalived/keepalived-1.2.7-5.el5.i386.rpm
安装keepalived的服务并解决依赖关系:
[root@node110 ~]# yum -y --nogpgcheck localinstall keepalived-1.2.7-5.el5.i386.rpm
将下载的软件包复制到Slave Director上一份,然后切换到Slave Director的主机上为其执行安装命令(上一条命令):
[root@node110 ~]# scp keepalived-1.2.7-5.el5.i386.rpm node120:/root/
为Director提供ipvs服务和:
[root@node110 ~]# yum -y install ipvsadm
为Director提供httpd服务(实现web的高可用):
[root@node110 ~]# yum -y install httpd
并提供页面:
# vim /var/www/html/index.html
维护当中……
(不要忘了给Slave Director提供这两项服务)
修改keepalived的配置文件,使其适合我们使用(这里给出的是已修改的Master Director的配置文件):
[root@node110 ~]# cd /etc/keepalived
[root@node110 ~]# vim keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepavlied@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_schedown { #模式实现keepalived故障情况
script "[ -e /etc/keepalived/down ] && exit 1 || exit 0"
interval 1
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 { #定义备份组
state MASTER #定义备份组为Master还是Slave
interface eth0 #定义接口
virtual_router_id 55 #其备份组为Master
priority 101 #定义优先级,Slave的优先级一定要小于Master的值
advert_int 1
authentication { #认证方式
auth_type PASS #基于简单字符认证
auth_pass keepalivedpass
}
virtual_ipaddress { #定义VIP的地址
172.16.22.222/16 dev eth0 label eth0:0
}
}
virtual_server 172.16.22.222 80 { #设置一个VIP
delay_loop 6 #服务轮询的时间间隔
lb_algo rr #定义调度算法
lb_kind DR #定义lvs集群的模型
nat_mask 255.255.0.0
# persistence_timeout 50 #会话保持的时间(单位为秒)
protocol TCP
sorry_server 127.0.0.1 80 #定义realserver服务器都不在线时给用户的提示内容
real_server 172.16.22.111 80 { #定义realserver服务器,RS1
weight 1 #定义给每台realserver的权重
HTTP_GET { #通过HTTP_GET实现健康状况检查
url { #要坚持的URL
path / #具体路径
status_code 200 #网页成功响应号为200
}
connect_timeout 2 #探测连接时的超市时长
nb_get_retry 3 #探测次数
delay_before_retry 1 #延迟时长
}
}
real_server 172.16.22.112 80 { #定义第二台realserver,RS2
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 2
nb_get_retry 3
delay_before_retry 1
}
}
}
(此代码为实例的完整代码)
配置完成可以直接将此配置文件复制到node120上去,只需做稍微修改即可:
[root@node120 keepalived]# scp keepalived.conf node120:/etc/keepalived/
只需将对应部分改为如下内容:
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 55
priority 100
advert_int 1
做完这些就可以启动服务测试了(别忘了给两台都要启动):
# service keepalived start
# service httpd start
# service ipvsadm start
将两台Realserver的Web服务关闭,试试会不会显示我们提供的页面:
然后启动Realserver的服务,将主机模拟故障,看IP和ipvs规则是否转移到了Slave Director的上去。