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 A、Router B和Router C中优先级最高的那台路由器作为Master路由器,比如A,承担网关的功能。局域网内的服务 只知道这台主master路由器A的存在,将自己缺省路由下一跳地址设置为该路由的ip地址10.100.10.1, 其余两台路由器作为Backup路由器。当master路由器出故障后, backup路由器会根据优先级重新选举出新的master路由器承担网关功能。Master路由器周期性地发送VRRP报文, 在虚拟路由器中公布其配置信息(优先级等)和工作状况。Backup路由器通过接收到VRRP报文的情况来判断Master路由器是否工作工常。

而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 {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
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的地址。

Keepalived 配置高可用的更多相关文章

  1. 集群相关、用keepalived配置高可用集群

    1.集群相关 2.keepalived相关 3.用keepalived配置高可用集群 安装:yum install keepalived -y   高可用,主要是针对于服务器硬件或服务器上的应用服务而 ...

  2. Linux centosVMware 集群介绍、keepalived介绍、用keepalived配置高可用集群

    一.集群介绍 根据功能划分为两大类:高可用和负载均衡 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 实现高可用的开源软件有:heartbeat. ...

  3. MySQL+Keepalived配置高可用

    服务器环境: 主mysql:192.168.1.163 从mysql:192.168.1.126 VIP:192.168.1.50 一.mysql配置主从同步 1.配置主mysql服务器 vim /e ...

  4. 集群介绍 keepalived介绍 用keepalived配置高可用集群

    集群介绍 • 根据功能划分为两大类:高可用和负载均衡 • 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 • 实现高可用的开源软件有:heartb ...

  5. Keepalived 配置高可用集群

    一.Keepalived 简介 (1) Keepalived 能实现高可用也能实现负载均衡,Keepalived 是通过 VRRP 协议 ( Virtual Router Redundancy Pro ...

  6. centos7 keepalived 配置高可用

    ! Configuration File for keepalived global_defs { notification_email { xaioqiang.he@xinboxinmo.com } ...

  7. Linux集群介绍、keepalived介绍及配置高可用集群

    7月3日任务 18.1 集群介绍18.2 keepalived介绍18.3/18.4/18.5 用keepalived配置高可用集群扩展heartbeat和keepalived比较http://blo ...

  8. Nginx keepalived实现高可用负载均衡详细配置步骤

    Keepalived是一个免费开源的,用C编写的类似于layer3, 4 & 7交换机制软件,具备我们平时说的第3层.第4层和第7层交换机的功能.主要提供loadbalancing(负载均衡) ...

  9. centos安装与配置keepalived+nginx高可用

    一.安装启动keepalived 1.下载keepalived 在centos系统中,用wget下载最新版本: mkdir tool cd tool wget https://www.keepaliv ...

随机推荐

  1. typeScript入门(三)接口

      接口我感觉是很常用的一块 定义标准: 接口的作用:在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范,在程序设计里面,接口起到一种限制和规范的作用.接口定义了某一批类所需要遵守的规 ...

  2. PHP连接MySQL数据库的几种方式

    PHP 5 及以上版本建议使用以下方式连接 MySQL : MySQLi :MySQLi 只针对 MySQL 数据库,MySQLi 还提供了 API 接口. PDO (PHP Data Objects ...

  3. C++基础--字符串倒序输出

    (一)用基本的数组实现 #include "stdafx.h" #include <stdio.h> #include <string.h> int mai ...

  4. 使用notebook 笔记(1)

    1 去开启远程访问notebook 注意事项 安装好Ipython notebook 之后,  开启服务的方式如下: ipython notebook --profile=nbserver --ip= ...

  5. 【Linux】Linux入门及常见基本操作命令详解

    本文基于 Red Hat Enterprise Linux 6 一.Linux 入门体验 1.1 root用户登陆 1.2 图形化与纯字符模式切换 init 5 - 图形模式 init 3 - 纯字符 ...

  6. Linux C -> symlink 和 readlink -> 符号链接

    Linux C -> symlink 和 readlink -> 符号链接 -------------------------------------------------------- ...

  7. 在Centos 7上安装Docker

    在Centos 7上安装Docker 1.docker介绍 docker是类似于vmware的虚拟化软件,可以开发.容纳.运行应用程序的平台,在容器中安全的隔离运行应用程序. 2.Docker引擎 D ...

  8. aws查看官方centos镜像imageid

    aws ec2 describe-images --owners aws-marketplace --filters Name=product-code,Values=aw0evgkw8e5c1q41 ...

  9. 开源监控zabbix的搭建

    yum-nginx-php-mysql 1.依赖安装 1.依赖 yum -y install pcre* openssl* 2.php rpm -Uvh https://mirror.webtatic ...

  10. February 25 2017 Week 8 Saturday

    Energy and persistence can conquer all things. 能量和毅力可以征服一切. I have the persistence, but it seems I a ...