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

linux系统------LVS+KeepAlived+Nginx高可用方案

目录

一、环境搭建

1.环境准备

2.安装ipvsadm 和 安装 keepalived(Lvs服务器)

3.为两台RS配置虚拟ip(nginx服务器)

1.配置虚拟网络子接口(回环接口)

2.修改内容如下:

3.配置ARP

二、Keepalived+Lvs+Nginx高可用集群负载均衡的搭建

1. 配置 LVS-keepalived(主)

2. 配置Lvs-keepalived(备)

3、检查服务和配置

4. 测试

1.测试Lvs

2.测试nginx


一、环境搭建

1.环境准备

HOSTNAMEIP说明
nginx192.168.100.10nginx服务器
nginx192.168.100.11nginx服务器
Lvs+keepalived(主)192.168.100.100Lvs+keepalived(VIP:192.168.100.109)
Lvs+keepalived(备)192.168.100.101Lvs+keepalived(VIP:192.168.100.109)

并关闭防火墙和安全上下文       

所有计算机节点关闭网络配置管理器,因为有可能会和网络接口冲突:

systemctl stop NetworkManager

2.安装ipvsadm 和 安装 keepalived(Lvs服务器)

yum install ipvsadm -y
yum install keepalived -y

安装成功进行检测

[root@lvs1 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn[root@lvs2 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn

3.为两台RS配置虚拟ip(nginx服务器)

1.配置虚拟网络子接口(回环接口)

(两台服务器配置一样,以下已一台服务器配置作为演示)

配置虚拟网络子接口可以理解为构建一个虚拟ip,这个ip只能返回数据,不能被访问。

1.进入到网卡配置目录,找到 lo(本地环回接口,用户构建虚拟网络子接口),拷贝一份新的随后进行修改:

2.修改内容如下:

(注意:由于没有多的网卡,一下是临时配置在lo下)

root@web1 network-scripts]# ifconfig lo:0 192.168.100.109/32
[root@web1 network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet 192.168.100.109/0 scope global lo:0valid_lft forever preferred_lft foreverinet6 ::1/128 scope host noprefixroute valid_lft forever preferred_lft forever

3.重启后通过ip addr 查看如下,表示ok:

[root@web1 network-scripts]# ifup lo
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/6)

另一台nginx服务配置同上(web2)

3.配置ARP

1.打开sysctl.conf

vim /etc/sysctl.conf

2.配置所有网卡、默认网卡以及虚拟网卡的arp响应级别和通告行为,分别对应:all,default,lo

[root@web1 ~]# vim /etc/sysctl.conf      #添加配置如下
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.default.arp_ignore=1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce=2

3.刷新配置

sysctl -p

4.增加一个网关,用于接收数据报文,当有请求到本机后,会交给lo去处理

[root@web1 ~]# route add -host 192.168.100.109 dev lo:0

5.防止重启失效,做如下处理,用于开机自启动

vim /etc/profile
route add -host 192.168.100.109 dev lo:0

nginx服务器web2同上操作

二、Keepalived+Lvs+Nginx高可用集群负载均衡的搭建

这种架构目前在很多公司都在采用的高可用高性能架构, 优点如下:

  1. 使用Keepalived + Lvs 后可以实现主备切换高可用

  2. 结合了Lvs 后, 针对于后台的Real Server 这些真实的服务器做健康检查, 如果某台真实的服务器宕机后, Lvs就会自动剔除, 如果恢复后也可以自动加入.

  3. 其实 Keepalived 本身就是为 Lvs 定做了, 他们的匹配度, 结合度非常高, 通过 keepalivd 就可以配置 Lvs与 RS 的关系, 如负载均衡算法, 健康检查配置等.

1. 配置 LVS-keepalived(主)

1、keepalived配置文件, 修改配置信息

cd /etc/keepalived
vim keepalived.conf

配置文件如下:

! Configuration File for keepalivedglobal_defs {router_id LVS1
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.100.109}
}
# LVS 配置: 配置集群访问的 IP+端口, 端口和nginx保持一致, 都是80, IP与端口是空格而不是冒号
virtual_server 192.168.100.109 80 {# 健康检查的时间, 单位是秒delay_loop 6# 配置负载均衡的算法, 默认是 轮询lb_algo rr# 设置LVS的工作模式 NAT|TUN|DR  lb是load_balance 负载均衡的缩写lb_kind DR# 会话持久化的时间, 默认是 50 秒persistence_timeout 5# 协议 -tprotocol TCP# Real Server 配置  nginx服务ip+端口real_server 192.168.100.10 80 {# 轮询的权重, 默认有多少台, 就设置为多少个 1weight 1# 设置健康检查, 基于 tcpTCP_CHECK {# 检查的80端口connect_port 80# 检查的超时时间 2秒connect_timeout 2# 重试的次数 我们设置为2, 一般是5-7nb_get_retry 2# 设置间隔时间 3sdelay_before_retry 3}}real_server 192.168.100.11 80 {weight 1# 设置健康检查, 基于 tcpTCP_CHECK {# 检查的80端口connect_port 80# 检查的超时时间 2秒connect_timeout 2# 重试的次数 我们设置为2, 一般是5-7nb_get_retry 2# 设置间隔时间 3sdelay_before_retry 3}}
}

清除负载均衡的规则

[root@lvs1 keepalived]# ipvsadm -C

重启keepalived, 使得配置生效

[root@lvs1 keepalived]# systemctl restart keepalived.service

2. 配置Lvs-keepalived(备)

步骤同 LVS-keepalived(主)一样 ,只有配置文件不一样

vim  /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {#主服务器配置不同,名称随便起router_id LVS2
}vrrp_instance VI_1 {#主服务器配置不同state BACKUPinterface ens33virtual_router_id 51#主服务器配置不同,权重需要比主服务器低priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.100.109}
}
# LVS 配置: 配置集群访问的 IP+端口, 端口和nginx保持一致, 都是80, IP与端口是空格而不是冒号
virtual_server 192.168.100.109 80 {# 健康检查的时间, 单位是秒delay_loop 6# 配置负载均衡的算法, 默认是 轮询lb_algo rr# 设置LVS的工作模式 NAT|TUN|DR  lb是load_balance 负载均衡的缩写lb_kind DR# 会话持久化的时间, 默认是 50 秒persistence_timeout 5# 协议 -tprotocol TCP# Real Server 配置  nginx服务ip+端口real_server 192.168.100.10 80 {# 轮询的权重, 默认有多少台, 就设置为多少个 1weight 1# 设置健康检查, 基于 tcpTCP_CHECK {# 检查的80端口connect_port 80# 检查的超时时间 2秒connect_timeout 2# 重试的次数 我们设置为2, 一般是5-7nb_get_retry 2# 设置间隔时间 3sdelay_before_retry 3}}real_server 192.168.100.11 80 {weight 1# 设置健康检查, 基于 tcpTCP_CHECK {# 检查的80端口connect_port 80# 检查的超时时间 2秒connect_timeout 2# 重试的次数 我们设置为2, 一般是5-7nb_get_retry 2# 设置间隔时间 3sdelay_before_retry 3}}
}

改完配置文件,进行重启keeplivaed,命令同上!

[root@lvs2 keepalived]# vim keepalived.conf
[root@lvs2 keepalived]# systemctl restart keepalived.service

3、检查服务和配置

     3.1  OpenEuler里自带ipvsadm模块儿 (主和备都需要做)

此时需启动它,得先创建一个ipvsadm文件

[root@lvs1 keepalived]# touch /etc/sysconfig/ipvsadm
[root@lvs1 keepalived]# systemctl start ipvsadm
[root@lvs1 keepalived]# lsmod | grep ip_vs
ip_vs_rr               12288  0
ip_vs                 229376  2 ip_vs_rr
nf_conntrack          212992  1 ip_vs
nf_defrag_ipv6         24576  2 nf_conntrack,ip_vs
libcrc32c              12288  2 nf_conntrack,ip_vs
[root@lvs1 keepalived]# systemctl status ipvsadm
● ipvsadm.service - Initialise the Linux Virtual ServerLoaded: loaded (/usr/lib/systemd/system/ipvsadm.service; disabled; preset: disabl>Active: active (exited) since Tue 2025-07-15 16:49:31 CST; 35s agoProcess: 29784 ExecStart=/bin/bash -c exec /sbin/ipvsadm-restore < /etc/sysconfig/>Main PID: 29784 (code=exited, status=0/SUCCESS)7月 15 16:49:31 lvs1 systemd[1]: Starting Initialise the Linux Virtual Server...
7月 15 16:49:31 lvs1 systemd[1]: Finished Initialise the Linux Virtual Server.

        3.2   检查web1 和web2(两台Rs) 的(nginx服务是否启用)

                检查web1 和 web2  配置网卡信息是否正确(  lo  )

        3.3  加载主和备 keepalived.conf

[root@lvs1 keepalived]# systemctl restart keepalived.service 
[root@lvs2 keepalived]# systemctl restart keepalived.service 

        3.4  加载ip_vs模块

[root@lvs1]# modprobe ip_vs
[root@lvs2]# modprobe ip_vs

重启完出现相同路由规则标识已配置成功

[root@lvs1 keepalived]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.100.109:80 rr persistent 50-> 192.168.100.10:80            Route   1      0          0         -> 192.168.100.11:80            Route   1      0          0    

4. 测试

1.测试Lvs

访问192.168.100.109   可以正常访问

停掉 LVS 的 Master 节点

[root@lvs1 keepalived]# systemctl stop keepalived.service

观察主节点LVS节点 IP

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:6a:66:62 brd ff:ff:ff:ff:ff:ffinet 192.168.100.100/24 brd 192.168.100.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe6a:6662/64 scope link noprefixroute valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:6a:66:62 brd ff:ff:ff:ff:ff:ffinet 192.168.100.100/24 brd 192.168.100.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 192.168.100.109/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe6a:6662/64 scope link noprefixroute valid_lft forever preferred_lft forever

重启Master 节点,我们发现ip又漂移回来了

2.测试nginx

我们关闭10节点的Nginx服务器(假如宕机状态)

[root@web1 keepalived]# systemctl stop nginx

进入master节点进行查看集群信息

[root@lvs1 keepalived]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.100.109:80 rr persistent 50-> 192.168.100.11:80            Route   1      0          0 

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

相关文章:

  • LVS(Linux Virtual Server)详细笔记(理论篇)
  • 李宏毅《生成式人工智能导论》 | 第9讲 AI Agent
  • Jfinal+SQLite java工具类复制mysql表数据到 *.sqlite
  • 设计模式笔记_结构型_适配器模式
  • Redis 中的持久化机制:RDB 与 AOF
  • 基于STM32设计的智能厨房
  • redis快速入门教程
  • JavaScript进阶篇——第四章 解构赋值(完全版)
  • Bash shell用法
  • 轻松管理多个Go版本:g工具安装与使用
  • 【自学linux】计算机体系结构和操作系统第二章
  • OpenCV 伽马校正函数gammaCorrection()
  • PG备份一(逻辑备份)
  • 算法与前端的可访问性
  • Linux系统调优和工具
  • OpenCV-Python Tutorial : A Candy from Official Main Page(三)
  • 【Linux系统】命令行参数和环境变量
  • 涨停板池,跌停板池,炸板池,次新股池,强势股池数据接口
  • SSM框架学习DI入门——day2
  • Flutter瀑布流布局深度实践:打造高性能动态图片墙
  • 基于Ruoyi和PostgreSQL的统一POI分类后台管理实战
  • IPSec和HTTPS对比(一)
  • 前端学习笔记:React.js中state和props的区别和联系
  • 数字影像新风口 入驻国际数字影像产业园解锁151项全周期服务
  • 20.如何在 Python 字典中找到最小值或最大值的键?
  • 关于list
  • 使用 PowerMockito 模拟 new A() 行为
  • 文心一言开源版部署及多维度测评实例
  • linux-线程互斥
  • 硬件设计学习DAY1——电源的分类