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

LVS+Keepalived——高可用群集_第1张图片

  • 用户空间核心组件:

  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地址,以继续提供服务

LVS+Keepalived——高可用群集_第2张图片

         热备主内的每台路由器都可能成为主路由器,虚拟路由器的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.37.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

LVS+Keepalived——高可用群集_第3张图片

LVS+Keepalived——高可用群集_第4张图片

LVS+Keepalived——高可用群集_第5张图片

LVS+Keepalived——高可用群集_第6张图片

 编辑/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

LVS+Keepalived——高可用群集_第7张图片

 重启

[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 [email protected]:/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.
[email protected]'s password: 
keepalived.conf                                                  100% 1155     2.7MB/s   00:00    
[root@localhost /etc/keepalived]# scp /etc/sysctl.conf [email protected]:/etc/keepalived/
[email protected]'s password: 
sysctl.conf 

已经拷贝过来了 

LVS+Keepalived——高可用群集_第8张图片

 修改keepalived.conf文件

[root@localhost keepalived]#vim keepalived.conf

LVS+Keepalived——高可用群集_第9张图片

保存 

[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

LVS+Keepalived——高可用群集_第10张图片

 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关闭

LVS+Keepalived——高可用群集_第11张图片

开启后看看

LVS+Keepalived——高可用群集_第12张图片

又变回到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

LVS+Keepalived——高可用群集_第13张图片

等待一会刷新

LVS+Keepalived——高可用群集_第14张图片

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

        非抢占式

 主机一

LVS+Keepalived——高可用群集_第15张图片

主机二

LVS+Keepalived——高可用群集_第16张图片

 重启

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

抓包

LVS+Keepalived——高可用群集_第17张图片

 关闭主机1

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

LVS+Keepalived——高可用群集_第18张图片

还是可以访问

LVS+Keepalived——高可用群集_第19张图片

        延迟抢占

主机1

 LVS+Keepalived——高可用群集_第20张图片

主机2

LVS+Keepalived——高可用群集_第21张图片

关闭主机一再重启

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

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

LVS+Keepalived——高可用群集_第22张图片

脑裂现象

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


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


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

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

你可能感兴趣的:(运维,nginx,运维,apache)