KeepAlive

keepalived

最初是为LVS负载均衡设计的,用来管理并监控LVS集群中各个节点的状态,后加入了实现高可用的VRRP功能

最开始keepalived可以检测真实节点故障,监控集群系统中各个服务节点的运行状态,将其不可用的节点剔除出去,后来引入vrrp协议,可两台以上的调度器或者路由并联在一起,形成主备模式,当一台调度器或者路由出现问题,优先级高的备用调度器或者路由立刻接替工作,这样就实现高可用

功能

管理LVS负载均衡软件

实现LVS集群节点的健康检查中

作为系统网络服务的高可用性(failover)

keepalived两种模式

抢占模式 是指优先级高的keepalived宕机恢复,会再次接收到漂移ip,master backup之后抢占模式

非抢占模式 是指优先级高的keepalived宕机恢复,不会接收到漂移ip,两个backup才能实现非抢占模式

高可用

高可用:两台业务系统启动着相同的服务,如果有一台故障,另一台自动接管,我们将将这个称之为高可用

高可用原理

Keepalived高可用服务对之间的故障切换转移,是通过 VRRP (Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)来实现的。

在 Keepalived服务正常工作时,主 Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活看,当主 Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的 IP资源及服务。而当主 Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。

VRRP ,全 称 Virtual Router Redundancy Protocol ,中文名为虚拟路由冗余协议 ,VRRP的出现就是为了解决静态踣甶的单点故障问题,VRRP是通过一种竞选机制来将路由的任务交给某台VRRP路由器的

Keepalived高可用之间是通过 VRRP进行通信的, VRRP是通过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。

在 Keepalived服务对之间,只有作为主的服务器会一直发送 VRRP广播包,告诉备它还活着,此时备不会抢占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快可以小于1秒

配置文件:
vim /etc/keepalived/keepalived.conf 
global_defs {
   notification_email {
     acassen@firewall.loc                                  #当keepalived出现节点故障时  给管理员发送消息
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc   #发件人信息
   smtp_server 192.168.200.1                               #邮件服务器的ip
   smtp_connect_timeout 30                                 #超时时间
   router_id LVS_DEVEL                                     #节点标识
}
vrrp_instance VI_1 {                                       #vrrp协议组的名称,一个协议组对应一个名称
    state MASTER                                           #节点状态,主/备
    nopreempt                                              #不抢占模式
    interface ens33                                        #用来接收漂移ip的网卡
    virtual_router_id 51                                   #server_id,一个组的id必须一致
    priority 100                                           #节点的优先级,1-255,默认100
    advert_int 1                                           #发送vrrp通告间隔的时间,心跳时间1s
    authentication {                                       #认证使用
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {                                    #虚拟ip的地址
        192.168.2.200 
    }   
}

virtual_server 192.168.2.200 80 {                          #lvs的配置 
    delay_loop 6                                           #健康检查间隔时间
    lb_algo rr                                             #轮询
    lb_kind DR                                             #使用的lvs模式
    nat_mask 255.255.255.0                                 #子网掩码
    persistence_timeout 0                                  #会话保持时间
    protocol TCP                                           #使用tcp连接
    real_server 192.168.2.60 80 {                          #真实的主机
        weight 1                                           #权重
        connect_port 80                                    #连接的端口
        connect_timeout 3                                  #超时时间 
        nb_get_retry 3                                     #尝试连接的次数
        delay_before_retry 3                               #每隔多久建立连接
        }
    real_server 192.168.2.70 80 {
        weight 1
        connect_port 80
        connect_timeout 3
        nb_get_retry 3
        delay_before_retry 3
        }
 }
#配置文件到此截止,后面的内容是案例,可以全部删除,注意花括号
实验:
#环境:
keepalived一:主5.5
keepalived二:备5.6
web一:5.7,httpd1
web二:5.8,httpd2

#设置两个web端的虚拟ip
cp  /etc/sysconfig/network-scripts/ifcfg-lo  /etc/sysconfig/network-scripts/ifcfg-lo:0                                                                     #复制本地回环网卡,ens33还要用,只能复制本地回环网卡,虚拟加:0
vim /etc/sysconfig/network-scripts/ifcfg-lo:0         
DEVICE=lo:0                                         #设备名加:0,代表虚拟IP地址
IPADDR=192.168.5.150                                #这里是虚拟IP地址
NETMASK=255.255.255.255                             #这是子网掩码,由于是本地回环网卡,所以掩码32
#重启两个网卡服务
systemctl restart network
ip a

#安装两个httpd,配置默认页面
yum -y install httpd
systemctl restart httpd
systemctl stop firewalld
setenforce 0
echo httpd1 > /var/www/html/index.html
echo httpd2 > /var/www/html/index.html
curl 192.168.5.7
httpd1
curl 192.168.5.8
httpd2
 
#编辑两个web端内核文件:当ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上,它们都会接收到ARP广播,势必会造成各服务器ARP通信的紊乱,造成前端的负载均衡器不应该的响应,让节点服务器不响应ARP广播,使其虚拟ip变成私有的ip地址,不发送任何的广播,不接受任何的请求
vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 2
#使其立即生效两台
sysctl -p
#使两台web端添加路由信息,让其接受得到VIP信息限制在本地
route add -host 192.168.5.150 dev lo:0
 
#两台负载均衡安装keepalived依赖关系
yum -y install popt-devel kernel-devel openssl-devel
 
#两台负载均衡上传源码包keepalived-1.2.13.tar.gz
tar -zxf keepalived-1.2.13.tar.gz
cd keepalived-1.2.13/
./configure --prefix=/ --with-kernel-dir=/usr/src/kernel && make && make install

#修改主负载5.7均衡配置文件(修改重要配置文件时先复制出来备用)
vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {                                #vrrp协议组的名称,一个协议组对应一个名称
    state MASTER                                    #节点状态
interface ens33                                     #用来接收漂移ip的网卡
  virtual_router_id 51                              #server_id,一个组的id必须一致
    priority 100                                    #节点的优先级,1-255,默认100
advert_int 1                                        #发送vrrp通告间隔的时间,心跳时间  1s
    authentication {                                #认证使用
        auth_type PASS    
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.5.150/24                            #虚拟ip的地址池
       #192.168.5.250
       #192.168.5.50
    }
}

virtual_server 192.168.5.150 80 {                   #lvs集群的配置,此ip为虚拟ip
    delay_loop 6                                    #健康检查间隔时间
    lb_algo rr                                      #轮询
    lb_kind DR                                      #使用的模式
    nat_mask 255.255.255.0                          #子网掩码
    persistence_timeout 0                           #会话保持时间
    protocol TCP                                    #使用tcp连接

    real_server 192.168.5.7 80 {                    #真实的主机
            weight 1                                  #权重
            connect_port 80                         #连接的端口
            connect_timeout 3                       #超时时间
            nb_get_retry 3                          #尝试连接的次数
            delay_before_retry 3                    #每隔多久建立连接
                                     }
    real_server 192.168.5.8 80 {                    #真实的主机
            weight 1
            connect_port 80                         #连接的端口
            connect_timeout 3                       #超时时间
            nb_get_retry 3                          #尝试连接的次数
            delay_before_retry 3                    #每隔多久建立连接
                                       }
                                          }
#把主负载的keepalive的配置文件远程复制到备负载上
scp /etc/keepalived/keepalived.conf root@192.168.5.6:/etc/keepalived/keepalived.conf
 
#修改备负载5.8的keepalive的配置文件
vim /etc/keepalived/keepalived.conf
state BACKUP                                       #修改类型
priority 99                                        #修改优先级
 
#两台负载设备启动服务
service keepalived  start                          #安装后第一次启动
Reloading systemd:                                         [  确定  ]
Starting keepalived (via systemctl):                       [  确定  ]

systemctl stop keepalived.service                  #停止
systemctl start keepalived.service                 #启动
#两台负载设备安装ipvsadm查看验证一下
yum -y install ipvsadm
 
#查看lvs集群
ipvsadm -ln   
 Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.5.150:80 rr
  -> 192.168.5.7:80               Masq    1      0          0         
  -> 192.168.5.8:80               Masq    1      0          0 
  
验证:
[root@localhost ~]# curl 192.168.5.150
httpd2
[root@localhost ~]# curl 192.168.5.150
httpd1

出现状况:
客户端ping虚拟IP可以ping通,ping其他服务端都可以ping通,直接访问web端也可以访问,但是访问虚拟ip无法访问,连接超时,而keepalive主从漂移正常,说明keepalive服务没有问题,在于keepalive和web间无法转发,在虚拟IP地址池增加子网掩码后
另外查询情况,可以看一看此文章:
https://blog.csdn.net/charthyf/article/details/81456872?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-81456872-blog-109356454.pc_relevant_multi_platform_whitelistv1&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-81456872-blog-109356454.pc_relevant_multi_platform_whitelistv1&utm_relevant_index=1

注:若是不成功,如果是拒绝连接,和找不到主机的路由,可以把相关的服务keepalive—httpd---network试着先全部停止服务,然后再启动服务,再次关闭一遍防火墙和selinux
若是还不成那么可以先把虚拟ip停止(虚拟ip文件改名),直接测试真实IP地址,以此检测是web服务端问题还是负载均衡端出现问题
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值