LVS DR模式实现Nginx负载均衡

LVS(Linux Virtual Server)是基于Linux的高性能负载均衡方案,它是一个4层负载,区别于Nginx的7层负载。理论上来说如果不需要处理HTTP报文或者一些静态资源,可以使用LVS替代Nginx实现负载均衡。另外,由于LVS工作的协议层次更低,因此它效率更高,支持更大的并发。

也可以将LVS前置在Nginx之前,实现更大的一个网络架构,支持更大的并发。这里LVS来实现Nginx负载均衡作为演示。

目标环境

DS: Director Server,负载均衡器

RS: Real Server,实际的服务器

VIP: Virtual IP,虚拟ip,绑定在DS上接收外部请求,同时也会绑定在RS上,DS接收外部请求然后转发到RS上处理

ds ip 10.0.3.200
rs1 ip 10.0.3.201
rs2 ip 10.0.3.202
vip 10.0.3.10
操作系统镜像:centos-stream-9-boot

虚拟机:VirtualBox7.0

虚拟机准备

首先说明虚拟机之间使用的是NAT Network网络模式,在这个模式下在同一网络中的虚拟机之间可以互通,虚拟机可以访问主机,也可以访问网络,主机通过配置端口转发也可以访问虚拟机。而在NAT(区别NAT Network)模式下,虚拟机之间不能互通。

创建NAT network
点击虚拟机左上角Tools进入配置
切换到NAT Networks
点Create创建新的NAT network配置
配置ip网段10.0.3.0/24

下面配置端口映射,使得宿主机可以访问虚拟机,然后点击apply应用

完整配置

下载Centos stream 9镜像保存到本地
https://mirrors.centos.behostings.net/centos9/9-stream/BaseOS/x86_64/iso/CentOS-Stream-9-20240729.0-x86_64-boot.iso
创建LVS虚拟机,名字可以改为LVS-200,便于区分,网络选择NAT Network,具体选择刚刚创建的NatNetwork,然后保存

下载boot的镜像刚启动会下载软件包,下挺久,为了便于创建RS1, RS2,可以导出安装好包虚拟机镜像LVS,然后再导入创建RS1, RS2,就不会再下载软件包了。
左上角菜单File > Export Appliance导出

通过导入创建RS1

选择导出的镜像

点击下一步,MAC地址选择新的,要不然MAC地址和LVS一样了

点击完成就可以了,等待虚拟机创建完成

然后修改虚拟机名称RS1-201,网络选择NAT Network,保存启动即可。
进入系统用户名密码和LVS上配置的一致。

同理创建RS2, 名称RS1-201,网络NAT Network。

配置RS

配置ip

# 检查原始ip
ip addr show
# 查看网关
route -n 

# 配置修改
cd /etc/NetworkManager/system-connections
sudo cp enp0s3.nmconnection enp0s3.nmconnectionbak
sudo vim enp0s3.nmconnection
# 修改ipv4块
method=manual
address1=10.0.3.201/24  # 如果是202机器修改为202
gateway=10.0.3.1
# 保存并刷新

# 修改完的配置


 

sudo systemctl restart NetworkManager
sudo nmcli connection down enp0s3
sudo nmcli connection up enp0s3

# 检查ip是否变更,正常情况下网卡enp0s3 ip变为你修改的ip
ip addr show

RS添加虚拟ip vip

# vip 10.0.3.10/32, 必须是32, rs1, rs2上都配置
ip a a 10.0.3.10/32 dev lo label lo:1

# 此时ip冲突,修改内核参数解决冲突问题, all是总开关
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

# 或者直接修改配置文件
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.lo.arp_announce=2
# 应用更新
sudo sysctl -p

# 安装nginx, 命令行浏览器lynx
yum install -y lynx nginx

# 修改nginx文件/usr/share/nginx/html/index.html
rs201 # 如果是202机器就修改为rs202

# 启动nginx
sudo systemctl start nginx

# 判断启动成功
lynx 127.0.0.1:80

# 关闭防火墙,不然其他的虚拟机可能访问不通
sudo systemctl stop firewalld

以上是RS修改内容,两个RS都是按照上面的步骤配置。

配置LVS

# 确保宿主机包含ip_vs内核模块
lsmod | grep ip_vs
# 如果没有通过mod_probe安装,如果还没有可能要换个linux版本,如果在docker容器中,只要在宿主机上有这个模块,然后启动时加参数—privileges即可,容器会继承宿主机的内核模块
mod_probe ip_vs
# 再次确认
lsmod | grep ip_vs

修改ip 

# 检查原始ip
ip addr show
# 查看网关
route -n 

# 配置修改
cd /etc/NetworkManager/system-connections
sudo cp enp0s3.nmconnection enp0s3.nmconnectionbak
sudo vim enp0s3.nmconnection
# 修改ipv4块
method=manual
address1=10.0.3.200/24
gateway=10.0.3.1
# 保存并刷新

修改完配置

sudo systemctl restart NetworkManager
sudo nmcli connection down enp0s3
sudo nmcli connection up enp0s3

# 检查ip是否变更,正常情况下网卡enp0s3 ip变为你修改的ip
ip addr show

配置DS

# ds上配置vip,可以配置在lo或者eth0上,都可以, 不用修改内核参数,要不然不会接受请求
ip a a 10.0.3.10/32 dev lo label lo:1
# lvs添加集群
yum install -y ipvsadm
ipvsadm -A -t 10.0.3.10:80 -s rr
ipvsadm -a -t 10.0.3.10:80 -r 10.0.3.201:80 -g
ipvsadm -a -t 10.0.3.10:80 -r 10.0.3.202:80 -g
ipvsadm -Ln

# 关闭防火墙
sudo systemctl stop firewalld

# 修改连接有效时间
sudo ipvsadm -E -t 10.0.3.80 -s rr -p 5
sudo ipvsadm —set 1 1 1

宿主机测试

因为我们配置NatNetwork端口映射127.0.0.1:9082 -> 10.0.3.10:80,所以浏览器访问127.0.0.1:9082
不断刷新,会在10.0.3.201和10.0.3.202之间不断切换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值