码迷,mamicode.com
首页 > 其他好文 > 详细

Keepalived 配置高可用

时间:2018-06-15 17:51:26      阅读:1688      评论:0      收藏:0      [点我收藏+]

标签:lob   config   解决   broadcast   其他   meta   protoc   路由   etc   

 

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路由器是否工作工常。

技术分享图片

而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 配置高可用

标签:lob   config   解决   broadcast   其他   meta   protoc   路由   etc   

原文地址:https://www.cnblogs.com/zyp221314/p/9188285.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!