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博客

相关推荐
幸福清风6 小时前
从域名到一行 nginx 配置:一次站点 HTTPS 证书更换与排障复盘
python·nginx·https
Sayai7 小时前
Neo4j 社区版高可用实战:DRBD 块级复制 + Keepalived 虚拟 IP 冷备切换(附启停 SOP 与脑裂防范)
运维·neo4j·keepalived·高可用·drbd
梅梅绵绵冰8 小时前
Nginx反向代理
运维·nginx
2601_965619691 天前
AI视频制作:财经数据可视化视频怎么做:AI 自动生成图表动画的实操流程
人工智能·nginx·音视频
2601_965619691 天前
历史解说视频怎么做:青铜器瓷器文物画面自动对齐的完整教程
运维·nginx·音视频
姜鱼问生2 天前
每次开机手动检查 6 样东西?我写了个 2 秒自检脚本
运维·网络·nginx·docker·容器
xixingzhe23 天前
Nginx 看懂请求耗时瓶颈
服务器·前端·nginx
北风toto3 天前
Windows 下用 OpenSSL 生成 SSL 密钥并配置 Nginx 教程
windows·nginx·ssl
。3 天前
【无标题】
linux·服务器·负载均衡·lvs
卜锦元3 天前
Docker Compose 部署 Nginx 1.30.6 完整指南
nginx·docker·容器