IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> LVS+Keepalived——高可用群集 -> 正文阅读

[系统运维]LVS+Keepalived——高可用群集

目录

Keepalived概述

? ? ? ? Keepalived功能

? ? ? ? Keepalived架构?

? ? ? ? keepalived的热备方式

? ? ? ? VRRP相关技术

? ? ? ? ? ? ? ? vrrp相关术语

?Keepalived相关文件

? ? ? ? 配置组成

具体实现

? ? ? ? ? ? ? ? 主备keepalived?

? ? ? ? ? ? ? ? ?节点配置

? ? ? ? 非抢占式

? ? ? ? 延迟抢占

??

脑裂现象


??

??????keepalived 起初是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换(Failover)和健康检查(Health Checking)功能——判断LVS负载调度器、节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集。

Keepalived概述

? ? ? ? Keepalived功能

  • 基于vrrp协议完成地址流动

  • 为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)

  • 为ipvs集群的各RS做健康状态检测

  • 基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务

? ? ? ? Keepalived架构?

官方网址:Keepalived for Linux

  • 用户空间核心组件:

  1. vrrp stack:VIP消息通告

  2. checkers:监测real server(简单来说 就是监控后端真实服务器的服务)

  3. system call:实现 vrrp 协议状态转换时调用脚本的功能

  4. SMTP:邮件组件(报警邮件)

  5. IPVS wrapper:生成IPVS规则(直接生成ipvsadm)

  6. Netlink Reflector:网络接口(将虚拟地址ip(vip)地址飘动)

WatchDog:监控进程(整个架构是否有问题)

  • 控制组件:提供keepalived.conf 的解析器,完成Keepalived配置

  • IO复用器:针对网络目的而优化的自己的线程抽象

  • 内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限

?keeplive可以配合ngnix等软件,反向代理

? ? ? ? keepalived的热备方式

? ? ? ?keepalived采用VRRP(虚拟路由冗余协议)热备份协议,以软件的方式实现Linux服务器的多机热备功能。VRRP是针对路由器的一种备份解决方案——由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务:每个热备组内同一时刻只有一台主路由器提供服务,其他路由器处于冗余状态,若当前在线的路由器失效,则其他路由器会自动接替(优先级决定接替顺序)虚拟IP地址,以继续提供服务

?

? ? ? ? ?热备主内的每台路由器都可能成为主路由器,虚拟路由器的IP地址(VIP)可以在热备组内的路由器之间进行转移,所以也称为漂移IP地址。使用Keepalived时,漂移地址的实现不需要手动建立虚接口配置文件(如ens33:0),而是由Keepalived根据配置文件自动管理。

? ? ? ? VRRP相关技术

通告:心跳,优先级等;周期性

工作方式:抢占式,非抢占式,延迟抢占模式,

安全认证

  • 无认证

  • 简单字符认证:预共享密钥

  • MD5

工作模式

  • 主/备:单虚拟路径器

  • 主/主:主/备(虚拟路由器1),备/主(虚拟路由器2

#通告:
是宣告自己的主权,不要妄想抢班夺权,不停的向外

#抢占式:
主服务器宕机,过了一段时间修好了,再把主权抢过来

#非抢占式:
主服务器宕机,过了一段时间修好了,原来的主就作为备了

#抢占式好还是非抢占式好?

非抢占式好

#安全认证:
如没有安全认证,不在集群中的keeplive服务器设置超高的优先级,会造成事故

#主/主:主/备(虚拟路由器1),备/主(虚拟路由器2)见下图:
环境:
有两台服务器
虚拟出两台虚拟路由器
第一台虚拟路由器中服务器1为主,服务器2为备,那么虚拟IP1就飘在服务器1上,真正工作的只有服务器1
第二台虚拟路由器中服务器2为主,服务器1为备,那么虚拟IP2就飘在服务器2上,真正工作的只有服务器2
优点:
#提高了资源利用率:
这样主,备服务器同时干活,可以同时运行两个项目
#同样有备份功能:
如果服务器1坏了,服务器2 将同时拥有虚拟IP1和虚拟IP2


缺点:
虽然有备份冗余功能但是对机器的性能要求非常高,当其中一台出现故障,本来一台运行一个任务,现在所有的业务全部压在了一台上,有十分大的风险

? ? ? ? ? ? ? ? vrrp相关术语

  • 虚拟路由器:Virtual Router

  • 虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器

  • VIP:Virtual IP

  • VMAC:Virutal MAC (00-00-5e-00-01-VRID)

  • 物理路由器:

  • master:主设备

  • backup:备用设备

  • priority:优先级

?Keepalived相关文件

  • 软件包名:keepalived

  • 主程序文件:/usr/sbin/keepalived

  • 主配置文件:/etc/keepalived/keepalived.conf

  • 配置文件示例:/usr/share/doc/keepalived/

  • Unit File:/lib/systemd/system/keepalived.service

  • Unit File的环境配置文件:

  • /etc/sysconfig/keepalived CentOS

? ? ? ? 配置组成

/etc/keepalived/keepalived.conf 配置组成

  • GLOBAL CONFIGURATION

Global definitions(全局配置):定义邮件配置,route_id,vrrp配置,多播地址等

  • VRRP CONFIGURATION

VRRP instance(s):定义vrrp协议中的每个vrrp虚拟路由器的规则,基本信息

  • LVS CONFIGURATION(lvs调度服务器的规则设置)

Virtual server group(s)

Virtual server(s):LVS集群的VS和RS

具体实现

主keepalived:192.168.37.100
备keepalived:192.168.37.101
web1:192.168.37.103
web2:192.168.37.106
vip:192.168.91.11
客户机访问

? ? ? ? ? ? ? ? 主备keepalived?

?主备keepalived,安装ipvsadm软件包和keepalived软件包

[root@localhost ~]# yum install ipvsadm.x86_64 keepalived.x86_64 -y

加载模块

[root@localhost ~]# modprobe ip_vs
[root@localhost ~]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn

keepalived配置文件做一个备份

[root@localhost ~]# cd /etc/keepalived/
[root@localhost /etc/keepalived]# ls
keepalived.conf
[root@localhost /etc/keepalived]# cp keepalived.conf keepalived.conf.bak
[root@localhost /etc/keepalived]# ls
keepalived.conf  keepalived.conf.bak

编辑keepalived配置文件

[root@localhost /etc/keepalived]# vim keepalived.conf

?

?

?

?编辑/etc/systcl.conf文件

[root@localhost /etc/keepalived]# vim /etc/sysctl.conf 
[root@localhost /etc/keepalived]# sysctl -p
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

?重启

[root@localhost /etc/keepalived]# ipvsadm-save >/etc/sysconfig/ipvsadm #先保存
[root@localhost /etc/keepalived]# systemctl start keepalived.service 
[root@localhost /etc/keepalived]# systemctl start ipvsadm.service 
[root@localhost /etc/keepalived]# systemctl restart keepalived.service 
[root@localhost /etc/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.37.11:80 rr
  -> 192.168.37.102:80            Route   1      0          0         
  -> 192.168.37.106:80            Route   1      0          0

远程拷贝到备keepalived中

[root@localhost /etc/keepalived]# scp keepalived.conf root@192.168.37.101:/etc/keepalived/
The authenticity of host '192.168.37.101 (192.168.37.101)' can't be established.
ECDSA key fingerprint is SHA256:ohmukbizYYyd0RUPHVaJOvHzidcQS1AvBegZAWJ13zQ.
ECDSA key fingerprint is MD5:26:7d:45:4f:47:02:d7:7b:47:b1:7e:29:3d:46:c8:cd.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.37.101' (ECDSA) to the list of known hosts.
root@192.168.37.101's password: 
keepalived.conf                                                  100% 1155     2.7MB/s   00:00    
[root@localhost /etc/keepalived]# scp /etc/sysctl.conf root@192.168.37.101:/etc/keepalived/
root@192.168.37.101's password: 
sysctl.conf 

已经拷贝过来了?

?修改keepalived.conf文件

[root@localhost keepalived]#vim keepalived.conf

保存?

[root@localhost keepalived]#ipvsadm-save >/etc/sysconfig/ipvsadm
[root@localhost keepalived]#
[root@localhost keepalived]#systemctl start ipvsadm.service 

编辑/etc/sysctl.conf文件

[root@localhost keepalived]#vim /etc/sysctl.conf

?net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

[root@localhost keepalived]#systemctl start keepalived.service 
[root@localhost keepalived]#
[root@localhost 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.37.11:80 rr
  -> 192.168.37.102:80            Route   1      0          0         
  -> 192.168.37.106:80            Route   1      0          0 

?假如把主keepalived关掉

[root@localhost /etc/keepalived]# systemctl stop keepalived.service 

?此时会跑到备keepalived上

比如抓个包

[root@localhost ~]# tcpdump -i ens33 host 224.0.0.18

?现在是主keepalived关闭

开启后看看

?

又变回到100了!!!

? ? ? ? ? ? ? ? ?节点配置

安装httpd服务

[root@localhost ~]#yum install httpd -y

设置虚拟网卡

[root@localhost ~]# ifconfig lo:0 192.168.37.11 netmask 255.255.255.255

修改/etc/sysctl.conf文件

[root@localhost /var/www/html]# vim /etc/sysctl.conf 
[root@localhost /var/www/html]# 
[root@localhost /var/www/html]# sysctl -p
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

设置路由

[root@localhost /var/www/html]# route add -host 192.168.37.11 dev lo:0

第二台节点服务器和第一台配置一样,不多赘述

测试

在网页输入192.168.37.11

等待一会刷新

?

以上就是抢占式的keepalived,
默认模式 使用的 抢占式
主节点会抢占回来,会造成 两次网络动荡。?

? ? ? ? 非抢占式

?主机一

主机二

?

?重启

[root@localhost /etc/keepalived]# systemctl restart keepalived.service

抓包

?关闭主机1

[root@localhost /etc/keepalived]# systemctl stop keepalived.service

还是可以访问

?

? ? ? ? 延迟抢占

主机1

?

主机2

?

关闭主机一再重启

[root@localhost /etc/keepalived]# systemctl stop keepalived.service 
[root@localhost /etc/keepalived]# systemctl restart keepalived.service 

抓包在13秒重启的从43秒开始变回100

?

?

脑裂现象

什么是脑裂?
在高可用(HA)系统中,当联系2个节点的“心跳线”断开时,本来为一整体、动作协调的HA系统,
就分裂成为2个独立的个体。
由于相互失去了联系,都以为是对方出了故障。两个节点上的HA软件像“裂脑人”一样,争抢“共享
资源”、争起“应用服务”,就会发生严重后果。共享资源被瓜分、两边“服务”都起不来了;或者两边
“服务”都起来了,但同时读写“共享存储”,导致数据损坏


都有哪些原因导致脑裂?
高可用服务器对之间心跳线链路发生故障,导致无法正常通信。
因心跳线坏了(包括断了,老化)。
因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)
因心跳线间连接的设备故障(网卡及交换机)
因仲裁的机器出问题(采用仲裁的方案)
高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输。
高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败
其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等。


20. 如何解决keepalived脑裂问题?
在实际生产环境中,我们从以下方面防止脑裂:
#同时使用串行电缆和以太网电缆连接、同时使用两条心跳线路,这样一条线路断了,另外一条还是好的,依然能传送心跳消息
#当检查脑裂时强行关闭一个心跳节点(这个功能需要特殊设备支持,如stonith、fence)相当于备节点接收不到心跳消息,通过单独的线路发送关机命令关闭主节点的电源

#做好对脑裂的监控报警解决常见方案:
如果开启防火墙,一定要让心跳消息通过,一般通过允许IP段的形式解决
可以拉一条以太网网线或者串口线作为主被节点心跳线路的冗余
开发检测程序通过监控软件检测脑裂

?

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-11-22 12:45:44  更:2021-11-22 12:47:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 0:44:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码