全部博文(317)
分类: LINUX
2010-09-09 11:37:23
一、部署keepalived
使用:
#wget
下载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都有用。
- global_defs
- {
- notification_email
- {
- admin@example.com
- }
- notification_email_from admin@example.com
- smtp_server 127.0.0.1
- stmp_connect_timeout 30
- lvs_id my_hostname
- }
2. VRRPD配置
这里是keepalived的核心,LVS配置只在要使用keepalived来配置和管理LVS时需要使用,如果仅仅使用keepalived做HA的话就可以完全不用配置LVS。
VRRPD配置分2部分:VRRP Sync Groups和VRRP Instance
2.1 VRRP Sync Groups
将需要监控的多个实例放入sync group,这样可以保证在任意实例出错的时候都能切换,继续提供服务。
- vrrp_sync_group VG_1 {
- group {
- inside_network
- outside_network
- }
- notify_master /path/to/to_master.sh
- notify_backup /path_to/to_backup.sh
- notify_fault "/path/fault.sh VG_1"
- notify /path/to/notify.sh
- smtp_alert
- }
####解释####
2.2 VRRP Instance
VRRP instance主要是对实例的一些特性的描述。可以为每个网卡开启一个实例。
- vrrp_instance inside_network {
- state MASTER
- interface eth0
- dont_track_primary
- track_interface {
- eth0
- eth1
- }
- mcast_src_ip <IPADDR>
- garp_master_delay 10
- virtual_router_id 51
- priority 100
- advert_int 1
- authentication {
- auth_type PASS
- autp_pass 1234
- }
- virtual_ipaddress {
- #<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABEL>
- 192.168.200.17/24 dev eth1
- 192.168.200.18/24 dev eth2 label eth2:1
- }
- nopreempt
- preemtp_delay 300
- debug
- }
2.3 LVS配置
LVS的配置也包括2个部分:virtual server group和virtual server。
2.3.1 virtual server group
这一配置段是可选的,目的是为了让一台Real Server上的某个service可以属于多个Virtual Server,并且只做一次健康检查。
virtual_server_group
# VIP port
fwmark
}
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
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目录下的模板
url { #HTTP|SSL检查的URL ,这里可以指定多个URL
path / #URL后的路径
digest
}
connect_port 444 #检查的端口
connect_timeout 3 #连接超时3秒
nb_get_retry 3 #重连次数3次
delay_before_retry 3 #重新连接间隔时间3秒
}
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_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
- global_defs {
- lvs_id LVS_www
- }
- vrrp_sync_groups VG1 {
- group {
- VI_1
- }
- }
- vrrp_instance VI_1 {
- state BACKUP
- interface eth0
- virtual_router_id 51
- priority 100
- nopreempt
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 123456
- }
- virtual_ipaddress {
- 192.168.1.199/24
- }
- }
- virtual_server 192.168.1.199 80 {
- delay_loop 6
- lb_algo rr
- lb_kind NAT
- nat_mask 255.255.255.0
- persistence_timeout 10
- protocol TCP
- real_server 192.168.1.13 80 {
- weight 1
- TCP_CHECK {
- connect_timeout 3
- nb_get_retry 3
- delay_before_retry 3
- connect_port 80
- }
- }
- real_server 192.168.1.14 80 {
- weight 1
- TCP_CHECK {
- connect_timeout 3
- nb_get_retry 3
- delay_before_retry 3
- connect_port 80
- }
- }
- }
www服务器上仅仅修改如下:
Global_defs字段的:
lvs_id LVS_www
vrrp_instance字段的:
priority 100 #修改为100
nopreempt #删除此行
realserver上先启动httpd服务,然后再启动负载均衡器上的keepalived服务,还有请务必在负载均衡服务器上开启数据包的转发
#echo "1" > /proc/sys/net/ipv4/ip_forward
#service keepalived start
通过ipvsadm –ln查看lvs架构是否正确
通过ip add show查看VIP是否正确添加
可以看出VIP已经在web服务器上正确添加,现在可以访问服务了。
参考:
关于更加灵活使用的方法请参考田逸老师的blog:
本文出自 “摸索Linux” 博客,请务必保留此出处http://asram.blog.51cto.com/1442164/359093