本文共 5209 字,大约阅读时间需要 17 分钟。
第一keepalived 的介绍
1 keepalived是lvs 的扩展项目,因此keepalived 和lvs 之间具备良好的兼容性
2 keepalived通过对服务器池中的对象进行健康检查,同时实现了对失效机器和服务的故障隔离,并把其从服务池中删除(当然我们在keepalived 的主配置文件中同样能够定义让其不删除,而是把其的权重设置成0)如果失效的机器或者服务,正常恢复时,keepalived 能够自动把其加入服务池。
3 keepalived 通过VRRPv2虚拟路由协议(Virtual Router Redundancy Protocol实现了负载均衡之间的失败切换
4 keepalived是一个高度模块化设计的软件,而且keepalived 工作TCP/IP 3,4,5层。
第二 keepalived 体系架构 如下图
1 keepalvied整体上分为用户空间和内核空间. 。
2 处于下端的内核空间,包含ipvs 和NETLINKK ,LVS 的缩写LINUX Virture Service 的缩写,是一个虚拟的服务器集群系统。netlink 提供高级路由及其他相关的网络服务器功能
3 watchdog 是负责监控checkers和VRRP进程
4 Checkers 是负责真实服务器的健康检查healthchecking,是keepalived的最重要的功能
5 VRRP starck 负责负载均衡器之间的失败切换FailOver.
6 IPVS wrapper 用来发送设定的规则到内核IPVS 代码
7 Netlink Reflector 用来设定Vrrp的 虚拟地址VIP
8 keepalived 采用的是多进程的设计模式,每个进程负责不同的功能
第三 实验的系统规划及其 keepalived 安装
1 两台keepalived 主机,两台Realserver 主机
ha1
eth0 192.168.2.211
eth1 10.80.2.1
ha2 eth0 192.168.2.107
eth1 10.80.2.2
Realserver1 192.168.2.155
Realserver2 192.168.2.153
VIP 192.168.2.188
2.修改keepalived 两台主机的主机名,并安装Ipvsadm 当然您可以选择用rpm 或者用源码包安装,但是如果要用源码包安装,在编译安装时可能报错, 解决方法 (一 ) .可以选择编译内核,(二),#做一个内核连接文件
#cd /usr/src
#ln –sv kernel/2.6.18-164.el5 ./linux
3. 安装keepalived
#tar -xvf keepalived-1.1.20.tar.gz
#cd keepalived-1.1.20
#./configure
Keepalived configuration
------------------------
Keepalived version : 1.1.20
Compiler : gcc
Compiler flags : -g -O2
Extra Lib : -lpopt -lssl -lcrypto
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
Use VRRP Framework : Yes
Use LinkWatch :No
Use Debug flags : No
注: Use IPVS Framework IPVS 框架即是LVS的核心代码框架,如果不使用LVS,当然在编译configure 时指定参数disable-lvs,那时该项就是No
Use sync daemon support IPVS 同步进程,如果Use IPVS Framework 选项为no 时,同样该处也为No,如果不想使用LVS的同步进程sync daemon ,同样在configure 中可以禁止该项,disable-lvs-syncd
Ues VRRP Framework VRRP是keepalived 的核心进程,当然该框架是必须的
Use Linkwatch 是通过接受内核发出的关于网卡的状态信息来判断网卡的状态,因为是内核发出的信息,这样在客户端只需要捕捉该信息,当keepalived 主机网卡超过20块的情况下使用该项
#make && make install
4. 配置keepalived 启动脚本
# cd keepalived/etc
#cp keepalived.rh.init /etc/init.d/keepalived
chmod 755 /etc/init.d/keepalived
#cp keepalived.sysconfig /etc/sysconfigure/keepalived
#cd /root/keepalived/keepalived-1.1.20/keepalived/etc/keepalived
#mkdir /etc/keepalived
#cp keepalived.conf /etc/keepalived
第四 keepalived配置文件的说明
keepalived的主配置文档在/etc/keepalived/keepavlived.conf
keepalived 的全局配置文件对keepalived起效的配置,而VRRPD 是keepalived 的核心,LVS配置只是需要使用keepalived来配置和管理LVS时需要使用,当然如果是只用keepalived 配置高可用集群是,LVS模块就不需要配置
配置文件都是以块的形式组织的,每个模块的配置都需要用 {
} 的范围之内在keepalived 的主配置文件中主要分为三个文本模块分别是:
全局模块(Global Configuration),VRRPD配置模块(VRRP 实例模块),LVS模块(虚拟服务模块);
1 全局配置(Global Configuration) 包括两个部分: 即全局定义(global definition) 和静态地址路由(Static ipaddress /routes)
全局定义:主要是设置Keeplived 的通知机制和标识,同时也不建议用该方法进行状态监控,进行状态监控时nagios 是不二的选择
静态地址路由:该处是配置静态地址和静态路由的,换句话说不随着Vrrp instance 的开关的变化而变化,当然VIP不是static IPaddress,会随着VRRPD而添加和删除,设置静态地址和静态路由的格式如:src $SRC_IP to $DST_IP dev $SRC_DEVICE 或者src $SRC_IP to $DST_IP via $GW dev $SRC_DEVICE
2 .VRRPD 配置包括三个部分: 分别是VRRP脚本(VRRP scripts) . VRRP同步组(syncgriuzation group) 和VRRP 实例(VRRP Instance):
VRRP scripts: 脚本会安周期性执行,每秒( 或者按照自己设定的时间间隔),被监控的实例会记录退出的代码,这些脚本被至少有被监控的实例的权重为o的实例才能执行,因此任意脚本可能的声明都不会被系统所记录,如果没有特殊的设置,权重等于2,就意味着那些被监控的实例的优先级会被增加2,反过来,如果失败,则那些实例的优先级会被减去2
原文如下:The script will be executed periodically, every <interval> seconds. Its exit
code will be recorded for all VRRP instances which will want to monitor it.
Note that the script will only be executed if at least one VRRP instance
monitors it with a non-zero weight. Thus, any number of scripts may be
declared without taking the system down.If unspecified, the weight equals 2, which means that a success will add +2 to the priority of all VRRP instances which monitor it. On the opposite, a negative weight will be subtracted from the initial priority in case of failure.
syncgriuzation group: 如果不使用 VRRP Sync Groups 如果keepalived 主机有两个网段,每个网段开启一个VRRP 实例,如果对外的网段出现问题,VRRPD认为自己仍然认为健康,因此 Master和Backup 相互切换,从而导致服务不能正常使用,同时高可用集群也不能正常运行,Sync group 就是为了解决该问题,可以把两个实例放进同一个Sync Group 中
VRRP Instance 配置:实例主要是定义vrrp_sync——group 里面的每组的漂移地址
3.LVS 配置同样也是包括两个部分:虚拟主机组(Virtual server group ) 和虚拟主机(virtual server)。这些配置都会传递给ipvsadm 作为参数
虚拟主机组: 目的就是然一台RealServer 上其中的一个Service可以属于多个Virtual Server ,并且只做一次健康检查格式如下
Virtual_server_group <STRING> {
#VIP port
<IPADDR> <port>
}
虚拟主机:可以3种方式分别是:virtual_server IP port,virtual_server fwmark int, virtual_server group string
第五 拟主机健康监查方式:HTTP_GET|SSL_GET|TCP_CHECK|SMTP-CHECK|MISC_CHECK
1 HTTP_GET |SSL_GET
{ url { #HTTP/SSL 检查的URL,该处可以指定多个URL
path /
digest TRING> #SSL检查后的摘要信息(genhash 工具算出)
status_code 200 #HTTP检查的返回状态
}
….. #注:省略的和下文keepalived.conf 的配置相同
}
2 TCP_CHECK {}#注: 在keepalived的主配置文件中用的就是该种方式进行健康检查,该处就不再说明
3 SMTP_CHECK 方式健康检查
SMTP_CHECK {
host {
connect_ip <IP ADDRESS>
connect_port <port> #默认检查的端口为25
}
connect_timeoust <INTEGER>
retry <INTEGER>
delay_before_retry <INTEGER>
#smtp HELO 请求命令的参数,可选 <INTEGER>
helo_name <STRING>|<QUOTED-STRING>
}
4 MISC_CHECK 检查方式,执行一个程序
MISC_CHECK
{
misc_path <STRING> | <QUOTED_STRING> # 注:外部程序或者脚本的路径misc_timeout <INT > #注:脚本执行的超时时间
misc_dynamic #如果设置了misc_dynamic,healthchecker程序的退出代码会动态调整服务器的权重
#返回0:健康检查OK,权重不被修改
#返回1:健康检查失败,权重设0
#返回2-255:监控检查OK,权重设置为: 退出状态-2,比如返回255,那么权重weigh=255-2=253
}
keepalived+lvs部署(二)