当前位置: 首页 > news >正文

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

目录

一、lvs配置

二、nginx配置

三、测试

3.1 keepalived负载均衡

3.2 lvs+keepalived高可用

 3.3 nginx高可用


主机IP
lvs01-33

11.0.1.33

lvs02-3411.0.1.34
nginx0111.0.1.31
nginx0211.0.1.32
VIP11.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 keepalivedmv /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  #检查间隔,默认为1sauthentication {  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  #检查间隔,默认为1sauthentication {  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:0echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "1" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "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 1500inet 11.0.1.31  netmask 255.255.255.0  broadcast 11.0.1.255inet6 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 0TX packets 22319  bytes 1530060 (1.4 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::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 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 11.0.1.30  netmask 255.255.255.255loop  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博客

http://www.lryc.cn/news/273352.html

相关文章:

  • 独立看门狗与窗口看门狗
  • 【CTF杂项】常见文件文件头文件尾格式总结 各类文件头
  • 深度学习-模型转换_所需算力相关
  • Koordinator 助力云原生应用性能提升:小红书混部技术实践
  • java中如何使用elasticsearch—RestClient操作文档(CRUD)
  • MySQL自定义函数
  • 技术学习|CDA level I 数据库应用(数据操作语言DML)
  • 关键字:instanceof关键字
  • 【LeetCode:34. 在排序数组中查找元素的第一个和最后一个位置 | 二分】
  • 年度征文|回顾2023我的CSDN
  • 3.无重复字符的最长子串(滑动窗口,C解答)
  • 什么是系统设计 – 学习系统设计
  • 基于Python的城市热门美食数据可视化分析系统
  • 万字长文谈自动驾驶occupancy感知
  • KBDNO1.DLL文件缺失,软件或游戏无法启动运行,怎样快速修复
  • 计算机网络【EPOLL 源码详解】
  • 第82讲:MySQL Binlog日志的滚动
  • 2024.1.3C语言补录 宏函数
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之线性布局容器Column组件
  • 快手推荐算法工程师三面回顾
  • Sonarqube安装(Docker)
  • 双击shutdown.bat关闭Tomcat报错:未设置关闭端口~
  • HLS 2017.4 导出 RTL 报错:ERROR: [IMPL 213-28] Failed to generate IP.
  • 【Kubernetes】kubectl 常用命令
  • 鸿蒙开发第一天
  • Midjourney表情包制作及变现最全教程
  • UNIAPP中借助store+watch完成实时数据
  • COLMAP 三维重建 笔记
  • 即时设计:一键查看设计稿与页面差异,让设计师的工作更便捷高效
  • 知识库问答LangChain+LLM的二次开发:商用时的典型问题及其改进方案