1. 前言
VRRP(Virtual Router Redundancy Protocol)协议是用于实现路由器冗余的协议,最新协议在RFC3768中定义,原来的定义RFC2338被废除,新协议相对还简化了一些功能。
2. 协议说明
2.1 协议
VRRP协议是为消除在静态缺省路由环境下的缺省路由器单点故障引发的网络失效而设计的主备模式的协议,使得在发生故障而进行设备功能切换时能够不影响内外数据通讯,不须要再修改内部网络的网络参数。VRRP协议须要具备IP地址备份,优先路由选择,减小没必要要的路由器间通讯等功能。
VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个),而在路由器组内部,若是实际拥有这个对外IP的路由器若是工做正常的话就是MASTER,或者是经过算法选举产生,MASTER实现针对虚拟路由器IP的各类网络功能,如ARP请求,ICMP,以及数据的转发等;其余设备不拥有该IP,状态是BACKUP,除了接收MASTER的VRRP状态通告信息外,不执行对外的网络功能。当主机失效时,BACKUP将接管原先MASTER的网络功能。
配置VRRP协议时须要配置每一个路由器的虚拟路由器ID(VRID)和优先权值,使用VRID将路由器进行分组,具备相同VRID值的路由器为同一个组,VRID是一个0~255的正整数;同一组中的路由器经过使用优先权值来选举MASTER,优先权大者为MASTER,优先权也是一个0~255的正整数。
VRRP协议使用多播数据来传输VRRP数据,VRRP数据使用特殊的虚拟源MAC地址发送数据而不是自身网卡的MAC地址,VRRP运行时只有MASTER路由器定时发送VRRP通告信息,表示MASTER工做正常以及虚拟路由器IP(组),BACKUP只接收VRRP数据,不发送数据,若是必定时间内没有接收到MASTER的通告信息,各BACKUP将宣告本身成为MASTER,发送通告信息,从新进行MASTER选举状态。
2.2 MASTER选举
若是对外的虚拟路由器IP就是路由器自己配置的IP地址的话,该路由器始终都是MASTER;
不然若是不具有虚拟IP的话,将进行MASTER选举,各路由器都宣告本身是MASTER,发送VRRP通告信息;
若是收到其余机器的发来的通告信息的优先级比本身高,将转回BACKUP状态;
若是优先级相等的话,将比较路由器的实际IP,IP值较大的优先权高;
不过若是对外的虚拟路由器IP就是路由器自己的IP的话,该路由器始终将是MASTER,这时的优先级值为255。
2.3 协议状态机
VRRP协议状态比较简单,就三种状态,初始化,主机,备份机。php
初始化:
路由器启动时,若是路由器的优先级是255(最高优先级,路由器拥有路由器地址),要发送VRRP通告信息,并发送广播ARP信息通告路由器IP地址对应的MAC地址为路由虚拟MAC,设置通告信息定时器准备定时发送VRRP通告信息,转为MASTER状态;
不然进入BACKUP状态,设置定时器检查定时检查是否收到MASTER的通告信息。
主机:
主机状态下的路由器要完成以下功能:
设置定时通告定时器;
用VRRP虚拟MAC地址响应路由器IP地址的ARP请求;
转发目的MAC是VRRP虚拟MAC的数据包;
若是是虚拟路由器IP的拥有者,将接受目的地址是虚拟路由器IP的数据包,不然丢弃;
当收到shutdown的事件时删除定时通告定时器,发送优先权级为0的通告包,转初始化状态;
若是定时通告定时器超时时,发送VRRP通告信息;
收到VRRP通告信息时,若是优先权为0,发送VRRP通告信息;不然判断数据的优先级是否高于本机,或相等并且实际IP地址大于本地实际IP,设置定时通告定时器,复位主机超时定时器,转BACKUP状态;不然的话,丢弃该通告包;
备机:
备机状态下的路由器要实现如下功能:
设置主机超时定时器;
不能响应针对虚拟路由器IP的ARP请求信息;
丢弃全部目的MAC地址是虚拟路由器MAC地址的数据包;
不接受目的是虚拟路由器IP的全部数据包;
当收到shutdown的事件时删除主机超时定时器,转初始化状态;
主机超时定时器超时的时候,发送VRRP通告信息,广播ARP地址信息,转MASTER状态;
收到VRRP通告信息时,若是优先权为0,表示进入MASTER选举;不然判断数据的优先级是否高于本机,若是高的话认可MASTER有效,复位主机超时定时器;不然的话,丢弃该通告包;
2.4 ARP查询处理
当内部主机经过ARP查询虚拟路由器IP地址对应的MAC地址时,MASTER路由器回复的MAC地址为虚拟的VRRP的MAC地址,而不是实际网卡的MAC地址,这样在路由器切换时让内网机器觉察不到;而在路由器从新启动时,不能主动发送本机网卡的实际MAC地址。若是虚拟路由器开启的ARP代理(proxy_arp)功能,代理的ARP回应也回应VRRP虚拟MAC地址;
2.5 VRRP应用举例
html
这是一般VRRP使用拓扑,两台路由器运行VRRP互为备份,路由器1做为VRID组1的MASTER,IP地址A,VRID组2的BACKUP,路由器2做为VRID组2的MASTER,IP地址B,VRID组1的BACKUP,内部网络中一部分机器的缺省网关地址是IP地址A,一部分是IP地址B,正常状况下以A为网关的数据将走路由器1,以B为网关的数据将走路由器2,若是一台路由器发生故障,全部数据将走另外一台路由器。
3. 协议定义
3.1 以太头
源MAC地址必须为虚拟MAC地址:00-00-5E-00-01-{VRID},VRID为虚拟路由器ID值,16进制格式,因此同一网段中最多有255个VRRP路由器;目的MAC为多播类型的MAC。
这里能够看出VRID很是重要
3.2 IP头参数
VRRP包的源地址是本机地址,目的地址必须为224.0.0.18,为一多播地址;IP协议号为112;IP包的TTL值必须为255。
3.3 VRRP协议数据格式node
其中:
version:版本,4位,在RFC3768中定义为2;
Type:类型,4位,目前只定义一种类类型:通告数据,取值为1;
Virtual Rtr ID:虚拟路由器ID,8位
Priority:优先级,8位,具有冗余IP地址的设备的优先级为255;
Count IP Addrs:VRRP包中的IP地址数量,8位;
Auth Type:认证类型,8位,RFC3768中认证功能已经取消,此字段值定义0(不认证),为1,2只做为对老版本的兼容;
Adver Int:通告包的发送间隔时间,8位,单位是秒,缺省是1秒;
Checksum:校验和,16位,校验数据范围只是VRRP数据,即从VRRP的版本字段开始的数据,不包括IP头;
IP Address(es):和虚拟路由器相关的IP地址,数量由Count IP Addrs决定
Authentication Data:RFC3768中定义该字段只是为了和老版本兼容,必须置0。
3.4 接收数据时的必须检查
收到VRRP数据包时要进行如下验证,不知足的数据包将被丢弃:
- TTL必须为255;
- VRRP版本号必须为2;
- 一个包中数据字段必须完整;
- 校验和必须正确;
- 必须验证在接收的网卡上配置了VRID值,并且本地路由器不是路由IP地址的拥有者
- 必须验证VVRP认证类型和配置的一致;
4. 结论
mysql
VRRP实现了对路由器IP地址的冗余功能,防止了单点故障形成的网络失效,VRRP自己是热备形式的,但能够经过互相热备实现路由器的均衡处理,新版的VRRP较老版简化了认证处理,实际再也不进行数据的认证,这是由于在实际应用中常常出现认证成为形成多个MASTER同时使用的异常状况。linux
什么是Keepalived呢,keepalived观其名可知,保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,用来防止单点故障(单点故障是指一旦某一点出现故障就会致使整个系统架构的不可用)的发生,那说到keepalived时不得不说的一个协议就是VRRP协议,能够说这个协议就是keepalived实现的基础,那么首先咱们来看看VRRP协议
注:搞运维的要有足够的耐心哦,不理解协议就很难透彻的掌握keepalived的了
nginx
VRRP协议
学过网络的朋友都知道,网络在设计的时候必须考虑到冗余容灾,包括线路冗余,设备冗余等,防止网络存在单点故障,那在路由器或三层交换机处实现冗余就显得尤其重要,在网络里面有个协议就是来作这事的,这个协议就是VRRP协议,Keepalived就是巧用VRRP协议来实现高可用性(HA)的
VRRP协议有一篇文章写的很是好,你们能够直接看这里(记得认真看看哦,后面基本都已这个为基础的了)
帖子地址:http://bbs.ywlm.net/thread-790-1-1.html
只须要把服务器看成路由器便可!
在《VRRP协议》里讲到了虚拟路由器的ID也就是VRID在这里比较重要
keepalived彻底遵照VRRP协议,包括竞选机制等等
web
Keepalived原理
keepalived也是模块化设计,不一样模块复杂不一样的功能,下面是keepalived的组件
core check vrrp libipfwc libipvs-2.4 libipvs-2.6
core:是keepalived的核心,复杂主进程的启动和维护,全局配置文件的加载解析等
check:负责healthchecker(健康检查),包括了各类健康检查方式,以及对应的配置的解析包括LVS的配置解析
vrrp:VRRPD子进程,VRRPD子进程就是来实现VRRP协议的
libipfwc:iptables(ipchains)库,配置LVS会用到
libipvs*:配置LVS会用到
注意,keepalived和LVS彻底是两码事,只不过他们各负其责相互配合而已
算法
keepalived启动后会有三个进程
父进程:内存管理,子进程管理等等
子进程:VRRP子进程
子进程:healthchecker子进程
有图可知,两个子进程都被系统WatchDog看管,两个子进程各自复杂本身的事,healthchecker子进程复杂检查各自服务器的健康程度,例如HTTP,LVS等等,若是healthchecker子进程检查到MASTER上服务不可用了,就会通知本机上的兄弟VRRP子进程,让他删除通告,而且去掉虚拟IP,转换为BACKUP状态
sql
keepalived配置详解
keepalived有三类配置区域(姑且就叫区域吧),注意不是三种配置文件,是一个配置文件里面三种不一样类别的配置区域
全局配置(Global Configuration)
VRRPD配置
LVS配置
一,全局配置
全局配置又包括两个子配置:
全局定义(global definition)
静态路由配置(static ipaddress/routes)
1,全局定义(global definition)配置范例shell
全局配置解析
global_defs全局配置标识,表面这个区域{}是全局配置
表示keepalived在发生诸如切换操做时须要发送email通知,以及email发送给哪些邮件地址,邮件地址能够多个,每行一个
notification_email_from admin@example.com
表示发送通知邮件时邮件源地址是谁
smtp_server 127.0.0.1
表示发送email时使用的smtp服务器地址,这里能够用本地的sendmail来实现
smtp_connect_timeout 30
链接smtp链接超时时间
router_id node1
机器标识
2,静态地址和路由配置范例
这里实际上和系统里面命令配置IP地址和路由同样例如:
192.168.1.1/24 brd + dev eth0 scope global 至关于: ip addr add 192.168.1.1/24 brd + dev eth0 scope global
就是给eth0配置IP地址
路由同理
通常这个区域不须要配置
这里实际上就是给服务器配置真实的IP地址和路由的,在复杂的环境下可能须要配置,通常不会用这个来配置,咱们能够直接用vi /etc/sysconfig/network-script/ifcfg-eth1来配置,切记这里可不是VIP哦,不要搞混淆了,切记切记!
二,VRRPD配置
VRRPD配置包括三个类
VRRP同步组(synchroization group)
VRRP实例(VRRP Instance)VRRP脚本
1,VRRP同步组(synchroization group)配置范例
其中:
http和mysql是实例名和下面的实例名一致
notify /path/to/notify.sh:
smtp alter表示切换时给global defs中定义的邮件地址发送邮件通知(在这里咱们能够利用一款很是小巧的邮件发送工具mailx来进行邮件的发送工做)
2,VRRP实例(instance)配置范例
state:state指定instance(Initial)的初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,但这里指定的不算,仍是得要经过竞选经过优先级来肯定,里若是这里设置为master,但如若他的优先级不及另一台,那么这台在发送通告时,会发送本身的优先级,另一台发现优先级不如本身的高,那么他会就回抢占为master
interface:实例绑定的网卡,由于在配置虚拟IP的时候必须是在已有的网卡上添加的
dont track primary:忽略VRRP的interface错误
track interface:跟踪接口,设置额外的监控,里面任意一块网卡出现问题,都会进入故障(FAULT)状态,例如,用nginx作均衡器的时候,内网必须正常工做,若是内网出问题了,这个均衡器也就没法运做了,因此必须对内外网同时作健康检查
mcast src ip:发送多播数据包时的源IP地址,这里注意了,这里实际上就是在那个地址上发送VRRP通告,这个很是重要,必定要选择稳定的网卡端口来发送,这里至关于heartbeat的心跳端口,若是没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址
garp master delay:在切换到master状态后,延迟进行免费的ARP(gratuitous ARP)请求
virtual router id:这里设置VRID,这里很是重要,相同的VRID为一个组,他将决定多播的MAC地址
priority 100:设置本节点的优先级,优先级高的为master
advert int:检查间隔,默认为1秒
virtual ipaddress:这里设置的就是VIP,也就是虚拟IP地址,他随着state的变化而增长删除,当state为master的时候就添加,当state为backup的时候删除,这里主要是有优先级来决定的,和state设置的值没有多大关系,这里能够设置多个IP地址
virtual routes:原理和virtual ipaddress同样,只不过这里是增长和删除路由
lvs sync daemon interface:lvs syncd绑定的网卡
authentication:这里设置认证
auth type:认证方式,能够是PASS或AH两种认证方式
auth pass:认证密码
nopreempt:设置不抢占,这里只能设置在state为backup的节点上,并且这个节点的优先级必须别另外的高。当主mysql恢复后不抢占资源
preempt delay:抢占延迟
debug:debug级别
notify master:和sync group这里设置的含义同样,能够单独设置,例如不一样的实例通知不一样的管理人员,http实例发给网站管理员,mysql的就发邮件给DBA
3,VRRP脚本
首先在vrrp_script区域定义脚本名字和脚本执行的间隔和脚本执行的优先级变动
vrrp_script check_running {
script "/usr/local/bin/check_running"interval 10 #脚本执行间隔weight 10 #脚本结果致使的优先级变动:10表示优先级+10;-10则表示优先级-10}
而后在实例(vrrp_instance)里面引用,有点相似脚本里面的函数引用同样:先定义,后引用函数名
track_script {
check_running weight 20
}
注意:VRRP脚本(vrrp_script)和VRRP实例(vrrp_instance)属于同一个级别
若是你没有配置LVS+keepalived那么无需配置这段区域,里若是你用的是nginx来代替LVS,这无限配置这款,这里的LVS配置是专门为keepalived+LVS集成准备的。
注意了,这里LVS配置并非指真的安装LVS而后用ipvsadm来配置他,而是用keepalived的配置文件来代替ipvsadm来配置LVS,这样会方便不少,一个配置文件搞定这些,维护方便,配置方即是也!
这里LVS配置也有两个配置
一个是虚拟主机组配置
一个是虚拟主机配置
1,虚拟主机组配置文件详解
这个配置是可选的,根据需求来配置吧,这里配置主要是为了让一台realserver上的某个服务能够属于多个Virtual Server,而且只作一次健康检查
virtual_server_group <STRING> {
# VIP port
<IPADDR> <PORT>
<IPADDR> <PORT>
fwmark <INT>
}
2,虚拟主机配置
virtual server能够如下面三种的任意一种来配置
下面以第一种比较经常使用的方式来配详细解说一下
virtual_server 192.168.1.2 80 { #设置一个virtual server: VIP:Vport
delay_loop 3 # service polling的delay时间,即服务轮询的时间间隔
lb_algo rr|wrr|lc|wlc|lblc|sh|dh #LVS调度算法
lb_kind NAT|DR|TUN #LVS集群模式
persistence_timeout 120 #会话保持时间(秒为单位),即以用户在120秒内被分配到同一个后端realserver
persistence_granularity <NETMASK> #LVS会话保持粒度,ipvsadm中的-M参数,默认是0xffffffff,即每一个客户端都作会话保持
protocol TCP #健康检查用的是TCP仍是UDP
ha_suspend #suspendhealthchecker’s activity
virtualhost <string> #HTTP_GET作健康检查时,检查的web服务器的虚拟主机(即host:头)
sorry_server <IPADDR> <PORT> #备用机,就是当全部后端realserver节点都不可用时,就用这里设置的,也就是临时把全部的请求都发送到这里啦
real_server <IPADDR> <PORT> #后端真实节点主机的权重等设置,主要,后端有几台这里就要设置几个
{
weight 1 #给每台的权重,0表示失效(不知给他转发请求知道他恢复正常),默认是1
inhibit_on_failure #表示在节点失败后,把他权重设置成0,而不是冲IPVS中删除
notify_up <STRING> | <QUOTED-STRING> #检查服务器正常(UP)后,要执行的脚本
notify_down <STRING> | <QUOTED-STRING> #检查服务器失败(down)后,要执行的脚本
HTTP_GET #健康检查方式
{
url { #要坚持的URL,能够有多个
path / #具体路径
digest <STRING>
status_code 200 #返回状态码
}
connect_port 80 #监控检查的端口
bindto <IPADD> #健康检查的IP地址
connect_timeout 3 #链接超时时间
nb_get_retry 3 #重连次数
delay_before_retry 2 #重连间隔
} # END OF HTTP_GET|SSL_GET
#下面是经常使用的健康检查方式,健康检查方式一共有HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK这些
#TCP方式
TCP_CHECK {
connect_port 80
bindto 192.168.1.1
connect_timeout 4
} # TCP_CHECK
# SMTP方式,这个能够用来给邮件服务器作集群
SMTP_CHECK
host {
connect_ip <IP ADDRESS>
connect_port <PORT> #默认检查25端口
14 KEEPALIVED
bindto <IP ADDRESS>
}
connect_timeout <INTEGER>
retry <INTEGER>
delay_before_retry <INTEGER>
# "smtp HELO"ž|·-ëê§Œà"
helo_name <STRING>|<QUOTED-STRING>
} #SMTP_CHECK
#MISC方式,这个能够用来检查不少服务器只须要本身会些脚本便可
MISC_CHECK
{
misc_path <STRING>|<QUOTED-STRING> #外部程序或脚本
misc_timeout <INT> #脚本或程序执行超时时间
misc_dynamic #这个就很好用了,能够很是精确的来调整权重,是后端天天服务器的压力都能均衡调配,这个主要是经过执行的程序或脚本返回的状态代码来动态调整weight值,使权重根据真实的后端压力来适当调整,不过这须要有过硬的脚本功夫才行哦
#返回0:健康检查没问题,不修改权重
#返回1:健康检查失败,权重设置为0
#返回2-255:健康检查没问题,可是权重却要根据返回代码修改成返回码-2,例如若是程序或脚本执行后返回的代码为200,#那么权重这回被修改成 200-2
}
} # Realserver
} # Virtual Server
配置文件到此就讲完了,下面是一份未加备注的完整配置文件
复制代码
- global_defs
- {
- notification_email
- {
- admin@example.com
- }
- notification_email_from admin@example.com
- smtp_server 127.0.0.1
- stmp_connect_timeout 30
- router_id node1
- }
- notification_email
- {
- admin@example.com
- admin@ywlm.net
- }
- static_ipaddress
- {
- 192.168.1.1/24 brd + dev eth0 scope global
- 192.168.1.2/24 brd + dev eth1 scope global
- }
- static_routes
- {
- src $SRC_IP to $DST_IP dev $SRC_DEVICE
- src $SRC_IP to $DST_IP via $GW dev $SRC_DEVICE
- }
- vrrp_sync_group VG_1 {
- group {
- http
- mysql
- }
- 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
- }
- group {
- http
- mysql
- }
- vrrp_script check_running {
- script "/usr/local/bin/check_running"
- interval 10
- weight 10
- }
- vrrp_instance http {
- 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
- }
- virtual_routes {
- # src <IPADDR> [to] <IPADDR>/<MASK> via|gw <IPADDR> dev <STRING> scope <SCOPE> tab
- src 192.168.100.1 to 192.168.109.0/24 via 192.168.200.254 dev eth1
- 192.168.110.0/24 via 192.168.200.254 dev eth1
- 192.168.111.0/24 dev eth2
- 192.168.112.0/24 via 192.168.100.254
- }
- track_script {
- check_running weight 20
- }
- nopreempt
- preemtp_delay 300
- debug
- }
- virtual_server_group <STRING> {
- # VIP port
- < IPADDR> <PORT>
- < IPADDR> <PORT>
- fwmark <INT>
- }
- virtual_server 192.168.1.2 80 {
- delay_loop 3
- lb_algo rr|wrr|lc|wlc|lblc|sh|dh
- lb_kind NAT|DR|TUN
- persistence_timeout 120
- persistence_granularity <NETMASK>
- protocol TCP
- ha_suspend
- virtualhost <string>
- sorry_server <IPADDR> <PORT>
- real_server <IPADDR> <PORT>
- {
- weight 1
- inhibit_on_failure
- notify_up <STRING> | <QUOTED-STRING>
- notify_down <STRING> | <QUOTED-STRING>
- #HTTP_GET方式
- HTTP_GET | SSL_GET
- {
- url {
- path /
- digest <STRING>
- status_code 200
- }
- connect_port 80
- bindto <IPADD>
- connect_timeout 3
- nb_get_retry 3
- delay_before_retry 2
- }
- }
- }
这里咱们仅仅只利用Keepalive作双机热备,也就是保证服务器的高可用性,其余的不用管。可能您会说这样在实际应用中不多会这样用,这您可就错了,Keepalived仅仅作双机热备的状况仍是有的,我就碰到过几回这样的案例,下面就我碰到的几个案例作个小结
一,Keepalived双机热备的应用场景
1,网站流量不高,压力不大,可是对服务器的可靠性要求极其高,例如实时在线OA系统,政府部门网站系统,医院实时报医系统,公安局在线报案系统,股市后台网站系统等等,他们的压力不是很大,可是对可靠性要求是很是高的
2,有钱没地方花的,典型的政府企业,公办学校等等
二,Keepalived双机热备的特性以及优缺点
特性:
1,至少须要两台服务器,其中一台为master始终提供服务,另一台做为backup始终处于空闲状态,只有在主服务器挂掉的时候他就来帮忙了,这是典型的双击热备
2,能根据需求判断服务是否可用,在不可用的时候要即便切换
优缺点:
优势:数据同步很是简单,不像负载均衡对数据一致性要求很是高,实现起来相对复杂维护也颇为不便,双机热备用rsync就能够实现了操做和维护很是简单
缺点:服务器有点浪费,始终有一台处于空闲状态
三,Keepalived双机热备的配置
首先画个双机热备拓扑图吧:
这里我只写最终实现的配置,至于Keepalived的理论知识请参考《Keepalived原理与实战精讲》
1,本例经过Keepalived来实现两台LNMP(也就是linux+nginx+mysql+php)架构服务器的双机热备
LNMP的配置请参考:《Lnmp配置精讲初版》
2,Keepalived配置双机安装配置
1》Keepalived安装
keepalived官方地址:http://www.keepalived.org/download.html,你们能够到这里下载最新版本的keepalived
操做系统:centos 5.5 32bit
系统安装:最小化安装,也就是去掉全部组件
环境配置:安装make 和 gcc openssl openssl-devel等等
预编译后出现:
这里注意哦,我上面是指通用的安装方法,若是你没有用到LVS能够把lvs去掉即
./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.18-238.19.1.el5-i686/ --disable-lvs-syncd --disable-lvs
但这个没有影响,就按照个人来配置吧,不过若是你要是集成了LVS,那么就不可加这两个参数了哦
整理管理文件:
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
创建配置文件目录(注意:keepalived的配置文件默认在/etc/keepalived/目录)
mkdir -p /etc/etc/keepalived/
两台服务器(两个节点)都这样安装便可
2》配置
节点A配置以下:
vi /etc/keepalived/keepalived.conf
节点B配置以下:
vi /etc/keepalived/keepalived.conf
四,启动调试
在节点A上启动
/usr/local/keepalived/sbin/keepalived
启动日志:
Sep 8 18:26:02 centosa Keepalived_vrrp: Registering Kernel netlink reflector
Sep 8 18:26:02 centosa Keepalived_vrrp: Registering Kernel netlink command channel
Sep 8 18:26:02 centosa Keepalived_vrrp: Registering gratutious ARP shared channel
Sep 8 18:26:02 centosa Keepalived_vrrp: Opening file '/etc/keepalived/keepalived.conf'.
Sep 8 18:26:02 centosa Keepalived_vrrp: Configuration is using : 36076 Bytes
Sep 8 18:26:02 centosa Keepalived_vrrp: Using LinkWatch kernel netlink reflector...
Sep 8 18:26:02 centosa Keepalived: Starting VRRP child process, pid=5606
Sep 8 18:26:07 centosa Keepalived_vrrp: VRRP_Instance(lnmp) Transition to MASTER STATE
Sep 8 18:26:12 centosa Keepalived_vrrp: VRRP_Instance(lnmp) Entering MASTER STATE
Sep 8 18:26:12 centosa avahi-daemon[2528]: Registering new address record for 192.168.17.200 on eth0.
在节点B上启动
/usr/local/keepalived/sbin/keepalived
开机自动启动
echo /usr/local/keepalived/sbin/keepalived >> /etc/rc.local
启动日志:
Sep 8 18:30:02 centosb Keepalived: Starting Keepalived v1.2.2 (09/08,2011)
Sep 8 18:30:02 centosb Keepalived: Starting Healthcheck child process, pid=5837
Sep 8 18:30:02 centosb Keepalived_vrrp: Registering Kernel netlink reflector
Sep 8 18:30:02 centosb Keepalived_vrrp: Registering Kernel netlink command channel
Sep 8 18:30:02 centosb Keepalived_vrrp: Registering gratutious ARP shared channel
Sep 8 18:30:02 centosb Keepalived: Starting VRRP child process, pid=5839
Sep 8 18:30:02 centosb kernel: IPVS: Registered protocols (TCP, UDP, AH, ESP)
Sep 8 18:30:02 centosb kernel: IPVS: Connection hash table configured (size=4096, memory=32Kbytes)
Sep 8 18:30:02 centosb kernel: IPVS: ipvs loaded.
Sep 8 18:30:02 centosb Keepalived_healthcheckers: Registering Kernel netlink reflector
Sep 8 18:30:02 centosb Keepalived_healthcheckers: Registering Kernel netlink command channel
Sep 8 18:30:02 centosb Keepalived_healthcheckers: Opening file '/etc/keepalived/keepalived.conf'.
Sep 8 18:30:02 centosb Keepalived_vrrp: Opening file '/etc/keepalived/keepalived.conf'.
Sep 8 18:30:02 centosb Keepalived_vrrp: Configuration is using : 36252 Bytes
Sep 8 18:30:02 centosb Keepalived_vrrp: Using LinkWatch kernel netlink reflector...
Sep 8 18:30:02 centosb Keepalived_healthcheckers: Configuration is using : 6271 Bytes
Sep 8 18:30:02 centosb Keepalived_healthcheckers: Using LinkWatch kernel netlink reflector...
Sep 8 18:30:02 centosb Keepalived_vrrp: VRRP_Instance(lnmp) Entering BACKUP STATE
从日志能够看出,启动都没有问题,而且安装我给的优先级完成了竞选,各自成就了各自的状态
关闭节点A的网卡测试切换是否正常
ifdown eth0
观察节点B的日志:
Sep 8 18:32:55 centosb Keepalived_vrrp: VRRP_Instance(lnmp) Transition to MASTER STATE
Sep 8 18:33:00 centosb Keepalived_vrrp: VRRP_Instance(lnmp) Entering MASTER STATE
Sep 8 18:33:00 centosb avahi-daemon[2531]: Registering new address record for 192.168.17.200 on eth0.
启动节点A的网卡测试切换是否正常
ifup eth0
观察节点B的日志:
Sep 8 18:33:31 centosb Keepalived_vrrp: VRRP_Instance(lnmp) Received higher prio advert
Sep 8 18:33:31 centosb Keepalived_vrrp: VRRP_Instance(lnmp) Entering BACKUP STATE
Sep 8 18:33:31 centosb avahi-daemon[2531]: Withdrawing address record for 192.168.17.200 on eth0.
Received higher prio advert:表示接收到更高优先级的公告(advert公告的意思)
Withdrawing:撤回的意思,能够看出切换过程一目了然
OK,到这里咱们的安装部分完成,下面咱们来看看如何监控服务吧,咱们这里仅仅是监控了网络故障和keepalived自己进程,在网络或者keepalived进程出现问题的时候会切换,可是个人节点A里面还有不少服务呢,例如nginx,PHP,mysql进程出问题或高负载的时候相应过慢怎么办,怎么切换的呢,这时就要用到脚本了,下面咱们来看看keepalived是如何控制脚原本实现对服务器的监控和切换的
写个脚原本实时监控三个服务,如有一个出现问题遍切换mkdir /root/shell/
cd /root/shell
vi keepcheck.sh
注意,用/etc/init.d/keepalived start若是起不来,能够用/usr/local/keepalived/sbin/keepalived二进制文件直接执行启动便可
启动脚本:
节点B也用这个脚本
写入/etc/rc.local开机自动启动