Keepalived+LVS+nginx高可用架构


注明:所有软件已经下载好,防火墙和SELinux已经全部关闭
一.搭建NFS
1.服务端
1.创建文件
[root@nfs ~]# mkdir -p /nfs/data
2、修改权限
[root@nfs ~]# chmod o+rw /nfs/data
3、写配置文件
[root@nfs ~]# cat /etc/exports
/nfs/data 192.168.111.118(rw)
/nfs/data 192.168.111.119(rw)4、重启服务
[root@nfs ~]# systemctl restart nfs-server
5、暴露文件
[root@nfs data]# showmount -e 192.168.111.120
Export list for 192.168.111.120:
/nfs/data (everyone)
2、客户端
RS1
1.创建挂载目录
[root@rs1 ~]# mkdivar/www/haha
2、将创建的目录挂载到服务端的共享目录
[root@rs1 ~]# mount -t nfs 192.168.111.120:/nfs/data /var/www
3、查看是否挂载成功
[root@rs1 ~]# df /var/www
Filesystem 1K-blocks Used Available Use% Mounted on
192.168.111.120:/nfs/data 47202304 2063616 45138688 5% /varvar/www
RS2
1.创建挂载目录
[root@rs2 ~]# mkdir -p /var/www/xixi
2、将创建的目录挂载到服务端的共享目录
[root@rs2 ~]# mount -t nfs 192.168.111.120:/nfs/data /var/www
3、查看是否挂载成功
[root@rs2 nfs]# df /var/www
Filesystem 1K-blocks Used Available Use% Mounted on
192.168.111.120:/nfs/data 47202304 2063616 45138688 5% /var/www
二、搭建nginx服务
RS1
1.写nginx的配置文件
[root@rs1 ~]# cat /etc/nginx/conf.d/haha.conf
server {
server_name 192.168.111.118;
root /var/www/haha;
access_log /var/log/nginx/hehe_access.log;
error_log /var/log/nginx/hehe_error.log;
}2.在NFS里面写入nginx的页面
[root@nfs ~]# echo "welcome rs1" > /nfs/data/haha/index.html
3.重启服务
[root@rs1 ~]# systemctl restart nginx
4.测试服务
[root@rs1 ~]# curl 192.168.111.118
welcome rs1
RS2
1.写nginx的配置文件
[root@rs2 ~]# cat /etc/nginx/conf.d/xixi.conf
server {
server_name 192.168.111.119;
root /var/www/xixi;
access_log /var/log/nginx/xixi_access.log;
error_log /var/log/nginx/xixi_error.log;
}2.在NFS里面写入nginx的页面
[root@nfs ~]# echo "welcome rs2" > /nfs/data/xixi/index.html
3.重启服务
[root@rs2 ~]# systemctl restart nginx
4.测试服务
[root@rs2 ~]# curl 192.168.111.119
welcome rs2
三、搭建keepalived+lvs服务
master
1.修改keepalived的配置文件
[root@lvs-master ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm
[root@lvs-master ~]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id lvs_master
}vrrp_instance VI_1 {
state MASTER
interface ens160
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.111.100
}
}#配置lvs,需要指定VIP地址
virtual_server 192.168.111.100 80 {
delay_loop 6 #健康检查时间间隔,时间为秒
lb_algo wrr #负载均衡的算法,rr表示轮询,wrr表示带权轮询
lb_kind DR #负载均衡的模式,此处为DR 支持的模式有DR|NAT|TUN
persistence_timeout 50 #持久化时间,默认为秒。
protocol TCP #负载均衡协议real_server 192.168.111.118 80 {
weight 3 #权重
TCP_CHECK { #检查
connect_timeout 3 #连接时间,单位为秒
retry 3 #重试次数
delay_before_retry 3 #重试间隔时间
}
}
real_server 192.168.111.119 80 {
weight 1
TCP_CHECK {
url {
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
backup
1.修改配置文件
[root@lvs-backup ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm
[root@lvs-backup ~]# cat /etc/keepalived/keepalived.conf
global_defs {
router_id lvs_backup
}vrrp_instance VI_1 {
state BACKUP
interface ens160
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.111.100
}
}virtual_server 192.168.111.100 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 50
protocol TCPreal_server 192.168.111.118 80 {
weight 3
TCP_CHECK {
url {
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 192.168.111.119 80 {
weight 1
TCP_CHECK {
url {
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}2.启动两台服务器
[root@lvs-master ~]# systemctl restart keepalived.service ipvsadm.service
[root@lvs-backup ~]# systemctl restart keepalived.service ipvsadm.service
3.查看配置规则
[root@lvs-master ~]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP lvs-master:http wrr persistent 50
-> 192.168.111.118:http Route 3 0 0
-> 192.168.111.119:http Route 1 0 1[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 192.168.111.100:80 wrr persistent 50
-> 192.168.111.118:80 Route 3 0 0
-> 192.168.111.119:80 Route 1 0 0
四、修改RS服务
1、为两台 RS 服务器配置 VIP
[root@rs1 ~]# ifconfig lo:1 192.168.111.100 netmask 255.255.255.255 broadcast 192.168.111.100 up
[root@rs2 ~]# ifconfig lo:1 192.168.111.100 netmask 255.255.255.255 broadcast 192.168.111.100 up
2、配置核心参数。
[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 ~]# 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 = 03、配置路由
[root@rs1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.111.2 0.0.0.0 UG 100 0 0 ens160
192.168.111.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160
192.168.111.100 0.0.0.0 255.255.255.255 UH 0 0 0 lo
[root@rs2 ~]# route add -host 192.168.111.100 dev lo:1
[root@rs2 ~]#
[root@rs2 ~]#
[root@rs2 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.111.2 0.0.0.0 UG 100 0 0 ens160
192.168.111.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160
192.168.111.100 0.0.0.0 255.255.255.255 UH 0 0 0 lo
五、测试

相关文章:
Keepalived+LVS+nginx高可用架构
注明:所有软件已经下载好,防火墙和SELinux已经全部关闭 一.搭建NFS 1.服务端 1.创建文件 [rootnfs ~]# mkdir -p /nfs/data 2、修改权限 [rootnfs ~]# chmod orw /nfs/data 3、写配置文件 [rootnfs ~]# cat /etc/exports /nfs/data 192.168.111.118(r…...
【力扣hot100题】(034)LRU缓存
做完这题已经没有任何力气写链表题了。 思路很简单,就是调试特别的痛苦。 老是频频报错,唉。 class LRUCache { public:struct ListNode{int key,val;ListNode* next; ListNode* prev;ListNode() : key(0), val(0), next(nullptr), prev(nullptr) {}L…...
【redis】缓存 更新策略(定期、实时生存),缓存预热、穿透、雪崩、击穿详解
什么是缓存 redis 最常用的场景 核心思路就是把一些常用的数据,放到触手可及(访问速度更快)的地方 ⽐如我需要去⾼铁站坐⾼铁. 我们知道坐⾼铁是需要反复刷⾝份证的 (进⼊⾼铁站, 检票, 上⻋,乘⻋过程中, 出站…)正常来说, 我的⾝份证是放在…...
好文和技术网站记录
后续不断记录一些本人觉得的好文和一些技术网站 技术网站 Java 全栈知识体系 https://www.pdai.tech/ 文章 利用 NginxKeepalived 实现高可用技术 https://cloud.tencent.com/developer/article/1647182?policyId1004...
使用STM32CubeMX和Keil在STM32上创建并运行一个简单的FreeRTOS多任务程序
目标 利用FreeRTOS运行两个任务,分别为点灯和OLED屏的显示。 利用STM32CubeMX生成Keil工程和相关初始化代码 知识回顾 之前已经利用STM32CubeMX生成过Keil工程和相关初始化代码了,可以去回顾一下,详情见:https://blog.csdn.ne…...
从查重报告入手的精准论文降重秘籍
每个同学在使用论文查重时,为何同一篇文章,可能重复率从10%—30%不等?归根结底还是使用了不同查重系统。其实不同的论文查重与论文AIGC检测系统的算法、数据及模型都不一样,那如何针对这些系统的“个性”精准降重,这篇…...
车辆控制解决方案
车辆控制解决方案 /* * Purpose: 优化车辆控制的功能 -> 用户在控制车辆状态时,实现控制按钮点击状态改变只触发一次onSwitchChange事件,不再下发控制指令,同时清除加载车辆实时状态的定时器status_interval直到有返回值再开启࿰…...
【机器学习】嘿马机器学习(算法篇)第14篇:决策树算法,学习目标【附代码文档】
本教程的知识点为:机器学习算法定位、 K-近邻算法 1.4 k值的选择 1 K值选择说明 1.6 案例:鸢尾花种类预测--数据集介绍 1 案例:鸢尾花种类预测 1.8 案例:鸢尾花种类预测—流程实现 1 再识K-近邻算法API 1.11 案例2:预测…...
Uubuntu20.04复现SA-ConvONet步骤
项目地址: tangjiapeng/SA-ConvONet: ICCV2021 Oral SA-ConvONet: Sign-Agnostic Optimization of Convolutional Occupancy Networks 安装步骤: 一、系统更新 检查系统是否已经更新到最新版本: sudo apt-get update sudo apt-get upgra…...
设计模式 三、结构型设计模式
一、代理模式 代理设计模式(Proxy Design Pattern)是一种结构型设计模式,它为其他对象提供了一个代理,以控制对这个对象的访问。 代理模式可以用于实现懒加载、安全访问控制、日志记录等功能。简单来说,代理模式 就是通…...
C语言函数实战指南:从零到一掌握函数设计与10+案例解析(附源码)
一、函数基础:程序的“积木块” (一)什么是函数? 函数是可重复使用的代码块,用于实现特定功能。如同乐高积木,通过组合不同函数,可快速构建复杂程序。例如: #include <stdio.h>// 函数定义:计算两数之和 int add(int a, int b) {return a + b; }int main() {…...
Prompt攻击是什么
什么是Prompt攻击 Prompt攻击(Prompt Injection/Attack) 是指通过精心构造的输入提示(Prompt),诱导大语言模型(LLM)突破预设安全限制、泄露敏感信息或执行恶意操作的攻击行为。其本质是利用模型对自然语言的理解漏洞,通过语义欺骗绕过防护机制。 Prompt攻击的精髓:学…...
【Linux网络#18】:深入理解select多路转接:传统I/O复用的基石
📃个人主页:island1314 🔥个人专栏:Linux—登神长阶 目录 一、前言:🔥 I/O 多路转接 为什么需要I/O多路转接? 二、I/O 多路转接之 select 1. 初识 select2. select 函数原型2.1 关于 fd_set 结…...
华院计算3项应用成果入选钢铁行业智能制造解决方案推荐目录(2024年)
近日,中国钢铁工业协会发布《钢铁行业智能制造解决方案推荐目录(2024年)》。由中国钢铁工业协会、钢铁行业智能制造联盟共同开展了2024年钢铁行业智能制造解决方案及数字化转型典型场景应用案例遴选、智能制造创新大赛(钢铁行业赛…...
python使用cookie、session、selenium实现网站登录(爬取信息)
一、使用cookie 这段代码演示了如何使用Python的urllib和http.cookiejar模块来实现网站的模拟登录,并在登录后访问需要认证的页面。 # 导入必要的库 import requests from urllib import request, parse# 1. 导入http.cookiejar模块中的CookieJar类,用…...
vector模拟实现2
文章目录 vector的模拟实现erase函数resize拷贝构造赋值重载函数模版构造及其细节结语 我们今天又见面啦,给生活加点impetus!!开启今天的编程之路 今天我们来完善vector剩余的内容,以及再探迭代器失效! 作者ÿ…...
观察者模式在Java单体服务中的运用
观察者模式主要用于当一个对象发生改变时,其关联的所有对象都会收到通知,属于事件驱动类型的设计模式,可以对事件进行监听和响应。下面简单介绍下它的使用: 1 定义事件 import org.springframework.context.ApplicationEvent;pu…...
详解相机的内参和外参,以及内外参的标定方法
1 四个坐标系 要想深入搞清楚相机的内参和外参含义, 首先得清楚以下4个坐标系的定义: 世界坐标系: 名字看着很唬人, 其实没什么大不了的, 这个就是你自己定义的某一个坐标系。 比如, 你把房间的某一个点定…...
在线sql 转 rust 模型(Diesel、SeaORM),支持多数据 mysql, pg等
SQL 转 Rust 在 Rust 语言中,常用 Diesel 和 SeaORM 进行数据库操作。手写 ORM 模型繁琐,gotool.top 提供 SQL 转 Diesel、SeaORM 工具,自动生成 Rust 代码,提高开发效率。 特色 支持 Diesel / SeaORM,生成符合规范…...
高并发内存池(二):Central Cache的实现
前言:本文将要讲解的高并发内存池,它的原型是Google的⼀个开源项⽬tcmalloc,全称Thread-Caching Malloc,近一个月我将以学习为目的来模拟实现一个精简版的高并发内存池,并对核心技术分块进行精细剖析,分享在…...
[Windows] VutronMusic v1.6.0 音乐播放器纯净版,可登录同步
VutronMusic-简易好看的PC音乐播放器 链接:https://pan.xunlei.com/s/VOMq7P_fTyhLUXeGerDVhrCTA1?pwduvut# VutronMusic v1.6.0 音乐播放器纯净版,可登录同步...
macvlan 和 ipvlan 实现原理及设计案例详解
一、macvlan 实现原理 1. 核心概念 macvlan 允许在单个物理网络接口上创建多个虚拟网络接口,每个虚拟接口拥有 独立的 MAC 地址 和 IP 地址。工作模式: bridge 模式(默认):虚拟接口之间可直接通信,类似交…...
【蓝桥杯】每日练习 Day19,20
目录 前言 蒙德里安的梦想 分析 最短Hamilton路径 分析 代码 乌龟棋 分析 代码 松散子序列 分析 代码 代码 前言 今天不讲数论(因为上课学数论真是太难了,只学了高斯消元)所以今天就不单独拿出来讲高斯消元了。今天讲一下昨天和…...
《AI大模型应知应会100篇》第7篇:Prompt Engineering基础:如何与大模型有效沟通
第7篇:Prompt Engineering基础:如何与大模型有效沟通 摘要 Prompt Engineering(提示工程)是与大模型高效沟通的关键技能。通过精心设计的Prompt,可以让模型生成更准确、更有用的结果。本文将从基础知识到高级策略&…...
微服务架构技术栈选型避坑指南:10大核心要素深度拆解
微服务架构的技术栈选型直接影响系统的稳定性、扩展性和可维护性。以下从10大核心要素出发,结合主流技术方案对比、兼容性评估、失败案例及优化策略,提供系统性选型指南。 1. 服务框架与通信 关键考量点 扩展性:框架需支持定制化扩展&#x…...
Elasticsearch 正排索引
一、正排索引基础概念 在 Elasticsearch 中,正排索引用于存储完整的文档内容,以便通过文档ID 快速定位文档的字段值。正排索引通过 Doc Values 和 Store Fields 两种形式,为聚合、排序、脚本计算等场景提供高效支持。Doc Values 的列式存储设…...
Spring实现WebScoket
SpringWeb编程方式分为Servlet模式和响应式。Servlet模式参考官方文档:Web on Servlet Stack :: Spring Framework,响应式(Reacive)参考官方文档:Web on Reactive Stack :: Spring Framework。 WebSocket也有两种编程方…...
Token是什么?
李升伟 整理 “Token” 是一个多义词,具体含义取决于上下文。以下是几种常见的解释: 1. 计算机科学中的 Token 定义:在编程和计算机科学中,Token 是源代码经过词法分析后生成的最小单位,通常用于编译器和解释器。 …...
odoo-045 ModuleNotFoundError: No module named ‘_sqlite3‘
文章目录 一、问题二、解决思路 一、问题 就是项目启动,本来好好地,忽然有一天报错,不知道什么原因。 背景: 我是在虚拟环境中使用的python3.7。 二、解决思路 虚拟环境和公共环境直接安装 sqlite3 都会报找不到这个库的问题…...
cesium加载CTB生成的地形数据
由于CTB生成的地形数据是压缩的(gzip)格式,需要在nginx加上特殊配置才可以正常加载,NGINX全部配置如下 worker_processes 1; events {worker_connections 1024; } http {include mime.types;default_type application/o…...
