从零开始的云计算生活——番外3,LVS+KeepAlived+Nginx高可用实现方案

发布于:2025-07-17 ⋅ 阅读:(14) ⋅ 点赞:(0)

目录

前言

一、环境搭建

1.环境准备

2.安装ipvsadm和keepalived(Lvs服务器),nginx服务器安装nginx

3.为两台RS配置虚拟ip(nginx服务器)

1.配置虚拟网络子接口

2.ARP响应级别与通告行为的概念

3.配置ARP

二、Keepalived+Lvs+Nginx高可用集群负载均衡的搭建

1. 配置 Master

2. 配置Lvs Backup

3. 测试

1.测试Lvs

2.测试nginx


前言

在大型网站中一般服务端会做集群,同时利用负载均衡器做负载均衡。这样有利于将大量的请求分散到各个服务器上,提升网站的响应速度。当然为了解决单点故障的问题,还会做热备份方案。这里演示利用LVS做负载均衡器,同时利用Keepalived保证其高可用,基于LVS的DR模式构建Nginx集群。

一、环境搭建

1.环境准备

HOSTNAME IP 说明
nginx 192.168.71.170 nginx服务器
nginx 192.168.71.174 nginx服务器
Lvs+keepalived(主) 192.168.71.166 Lvs+keepalived(VIP:192.168.71.150)
Lvs+keepalived(备) 192.168.71.169 Lvs+keepalived(VIP:192.168.71.150)

2.安装ipvsadm和keepalived(Lvs服务器),nginx服务器安装nginx

 

图中显示目前版本为1.2.1,此外是一个空列表,啥都没。

  • 注:关于虚拟ip在云上的事儿

    • 1.阿里云不支持虚拟IP,需要购买他的负载均衡服务

    • 2.腾讯云支持虚拟IP,但是需要额外购买,一台节点最大支持10个虚拟ip

3.为两台RS配置虚拟ip(nginx服务器)

两台服务器配置一样,以下已一台服务器配置作为演示

1.配置虚拟网络子接口

1.进入到网卡配置目录,找到 lo(本地环回接口,用户构建虚拟网络子接口),创建一个新的文件ifcfg-lo:0 :

2.修改内容如下:

DEVICE=lo:0
IPADDR=192.168.71.150
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback:0

nginx1配置

nginx2配置

2.ARP响应级别与通告行为的概念

1.arp-ignore:ARP响应级别(处理请求)

  • 0:只要本机配置了ip,就能响应请求

  • 1:请求的目标地址到达对应的网络接口,才会响应请求

2.arp-announce:ARP通告行为(返回响应)

  • 0:本机上任何网络接口都向外通告,所有的网卡都能接受到通告

  • 1:尽可能避免本网卡与不匹配的目标进行通告

  • 2:只在本网卡通告

3.配置ARP

1.打开sysctl.conf

2.配置所有网卡、默认网卡以及虚拟网卡的arp响应级别和通告行为,分别对应:all,default,1o:

net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.default.arp_ignore=1
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.default.arp_announce=2
net.ipv4.conf.lo.arp_announce=2

3.刷新配置  

4.增加一个网关,用于接收数据报文,当有请求到本机后,会交给lo去处理

5.防止重启失效,做如下处理,用于开机自启动  

vim /etc/profile
route add -host 192.168.71.150 dev lo

二、Keepalived+Lvs+Nginx高可用集群负载均衡的搭建

这种架构目前在很多公司都在采用的高可用高性能架构, 优点如下:

  1. 使用Keepalived + Lvs 后可以实现主备切换高可用

  2. 结合了Lvs 后, 针对于后台的Real Server 这些真实的服务器做健康检查, 如果某台真实的服务器宕机后, Lvs就会自动剔除, 如果恢复后也可以自动加入.

  3. 其实 Keepalived 本身就是为 Lvs 定做了, 他们的匹配度, 结合度非常高, 通过 keepalivd 就可以配置 Lvs与 RS 的关系, 如负载均衡算法, 健康检查配置等.

1. 配置 Master

1.进入keepalived配置文件, 修改配置信息, 修改如下即可(注意观察注释匹配自己的信息节点)

配置文件如下:

! Configuration File for keepalived

global_defs {
   router_id LVS_102
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.115.150
    }
}
# LVS 配置: 配置集群访问的 IP+端口, 端口和nginx保持一致, 都是80, IP与端口是空格而不是冒号
virtual_server 192.168.115.150 80 {
    # 健康检查的时间, 单位是秒
    delay_loop 6
    # 配置负载均衡的算法, 默认是 轮询
    lb_algo rr
    # 设置LVS的工作模式 NAT|TUN|DR  lb是load_balance 负载均衡的缩写
    lb_kind DR
    # 会话持久化的时间, 默认是 50 秒
    persistence_timeout 5
    # 协议 -t
    protocol TCP

    # Real Server 配置  nginx服务ip+端口
    real_server 192.168.115.113 80 {
        # 轮询的权重, 默认有多少台, 就设置为多少个 1
        weight 1
        # 设置健康检查, 基于 tcp
        TCP_CHECK {
            # 检查的80端口
            connect_port 80
            # 检查的超时时间 2秒
            connect_timeout 2
            # 重试的次数 我们设置为2, 一般是5-7
            nb_get_retry 2
            # 设置间隔时间 3s
            delay_before_retry 3
        }
    }

    real_server 192.168.115.114 80 {
        weight 1
        # 设置健康检查, 基于 tcp
        TCP_CHECK {
            # 检查的80端口
            connect_port 80
            # 检查的超时时间 2秒
            connect_timeout 2
            # 重试的次数 我们设置为2, 一般是5-7
            nb_get_retry 2
            # 设置间隔时间 3s
            delay_before_retry 3
        }
    }
}

清除负载均衡的规则

重启keepalived, 使得配置生效

2. 配置Lvs Backup

步骤同 Master ,只有配置文件不一样

! Configuration File for keepalived
global_defs {
  #主服务器配置不同,名称随便起
   router_id LVS_103
}

vrrp_instance VI_1 {
    #主服务器配置不同
    state BACKUP
    interface ens33
    virtual_router_id 51
    #主服务器配置不同,权重需要比主服务器低
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.115.150
    }
}
# LVS 配置: 配置集群访问的 IP+端口, 端口和nginx保持一致, 都是80, IP与端口是空格而不是冒号
virtual_server 192.168.115.150 80 {
    # 健康检查的时间, 单位是秒
    delay_loop 6
    # 配置负载均衡的算法, 默认是 轮询
    lb_algo rr
    # 设置LVS的工作模式 NAT|TUN|DR  lb是load_balance 负载均衡的缩写
    lb_kind DR
    # 会话持久化的时间, 默认是 50 秒
    persistence_timeout 5
    # 协议 -t
    protocol TCP

    # Real Server 配置  nginx服务ip+端口
    real_server 192.168.115.100 80 {
        # 轮询的权重, 默认有多少台, 就设置为多少个 1
        weight 1
        # 设置健康检查, 基于 tcp
        TCP_CHECK {
            # 检查的80端口
            connect_port 80
            # 检查的超时时间 2秒
            connect_timeout 2
            # 重试的次数 我们设置为2, 一般是5-7
            nb_get_retry 2
            # 设置间隔时间 3s
            delay_before_retry 3
        }
    }

    real_server 192.168.115.101 80 {
        weight 1
        # 设置健康检查, 基于 tcp
        TCP_CHECK {
            # 检查的80端口
            connect_port 80
            # 检查的超时时间 2秒
            connect_timeout 2
            # 重试的次数 我们设置为2, 一般是5-7
            nb_get_retry 2
            # 设置间隔时间 3s
            delay_before_retry 3
        }
    }
}

重启完出现相同路由规则标识已配置成功

3. 测试

1.测试Lvs

停掉 LVS 的 Master 节点

网站还可以正常访问

重启Master 节点,我们发现ip有漂移回来了

2.测试nginx

我们关闭170节点的Nginx服务器(假如宕机状态)

进入master节点进行查看集群信息

完成


网站公告

今日签到

点亮在社区的每一天
去签到