当前位置: 首页 > 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://accentuation.sxnf.com.cn
http://bobbie.sxnf.com.cn
http://anhydrate.sxnf.com.cn
http://cardiganshire.sxnf.com.cn
http://canoodle.sxnf.com.cn
http://anthropolatric.sxnf.com.cn
http://allonge.sxnf.com.cn
http://arrondissement.sxnf.com.cn
http://caramel.sxnf.com.cn
http://alfie.sxnf.com.cn
http://burly.sxnf.com.cn
http://avengingly.sxnf.com.cn
http://backroom.sxnf.com.cn
http://arsenous.sxnf.com.cn
http://areopagus.sxnf.com.cn
http://bulgar.sxnf.com.cn
http://airburst.sxnf.com.cn
http://abolitionist.sxnf.com.cn
http://attentive.sxnf.com.cn
http://caesardom.sxnf.com.cn
http://cafard.sxnf.com.cn
http://bogbean.sxnf.com.cn
http://achromate.sxnf.com.cn
http://amygdalae.sxnf.com.cn
http://chordal.sxnf.com.cn
http://analysis.sxnf.com.cn
http://beetsugar.sxnf.com.cn
http://andiron.sxnf.com.cn
http://alastair.sxnf.com.cn
http://abomasum.sxnf.com.cn
http://www.dtcms.com/a/280034.html

相关文章:

  • 优雅的Java:01.数据更新如何更优雅
  • Rocky Linux 9 源码包安装php8
  • 基于按键开源MultiButton框架深入理解代码框架(一)(指针的深入理解与应用)
  • 开源AI Agent开发平台Dify源码剖析系列(二)
  • HTTP 协议
  • 微信小程序进度条cavans
  • 【电脑】显卡(GPU)的基础知识
  • Golang Channel与协程的完美配合指南
  • CAU数据挖掘 第五章 聚类问题
  • vscode里面怎么配置ssh步骤
  • Python+Selenium自动化爬取携程动态加载游记
  • python实现自动化sql布尔盲注(二分查找)
  • js最简单的解密分析
  • 分支战略论:Git版本森林中的生存法则
  • document.documentElement详解
  • Webshell连接工具原理
  • 渗透笔记1-4
  • html js express 连接数据库mysql
  • 【算法训练营Day12】二叉树part2
  • 进程---基础知识+命令+函数(fork+getpid+exit+wait+exec)
  • 100道K8S面试题
  • LVS初步学习
  • google浏览器::-webkit-scrollbar-thumb设置容器滚动条滑块不生效
  • langflow搭建带记忆功能的机器人
  • 【React Native】环境变量和封装 fetch
  • Knife4j快速入门
  • 【深度学习:进阶篇】--4.4.集束搜索(Beam Search)
  • 深入探索ZYNQ网络通信:四大实现方案与创新应用
  • VMWare 使用 U 盘 PE 系统安装 Win 11 ESD 镜像
  • 日常--PyCharm清除attach记录