Keepalived 配置高可用

VRRP协议及Keepalived原理使用

  VRRP 协议即 Virtual Router Redundancy Protocol,虚拟路由器冗余协议, 为了解决局域网内默认网关单点失效的问题. 

 VRRP 将局域网内的一组路由器组成一个虚拟路由器组,每个路由器都有自己的局域网地址, 根据设置的优先级最高决定那个是master路由器, 

然后网关地址赋给该主路由器, 该主路由器定时发送VRRP报文向虚拟路由器组公布健康状况, 备份的路由器根据柏爱文判断Master路由器是否工作正常,从而决定是否要接替它. VRRP说白了就是实现IP地址漂移的,是一种容错协议。在下图中,Router A(10.100.10.1)Router B(10.100.10.2)Router C(10.100.10.3) 组成一个虚拟路由器。各虚拟路由器都有自己的IP地址。局域网内的主机将虚拟路由器设置为缺省网关。 Router ARouter BRouter C中优先级最高的那台路由器作为Master路由器,比如A,承担网关的功能。局域网内的服务 只知道这台主master路由器A的存在,将自己缺省路由下一跳地址设置为该路由的ip地址10.100.10.1, 其余两台路由器作为Backup路由器。当master路由器出故障后, backup路由器会根据优先级重新选举出新的master路由器承担网关功能。Master路由器周期性地发送VRRP报文, 在虚拟路由器中公布其配置信息(优先级等)和工作状况。Backup路由器通过接收到VRRP报文的情况来判断Master路由器是否工作工常。

image

而keepalived 使用的就是VRRP协议, 不过它作用在多台主机上, 而不是路由器组上. 比如我们现在准备搭建的配置: 主机: 192.168.0.7 从机: 192.168.0.8 vip虚拟主机: 192.168.0.12 访问的时候我们的地址都填 192.168.0.12, 由它决定目前绑定在那个网卡上就由那台机器进行服务, 如果刚好服务的这台机器挂了,它就会绑定到下一台正常的机器的网卡上去,由新机器处理请求,由此实现高可用和避免单点故障. |--- 13 web机 |---- 07转发(ng) ---- |--- 14 go程序 | |--- 15 php-cgi 请求 --> 12-| | |---- 08 (时刻待命取代07) 1)keepalived简介 keepalived使用的是VRRP协议方式。简单的说就是,Keepalived的目的是模拟路由器的高可用,Heartbeat或Corosync的目的是实现Service的高可用。 keepalived是模块化设计,不同模块负责不同的功能,下面是keepalived的组件 : @1. core 模块 是keepalived的核心,负责主进程的启动和维护,全局配置文件的加载解析等 。 @2. check模块 负责healthchecker(健康检查),包括了各种健康检查方式,以及对应的配置的解析包括LVS的配置解析 。 @3. vrrp模块 VRRPD子进程,VRRPD子进程就是来实现VRRP协议的 。 @4. libipfwc模块 iptables(ipchains)库,配置LVS会用到 。 @5. libipvs* 模块 配置LVS会用到 备注:keepalived和LVS完全是两码事,只不过他们各负其责相互配合而已。 keeplived 是检测机器的健康状况, 发现病体机器将其移除, lvs 是实现多台机器都均衡处理请求. 
keepalived 开始搭建
在主从机器上各自安装好keeepalived 
下载链接: http://www.keepalived.org/download.html 或者 wget http://www.keepalived.org/software/keepalived-2.0.2.tar.gz 然后解压进入目录执行安装三板斧 ./configure --prefix=/usr/local/keepalived && make && make install 
编辑配置文件
mkdir /etc/keepalived  -p           #新建配置目录
#复制默认配置到/etc/keepalived 目录去(别拼错,否则默认加载失败的,到时程序都起不来就只能用-f指定配置路径了)
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
 然后编辑配置文件 vim /usr/local/etc/keepalived/keepalived.conf 内容如下:(只保留这两节即可,其他的是lvs的配置的,暂时去掉) ! Configuration File for keepalived global_defs { notification_email { [email protected] [email protected] [email protected] } notification_email_from [email protected] smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id NodeA #节点名,唯一,08可以叫NodeB #vrrp_strict #把这王八蛋注释掉,不然严格遵守vvrp协议,访问不了vip的 vrrp_skip_check_adv_addr vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_instance VI_1 { state MASTER #名字唯一,主机07填MASTER,从机08填BACKUP interface eth0 #网卡名,跟你机器对应上 virtual_router_id 51 #主从机器保持统一 priority 150 #设置主机的值大于从机即可 advert_int 1 authentication { auth_type PASS auth_pass 1111      #不动 } virtual_ipaddress { 192.168.0.12/24 #你要的虚拟ip的地址,自己填一个,别填已经使用的即可.(填不填子网号24看你,本人亲测有没有都ok,之所以填写是因为执行ip a 查看到eth0网卡上也有192.168.0.7/24 字样) } } 上面各自按照要求都配置好后执行启动: /usr/local/keepalived/sbin/keepalived -D  如果指定配置文件路径可以使用-f: /usr/local/keepalived/sbin/keepalived -D -f /tmp/keepalived.conf 

查看运行

@1.使用ip a 命令查看网卡绑定的详细信息, ifconfig只会显示默认的那个,不显示其他的绑定 [root@07 keepalived]# ip a eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:1c:42:dc:15:9a brd ff:ff:ff:ff:ff:ff inet 192.168.0.7/24 brd 192.168.0.255 scope global eth0 valid_lft forever preferred_lft forever inet 192.168.0.12/24 scope global secondary eth0 <--- 12也在这个网卡下 valid_lft forever preferred_lft forever inet6 fe80::21c:42ff:fedc:159a/64 scope link valid_lft forever preferred_lft forever @2. 两台主机的keepalived都检查运行后, 192.168.0.3 上(或局域网内的任意一台机器上)运行下 arp -an (扫描查看以太网内所有主机的mac信息) PS:不要在主从机上执行, 因为不完整,不会显示vip的信息的 ➜ ~ arp -an ? (192.168.0.1) at a4:56:2:92:c2:73 on en0 ifscope [ethernet] ? (192.168.0.7) at 0:1c:42:dc:15:9a on en0 ifscope [ethernet] ? (192.168.0.8) at 0:1c:42:c0:7a:40 on en0 ifscope [ethernet] ? (192.168.0.12) at 0:1c:42:dc:15:9a on en0 ifscope [ethernet] ? (224.0.0.251) at 1:0:5e:0:0:fb on en0 ifscope permanent [ethernet] ? (239.255.255.250) at 1:0:5e:7f:ff:fa on en0 ifscope permanent [ethernet] 可看到 12机器后面的mac地址跟07的是一样的, 这说明192.168.0.12这个vip也绑定到跟07一个共同网卡上了. 然后在07上查看日志, keepalived 日志在 /var/log/message 里 [root@07 keepalived]# tail -f /var/log/messages Jun 15 16:28:20 07 Keepalived_vrrp[1716]: Sending gratuitous ARP on eth0 for 192.168.0.12 Jun 15 16:28:20 07 Keepalived_vrrp[1716]: Sending gratuitous ARP on eth0 for 192.168.0.12 Jun 15 16:28:20 07 Keepalived_vrrp[1716]: Sending gratuitous ARP on eth0 for 192.168.0.12 Jun 15 16:28:20 07 Keepalived_vrrp[1716]: Sending gratuitous ARP on eth0 for 192.168.0.12 由上提示意思是 各位以太网小伙伴们注意了 192.168.0.12 的mac地址在我的网卡上,你们来这找它啊! 如果都OK 了, 那么在以太网内任意机器上 ping 一下vip地址, 如果能ping通, 并且主从机也能ping通, 基本就没问题了. [root@08 keepalived]# ping 192.168.0.12 PING 192.168.0.12 (192.168.0.12) 56(84) bytes of data. 64 bytes from 192.168.0.12: icmp_seq=1 ttl=64 time=0.327 ms 64 bytes from 192.168.0.12: icmp_seq=2 ttl=64 time=0.577 ms 
运行测试
然后在主从机器上各自搭建ng+php访问, 
curl http://192.168.0.8/index.php 的输出内容为 "i am 08"; curl http://192.168.0.7/index.php 的输出内容为 "i am 07"; 都能访问的话, 用vip地址来访问, 因为现在vip绑定的是07的网卡,因此应该也输出"i am 07" curl http://192.168.0.12/index.php #输出 "i am 07" , 非常成功. 现在我把07机器关掉, 再其他机器上用arp -an 查看局域网内的mac信息 ➜ ~ arp -an ? (192.168.0.1) at a4:56:2:92:c2:73 on en0 ifscope [ethernet] ? (192.168.0.7) at 0:1c:42:dc:15:9a on en0 ifscope [ethernet] ? (192.168.0.8) at 0:1c:42:c0:7a:40 on en0 ifscope [ethernet] ? (192.168.0.12) at 0:1c:42:c0:7a:40 on en0 ifscope [ethernet] ? (224.0.0.251) at 1:0:5e:0:0:fb on en0 ifscope permanent [ethernet] ? (239.255.255.250) at 1:0:5e:7f:ff:fa on en0 ifscope permanent [ethernet] 对比下上面的,发现12地址的mac信息, 立马绑定成跟08的mac地址一样了, 说明现在它们共用网卡了,避免了单点故障. 再次访问 ➜ ~ curl http://192.168.0.12/index.php i am 08 ... vip成功转移到192.168.0.8这台机器上,于是keepalived成功了. 

--> PS: 一旦ping不通(dns的问题我不管)首先把看下是否去掉了配置文件里的 vrrp_strict [它表严格执行vvrp协议,还不行再把防火墙搞掉], 否则搞死你半天都不知咋回事.

在有“vrrp_strict”的时候,就会有下面的iptables规则:
[root@centos ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination 
DROP all -- 0.0.0.0/0 192.168.111.130 把这个选项去掉了之后,重新启动keepalived就完全没有了。 

附上即是通知以太网内vip更新mac信息的指令

说不定arp开启了缓存, 你ping不通的原因可能也是这个, 因此主动向局域网内的成员推送12这台新增vip的mac信息 arping -c 5 -U -I eth0 192.168.1.12 -c 表示要发多少个广播包。 -U 非请求模式,更新同网段设备上的arp缓存。 -I 通过哪个接口发送数据包,这个会使用到这个网卡的mac的地址。

猜你喜欢

转载自www.cnblogs.com/zyp221314/p/9188285.html