使用: #wget http://www.keepalived.org/software/keepalived-1.1.20.tar.gz
下载keepalived软件,解压,安装
#tar -zxvf keepalived-1.1.20.tar.gz
# cd keepalived-1.1.20
# ./configure
不加参数可以编制只包含VRRP框架,用来搭建HA,加上--with-kernel-dir=可以编制IPVS框架,用于配合LVS,组建高可用的load balancing.
前提要安装好ipvsadm
# ./configure --with-kernel-dir=/usr/src/kernels/2.6.18-194.8.1.el5-i686/
#make &&make install
二、配置
1. 全局配置 这里的配置对整个keepalived都有用。
1. global_defs
2. {
3. notification_email
4. {
5. admin@example.com
6. }
7. notification_email_from admin@example.com
8. smtp_server 127.0.0.1
9. stmp_connect_timeout 30
10. router_id my_hostname
11. }
####解释####
notification_email指定keepalived在发生事情的时候,发送邮件告知,可以有多个地址,每行一个。
smtp_*指定发生email的smtp服务器地址和超时
router_id运行keepalived的机器的一个标识
2. VRRPD配置
这里是keepalived的核心,LVS配置只在要使用keepalived来配置和管理LVS时需要使用,如果仅仅使用keepalived做HA的话就可以完全不用配置LVS。
VRRPD配置分2部分:VRRP Sync Groups和VRRP Instance
2.1 VRRP Sync Groups
将需要监控的多个实例放入sync group,这样可以保证在任意实例出错的时候都能切换,继续提供服务。
1. vrrp_sync_group VG_1 {
2. group {
3. inside_network
4. outside_network
5. }
6. notify_master /path/to/to_master.sh
7. notify_backup /path_to/to_backup.sh
8. notify_fault "/path/fault.sh VG_1"
9. notify /path/to/notify.sh
10. smtp_alert
11. }
####解释####
· group里面就是vrrp的实例
· notify_master指定当切换到master时,执行的脚本,可以向脚本传递参数,其他2个类推。
· Nofity指令有3个参数,$1(GROUP—INSTANCE),$2(group或instance的名字),$3(MASTER—BACKUP—FAULT)
· smtp_alter使用global_defs里面定义的邮件地址和smtp服务器在切换后发送邮件通知
2.2 VRRP Instance
VRRP instance主要是对实例的一些特性的描述。可以为每个网卡开启一个实例。
1. vrrp_instance inside_network {
2. state MASTER
3. interface eth0
4. dont_track_primary
5. track_interface {
6. eth0
7. eth1
8. }
9. mcast_src_ip <IPADDR>
10. garp_master_delay 10
11. virtual_router_id 51
12. priority 100
13. advert_int 1
14. authentication {
15. auth_type PASS
16. autp_pass 1234
17. }
18. virtual_ipaddress {
19. #<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABEL>
20. 192.168.200.17/24 dev eth1
21. 192.168.200.18/24 dev eth2 label eth2:1
22. }
23. nopreempt
24. preemtp_delay 300
25. debug
26. }
####解释####
· state指定实例初始化的状态,如果都是backup,那么就按照priority的值来确定谁是master。Priority最好相差50
· interface 就是实例绑定的网卡,对外提供服务的网口
· track_interface设置额外的监控,里面的任意一个网卡出错,都会进入FAULT状态。
· mcast_src_ip发送多播包的地址,如果不设置,默认使用绑定的网卡的primary IP。
· virtual_router_id VRID标记(0-255)
· priority 高优先级的为master,最好相差大于50
· advert_int 检查间隔时间,默认1s
· virtual_ipaddress 里面指定VIP,也就是切换到master时,这些IP会被添加,切换到backup时,就删除这些VIP。通过ip addr show 可以看到这些VIP。
· lvs_sync_daemon_interface lvs syncd绑定的网卡,类似发送心跳
· authentication 这一段设置认证
· auth_type 认证方式,支持PASS和HA(据说HA有问题)
· auth_pass 认证密码
· nopreempt 设置不抢占,注意这个设置只能设置在backup状态主机上,而且这个主机的priority必须比另外的主机高
· preempt_delay 抢占延迟,默认5分钟
2.3 LVS配置
LVS的配置也包括2个部分:virtual server group和virtual server。
2.3.1 virtual server group
这一配置段是可选的,目的是为了让一台Real Server上的某个service可以属于多个Virtual Server,并且只做一次健康检查。
virtual_server_group <STRING> {
# VIP port
<IPADDR> <PORT>
<IPADDR> <PORT>
fwmark <INT>
}
2.3.2 virtual server
virtual server可以以3种方式中的任意一种配置:
1. virtual server IP port
2. virtual server fwmark int
3. virtual server group string
例如:
virtual_server 192.168.1.199 80 { #设置一个virtual server VIP VPORT
delay_loop 6 #服务投票的延迟
lb_algo rr|wrr|lc|wlc|lblc|sh|dh #LVS调度算法
lb_kind NAT|DR|TUN #LVS集群方式
nat_mask 255.255.255.0 #nat子网掩码
persistence_timeout 10 #会话保持时间(秒)
protocol TCP #使用的协议TCP
sorry_server <IP> <PORT> #备用机,所有的realserver失效后启用
real_server 192.168.1.13 80 { #真实服务器的地址和端口
weight 1 #权重,默认为1,0为失效
inhibit_on_failure #在服务器健康检查失败时,将其权重设置为0,而不是直接从IPVS表里删除。
TCP_CHECK { #健康检查方式,这里使用tcp方式
connect_timeout 3 #连接超时3秒
nb_get_retry 3 #重连次数3次
delay_before_retry 3 #重新连接间隔时间3秒
connect_port 80 #连接端口80
}
}
}
2.3.3 健康检查方式
健康检查方式有:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK
可以参考安装keepalived后的sample目录下的模板
· HTTP_GET|SSL_GET {
url { #HTTP|SSL检查的URL ,这里可以指定多个URL
path / #URL后的路径
digest <STRING> #SSL检查后的摘要信息(通过genhash算出)
}
connect_port 444 #检查的端口
connect_timeout 3 #连接超时3秒
nb_get_retry 3 #重连次数3次
delay_before_retry 3 #重新连接间隔时间3秒
}
· SMTP_CHECK { #使用SMTP_CHECK方式检查
connect_timeout 10 #连接超时3秒
retry 2 #重连次数3次
delay_before_retry 5 #重新连接间隔时间3秒
helo_name "foo.bar.com" #“smtp HELO”请求命令的参数,可选。
host {
connect_ip 172.16.1.12 #需要检查的IP
connect_port 25 #需要检查的端口
bindto 172.16.1.2 #以此地址发送请求对服务器进行健康检查
}
}
· MISC_CHECK { #使用MISC_CHECK方式检查
misc_path “/usr/local/bin/script.sh arg1 arg2” #外部程序或者脚本的路径和参数
misc_timeout 5 #脚本或程序超时时间
misc_dynamic #这个参数的设置,将利用healthchecker程序的退出状态码来动态调整服务器的权重。返回0:健康检查OK,权重保持。返回1:健康检查失败,权重设为0。返回2-255:健康检查OK,权重设置为:退出状态码-2。如返回255,那么权重为255-2=253
}
三、配置基于keepalived的LVS
将LD和realserver合并了。2台服务器:www和web,web主用,www备用,分发器上需要先安装ipvsadm。
[root@web ~]# more /etc/keepalived/keepalived.conf
1. global_defs {
2. lvs_id LVS_www
3. }
4.
5. vrrp_sync_groups VG1 {
6. group {
7. VI_1
8. }
9. }
10.
11. vrrp_instance VI_1 {
12. state BACKUP
13. interface eth0
14. virtual_router_id 51
15. priority 100
16. nopreempt
17. advert_int 1
18. authentication {
19. auth_type PASS
20. auth_pass 123456
21. }
22. virtual_ipaddress {
23. 192.168.1.199/24
24. }
25. }
26.
27. virtual_server 192.168.1.199 80 {
28. delay_loop 6
29. lb_algo rr
30. lb_kind NAT
31. nat_mask 255.255.255.0
32. persistence_timeout 10
33. protocol TCP
34.
35. real_server 192.168.1.13 80 {
36. weight 1
37. TCP_CHECK {
38. connect_timeout 3
39. nb_get_retry 3
40. delay_before_retry 3
41. connect_port 80
42. }
43. }
44.
45. real_server 192.168.1.14 80 {
46. weight 1
47. TCP_CHECK {
48. connect_timeout 3
49. nb_get_retry 3
50. delay_before_retry 3
51. connect_port 80
52. }
53. }
54. }
www服务器上仅仅修改如下:
Global_defs字段的:
lvs_id LVS_www
vrrp_instance字段的:
priority 100 #修改为50
nopreempt #删除此行
realserver上先启动httpd服务,然后再启动负载均衡器上的keepalived服务,还有请务必在负载均衡服务器上开启数据包的转发
#echo "1" > /proc/sys/net/ipv4/ip_forward
#service keepalived start
通过ipvsadm –ln查看lvs架构是否正确
通过ip add show查看VIP是否正确添加
可以看出VIP已经在web服务器上正确添加,现在可以访问服务了。