Web集群_02

Web集群_01

Keepalived

概述
  • Keepalived实现了高可用集群

  • Keepalived最初是为LVS设计 , 专门监控各种服务器节点的状态

  • Keepalived 后加入了 VRRP 功能 , 防止单点故障

    • VRRP ( 虚拟冗余路由协议 )

    • VRRP能在不改变网组的情况下 , 将多台路由器虚拟成一个虚拟路由器 , 通过配置虚拟路由器的IP地址为默认网关 , 实现网关的备份

作用
  • 通过 VRRP 实现服务或网络的高可用性
  • 为LVS设计 , 监控集群各个服务节点的状态
  • 某个节点出现故障时 , Keepalived将检测到后将节点从集群系统中剔除
  • 节点修复后 , 自动将此节点重新加入集群
  • 节点需要手工修复
特点
  1. 部署简单 , 只需要配置一个配置文件即可
  2. 加入了VRRP , 可以保证业务或网络不间断稳定运行
核心功能
  • 健康检查
    • 采用 tcp三次握手 , icmp请求 , http请求 , udp , echo请求等方式
    • 对负载均衡后端实际服务器进行保活
  • 故障切换
    • 主要应用在配置了主备的服务器上
    • 使用ARRP 协议维持主备之间的心跳
    • 当主服务器出现问题时 , 由备服务器承载对应业务
    • 最大限度减少损失 , 并提供服务的稳定性
原理

keepalived 工作在 TCP/IP五层模型中 , 使用 第三层到第五层

网络层 , 传输层 , 应用层

  • 网络层 : 通过 ICMP协议向集群每个节点发送UCMP数据包 , 根据回馈判定节点是否正常运行 , 失效节点则剔除集群
  • 传输层 : 通过 TCP协议的端口连接和扫描技术判断集群节点是否正常 , 若端口无反映则视为失效节点
  • **应用层 : 用户可以编写shell脚本或playbook剧本来运行keepalived , keepalived根据脚本检测各种程序或服务是否正常 . **

配置Keepalived 高可用web集群

# 在两台web服务器上安装keepalived
[root@pubserver cluster]# vim 07-install-keepalived.yml
---
- name: install keepalivedhosts: webserverstasks:- name: install keepalived   # 安装keepalivedyum:name: keepalivedstate: present[root@pubserver cluster]# ansible-playbook 07-install-keepalived.yml# 修改配置文件
[root@web1 ~]# vim /etc/keepalived/keepalived.conf 12    router_id web1    # 设置本机在集群中的唯一识别符13    vrrp_iptables     # 自动配置iptables放行规则... ...20 vrrp_instance VI_1 {21     state MASTER           # 状态,主为MASTER,备为BACKUP22     interface eth0         # 网卡23     virtual_router_id 51   # 虚拟路由器地址24     priority 100           # 优先级25     advert_int 1           # 发送心跳消息的间隔26     authentication {27         auth_type PASS     # 认证类型为共享密码28         auth_pass 1111     # 集群中的机器密码相同,才能成为集群29     }   30     virtual_ipaddress {31         192.168.88.80/24    # VIP地址32     }   33 }
# 删除下面所有行
[root@web1 ~]# systemctl start keepalived# 等几秒服务完全启动后,可以查看到vip
[root@web1 ~]# ip a s eth0 | grep '88'inet 192.168.88.100/24 brd 192.168.88.255 scope global noprefixroute eth0inet 192.168.88.80/24 scope global secondary eth0# 配置web2
[root@web1 ~]# scp /etc/keepalived/keepalived.conf 192.168.88.200:/etc/keepalived/[root@web2 ~]# vim /etc/keepalived/keepalived.conf 12    router_id web2          # 改id13    vrrp_iptables... ... 20 vrrp_instance VI_1 {21     state BACKUP           # 改状态22     interface eth023     virtual_router_id 5124     priority 80            # 改优先级25     advert_int 126     authentication {27         auth_type PASS28         auth_pass 111129     }30     virtual_ipaddress {31         192.168.88.80/2432     }33 }# 启动服务
[root@web2 ~]# systemctl start keepalived
# 查看地址,eth0不会出现vip
[root@web2 ~]# ip a s | grep '88'inet 192.168.88.200/24 brd 192.168.88.255 scope global noprefixroute eth0# 测试,现在访问88.80,看到是web1上的内容
[root@client1 ~]# curl http://192.168.88.80
Welcome from web1# 模拟web1出现故障
[root@web1 ~]# systemctl stop keepalived.service # 测试,现在访问88.80,看到是web2上的内容
[root@client1 ~]# curl http://192.168.88.80
Welcome from web2# 在web2上查看vip,可以查看到vip 192.168.88.80
[root@web2 ~]# ip a s | grep '88'inet 192.168.88.200/24 brd 192.168.88.255 scope global noprefixroute eth0inet 192.168.88.80/24 scope global secondary eth0

监控80端口 , 实现主备切换

实现原理
  • 配置高可用的web集群时,Keepalived只为服务器提供了VIP

  • Keepalived不知道服务器上运行了哪些服务

  • MASTER服务器可以通过跟踪脚本监视本机的80端口,一旦本机80端口失效,则将VIP切换至BACKUP服务器

  • Keepalived对脚本的要求是,退出码为0表示访问成功;退出码为1表示失败。

实施
# 1. 在MASTER上创建监视脚本
[root@web1 ~]# vim /etc/keepalived/check_http.sh
#!/bin/bash
ss -tlnp | grep :80 &> /dev/null && exit 0 || exit 1[root@web1 ~]# chmod +x /etc/keepalived/check_http.sh# 2. 修改MASTER配置文件,使用脚本
[root@web1 ~]# vim /etc/keepalived/keepalived.conf 1 ! Configuration File for keepalived2 3 global_defs {
...略...18 }19 20 vrrp_script chk_http_port {  # 定义监视脚本21     script "/etc/keepalived/check_http.sh"22     interval 2   # 脚本每隔2秒运行一次23 }2425 vrrp_instance VI_1 {26     state MASTER27     interface eth028     virtual_router_id 5129     priority 10030     advert_int 131     authentication {32         auth_type PASS33         auth_pass 111134     }35     virtual_ipaddress {36         192.168.88.80/2437     }38     track_script {    # 引用脚本39         chk_http_port40     }41 }# 3. 重起服务
[root@web1 ~]# systemctl restart keepalived.service # 4. 测试,关闭web1的nginx后,VIP将会切换至web2
[root@web1 ~]# systemctl stop nginx.service 
[root@web1 ~]# ip a s | grep 88inet 192.168.88.100/24 brd 192.168.88.255 scope global noprefixroute eth0
[root@web2 ~]# ip a s | grep 88inet 192.168.88.200/24 brd 192.168.88.255 scope global noprefixroute eth0inet 192.168.88.80/24 scope global secondary eth0# 5. 当MASTER的nginx修复后,VIP将会切换回至web1
[root@web1 ~]# systemctl start nginx.service 
[root@web1 ~]# ip a s | grep 88inet 192.168.88.100/24 brd 192.168.88.255 scope global noprefixroute eth0inet 192.168.88.80/24 scope global secondary eth0[root@web2 ~]# ip a s | grep 88inet 192.168.88.200/24 brd 192.168.88.255 scope global noprefixroute eth0

配置高可用 , 负载均衡web集群

  • 开启web1 , web2 的虚拟网卡 ifup lo:0 192.168.88.15
  • ifup lo:0
  • 设置开启自动启动
  • /etc/rc.d/rc.local 内为开机执行命令 , 添加 ifup lo:0
LVS-DR模式
  • client1:eth0->192.168.88.10
  • lvs1:eth0->192.168.88.5
  • lvs2:eth0->192.168.88.6
  • web1:eth0->192.168.88.100
  • web2:eth0->192.168.88.200
环境准备
# 关闭2台web服务器上的keepalived,并卸载
[root@pubserver cluster]# vim 08-rm-keepalived.yml
---
- name: remove keepalivedhosts: webserverstasks:- name: stop keepalived       # 停服务service:name: keepalivedstate: stopped- name: uninstall keepalived   # 卸载yum:name: keepalivedstate: absent[root@pubserver cluster]# ansible-playbook 08-rm-keepalived.yml# 创建新虚拟机lvs2
[root@myhost ~]# vm clone lvs2# 为lvs2设置ip地址
[root@myhost ~]# vm setip lvs2 192.168.88.6# 连接
[root@myhost ~]# ssh 192.168.88.6
配置高可用 , 负载均衡
1. 在2台web服务器的lo上配置vip
2. 在2台web服务器上配置内核参数
3. 删除lvs1上的eth0上的VIP地址。因为vip将由keepalived接管
[root@pubserver cluster]# vim 09-del-lvs1-vip.yml
---
- name: del lvs1 viphosts: lvs1tasks:- name: rm viplineinfile:            # 在指定文件中删除行path: /etc/sysconfig/network-scripts/ifcfg-eth0regexp: 'IPADDR2='   # 正则匹配state: absentnotify: restart systemhandlers:- name: restart systemshell: reboot[root@pubserver cluster]# ansible-playbook 09-del-lvs1-vip.yml# 查看结果
[root@lvs1 ~]# ip a s eth0 | grep 88inet 192.168.88.5/24 brd 192.168.88.255 scope global noprefixroute eth0
4. 删除lvs1上的lvs规则。因为lvs规则将由keepalived创建
[root@lvs1 ~]# ipvsadm -Ln   # 查看规则
[root@lvs1 ~]# ipvsadm -D -t 192.168.88.15:80
5. 在lvs上配置keepalived
# 在主机清单文件中加入lvs2的说明
[root@pubserver cluster]# vim inventory
...略...
[lb]
lvs1 ansible_host=192.168.88.5
lvs2 ansible_host=192.168.88.6
...略...# 安装软件包
[root@pubserver cluster]# cp 01-upload-repo.yml 10-upload-repo.yml
---
- name: config repos.dhosts: lbtasks:- name: delete repos.dfile:path: /etc/yum.repos.dstate: absent- name: create repos.dfile:path: /etc/yum.repos.dstate: directorymode: '0755'- name: upload local88copy:src: files/local88.repodest: /etc/yum.repos.d/[root@pubserver cluster]# ansible-playbook 10-upload-repo.yml [root@pubserver cluster]# vim 11-install-lvs2.yml
---
- name: install lvs keepalivedhosts: lbtasks:- name: install pkgs    # 安装软件包yum:name: ipvsadm,keepalivedstate: present[root@pubserver cluster]# ansible-playbook 11-install-lvs2.yml[root@lvs1 ~]# vim /etc/keepalived/keepalived.conf 12    router_id lvs1       # 为本机取一个唯一的id13    vrrp_iptables        # 自动开启iptables放行规则
... ...20 vrrp_instance VI_1 {21     state MASTER22     interface eth023     virtual_router_id 5124     priority 10025     advert_int 126     authentication {27         auth_type PASS28         auth_pass 111129     }   30     virtual_ipaddress {31         192.168.88.15       # vip地址,与web服务器的vip一致32     }   33 }# 以下为keepalived配置lvs的规则35 virtual_server 192.168.88.15 80 {   # 声明虚拟服务器地址36     delay_loop 6     # 健康检查延迟6秒开始37     lb_algo wrr      # 调度算法为wrr38     lb_kind DR       # 工作模式为DR39     persistence_timeout 50  # 50秒内相同客户端调度到相同服务器40     protocol TCP     # 协议是TCP41 42     real_server 192.168.88.100 80 {   # 声明真实服务器43         weight 1          # 权重44         TCP_CHECK {       # 通过TCP协议对真实服务器做健康检查45             connect_timeout 3 # 连接超时时间为3秒46             nb_get_retry 3    # 3次访问失败则认为真实服务器故障47             delay_before_retry 3  # 两次检查时间的间隔3秒48         }49     }50     real_server 192.168.88.200 80 {51         weight 252         TCP_CHECK {53             connect_timeout 354             nb_get_retry 355             delay_before_retry 356         }57     }58 }# 以下部分删除# 启动keepalived服务
[root@lvs1 ~]# systemctl start keepalived# 验证
[root@lvs1 ~]# ip a s eth0 | grep 88inet 192.168.88.5/24 brd 192.168.88.255 scope global noprefixroute eth0inet 192.168.88.15/32 scope global eth0[root@lvs1 ~]# 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.88.15:80 wrr persistent 50-> 192.168.88.100:80            Route   1      0          0     -> 192.168.88.200:80            Route   2      0          0    # 客户端连接测试
[root@client1 ~]# for i in {1..6}; do curl http://192.168.88.15/; done
Welcome from web2
Welcome from web2
Welcome from web2
Welcome from web2
Welcome from web2
Welcome from web2# 为了效率相同的客户端在50秒内分发给同一台服务器。为了使用同一个客户端可以看到轮询效果,可以注释配置文件中相应的行后,重启keepavlied。
[root@lvs1 ~]# vim +39 /etc/keepalived/keepalived.conf
...略...# persistence_timeout 50
...略...
[root@lvs1 ~]# systemctl restart keepalived.service # 在客户端验证
[root@client1 ~]# for i in {1..6}; do curl http://192.168.88.15/; done
Welcome from web2
Welcome from web1
Welcome from web2
Welcome from web2
Welcome from web1
Welcome from web2# 配置LVS2
[root@lvs1 ~]# scp /etc/keepalived/keepalived.conf 192.168.88.6:/etc/keepalived/[root@lvs2 ~]# vim /etc/keepalived/keepalived.conf 12    router_id lvs221     state BACKUP24     priority 80[root@lvs2 ~]# systemctl start keepalived
[root@lvs2 ~]# 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.88.15:80 wrr-> 192.168.88.100:80            Route   1      0          0     -> 192.168.88.200:80            Route   2      0          0    
6.验证
# 1. 验证真实服务器健康检查
[root@web1 ~]# systemctl stop nginx
[root@lvs1 ~]# ipvsadm -Ln   # web1在规则中消失
[root@lvs2 ~]# ipvsadm -Ln[root@web1 ~]# systemctl start nginx
[root@lvs1 ~]# ipvsadm -Ln   # web1重新出现在规则中
[root@lvs2 ~]# ipvsadm -Ln# 2. 验证lvs的高可用性
[root@lvs1 ~]# shutdown -h now    # 关机
[root@lvs2 ~]# ip a s | grep 88     # 可以查看到vipinet 192.168.88.6/24 brd 192.168.88.255 scope global noprefixroute eth0inet 192.168.88.15/32 scope global eth0
# 客户端访问vip依然可用
[root@client1 ~]# for i in {1..6}; do curl http://192.168.88.15/; done
Welcome from web1
Welcome from web2
Welcome from web2
Welcome from web1
Welcome from web2
Welcome from web2

HAProxy

  • 也是一款实现负载均衡的调度器

  • 适用于负载特别大的web站点

  • HAProxy的工作模式:

    • mode http:只适用于web服务
    • mode tcp:适用于各种服务
    • mode health:仅做健康检查,很少使用
初始化配置
  • client1:eth0 -> 192.168.88.10
  • HAProxy:eth0 -> 192.168.88.5
  • web1:eth0 -> 192.168.88.100
  • web2:eth0 -> 192.168.88.200
# 关闭192.168.88.6
[root@lvs2 ~]# shutdown -h now# 配置192.168.88.5为haproxy服务器
[root@pubserver cluster]# vim 12-config-haproxy.yml
---
- name: config haproxyhosts: lvs1tasks:- name: rm lvs keepalived     # 删除软件包yum:name: ipvsadm,keepalivedstate: absent- name: rename hostname       # 修改主机名shell: hostnamectl set-hostname haproxy1- name: install haproxy       # 安装软件包yum:name: haproxystate: present[root@pubserver cluster]# ansible-playbook 12-config-haproxy.yml
# web服务器,不需要配置vip,不需要改内核参数。但是存在对haproxy也没有影响。

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

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

相关文章

《智能前沿:应对ChatGPT算力挑战》

在全球人工智能热潮中,以 ChatGPT 为代表的 AIGC 技术引发了广泛关注。人工智能和机器学习等技术对数据规模及处理速度等提出了更高要求。在数据成为主要生产要素的当下和未来,如何跟上时代的发展步伐,构建适应 AI 需求的数据中心&#xff0c…

基于Google Gemini 探索大语言模型在医学领域应用评估和前景

概述 近年来,大规模语言模型(LLM)在理解和生成人类语言方面取得了显著的飞跃,这些进步不仅推动了语言学和计算机编程的发展,还为多个领域带来了创新的突破。特别是模型如GPT-3和PaLM,它们通过吸收海量文本…

BUUCTF---misc---[SWPU2019]我有一只马里奥

1、下载附件是一个.exe文件 2、运行之后可以看到桌面生成了1.txt文件,文件里面有如下内容 3、经过信息搜索:NTFS(New Technology File System)是一种由Microsoft开发的专有日志文件系统。根据它的提示,应该是把flag.tx…

B2弹幕插件优化版WordPress插件

源码下载:B2弹幕插件.zip 这是b2独有的站点信息弹幕插件,专门用来在首页显示站点动态的一款个性化 WordPress插件。喜欢的可以下载回去进行二次开发,还是蛮不错的 基于wordpress 7B2主题开发的一款弹幕插件/气泡插件 功能一览 插件安装&a…

三、CPU基础-缓存

计算机中缓存一般分为两个部分 1.内存 2.CPU Cache 一、CPU Cache分级 CPU Cache 通常分为大小不等的三级缓存,分别是 L1 Cache、L2 Cache 和 L3 Cache。 L1 Cache 和 L2 Cache 都是每个 CPU 核心独有的(通常会分为「数据缓存」和「指令缓存」&#…

介绍Phi-3:微软重新定义小型语言模型(SLM)的可能性

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

云备份day05

📟作者主页:慢热的陕西人 🌴专栏链接:C云备份项目 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 主要内容实现Json实用类的设计,以及服务端的设计和实…

【电控笔记5.6】Butterworth滤波器

Butterworth滤波器 需求:在增益交越频率拥有最小的相位滞后 波器经常被使用原因是 Butterworth 滤波器对于给定阶数,拥有最倾斜的衰减率而在伯德图又不会产生凸峰,同时在低频段的相位滞后小,因此本节将为各位介绍 Butterworth 低…

CTFshow-PWN-栈溢出(pwn43)

32位的 system(); 但是好像没"/bin/sh" 上面的办法不行了,想想办法 检查:32 位程序 ida 分析: 跟进 ctfshow 函数 定义了一个长度为 104 的字符数组 s,gets() 函数被用来从标准输入(键盘)中读取…

OpenCompass 大模型评测实战——笔记

OpenCompass 大模型评测实战——笔记 一、评测1.1、为什么要做评测1.2、如何通过能力评测促进模型发展1.2.1、面向未来拓展能力维度1.2.2、扎根通用能力1.2.3、高质量1.2.4、性能评测 1.3、评测的挑战1.3.1、全面性1.3.2、评测成本1.3.3、数据污染1.3.4、鲁棒性 二、OpenCompas…

【漏洞复现】云时空社会化商业ERP系统LoginName SQL注入漏洞

漏洞描述: 云时空社会化商业ERP系统loginName存在SQL注入漏洞,攻击者可以通过此漏洞获取数据库敏感信息。 搜索语法: Fofa-Query: app"云时空社会化商业ERP系统" 漏洞详情: 1.云时空社会化商业ERP系统。 2.漏洞POC&#xff1a…

迪拜Token2049展会圆满落幕,MVP成唯一MEMECOIN项目,闪耀全场!

近日,据多家媒体报道,于全球财富聚集地迪拜举行的全球性大型区块链会议TOKEN2049圆满落幕。来自全球的5000多家公司和100多个国家10000名参与者共同参会,讨论未来30年至50年关于区块链行业的宏大未来。 新晋MEMECOIN项目MAGA VP(…

【NLP】大语言模型基础之GPT

大语言模型基础之GPT GPT简介1. 无监督预训练2. 有监督下游任务微调 GPT-4体系结构1. GPT-4的模型结构2. GPT-4并行策略3. GPT-4中的专家并行GPT-4的特点 参考连接 以ELMo为代表的动态词向量模型开启了语言模型预训练的大门,此后,出现了以GPT和BERT为代表…

Spring - 3 ( 12000 字 Spring 入门级教程 )

一:Spring Web MVC入门 1.1 响应 在我们前⾯的代码例子中,都已经设置了响应数据, Http 响应结果可以是数据, 也可以是静态页面,也可以针对响应设置状态码, Header 信息等. 1.2 返回静态页面 创建前端页面 index.html(注意路径) html代码 …

SpringMVC基础篇(二)

文章目录 1.Postman1.基本介绍Postman是什么? 2.Postman快速入门1.Postman下载点击安装自动安装在系统盘 2.基本操作1.修改字体大小2.ctrl “” 放大页面3.进入创建请求界面 2.需求分析3.具体操作4.保存请求到文件夹中1.点击保存2.创建新的文件夹3.保存成功 3.使用…

嵌入式4-24

作业: 整理思维导图 定义一个矩形类Rec,包含私有属性length,width,有以下成员函数: void set_length(int l); //设置长度 void set_width(int w); //设置宽度 int get_length(); //获取长度 int get_width(); //获取宽…

【上海大学计算机组成原理实验报告】四、指令系统实验

一、实验目的 了解指令结构、PC寄存器的功能和指令系统的基本工作原理。 学习设计指令的方法。 二、实验原理 根据实验指导书的相关内容,对于部分使用频率很高,且只用几条微指令即可完成的简单操作,可以把这部分简单操作的微指令序列固定下…

C#窗体中动态按钮的设计方法:创建特殊窗体

目录 1.动态按钮的设计方法 2.实例 (1) Resources.Designer.cs (2)Form1.Designer.cs (3)Form1.cs (4) 生成效果 在窗体界面中,通常以按钮来代替菜单栏的功能&…

华卓荣登「2024数商典型应用场景“乘数榜”」

4月18日,2024未来数商大会在杭州未来科技城学术交流中心举行,由浙江省科学技术协会指导,未来数商大会组委会主办,浙江省数字经济学会、国脉研究院承办。中国工程院院士陈纯、中国互联网协会副理事长高新民、中国社科院信息化研究中…