keepalived网上教程很多,通过yum install keepalived下载安装后,在/etc/keepalived/keepalived.conf默认配置很详细,很方便新手基于该配置修改成自己所想要的配置文件,相应keepalived配置教程很多,按照配置教程基于keepalived.conf修改很容易出现配置好的vip无法ping通,或者vip可ping通,但映射的端口无法访问。

vip无法ping通 
keepalived.conf中vip配置好后,通过ip addr可以看到vip已经顺利挂载,但是无法ping通,并且防火墙都已关闭,原因是keepalived.conf配置中默认vrrp_strict打开了,需要把它注释掉。重启keepalived即可ping通。
映射端口无法访问 
vip可ping通后,访问vip映射端口无法访问,直接访问real_server的ip和端口可访问。 
解决这个问题需要对lvs相关知识进行初步了解,详见《LVS手册》http://www.linuxidc.com/Linux/2016-03/129233.htm 
在keepalived.conf中对virtual_server配置有 
lb_kind可以设置为NAT、DR、TUN。这个选项直接关系到你做的 virtual_server和real_server能否进行正确映射。
NAT模式和路由器NAT模式类似,用于访问client和real_server在不同网段实现通信。如果你在一个局域网内做负载均衡选用NAT,那恭喜你,你肯定是无法访问。可以做个NAT模式的测试,需要在keepalived主机上配置双网卡,分别在两个不同网段中,如keepalived主机网卡对client地址为10.0.0.0/24,对real_server的地址为192.168.2.0/24。vip设置为10.0.0.164,real_server为192.168.2.67,可采用下面的keepalived.conf配置

vrrp_instance VI_1 {
     state MASTER
     interface ens37
     virtual_router_id 66
     priority 100
     advert_int 1
     authentication {
         auth_type PASS
         auth_pass 1111
     }
     virtual_ipaddress {
         10.0.0.164/24
     }
 }virtual_server 10.0.0.164 80 {
     delay_loop 6
     lb_algo rr
     lb_kind NAT
     protocol TCP
     real_server 192.168.2.67 80
    {
          weight 1
     }
 }


配置正确后在keepalived主机上执行systemctl restart keepalived.service。从client上执行curl 10.0.0.164发现还是无法访问。这是由于real_server在接收到请求包后找不到路由进行数据返回,此时需要将keepalived主机作为网关,在real_server上添加回程路由route add default gw 192.168.2.65。192.168.2.65即为keepalived主机。考虑keepalived主机一般双机,因此此处可以用keepalived主机的虚拟IP。 现在再执行curl 10.0.0.164就可以正常返回。

DR模式是在局域网内最简单的映射模式,原理可参见《LVS手册》。但只在keepalived主机上配置lb_kind DR是无法访问到real_server的,DR模式会将目标地址为虚拟IP地址原封不动的传给real_server。real_server发现这不是我的IP,因此会丢弃掉该包,所以这边得欺骗一下real_server,让他认为这是他的地址。做法很简单,在real_server的lo回环口上添加那个虚拟IP,这样real_server就会认为自己就是VIP这台服务器。切记在lo上设置,不要在真实网卡上设置,道理留给大家思考。

ifconfig lo:0 192.168.2.100 netmask 255.255.255.0 up

参考 
LVS+Keepalived使用总结 
https://www.linuxidc.com/Linux/2016-03/129232.htm  

解决:

[root@cache1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-lo:0
 DEVICE=lo:0
 MTU=1500
 ONBOOT=yes
 TYPE=Ethernet
 USERCTL=no
 ONBOOT=yes
 IPADDR=192.168.163.189
 NETMASK=255.255.255.255


 

然后重启网络。