监控集群系统中各个服务工作状态,可以自动剔除坏节点,修复之后又加回来,工作在3,4,5层,
VRRP虚拟路由器冗余协议:解决静态路由出现的单点故障,是一种主备模式的协议,可以在网络发生故障时透明地进行设备切换而不影响主机间的数据通信
VRRP可以将两台或多台物理路由器设备虚拟成一个虚拟路由器,通过一个虚拟ip对外提供服务,由选举算法选出一个master,当master失效则从backup中重新选取
一个VRIP与一组IP地址构成一个虚拟路由器,协议中所有报文都通过多播形式发送,而在虚拟路由器中只有master会一直发送VRRP数据包,当没有收到数据包就会重新选举
运行机制:网络层通过发送icmp包探测,如果无返回就剔除;传输层通过扫描端口,没有响应数据就剔除,应用层根据用户自定义的设定来判断是否正常
结构上整体分两层,内核空间层(kernel space):处于最底层,包括IPVS和NETLINK两个模块,ipvs是第三方模块,可以实现基于IP的负载均衡集群;NETLINK主要用于实现一些高级路由框架和一些相关的网络功能,完成用户空间Netlink Reflector发来的网络请求。
用户空间层(user space):分为四个部分,
Schedule I/O Multiplexer:I/O复用分发调度器,安排内部的任务请求
Memory Manage:内存管理机制,提供了访问内存的一些通用方法
control plane:控制面板,实现对配置文件进行编译和解析(只有用到某模块才解析)
core component:包含一系列模块
·watchDog:针对被监视的目标设置一个计数器和一个阈值,自己增加计数,等待被监视目标周期性地重置该计数,如果目标发生错误便无法重置,通过Watchdog监控Checkers和VRRP
checkers:最基础的功能,实现对服务器运行状态监测和故障隔离
VRRP Stack:可以实现HA集群中失败切换(failover)功能,通过VRRP功能再结合LVS负载均衡软件就可部署一个高性能的负载均衡集群系统
IPVS wrapper:将设置好的ipvs规则发送给内核空间并提交给LPVS模块,便可实现负载均衡
Netlink Reflector:实现高可用集群中failover时虚拟IP的设置和切换,发送给NETLINK模块完成
安装:./configure --sysconf=/etc指定配置文件 --with-kernel-dir=/usr/src/kernels/2.6.32-431.5.1.e16.x86_64指定要使用的内核源码的头文件
如果只是启动高可用,不需要IPVS模块--disable-lvs关闭 --disable-lvs-syncd关闭ipvs同步
IPVS use libnl使用新版libnl,需要libnl和libnl-devel包
Use VRRP Framework表示使用VRRP框架,必须的模块;VMAC使用基础vmac接口的xmit包
ln -s /usr/local/sbin/keepalived /sbin/ chkconfig --add keepalived --level 35 on
全局配置:
global_defs {
notification_email {
[email protected] #需要开启Sendmail服务
}
notification_email_from keepalived@localhost
smtp_server 192.168.200.1 设置邮件的smtp server地址
smtp_connect_timeout 30 超时时间
router_id LVS_DEVEL 标示,显示在邮件主题中
}
VRRPD配置:
同步组配置:vrrp_sync_group G1{
group{
VI_1 #实例名
VI_2
VI_3}
notify_backup "/usr/local/bin/vrrp.back arg1 arg2"进入backup执行的脚本,可以是状态报警或服务管理
notify_fault "/usr/local/bin/vrrp.fault arg1 arg2"进入fault执行的脚本,可以是状态报警或服务管理
notify_stop "/usr/local/bin/vrrp.stop arg1 arg2"终止时需要执行的脚本
notify_master "/usr/local/bin/vrrp.mast arg1 arg2"指定当keepalived进入MASTER状态时要执行的脚本,允许传人参数}
vrrp_instance VI_1{
.....
advert_int 1间隔时间
mcast_src_ip 发送多播包的地址,可不设
track_interface 设置一些额外的监控接口
virtual_ipaddress {}虚拟ip主节点时自动添加
virtual_routers {}
nopreempt不自动切回
preemtp_delay 300切回去延时
}
virtual_server 192.168.12.200 80{
delay_loop 6 健康检查时间间隔
lb_algo rr wrr lc wlc lblc sh dh
lb_kind NAT/TUN/DR
persistent_timeout 50最大无响应保持时间
persistence_granularity 255.255.255.0
protocol TCP、UDP
ha_suspend 切换时不检查realserver
virtualhost http_get/ssl_get健康检测时指定web服务器的虚拟主机地址(bindto)
sorry_server realserver全部爆炸后使用此地址}
real_server 192.168.12.132 80{
weight 3
inhibit_on_failure 不删除节点weight值设为0
notify_up XXX.sh notify_down yyy.sh
TCP_CHECK{connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before 3}
HTTP_GET|SSL_GET {
url{path /index.html digest (genhash -s 192.168.12.80 -p 80 -u /index.html) status_code 200}
bindto 192.168.12.80
connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before 3}}
基础功能vrrp_script check_httpd{
script "kilall -0 httpd"
interval 2 fall 2 rise 1 }
track_script{check_httpd}
script "if[-f /var/run/httpd/httpd.pid];then exit 0; else exit 1;fi"
script "</dev/tcp/127.0.0.1/80"对本机80端口检测
script “/xxxx/mysql.sh" 用脚本检测