高可用集群(HA)之Keeplived原理+配置过程
2014-02-01 16:04
344 查看
原理-->通过vrrp协议,定义虚拟路由,在多个服务节点上进行转移.通过节点优先级,将初始虚拟路由到优先级高的节点上,checker工作进程检测到主节点出问题时,则降低此节点优先级,从而实现了虚拟路由的重新选择.通过notify定义通知脚本,在重新选择时,发送通知邮件.故,根据vrrp的运行机制,那么keepalived的默认工作机制就是一主多从.
vrrp状态转移机制图:
若需要双主,则需要在节点前,添加两组vip和vmac,然后将客户端分成两份,一份指向vip1,一份指向vip2,vip1对应节点A,vip2对应节点B,并通过dns的A记录,来将客户的请求,均分到两个节点上,并通过节点反向代理给上游服务器
功能-->最初就是为了给IPVS提供高可用,并且可以自动调用ipvsadm添加规则,当然规则信息是又keepalived的配置文件定义的,后来也可以为其他轻量级的调度器(nginx等)提供高可用,不过在非ipvs服务中,需要调用vrrp_script来判定核心组件-->master进程+vrrp+checkers
master进程基于watchdog来查看子进程的状态,子进程不停的通过内部套接字给主进程发送心跳信息,如果master没收到,则kill掉对应的子进程,并重启子进程有两个:vrrp:虚拟冗余路由协议,作用就是将多个网关虚拟成一个虚拟网关(vip和vmac都是虚拟的),从而解决默认网关失效checkers:检查各项服务的可用性,,怎么检测,则需要自己定义脚本配置文件-->/etc/keepalived/keepalived.conf(每个节点都需要)
1、如何在状态转换时进行通知?(需要自己写脚本来进行通知)在/etc/keepalived/keepalived.conf中vrrp_instance上下问中定义通知脚本:notify_master|backup|fault指切换到master|backup|fault时执行的脚本,使用绝对路径
来自为知笔记(Wiz)
vrrp状态转移机制图:
若需要双主,则需要在节点前,添加两组vip和vmac,然后将客户端分成两份,一份指向vip1,一份指向vip2,vip1对应节点A,vip2对应节点B,并通过dns的A记录,来将客户的请求,均分到两个节点上,并通过节点反向代理给上游服务器
功能-->最初就是为了给IPVS提供高可用,并且可以自动调用ipvsadm添加规则,当然规则信息是又keepalived的配置文件定义的,后来也可以为其他轻量级的调度器(nginx等)提供高可用,不过在非ipvs服务中,需要调用vrrp_script来判定核心组件-->master进程+vrrp+checkers
master进程基于watchdog来查看子进程的状态,子进程不停的通过内部套接字给主进程发送心跳信息,如果master没收到,则kill掉对应的子进程,并重启子进程有两个:vrrp:虚拟冗余路由协议,作用就是将多个网关虚拟成一个虚拟网关(vip和vmac都是虚拟的),从而解决默认网关失效checkers:检查各项服务的可用性,,怎么检测,则需要自己定义脚本配置文件-->/etc/keepalived/keepalived.conf(每个节点都需要)
! Configuration File for keepalived #****************************************全局配置段************************************ global_defs { #定义接收邮箱 notification_email { root@localhost } #定义发送邮箱(可随意,即便不存在也可以) notification_email_from admin@localhost#定义邮件服务器 smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL }#********************************虚拟路由配置段:定义虚拟路由相关信*************************************#为keepalived定义服务检测脚本,定义关键字就是vrrp_scriptvrrp_script chk_keepalived_down {#如果存在down文件,则返回1(表示keepalived服务失效),否则返回0(表示服务没有失效) script "[ -e /etc/keepalived/down ] && exit 1 || exit 0"#检测间隔1秒 interval 1#如果失效,权重减2 weight -2} #为nginx提供高可用 vrrp_script chk_nginx { #检测nginx是否存在,如果存在返回0,如果不存在返回1 script "killall -0 nginx" #检测间隔时间 interval 1 #如果失败,权重减2 weight 2 #失败检测次数 fall 2 #成功检测次数 rise 1 } #定义vrrp实例VI_1(即一个虚拟路由器) vrrp_instance VI_1 { #若权重高,则定义此实例为主(主从区别),从为BACKUP state MASTER #定义接口(便于从哪个网卡进行宣告,从而进行优先级选举) interface eth0 #定义vrrp虚拟路由唯一标识,即确定vmac virtual_router_id 51 #初始权重(主从区别),从需要比此数据小 priority 100#通告 advert_int 1 #认证机制,防止未知设备,成为节点 authentication { #认证类型:密码 auth_type PASS #认证密钥随机字符串 auth_pass 1111 } #定义vip virtual_ipaddress { 10.10.10.2 } #追踪脚本 track_script { chk_keepalived_down chk_nginx } } #为ipvs提供高可用,需要与vip相同(也可以根据防火墙标识来定义,virtual_server fwmark int) virtual_server 10.10.10.2 80 { delay_loop 6 #负载均衡算法,若使用wrr,则real server中的权重不能相同 lb_algo rr #负载均衡模式 lb_kind DR#vip掩码 net_mask 255.255.255.0 #持久连接 persistence_timeout 50 #负载均衡协议 protocol TCP #类似于fail_back sorry_server 192.168.200.200 80 #定义第一个真实服务器 real_server 192.168.200.2 80 { #权重 weight 1 #real server的状态信息检测,定义http判定,并使用HTTP_GET方法检测(也可以使用SSL_GET/TCP_CHECK检测,其中TCP_CHECK检测,仅仅只需要定义connect_timeout就可以了) HTTP_GET { url { path / status_code 200 }#超时时间 connect_timeout 3#重试次数 nb_get_retry 3#重试等待间隔时间 delay_before_retry 3 } } #定义第二个真实服务器 real_server 192.168.200.3 80 { weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
1、如何在状态转换时进行通知?(需要自己写脚本来进行通知)在/etc/keepalived/keepalived.conf中vrrp_instance上下问中定义通知脚本:notify_master|backup|fault指切换到master|backup|fault时执行的脚本,使用绝对路径
notify_master "/path/to/master.sh master" notify_backup "/path/to/backup.sh backup"notify_fault "/path/to/fault.sh fault"master脚本示例如下-->转换成master时发邮件通知:
#!/bin/bash # vip=192.168.1.250 contact='root@localhost' thisip=`ifconfig eth0 | awk -F : '/inet addr/{print $2}' | awk '{print $1}'` notify(){ #定义邮件内容 mailbody="vrrp transaction:vrrp changed the keepalived service to $1." subject="$thisip is to be $1." echo $mailbody | mail -s "$subject" $contact } case "$1" in master) notify master exit 0 ;; backup) notify backup exit 0 ;; fault) notify fault exit 0 ;; *) echo 'Usage:`basename $0` {master|backup|fault}' exit 1 ;; esac2、如何配置IPVS高可用(安装ipvsadm,查看ipvs规则负载均衡集群之LVS配置命令),ipvs高可用,keepalived已经提供了状态通知脚本,不需要自行定义[/b]在/etc/keepalived/keepalived.conf中添加virtual_server上下文: virutal server realserver health check配置格式如下-->virtual_server vip port { lb_kind #定义负载均衡算法(rr,wrr,sh,dh,lblc,lc)负载均衡集群之LVS算法和模型 lb_algo real_server rip port { weight notify_up "up.sh" notify_down "down.sh" } }配置示例-->
virtual_server 10.10.10.2 80 { delay_loop 6 #负载均衡算法 lb_algo rr #负载均衡模式 lb_kind DR #持久连接 persistence_timeout 50 #负载均衡协议 protocol TCP #类似于fail_back sorry_server 192.168.200.200 80 #定义第一个真实服务器 real_server 192.168.200.2 80 { #权重 weight 1 #定义http判定,并使用get方法 HTTP_GET { url { path / status_code 200 }#超时时间 connect_timeout 3#重试次数 nb_get_retry 3#重试等待间隔时间 delay_before_retry 3 } } #定义第二个真实服务器 real_server 192.168.200.3 80 { weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } }3、如何对某特定服务器做高可用?(这里以nginx为例)关键点:监控服务和追踪服务,具体查看上面的配置文件4、如何实现基于多虚拟路由的master/master模型定义两个vrrp_instance即可,需要注意的是vmac标识不能一样
来自为知笔记(Wiz)
相关文章推荐
- 高可用集群(HA)之DRBD原理和基础配置
- linux heartbeat 的原理及配置过程
- Hadoop2.2.0+HA+zookeeper3.4.5详细配置过程+错误处理(一)
- Mysql集群的HA原理及配置指南之双主模式(二)
- 3、HDFS的HA原理及配置
- (HA)DRBD原理简介到实战配置
- haproxy负载均衡的配置,以及haproxy+keeplived
- Hadoop2.2.0+HA+zookeeper3.4.5详细配置过程+错误处理(二)
- Spark On Yarn(HDFS HA)详细配置过程
- Hadoop 2.6.0 HA高可用集群配置详解(三)
- Hadoop 2.6.0 HA高可用集群配置详解
- Mysql集群的HA原理及配置指南之字段冲突修复(四)
- Namenode HA原理以及配置
- CentOS6.2下配置KeepLived + LVS
- Hadoop 2.6.0 HA高可用集群配置详解
- DRBD工作原理及配置过程
- Hadoop HA 高可用集群搭建配置(经过测试)
- LVS-HA 高可用集群配置
- Spring Aop配置使用示例及实现过程和原理介绍
- Spark On Yarn(HDFS HA)详细配置过程