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

目录

前言

一、环境搭建

1.环境准备

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

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

1.配置虚拟网络子接口

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

3.配置ARP

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

[1. 配置 Master](#1. 配置 Master)

[2. 配置Lvs Backup](#2. 配置Lvs Backup)

[3. 测试](#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节点进行查看集群信息

完成

相关推荐
irisart10 分钟前
第二章【NGINX 开源功能】—— HTTP 服务器(下)
nginx·http·开源
在云上(oncloudai)15 分钟前
用 AWS Firehose 简化日志与事件数据的采集与存储
云计算·aws
weixin_3077791316 分钟前
基于AWS Shield Advanced的自我管理DNS服务DDoS防护方案
网络安全·云计算·aws
郑州光合科技余经理1 小时前
PHP构建:支撑欧美澳市场的同城生活服务平台开发
java·开发语言·数据库·uni-app·php·排序算法·生活
寰天柚子1 小时前
IaaS+PaaS全解析:云计算时代的全栈技术支撑方案
云原生·云计算·paas
可爱又迷人的反派角色“yang”2 小时前
ansible剧本编写(三)
linux·网络·云计算·ansible
AKAMAI7 小时前
Akamai Cloud客户案例 | CloudMinister借助Akamai实现多云转型
人工智能·云计算
云老大TG:@yunlaoda3609 小时前
华为云国际站代理商IMS主要有什么作用呢?
tcp/ip·华为云·云计算·负载均衡
Evan芙11 小时前
搭建nexus服务,实现本地仓库、代理仓库
java·nginx·tomcat
wuxia211812 小时前
minikube的安装
kubernetes·云计算