Keepalived简介及安装
1. 什么是Keepalived?keepalived是一个类似与layer3,4,5交换机制的软件,也就是我们平时说的第3,4,5层交换.Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后keepalived自动将web服务器加入到服务器集群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器.
2. Keepalived作用
负载均衡方案
高可用性HA
实现对是小机器/服务的故障隔离
负载均衡器间的失败切换failover,是通过VRRPv2(Virtual Router Redundancy Protocol) stack实现
3. Keepalived体系结构
Keepalived大致分为两层结构: 用户空间(User space)和内核空间(kernel space)
http://blog.运维网.com/e/u261/themes/default/images/spacer.gif
WatchDog 负责监控checkers和VRRP进程的状况
Checkers 负责真实服务器的健康检查healthchecking,是Keepalived最主要的功能.换句话说--可以没有VRRP Stack,但健康检查healthchecking是一定要有的.
CRRP Stack 负责负载均衡器之间失败切换FailOver. 如果只用一个负载均衡器,则VRRP不是必须的.
IPVS wrapper 用来发送设定的规则到内核ipvs代码
Netlink Reflector 用来设定vrrp 的vip地址等
3. Keepalived的安装
# ln -s /usr/src/kernels/2.6.18-238.el5-i686/ /usr/src/linux
## 否则 Use IPVS Framework : No
# ./configure --prefix=/opt/keepalived121/
# make
# make install
# cd /opt/keepalived121/
# 设置 service 方式启动服务
# mkdir /etc/keepalived
# cp etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
# cp etc/sysconfig/keepalived /etc/sysconfig/
# cp etc/keepalived/keepalived.conf /etc/keepalived/
# cp sbin/keepalived /usr/sbin/
#启动进程
# service keepalived start
Starting keepalived: [ OK ]
# ps aux | grep keep
root 15417 0.0 0.2 5032 576 ? Ss 19:58 0:00 keepalived -D
root 15418 0.0 0.5 5104 1452 ? S 19:58 0:00 keepalived -D
root 15419 0.0 0.3 5104 972 ? S 19:58 0:00 keepalived -D
Keepalived正常运行时,共启动3个进程,其中一个进程是父进程,负责监控其子进程,一个是vrrp子进程,另外一个是checkers子进程.
4. Keepalived的配置文件
位置:
# cat /etc/keepalived/keepalived.conf
Keepalived的所有配置都在一个配置文件里设置,支持的配置项也比较多,可以分为三类:
a. 全局配置(Global configuration)
就是对整个Keepalived起作用的配置,不管是否使用LVS
b. VRRPD配置
是Keepalived的核心
c. LVS配置
只在使用Keepalived来配置和管理LVS时需要使用,如果仅使用Keepalived来做HA,LVS的配置完全是不需要的
4.1 全局配置
全局配置包括两个子配置: 全局定义(global definition), 静态地址路由(static ipaddress routes)
A: 全局定义主要设置Keepalived的通知机制和标识:
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
notification_email : 指定Keepalived在发生事件时,需要发送Email到的对象,可以有多个,每行一个
smtp_* : 指定发送email的smtp服务器
route_id : 运行Keepalived的机器的一个标识
B: 静态地址和路由
所谓静态,就是说不会随vrrpd instance的开/关的变化的,VIP就不是static的,会随着vrrp而添加/删除,这个配置可以用来给服务器配置静态的IP地址/路由
静态地址和路由的配置结构:
static_ipaddress {
192.168.1.1/24 brd + dev eth0 scope global
}
static_routes {
src $SRC_IP to $DST_IP dev $SRC_DEVICE
.....
src $SRC_IP to $DST_IP via $GW dev $SRC_DEVICE
}
4.2 VRRPD配置
VRRPD的配置也包括两个部分: VRRP同步组(synchronization group), VRRP实例(VRRP instance)
A: VRRP同步组
如果机器或路由有两个网段,一个内网一个外网,每个网段开启一个VRRP实例,假设VRRP配置为检查内网,那么外网出现问题时,VRRPD认为自己仍然健康,那么不会发送Master和Backup的切换,sync group就是为了解决这个问题,可以把两个实例都放进一个sync group. 这样group里任何一个实例出现问题都会发生切换.
VRRP同步组的配置结构:
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
}
# notify_master : 指定当切换到master时,执行的脚本,这个脚本可以传入参数
# smtp_alert : 使用global_defs里面定义的邮件地址和smtp服务器在切换后发送邮件通知
B: VRRP实例
VRRP实例表示在上面开启了VRRP协议,这个实例说明了VRRP的一些特性.
VRRP实例的配置结构:
vrrp_instance VI_1 {
state MASTER# 实例的初始状态
interface eth0# 实例绑定的网卡
dont_track_primary# 忽略VRRP的interface错误
lvs_sync_daemon_interface eth0# 绑定eth0作为lvs同步的
track_interface {# 设置额外的监控,里面的任意一个出现问题,都会进入fault状态
eth0
eth1
}
mcast_src_ip # 发送多播包地址,默认使用绑定的网卡
garp_master_delay 10# 在切换到master状态后,延迟进行gratuitous ARP请求
virtual_router_id 51# VRID标记
priority 100# 高优先级竞选为master,至少高backup 50
advert_int 1# 检查间隔
authentication {# 设置验证
auth_type PASS# 认证方式,支持PASS和AH
auth_pass 1111# 认证的密码
}
virtual_ipaddress { # 虚拟IP
# /brddevscopelabel
192.168.200.16
192.168.200.17
192.168.200.18
}
}
C: 检查服务是否正常配置:
vrrp_script chk_http_port {
script "killall -0 httpd"#检查httpd服务是否正常
# script "/tcp/127.0.0.1/80"
interval 1#检查时间间隔
}
使用:
在vrrp_instance里面
track_script {
chk_http_port
}
4.3 LVS配置
LVS的配置有两个部分: 虚拟主机组(virtual server group), 虚拟主机(virtual server)
A: 虚拟主机组
可选的,目的是为了让一台RealServer上的某个service可以属于多个virtual server并且只做一次健康检查
virtual_server_group{
# VIP port
.....
fwmark
}
B: 虚拟主机 --虚拟服务器定义部分
virtual_server 10.10.10.3 1358 { # 设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开
delay_loop 3# 设置健康检查时间,单位是秒
lb_algo rr # 设置负载调度算法
lb_kind NAT # 设置LVS实现负载均衡的机制,可以有NAT,TUN和DR三个模式
nat_mask 255.255.255.0
persistence_timeout 50# 会话保持时间,单位的秒
protocol TCP# 指定转发协议类型,有tcp和udp两种
sorry_server# 备机IP端口,所有的real server失效后启用
# 节点服务器配置部分
real_server 192.168.200.4 1358 { # 配置服务节点,需要指定real server的真实IP地址和端口,ip与端口之间用空格隔开
weight 1# 配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,
# 设置权值的大小可以为不同性能的服务器分配不同的负载,
# 可以对性能高的服务器设置较高的权值,而对性能较低的服务器设置相对较低的权值
# 这样就合理的利用和分配了系统资源
inhibit_on_failure# 健康检查失败后,将weight设置为0,不从IPVS里面删除
TCP_CHECK {# realserver的状态检查设置部分,单位是秒
connect_timeout 10# 10秒无响应超时
nb_get_retry 3# 重试次数
delay_before_retry 3# 重试间隔
}
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
5. 测试
http://blog.运维网.com/e/u261/themes/default/images/spacer.gif
clust3 -> keepalived.conf
# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id Haweb_1
}
vrrp_sync_group VGM {
group {
VI_HA
}
}
vrrp_instance VI_HA {
state MASTER
interface eth1
lvs_sync_daemon_interface eth1
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.98.155/24 dev eth1
}
}
clust4 -> keepalived.conf
# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id Haweb_1
}
vrrp_sync_group VGM {
group {
VI_HA
}
}
vrrp_instance VI_HA {
state BACKUP
interface eth1
lvs_sync_daemon_interface eth1
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.98.155/24 dev eth1
}
}
# 查看日志输出
# tail -f /var/log/messages
# stop master/backup查看IP地址变化
# ip a
# cluster3 -> service keepalived stop
# 浏览器输入 192.168.98.155 看现实的哪台服务器的页面内容
# cluster3 -> service keepalived start
# 浏览器输入 192.168.98.155 看现实的哪台服务器的页面内容
问题:
1. Keepalived抢占问题如何优化?
两台服务器组成高可用集群,分别处于Master和Backup状态,当Master出现故障时由Backup来接管所有任务,那么当Master恢复时,Master会抢回所有权.虽然是高可用,但是对客户来说,来回的切换是比较烦恼的事.
解决: 可将两服务器均设置成backup状态是因为 nopreempt(不抢占)只支持backup模式,而让那一台成为master,这个由优先级priority来决定
页:
[1]