lvs+keepalived+nginx实现四层负载+七层负载

目录

一、lvs配置

二、nginx配置

三、测试

[3.1 keepalived负载均衡](#3.1 keepalived负载均衡)

[3.2 lvs+keepalived高可用](#3.2 lvs+keepalived高可用)

[3.3 nginx高可用](#3.3 nginx高可用)


|----------|-----------|
| 主机 | IP |
| lvs01-33 | 11.0.1.33 |
| lvs02-34 | 11.0.1.34 |
| nginx01 | 11.0.1.31 |
| nginx02 | 11.0.1.32 |
| VIP | 11.0.1.30 |

4台主机主机添加host

复制代码
[root@nginx01 sbin]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
11.0.1.31 nginx01
11.0.1.32 nginx02
11.0.1.33 lvs01-33
11.0.1.34 lvs02-34

一、lvs配置

以下两台lvs都要配置,除了配置文件不一样以外

lvs一定要搭配keepalived使用,配置上更简单,并且能实现主备高可用

复制代码
yum install -y ipvsadm keepalived

mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vi /etc/keepalived/keepalived.conf

主机master

lb_algo字段表示负载调度算法,采用权重算法,nginx01权重为5,nginx02权重为3

需要更改的字段router_id、ens33、priority 100、VIP+端口、真实IP+端口

复制代码
global_defs {  
    router_id lvs01-33  # 设置lvs的id,在一个网络内应该是唯一的,一般用主机名
}  
vrrp_instance VI_1 {  
    state MASTER   #指定Keepalived的角色,MASTER为主,BACKUP为备          
    interface ens33  #指定Keepalived的角色,MASTER为主,BACKUP为备
    virtual_router_id 51  #虚拟路由编号,主备要一致
    priority 100  #定义优先级,数字越大,优先级越高,主DR必须大于备用DR    
    advert_int 1  #检查间隔,默认为1s
    authentication {  
        auth_type PASS  
        auth_pass 1111  
    }  
    virtual_ipaddress {  
        11.0.1.30  #定义虚拟IP(VIP)为11.0.1.30,可多设,每行一个
    }  
}  
# 定义对外提供服务的LVS的VIP以及port
virtual_server 11.0.1.30 80 {  
    delay_loop 6 # 设置健康检查时间,单位是秒                    
    lb_algo wlc # 设置负载调度的算法为wlc 基于权重的调度算法                  
    lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式   
    nat_mask 255.255.255.0                
   #persistence_timeout 0 会话保持时间    
    protocol TCP                  
    real_server 11.0.1.31 80 {  # 指定real server1的IP地址
        weight 5   # 配置节点权值,数字越大权重越高              
        TCP_CHECK {  
        connect_timeout 10         
        nb_get_retry 3  
        delay_before_retry 3  
        connect_port 80  
        }  
    }  
    real_server 11.0.1.32 80 {  # 指定real server2的IP地址
        weight 3  # 配置节点权值,数字越大权重越高  
        TCP_CHECK {  
        connect_timeout 10  
        nb_get_retry 3  
        delay_before_retry 3  
        connect_port 80  
        }  
     }  
}

备机backup

复制代码
global_defs {  
    router_id lvs01-34  # 设置lvs的id,在一个网络内应该是唯一的
}  
vrrp_instance VI_1 {  
    state BACKUP   #指定Keepalived的角色,MASTER为主,BACKUP为备          
    interface ens33  #指定Keepalived的角色,MASTER为主,BACKUP为备
    virtual_router_id 51  #虚拟路由编号,主备要一致
    priority 90  #定义优先级,数字越大,优先级越高,主DR必须大于备用DR    
    advert_int 1  #检查间隔,默认为1s
    authentication {  
        auth_type PASS  
        auth_pass 1111  
    }  
    virtual_ipaddress {  
        11.0.1.30  #定义虚拟IP(VIP)为11.0.1.30,可多设,每行一个
    }  
}  
# 定义对外提供服务的LVS的VIP以及port
virtual_server 11.0.1.30 80 {  
    delay_loop 6 # 设置健康检查时间,单位是秒                    
    lb_algo wlc # 设置负载调度的算法为wlc 基于权重的调度算法                  
    lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式   
    nat_mask 255.255.255.0                
   #persistence_timeout 0 会话保持时间    
    protocol TCP                  
    real_server 11.0.1.31 80 {  # 指定real server1的IP地址
        weight 5   # 配置节点权值,数字越大权重越高              
        TCP_CHECK {  
        connect_timeout 10         
        nb_get_retry 3  
        delay_before_retry 3  
        connect_port 80  
        }  
    }  
    real_server 11.0.1.32 80 {  # 指定real server2的IP地址
        weight 3  # 配置节点权值,数字越大权重越高  
        TCP_CHECK {  
        connect_timeout 10  
        nb_get_retry 3  
        delay_before_retry 3  
        connect_port 80  
        }  
     }  
}

二、nginx配置

安装nginx,并更改html页面内容为当前IP

nginx安装:Nginx、keepalived安装详细步骤_keepalive 安装-CSDN博客

两台nginx都要配置

以下命令是临时的,重启后失效,命令内容:在lo网卡上虚拟出一个lo:0接口,添加路由,抑制两台nginx主机的ARP响应。注意掩码是32,目前没找到永久配置的方法,只能以自定义服务设置为开机自启动。

复制代码
ifconfig lo:0 11.0.1.30 netmask 255.255.255.255 broadcast 11.0.1.30 

route add -host 11.0.1.30 dev lo:0

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

检测虚拟网卡接口lo:0,且IP为VIP

复制代码
[root@nginx01 init.d]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 11.0.1.31  netmask 255.255.255.0  broadcast 11.0.1.255
        inet6 fe80::4ae3:fc87:6344:7062  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:60:05:0e  txqueuelen 1000  (Ethernet)
        RX packets 35532  bytes 2276489 (2.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 22319  bytes 1530060 (1.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 11.0.1.30  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)

三、测试

nginx01、nginx02访问正常

3.1 keepalived负载均衡

两台lvs开启keepalived,访问VIP,访问正常,由于我设定nginx01的权重高于nginx02,所以是nginx01返回页面,系统工具优先级选出最佳节点

复制代码
[root@lvs01-33 ~]# systemctl start keepalived
[root@lvs01-34 ~]# systemctl start keepalived

如果你想知道当前是哪个lvs在工作,只需要通过查看VIP当前在哪台lvs即可

3.2 lvs+keepalived高可用

将lvs01的keepalived进程关闭

复制代码
[root@lvs01-33 ~]# systemctl stop keepalived

VIP访问仍然正常,说明lvs工作正常

3.3 nginx高可用

将nginx01的nginx进程杀死

复制代码
[root@nginx01 sbin]# ./nginx -s stop

再次访问

将nginx01的nginx进程重启,那么nginx01重新接管

参考文档:

https://www.cnblogs.com/tangyanbo/p/4305589.html

https://www.cnblogs.com/xiaocheche/p/7689432.html

lvs详细文档:(原理、模式(NAT、TUN、DR)、调度算法)

LVS负载均衡(LVS简介、三种工作模式、十种调度算法)-CSDN博客

https://www.cnblogs.com/anay/p/9260306.html#_label7

DR模式详细:

LVS | LVS 的三种工作方式(DR原理)(二)_lvs dr 为什么局域网-CSDN博客

ipvsadm常用命令:

ipvsadm命令 -- 管理Linux虚拟服务器 -- Linux命令大全(手册)

arp冲突解释:

【arp冲突】linux抑制arp通告-CSDN博客

相关推荐
秋雨雁南飞1 天前
Nginx安装
nginx
全栈工程师修炼指南2 天前
Nginx | ngx_cache_purge 模块:实现清除特定上游服务(后端)响应缓存条目
运维·nginx·缓存
irisart2 天前
第二章【NGINX 开源功能】—— 四层反向代理
运维·nginx·开源
MACKEI2 天前
图片加速效果验证与查看
nginx
qinyia2 天前
WisdomSSH解决Ubuntu 25.04服务器上因dpkg中断导致的Nginx安装失败问题并成功部署科技感个人主页
服务器·nginx·ubuntu
tzhou644523 天前
Docker 部署 Nginx HTTPS 服务(CentOS 7)
nginx·docker·https
等什么君!3 天前
nginx启动失败 ,报404和 idea端口号被占用的解决办法
运维·nginx
全栈工程师修炼指南3 天前
Nginx | HTTP 反向代理:当缓存失效时如何减轻后端(上游)服务压力?
运维·网络协议·nginx·http·缓存
zhengxianyi5153 天前
vue 首屏加载优化
前端·javascript·vue.js·nginx·gzip·expires·静态文件缓存
全栈工程师修炼指南3 天前
Nginx | HTTP 反向代理:对上游服务端响应缓存流程浅析与配置实践
运维·网络协议·nginx·http·缓存