Keepalive+LVS+Nginx+NFS高可用项目

项目架构

分析

主机规划

主机系统安装应用网络IP
clientredhat 9.5NAT172.25.250.115/24
lvs-masterrocky 9.5ipvsadm,keepalivedNAT172.25.250.116/24 VIP 172.25.250.100/32
lvs-backuprocky 9.5ipvsadm,keepalivedNAT172.25.250.117/24 VIP 172.25.250.100/32
rs1openEuler 24.03nginx,nfs-utilsNAT172.25.250.118/24
rs2openEuler 24.03nginx,nfs-utilsNAT172.25.250.119/24
nfsredhat 9.5nfs-utilsNAT172.25.250.120/24

注意:所有主机的防火墙和 Selinux 都关闭

# 关闭防火墙
systemctl disable --now firewalld# 临时关闭selinux
setenforce 0
# 永久关闭selinux
sed -i "s/SELINUX=enforcing/SELINUX=permissive/g" /etc/selinux/config

配置 NFS

修改主机名和 IP 地址

(这一步不是必须的,可以用自己原本的主机名和IP地址,我这里是为了方便演示)

# 1、修改主机名
[root@localhost ~]# hostnamectl hostname nfs# 2、修改网络(这一步不是必须的,可以用自己原本的IP地址,我这里是为了方便演示)
[root@localhost ~]# nmcli c m ens160 ipv4.method manual ipv4.addresses 172.25.250.120/24 ipv4.gateway 172.25.250.2 ipv4.dns 223.5.5.5 connection.autoconnect yes# 3、重新加载网络
[root@localhost ~]# nmcli c up ens160# 4、查看网络信息
[root@nfs ~]# nmcli d show ens160
GENERAL.DEVICE:                         ens160
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         00:0C:29:4F:88:54
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     ens160
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/3
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         172.25.250.120/24
IP4.GATEWAY:                            172.25.250.2
IP4.ROUTE[1]:                           dst = 172.25.250.0/24, nh = 0.0.0.0, mt = 100
IP4.ROUTE[2]:                           dst = 0.0.0.0/0, nh = 172.25.250.2, mt = 100
IP4.DNS[1]:                             223.5.5.5
IP6.ADDRESS[1]:                         fe80::20c:29ff:fe4f:8854/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 1024

挂载仓库并下载 nfs 服务 

[root@nfs ~]# mount /dev/sr0 /mnt
mount: /mnt: WARNING: source write-protected, mounted read-only.
[root@nfs ~]# dnf -y install nfs-utils

配置 nfs 服务

# 1、创建共享目录
[root@nfs ~]# mkdir /nfs/share -p
[root@nfs ~]# cd /nfs/share# 2、为了有所区分,共享两个页面
[root@nfs share]# echo "rs1 index.html" > index1.html
[root@nfs share]# echo "rs2 index.html" > index2.html
[root@nfs share]# cd# 3、编写配置文件
[root@nfs ~]# vim /etc/exports# 4、启动服务
[root@nfs ~]# systemctl start nfs-server# 5、功能测试
[root@nfs ~]# showmount -e 172.25.250.120
Export list for 172.25.250.120:
/nfs/share 172.25.250.119,172.25.250.118

搭建 RS 服务器

rs1

修改主机名和 IP 地址

# 1、修改主机名
[root@localhost ~]# hostnamectl hostname rs1# 2、修改IP地址
[root@localhost ~]# nmcli c m ens160 ipv4.method manual ipv4.addresses 172.25.250.118/24 ipv4.gateway 172.25.250.2 ipv4.dns 223.5.5.5 connection.autoconnect yes# 3、重新加载
[root@localhost ~]# nmcli c up ens160

挂载仓库并下载 nginx 和 nfs 服务

[root@rs1 ~]# mount /dev/sr0 /mnt
mount: /mnt: WARNING: source write-protected, mounted read-only.
[root@rs1 ~]# dnf -y install nginx nfs-utils

挂载共享目录

[root@rs1 ~]# mount -t nfs 172.25.250.120:/nfs/share /usr/share/nginx/html/

启动服务并测试

[root@rs1 ~]# systemctl start nginx nfs-server
[root@rs1 ~]# showmount -e 172.25.250.120
Export list for 172.25.250.120:
/nfs/share 172.25.250.119,172.25.250.118

为了方便后续的操作这里我们配置一个自动挂载

[root@rs1 ~]# vim /etc/fstab
……
172.25.250.120:/nfs/share	/usr/share/nginx/html/	nfs	defaults	0 0[root@rs1 ~]# systemctl daemon-reload
[root@rs1 ~]# mount -a

配置 nginx

[root@rs1 ~]# vim /etc/nginx/conf.d/rs1.conf
[root@rs1 ~]# cat /etc/nginx/conf.d/rs1.conf
server {listen 80;server_name 172.25.250.118;location / {root /usr/share/nginx/html;index index1.html;}
}

开机自启动 nginx 和 nfs 服务

[root@rs1 ~]# systemctl enable nginx
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.
[root@rs1 ~]# systemctl enable nfs-server
Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /usr/lib/systemd/system/nfs-server.service.

测试

[root@rs1 ~]# curl 172.25.250.118
rs1 index.html

rs2

关闭 rs1 服务器,克隆这台服务器名为 rs2,然后启动 rs2 并做如下的修改。

修改主机名和 IP 地址

[root@rs1 ~]# hostnamectl hostname rs2
[root@rs1 ~]# nmcli c modify ens160 ipv4.addresses 172.25.250.119/24
[root@rs1 ~]# nmcli c up ens160

拷贝 rs1 上编写的自动挂载文件 重新加载和测试

[root@rs2 ~]# scp /etc/fstab 172.25.250.118:/etc/
The authenticity of host '172.25.250.118 (172.25.250.118)' can't be established.
ED25519 key fingerprint is SHA256:zQRVAzxowh+vQParI9tLut0o4tqknS8RIH86Oa4QB/A.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '172.25.250.118' (ED25519) to the list of known hosts.
root@172.25.250.118's password: 
fstab                            100%  743   216.7KB/s   00:00    
[root@rs2 ~]# systemctl daemon-reload
[root@rs2 ~]# mount -a

配置 nginx

[root@rs2 ~]# vim /etc/nginx/conf.d/rs2.conf
[root@rs2 ~]# cat /etc/nginx/conf.d/rs2.conf
server {listen 80;server_name 172.25.250.119;location / {root /usr/share/nginx/html;index index2.html;}
}# 重启nginx
[root@rs2 ~]# systemctl restart nginx

测试

[root@rs2 ~]# curl 172.25.250.119
rs2 index.html

搭建 Keekalived 和 LVS 服务

配置 lvs-master 

修改主机名和 IP 地址

[root@localhost ~]# hostnamectl hostname lvs-master
[root@localhost ~]#  nmcli c modify ens160 ipv4.method manual ipv4.addresses 172.25.250.116/24 ipv4.gateway 172.25.250.2 ipv4.dns 223.5.5.5 
[root@localhost ~]# nmcli c up ens160

挂载仓库和安装 keepalived 和 lvs

[root@lvs-master ~]# mount /dev/sr0 /mnt
mount: /mnt: WARNING: source write-protected, mounted read-only.
[root@lvs-master ~]# dnf -y install keepalived ipvsadm

编写检测脚本 

[root@lvs-master ~]# vim /etc/keepalived/check_nginx.sh
[root@lvs-master ~]# cat /etc/keepalived/check_nginx.sh
#!/bin/bash
counter=$(ps -C nginx --no-header|wc -l)
if [ $counter -eq 0 ]; thensystemctl start nginxif [ `ps -C nginx --no-header|wc -l` -eq 0 ]; thensystemctl stop keepalivedfi
fi# 给脚本可执行权限
[root@lvs-master ~]# chmod +x /etc/keepalived/check_nginx.sh# 复制到 lvs-backup 上
[root@lvs-master ~]# scp /etc/keepalived/check_nginx.sh root@172.25.250.117:/etc/keepalived/
The authenticity of host '172.25.250.117 (172.25.250.117)' can't be established.
ED25519 key fingerprint is SHA256:zQRVAzxowh+vQParI9tLut0o4tqknS8RIH86Oa4QB/A.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '172.25.250.117' (ED25519) to the list of known hosts.
root@172.25.250.117's password: 
check_nginx.sh                             100%  191    37.3KB/s   00:00   

配置 keepalived 和 lvs

[root@lvs-master ~]# ipvsadm-save -n >/etc/sysconfig/ipvsadm
[root@lvs-master ~]# vim /etc/keepalived/keepalived.conf 
[root@lvs-master ~]# cat /etc/keepalived/keepalived.conf 
global_defs {router_id LVS-MASTER
}vrrp_script chk_nginx {script "/etc/keepalived/check_nginx.sh"interval 2
}vrrp_instance VI_1 {state MASTERinterface ens160virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.250.100}track_script {chk_nginx}
}
virtual_server 172.25.250.100 80 {delay_loop 6lb_algo rrlb_kind DRpersistence_timeout 50protocol TCPreal_server 172.25.250.118 80 {weight 3TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}real_server 172.25.250.119 80 {weight 1TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}
}

启动服务

[root@lvs-master ~]# systemctl start keepalived ipvsadm

查询 LVS 配置规则

[root@lvs-master ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.250.100:80 rr persistent 50-> 172.25.250.118:80            Route   3      0          0         -> 172.25.250.119:80            Route   1      0          0    

配置 lvs-backup 

关闭 lvs-master 主机,克隆出 lvs-backup ,并启动 lvs-backup,然后做如下的修改。

修改主机名和 IP 地址

[root@lvs-master ~]# hostnamectl hostname lvs-backup
[root@lvs-master ~]# nmcli c m ens160 ipv4.addresses 172.25.250.117/24
[root@lvs-master ~]# nmcli c up ens160

配置 keepalived 和 lvs

[root@lvs-backup ~]# vim /etc/keepalived/keepalived.conf 
[root@lvs-backup ~]# cat /etc/keepalived/keepalived.conf 
global_defs {router_id LVS-BACKUP
}vrrp_script chk_nginx {script "/etc/keepalived/check_nginx.sh"interval 2
}vrrp_instance VI_1 {state BACKUPinterface ens160virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.25.250.100}track_script {chk_nginx}
}
virtual_server 172.25.250.100 80 {delay_loop 6lb_algo rrlb_kind DRpersistence_timeout 50protocol TCPreal_server 172.25.250.118 80 {weight 3TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}real_server 172.25.250.119 80 {weight 1TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}
}

启动服务

[root@lvs-backup ~]# systemctl start keepalived ipvsadm

查询 LVS 配置规则

[root@lvs-backup ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.250.100:80 rr persistent 50-> 172.25.250.118:80            Route   3      0          0         -> 172.25.250.119:80            Route   1      0          0    

修改 RS 服务器

rs1

配置 VIP

[root@rs1 ~]# ifconfig lo:1 172.25.250.100 netmask 255.255.255.255 broadcast 172.25.250.100 up
[root@rs1 ~]# ip a show lo
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 172.25.250.100/32 brd 172.25.250.100 scope global lo:1valid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever

添加内核参数

[root@rs1 ~]# vim /etc/sysctl.conf 
[root@rs1 ~]# sysctl -p
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
net.ipv4.ip_forward = 0

增加一个路由

[root@rs2 ~]# route add -host 172.25.250.100 dev lo:1
[root@rs2 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.25.250.2    0.0.0.0         UG    100    0        0 ens160
172.25.250.0    0.0.0.0         255.255.255.0   U     100    0        0 ens160
172.25.250.100  0.0.0.0         255.255.255.255 UH    0      0        0 lo

rs2

配置 VIP

[root@rs2 ~]# ifconfig lo:1 172.25.250.100 netmask 255.255.255.255 broadcast 172.25.250.100 up
[root@rs2 ~]# ip a show lo
'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 172.25.250.100/32 brd 172.25.250.100 scope global lo:1valid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever

添加内核参数

[root@rs2 ~]# vim /etc/sysctl.conf 
[root@rs2 ~]# sysctl -p
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
net.ipv4.ip_forward = 0

增加一个路由

[root@rs2 ~]# route add -host 172.25.250.100 dev lo:1
[root@rs2 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.25.250.2    0.0.0.0         UG    100    0        0 ens160
172.25.250.0    0.0.0.0         255.255.255.0   U     100    0        0 ens160
172.25.250.100  0.0.0.0         255.255.255.255 UH    0      0        0 lo

测试

[root@client ~]# curl 172.25.250.100
rs1 index.html
[root@client ~]# curl 172.25.250.100
rs2 index.html

也可以通过浏览器测试

总结

两台 RS 服务器上需要配置内核参数和添加 VIP

启动 ipvsadm 服务时需要先初始化该文件  ipvsadm-save -n >/etc/sysconfig/ipvsadm

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/75717.shtml

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

相关文章

【视觉与语言模型参数解耦】为什么?方案?

一些无编码器的MLLMs统一架构如Fuyu&#xff0c;直接在LLM内处理原始像素&#xff0c;消除了对外部视觉模型的依赖。但是面临视觉与语言模态冲突的挑战&#xff0c;导致训练不稳定和灾难性遗忘等问题。解决方案则是通过参数解耦方法解决模态冲突。 在多模态大语言模型&#xf…

AI比人脑更强,因为被植入思维模型【43】蝴蝶效应思维模型

giszz的理解&#xff1a;蝴蝶效应我们都熟知&#xff0c;就是说一个微小的变化&#xff0c;能带动整个系统甚至系统的空间和时间的远端&#xff0c;产生巨大的链式反应。我学习后的启迪&#xff0c;简单的说&#xff0c;就是不要忽视任何微小的问题&#xff0c;更多时候&#x…

AI 数理逻辑基础之统计学基本原理(上)

目录 文章目录 目录统计学统计学基本概念描述性统计数据可视化图表工具 汇总统计统计数据的分布情况&#xff1a;中位数、众数、平均值统计数据的离散程度&#xff1a;极差、方差、标准差、离散系数 相关分析Pearson 线性关系相关系数Spearman 单调关系相关系数 回归分析回归模…

无招回归阿里

这两天&#xff0c;无招回归阿里的新闻被刷屏了。无招创业成立的两氢一氧公司无招的股份也被阿里收购&#xff0c;无招以这种姿态回归阿里&#xff0c;并且出任钉钉的 CEO。有人说&#xff0c;这是对 5 年前“云钉一体”战略的纠偏。现在确实从云优先到 AI 优先&#xff0c;但云…

算法题(114):矩阵距离

审题&#xff1a; 本题需要我们找出所有0距离最近的1的曼哈顿距离 思路&#xff1a; 方法一&#xff1a;多源bfs 分析曼哈顿距离&#xff1a; 求法1&#xff1a;公式法&#xff0c;带入题目公式&#xff0c;利用|x1-x2||y1-y2|求出 求法2&#xff1a;曼哈顿距离就是最短距离 本…

LLM 性能优化有哪些手段?

LLM(大语言模型)性能优化是一个多维度、多层次的系统工程,涉及从提示工程到模型微调,从推理加速到系统架构优化等多个方面。以下是当前主流的优化手段及其技术细节: 一、提示工程(Prompt Engineering) 提示工程是优化LLM性能最直接、成本最低的方法,适用于快速原型开发…

群体智能避障革命:RVO算法在Unity中的深度实践与优化

引言&#xff1a;游戏群体移动的挑战与进化 在《全面战争》中万人战场恢弘列阵&#xff0c;在《刺客信条》闹市里人群自然涌动&#xff0c;这些令人惊叹的场景背后&#xff0c;都离不开一个关键技术——群体动态避障。传统路径规划算法&#xff08;如A*&#xff09;虽能解决单…

I.MX6ULL 交叉编译环境配置与使用

一、什么是交叉编译 我们一般开发程序在自己的电脑上开发&#xff0c;运行的时候将程序烧录到板子运行。但我们的开发平台是X86架构&#xff0c;而I.MX6ULL是ARM架构&#xff0c;所以需要一个在 X86 架构的 PC 上运行&#xff0c;可以编译 ARM 架构代码的 GCC 编译器&#xff0…

Harmony OS“一多” 详解:基于窗口变化的断点自适应实现

一、一多开发核心概念&#xff08;18N模式&#xff09; 目标&#xff1a;一次开发多端部署 解决的问题&#xff1a; 1、界面级一多&#xff1a;适配不同屏幕尺寸 2、功能级一多&#xff1a;设备功能兼容性处理(CanIUser) 3、工…

SpringMvc获取请求数据

基本参数 RequestMapping("save5") ResponseBody public User save5(String name, int age) {User user new User();user.setName(name);user.setAge(age);return user; } 在url中将name与age进行编写&#xff0c;通过框架可以提取url中的name与age&#xff0c;这…

大模型持续学习方案解析:灾难性遗忘的工业级解决方案

引言 随着大型语言模型&#xff08;LLMs&#xff09;如 GPT 系列、BERT 等在自然语言处理领域取得突破性进展&#xff0c;它们强大的理解和生成能力已经渗透到各行各业。然而&#xff0c;这些模型通常是在海量静态数据集上进行一次性预训练的。现实世界是动态变化的&#xff0…

推荐系统(二十二):基于MaskNet和WideDeep的商品推荐CTR模型实现

在上一篇文章《推荐系统&#xff08;二十一&#xff09;&#xff1a;基于MaskNet的商品推荐CTR模型实现》中&#xff0c;笔者基于 MaskNet 构建了一个简单的模型。笔者所经历的工业级实践证明&#xff0c;将 MaskNet 和 Wide&Deep 结合应用&#xff0c;可以取得不错的效果&…

【爬虫案例】采集 Instagram 平台数据几种方式(python脚本可直接运行)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、概述1.1 Instagram基础信息1.2 Instagram平台架构核心技术栈1.3 采集提示1.4 几种采集方案对比二、四种采集方案分析三、写爬虫采集Instagram案例3.1 采集作品信息并下载视频或图片(无需登录)3.2 explore接口的采…

OFP--2018

文章目录 AbstractIntroductionRelated Work2D object detection3D object detection from LiDAR3D object detection from imagesIntegral images 3D Object Detection ArchitectureFeature extractionOrthographic feature transformFast average pooling with integral imag…

LINUX 4 tar -zcvf -jcvf -Jcvf -tf -uf

cp -r mv: 1.移动文件到目录 2.文件改名 3.目录改名 s 上面是打包 下面是打包并压缩

linux signal up/down/down_interruptiable\down_uninterruptiable使用

在Linux内核中&#xff0c;down, down_interruptible, down_killable, 和 up 是用于操作信号量&#xff08;semap hores&#xff09;的函数&#xff0c;它们用于进程同步和互斥。以下是对这些函数的简要说明。 1&#xff0c;down(&sem): 这个函数用于获取信号量。如果信号…

使用人工智能大模型DeepSeek,如何进行论文润色和去重?

今天我们学习人工智能&#xff0c;如何协助我们进行论文润色和去重。手把手的学习视频地址请访问https://edu.csdn.net/learn/40402/666422 第一步在腾讯元宝对话框中输入如何协助老师做论文润色&#xff0c;通过提问&#xff0c;我们了解了老师写论文润色的步骤和建议。润色的…

UE5 Simulation Stage

首先将Grid2D创建出来&#xff0c;然后设置值&#xff0c;Grid2D类似于在Niagara系统中的RenderTarget2D&#xff0c;可以进行绘制&#xff0c;那么设置大小为512 * 512 开启Niagara粒子中的Simulation Stage 然后开始编写我们的自定义模块 模块很简单&#xff0c;TS就是Textur…

OpenCV 图形API(6)将一个矩阵(或图像)与一个标量值相加的函数addC()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 addC 函数将给定的标量值加到给定矩阵的每个元素上。该功能可以用矩阵表达式替换&#xff1a; dst src1 c \texttt{dst} \texttt{src1} \te…

多GPU训练

写在前面 限于财力不足&#xff0c;本机上只有一个 GPU 可供使用&#xff0c;因此这部分的代码只能够稍作了解&#xff0c;能够使用的 GPU 也只有一个。 多 GPU 的数据并行&#xff1a;有几张卡&#xff0c;对一个小批量数据&#xff0c;有几张卡就分成几块&#xff0c;每个 …