使用keepalived做High Available(HA)

 
 
------------------------------------------------20190818记录,并非一定全面,暂未特别深入原理层,但当前理解应该也不会存在较大误差---------------------
 
keepalived可以做的事情:
 
1、High Available(HA):即服务的高可用功能,此处Keepalived在高可用HA上所使用到的方式,即为故障转移,假设此时存在,IP1号服务器,和IP2号服务器,他们分别拥有两个IP段(这不可置疑),但当IP1挂掉的时候,如果将用户还在访问IP1的时候,动态将服务切换到IP2的服务器呢?这就是Keepalived在HA上面所做的事情,即故障转移;
 
a):keepalived的做法是:在对应的IP1的服务器上,部署一套对应的keepalived,并虚拟出一个对应的IP地址;在对应的/etc/keepalived/keepalived.conf 下的 vrrp_instance实例块下,定义对应的virtual_ipaddress,当在当前的IP1服务上指定了当前虚拟IP所要绑定的网卡名称等一系列信息后,则当前的IP1服务器上则虚拟出了一个新的IP地址,及keepalived所设置的虚拟IP;
 
此时在对应的 IP2 服务器上,也是部署一套相同的 keepalived,并将上述的配置方式,同步更改到 IP2 机器上,不同的是,此时需要在对应的vrrp_instance实例下,标明当前keepalived的虚拟IP实例,state=BACKUP,即备用IP服务;并且需保证各个服务,IP1,也好,IP2,或者IP3服务也罢,都必须保证,在对应的vrrp_instance配置的实例下,virtual_router_id 必须相同,此处的route_id表示路由ID,及当前局域网内的唯一路由ID(心跳广播其它服务段使用);
 
看到这里,相信已经大概知晓了keepalived所做了事情了吧;此时IP1服务器上,进行keepalived的启动:service keepalived start,则此时再通过 ip addr,即可查看到此时在对应的eth0网卡上,inet上多出了一个新的虚拟IP,及当前keepalived所配置的虚拟IP;然后再切换到,IP2服务上,此时启动 keepalived,然后再通过 ip addr上查看,则会发现,当前IP2的服务器上,并没有生成新的虚拟IP(如果生成,则说明配置文件配置错误;主节点和备节点同时争用虚拟IP资源,这个现象叫做“裂脑”);
 
IP1和IP2的服务端,都同时启动了keepalived后,此时主节点和备用节点,则实时进行广播通讯,一旦主节点IP1的keepalived挂掉,则此时备用节点的IP2则无法接收到心跳信息,此时备用节点IP2将会调用自身接管程序,接管主节点的IP资源,;直接在服务上的体现则是:通过交换机请求的服务,则将会全部映射到IP2的服务机器上;
 
现象:
1、在IP1和IP2服务器上都启动了keepalive后,此时通过 ip addr命令,可以观察到IP1上所指定的网卡eht0,新增了一个虚拟的IP地址,而IP2服务端的指定网卡处,则并没有新增对应的虚拟IP,如下所示:
 
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:7b:43:41 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.5/20 brd 172.17.15.255 scope global eth0
       valid_lft forever preferred_lft forever
                                                此处的 192.168.200.16 即为keepalived中所配置的虚拟IP,可以看到当前的虚拟IP是挂载到了对应的eth0网卡上,
    inet 192.168.200.16/32 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe7b:4341/64 scope link
       valid_lft forever preferred_lft forever
那么当我们在对应的IP1服务器上,service keepalived stop,停止掉当前IP1服务器上所对应的keepalived服务时;此时再切换到IP2的服务器上,使用 ip addr命令,可以看到,当前IP2的服务器eth0网卡上,自动挂载了当前的192.168.200.16虚拟IP;那么当我们在IP1服务上,重新service keepalived start,启动了keepalived服务时,此时主节点IP1则会自动抢回对应的虚拟IPVIP,而此时的IP2服务器,则不再具备VIP虚拟IP,重新作为备用服务器而存在;
 
keepalived为什么可以实现这个功能呢?这个。。好像就是因为它是基于网络的,3,4,7层来实现的交换机制软件,并且故障转移 是通过VRRP协议协议来进行的实现,所以,keepalived的虚拟IP又有一个别名叫做,VIP;
而至于,keepalived当前是如何基于3,4,7层网络而实现的交换机制以及VRRP协议的实现等,当前还暂未深究;
 
keepalived的安装方式:
1、wget下载对应的源码包,然后进行编译安装,(LZ自身在进行编译的时候,出现了fatal error: linux/mpls_iptunnel.h: No such file or directory的异常;未解决,直接使用YUM进行了安装
源码包的编译方式,可参考如下链接: https://www.cnblogs.com/mikeguan/p/6506983.html
尽管最终没有使用源码包的方式进行安装,但推荐还是看一下上述的链接,可以更加清晰了解,/etc/keepalived/keepalived.conf 配置的来源,
2、使用yum直接安装:yum install keepalived
3、可以使用 sysctmctl enable keepalived 设置当前keepalived为自启动
4、常用的keepalived命令:
shell> chkconfig keepalived on
shell> service keepalived start #启动服务
shell> service keepalived stop #停止服务
shell> service keepalived restart #重启服务
 
可以使用journalctl 查看服务是否正常启动
journalctl -xe
 
#/etc/init.d/keepalived restart -- 启动 keepalived
 
#tail -fn 100 /var/log/messages -- 查看 keepalived 状态日志
 
 
 
 
原文地址:https://www.cnblogs.com/zh94/p/11923022.html