Keepalived+LVS

Stella981
• 阅读 583

LVS架构中,不管是NAT模式还是DR模式,当后端的RS宕掉后,调度器依然会把请求转发到宕掉的RS上,这样的结果并不是我们想要的。其实,keepalived就可以解决问题,它不仅仅有高可用的功能,还有负载均衡。也就是说keepalived已经嵌入了LVS功能,完整的keepalived+LVS架构需要有两台调度器实现高可用,提供调度器的只需要一台,另外一台作为备用。LVS架构模式了解:【Linux】虚拟服务器之LVS
准备:
1,四台服务器或虚拟机:
主keepalived(调度器):192.168.243.133 (keepalived和ipvsadm)
从keepalived(调度器):192.168.243.134 (keepalived和ipvsadm)

  • 真实服务器rs1:192.168.243.135 (nginx)
  • 真实服务器rs2:192.168.243.136 (nginx)
  • VIP:192.168.243.100

2,keepalived的安装:【keepalived】CentOS7.0下安装教程
3,时间同步+防火墙设置+SELinux设置:【Linux】时间同步设置+防火墙设置+SELinux设置
4,安装ipvsadm,这是实现LVS的核心工具,一条命令即可:

yum install -y ipvsadm

5,真实服务器安装Nginx:【Nginx】Nginx简介及在CentOS7.0下安装教程
进入正题:
1,编辑keepalived的配置文件:

vi /usr/local/keepalived-1.3.4/etc/keepalived/keepalived.conf

这是配置文件里面的一些内容:

vrrp_instance VI_1 {
   #备用服务器上为 BACKUP
   state MASTER
  #绑定vip的网卡为ens33,根据自己的服务器来设置
    interface ens33
    virtual_router_id 51
    #备用服务器上为90
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.243.100
    }
}
virtual_server 192.168.243.100 80 {
    #(每隔10秒查询realserver状态)
    delay_loop 10
    #(lvs 算法)
    lb_algo rr
    #(DR模式)
    lb_kind DR
    #(同一IP的连接60秒内被分配到同一台realserver)
    persistence_timeout 60
    #(用TCP协议检查realserver状态)
    protocol TCP
    
    #真实服务器(nginx) 
    real_server 192.168.243.135 80 {
        #(权重)
        weight 100
        TCP_CHECK {
        #(10秒无响应超时)
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    
    #真实服务器(nginx) 
    real_server 192.168.243.136 80 {
        weight 100
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}

2,这里在keepalived的配置文件中定义的LVS模式为DR模式,还需要在两台rs上执行lvs_dr_rs.sh脚本

vi /usr/local/sbin/lvs_dr_rs.sh

将下面内容可粘贴至该脚本文件中:

#/bin/bash
vip=192.168.243.100
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

3,执行:sh /usr/local/sbin/lvs_dr_rs.sh
4,在两台真实服务器上面执行完毕之后,执行ip addr就能看到两台服务器的lo都绑定好了虚拟ip,如图:
Keepalived+LVS
注意:服务器重启之后绑定的这个虚拟ip就没有了,需要再执行一下脚本,所以可以把对这个脚本的执行放到开机自启中。

执行命令:vi /etc/rc.d/rc.local
将以下内容添加至该文件中:sh /usr/local/sbin/lvs_dr_rs.sh
保存退出,然后添加执行权限:chmod +x rc.local

之后,在133上启动keepalived服务:systemctl start keepalived
执行ip addr,可以看到在ens33上面绑定的虚拟ip,如图:
Keepalived+LVS
然后可以在调度器133上执行命令ipvsadm -ln查看连接数,如图:
Keepalived+LVS
当我把135关掉之后,就只有一台在连接了
Keepalived+LVS
高可用故障切换模式,这个功能实现的有些难度,钻研了好几天才出来,主要是因为这里面的逻辑不是太好理清楚。每次开4个虚拟机做实验,CPU都飙到87%也是很酸爽,很害怕下一秒笔记本就崩掉~
最后上一张,根据我的理解,画的逻辑图:
Keepalived+LVS
感谢您的阅读~

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Keepalived高可用、Keepalived+LVS高可用调度器
Keepalived高可用环境准备:准备三台RHEL7虚拟机,2台做Web服务器(部署Keepalived实现Web服务器的高可用),Web服务器的浮动VIP地址为192.168.4.80,1台作为客户端(proxy)。配置主机名、IP和yum源:1.proxy (eth0:192.
Stella981 Stella981
2年前
Keepalived+Nginx实现高可用和双主节点负载均衡
简介Nginx可以实现高并发反向代理,lvs集群可以实现负载均衡,但是他们都有一个共同的弊端,就是Nginx,lvs架构中Director是单点故障,有没有一个好的方案解决这个问题呢?答案是有。通过Keepalived就可以实现,前端Nginx,lvs中Director服务器的高可用和负载均衡,通过shell命令或者脚本可以实现对服务器状态和服务的监控!
可莉 可莉
2年前
18、7 Keepalived LVS
完整的架构需要两台服务器(角色为dir),分别安装Keepalived工具,目的是实现高可用,但Keepalived本身也有负载均衡功能,所以本次使用可以只安装一台Keepalived。Keepalived内置了ipvsadm的功能,所以不需要安装ipvsadm包,也不用编写和执行lvs\_dr脚本。准备工作三台机器:调度器director:
Wesley13 Wesley13
2年前
Ubuntu10.04.4 Server下基于LVS DR模式+Keepalived的负载均衡高可用
Ubuntu10.04.4 Server下基于LVS DR模式Keepalived的负载均衡高可用集群LVSKeepalived 介绍2LVS2Keepalvied2ubuntu系统环境准备工作2更换Ubuntu软件源2架构拓扑图2服务安装3安装LVS3安装Keepalived3服务配置4
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这