LVS+keepalived 群集

Keepalived通过VRRP协议确保LVS服务的高可用性,当主服务器异常时,备份服务器接管虚拟IP继续服务。核心模块包括core(负责进程和配置)、vrrp(实现VRRP)和check(执行健康检查)。文章提供了部署LVS+Keepalived集群的步骤,包括配置主备服务器、设置VIP和健康检查,以及处理可能的脑裂现象。
摘要由CSDN通过智能技术生成

Keepalived及其工作原理

Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题

在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP,主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

Keepalived体系主要模块及其作用

keepalived体系架构中主要有三个模块,分别是core、check和vrrp

●core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
●vrrp模块:是来实现VRRP协议的。
●check模块:负责健康检查,常见的方式有端口检查及URL检查

部署LVS+Keepalived 高可用群集

主DR 服务器:192.168.126.22
备DR 服务器:192.168.126.23
Web 服务器1:192.168.126.24
Web 服务器2:192.168.126.25
vip:192.168.126.88
客户端:192.168.126.21

实验原理图

实验步骤

LVS 部署

1.配置负载调度器(主、备相同)

systemctl stop firewalld.service
setenforce 0

#安装keepalived
[root@zy2 ~]# yum -y install keepalived  ipvsadm   #安装keepalived 和ipvsadm

[root@zy2 ~]# modprobe ip_vs    #加载ip_vs模块
[root@zy2 ~]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn

[root@zy2 ~]# cd /etc/keepalived/
[root@zy2 keepalived]# ls
keepalived.conf
[root@zy2 keepalived]# cp keepalived.conf keepalived.conf.bak #备份

[root@zy2 keepalived]# vim keepalived.conf   #修改配置文件
! 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 127.0.0.1    #指向本地
   smtp_connect_timeout 30
   router_id LVS_01       #指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02   下面的vrrp_strict等四行内容删除
}

vrrp_instance VI_1 {
    state MASTER        #设为主   zy3设为BACKUP
    interface ens33           #物理网卡ens33
    virtual_router_id 51      #虚拟路由id 要和BACKUP一致
    priority 100              #优先级100   BACKUP设为90小于100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111       #密码可以默认
    }
    virtual_ipaddress {
        192.168.126.88         #VIP
    }
}
virtual_server 192.168.126.88 80 {   #设置VIP的策略
    delay_loop 6
    lb_algo rr              #算法轮询
    lb_kind DR               #调度器DR模式
    persistence_timeout 0    #不进行连接超时等待
    protocol TCP

    real_server 192.168.126.24 80 {      #添加节点服务器1的RIP
        weight 1
        TCP_CHECK {                       #添加健康检查方式
            connect_port 80              #添加检查的目标端口
            connect_timeout 3             #添加连接超时(秒)
            nb_get_retry 3                #添加重试次数
            delay_before_retry 3          #添加重试间隔
        }
    }
    real_server 192.168.126.25 80 {       #添加节点服务器2的RIP
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}                                         #下面的内容不用可以删除

[root@zy2 keepalived]# systemctl start keepalived
[root@zy2 keepalived]# ip addr   #查看虚拟网卡vip

 

 而BACKUP的虚拟网卡VIP则没有起

启动 ipvsadm 服务

[root@zy2 ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@zy2 ~]# systemctl start ipvsadm   #启动 ipvsadm 服务
[root@zy2 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.126.88:80 rr
  -> 192.168.126.24:80            Route   1      0          0         
  -> 192.168.126.25:80            Route   1      0          0

 调整内核proc 响应参数,关闭Linux 内核的重定向参数响应

[root@zy2 ~]# vim /etc/sysctl.conf
#末行添加  关闭转发和icmp重定向
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

[root@zy2 ~]# sysctl -p    #加载配置

2.配置节点服务器(两台节点服务器配置一样)

[root@zy4 ~]# systemctl stop firewalld
[root@zy4 ~]# setenforce 0
[root@zy4 ~]# yum -y install httpd
[root@zy4 ~]# systemctl start httpd


[root@zy4 ~]# echo 'this is test1 web!' > /var/www/html/index.html
#节点服务器2中写入test2以作区分

[root@zy4 ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0  #配置lo接口
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.126.88
NETMASK=255.255.255.255

[root@zy4 network-scripts]# ifup lo:0
[root@zy4 network-scripts]# ifconfig lo:0
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.126.88  netmask 255.255.255.255
        loop  txqueuelen 1  (Local Loopback)

[root@zy4 network-scripts]# route add -host 192.168.80.188 dev lo:0

修改内核参数

[root@zy4 network-scripts]# vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1   
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

[root@zy4 network-scripts]# sysctl -p

测试:客户端去访问VIP192.168.126.88

 此时已实现负载均衡,然后关闭主调度器的keepalived,查看是否还是能正常访问

客户端再次访问 

总结:

Keepalived通过什么判断哪台主机为主服务器,通过什么方式配置浮动IP?

Keepalived首先做初始化先检查state状态,master为主服务器,backup为备服务器。
然后再对比所有服务器的优先级priority,谁的优先级高谁是最终的主服务器。
优先级高的服务器会通过ip命令为自己的电脑配置一个提前定义好的浮动IP地址。

keepalived的抢占与非抢占模式

抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP。
非抢占模式俩节点state必须为backup,且必须配置nopreempt
注意:这样配置后,我们要注意启动服务的顺序,优先启动的获取master权限,与优先级没有关系了

keepalived的脑裂现象

主备调度器都出现VIP(因为主备服务器之间的网络中断导致备服务器接收不到主服务器发送的vrrp通告报文。)

解决方案:

  1. 主备服务器之间使用双链路通信
  2. 通过脚本来实时监控主备的网络状态,然后再根据脚本逻辑采取措施(关掉主服务器的keepalived服务)
  3. 通过第三方监控系统来实时监控主备服务器及网络状态,然后再根据情况采取措施(关掉主服务器的keepalived服务)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值