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.hqwc.cn/news/321145.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【UEFI基础】EDK网络框架(UNDI)

UNDI UNDI代码综述 UNDI全称Universal Network Driver Interface&#xff0c;它虽然属于UEFI网络框架的一部分&#xff0c;但是并没有在EDK开源代码中实现。不过目前主流网卡厂商都会提供UEFI下的网络驱动&#xff0c;并且大部分都实现了UNDI&#xff0c;这样BIOS下就可以通过…

Alice Bob推出16量子比特量子处理单元——“Helium 1”

​&#xff08;图片来源&#xff1a;网络&#xff09; 容错量子计算机硬件开发商Alice & Bob宣布已成功流片一款新芯片“Helium 1”&#xff0c;希望能借助该芯片降低随着量子比特数增加而提高的错误率&#xff0c;这是该公司第一个纠错逻辑量子比特&#xff08;纠错量子计…

C++_模板

目录 1、函数模板 1.2 模板原理 2、多个模板参数 3、模板的显示实例化 4、模板的匹配 5、类模板 结语&#xff1a; 前言&#xff1a; 在C中&#xff0c;模板分为函数模板和类模板&#xff0c;而模板的作用就是避免了重复的工作&#xff0c;把原本是程序员要做的重复工作…

解决docker容器内无法连接宿主redis

背景 小程序的发短信服务挂了&#xff0c;随查看日志&#xff0c;该报错日志如下 Error 111 connecting to 127.0.0.1:6379. Connection refused. 6379是监听redis服务的端口&#xff0c;那大概是redis出错了。 首先查看了redis是否正常启动&#xff0c;检查出服务正常。 由于小…

C# WinForm MessageBox自定义按键文本 COM组件版

c# 更改弹窗MessageBox按钮文字_c# messagebox.show 字体-CSDN博客 需要用到大佬上传到百度云盘的Hook类&#xff0c;在大佬给的例子的基础上改动了点。 应用时自己加GUID和ProgID。 组件实现&#xff1a; using System; using System.Collections.Generic; using System.L…

Python计算圆的面积

Python 计算圆的面积 圆的面积公式为 &#xff1a; 公式中 r 为圆的半径。 # 定义一个方法来计算圆的面积 def findArea(r): PI 3.142 return PI * (r*r) # 调用方法 r float( input("请输入圆的半径:") ) print( "圆的面积为 %.3f&qu…

C 练习实例16 - 最大公约数和最小公倍数

题目&#xff1a;输入两个正整数a和b&#xff0c;求其最大公约数和最小公倍数 数学&#xff1a;最大公约数*最小公倍数a*b 例如&#xff1a;a16&#xff0c;b20。最小公倍数80&#xff0c;最大公约数4。80*416*20。 算法&#xff1a;辗转相除法&#xff0c;又称欧几里德算法…

【LeetCode-剑指offer】-- 23.相交链表

23.相交链表 方法一&#xff1a;哈希集合 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) {* val x;* next null;* }* }*/ public class Solution {public ListNode getIn…

vue3中标签form插件

想写一个系统&#xff0c;对八字进行标注&#xff0c;比如格局&#xff0c;有些八字就有很多格局&#xff0c;于是就想着使用el-tag但是&#xff0c;form表单中如何处理呢&#xff1f; 这个时候&#xff0c;就需要自己写一个,modelValue是表单的默认属性 <template><…

Mysql事务transaction简介

文章目录 什么是事务针对Mysql隔离级别读未提交读提交可重复读串行化 mysql中的数据结构索引数据结构mysql中的锁种类**共享锁和独占锁**表锁、行锁(记录锁、间隙锁、临键锁) spring中的事务事务特性 什么是事务 事务是一个不可分割的数据库操作序列&#xff0c;也是数据库并发…

顶顶通呼叫中心中间件配置背景音乐(mod_cti基于FreeSWITCH)

介绍 配置外呼任务拨打时的背景音乐&#xff0c;一步步配置 一、配置队列外呼模板 打开ccadmin->队列呼叫模板->添加一条变量根据下方图片配置 二、上传音乐文件 后缀格式为.wav格式的声音文件&#xff0c;声音文件需要上传在这个目录&#xff1a;/ddt/fs/sounds/ct…

笔记——C语言基础讲义(黑马程序员)

1. C 语言概述 1.1 什么是 C 语言 一提到语言这个词语&#xff0c;自然会想到的是像英语、汉语等这样的自然语言&#xff0c;因为它是人和人交换信息不可缺少的工具。 而今天计算机遍布了我们生活的每一个角落&#xff0c;除了人和人的相互交流之外&#xff0c;我们必…