目录

一、Keepalived概述

二、一个台格的集群应该具备的特性

三、Keepalived实现原理剖析

四、LVS+Keepalived高可用部署

1、配置负载调度器

2、配置节点服务器

3、浏览器测试

五、keepalived的抢占与非抢占模式

六、keepalived的脑裂故障

七、Nginx+Keepalived高可用部署

1、配置nginx负载调度器

2、准备Keepalived


一、Keepalived概述

企业应用中,单台服务器承担应用存在单点故障的危险,单点故障一旦发生,企业服务将发生中断,造成极大的危害。

Keepalived工具是专为LVS和HA设计的一款健康检查工具(通用性很广,可以不止对lvs进行高可用,还能支持nginx、HAProXY等应用程序)。

Keepalived支持:

  • 支持故障自动切换
  • 支持节点健康状态检查(判断 LVS 负载调度器、节点服务器的可用性,当 master 主机出现故障及时切换到backup 节点保证业务正常,当 master故障主机恢复后将其重新加入群集并且业务重新切换回 master 节点。)

二、一个台格的集群应该具备的特性

  • 负载均衡:提高系统响应效率,处理更多的访问请求,减少响应延迟,实现高并发、高负载的能力(LVS 、Nginx 、HAProxy 、F5)
  • 健康检查(探针):1、发送心跳消息ping/pong          2、TCP端口检查(向目标主机的IP:port发起tcp连接请求,如果tcp的三次握手成功则认为健康检查探测成功,否则认为健康检查探测失败)        3、HTTP URL检查(向目标主机的http://IP:PORT/URL路劲发送HTTP GET请求,如果响应返回状态码是2XX 3XX则健康检查探测成功,如果响应返回状态码是4XX 5XX则健康检查探测失败)
  •  故障转移:通过VIP漂移实现主备切换

三、Keepalived实现原理剖析

Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能,VRRP(虚拟路由元余协议) 是针对路由器的一种备份解决方案。

  • 由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
  • 每个热备组内同时只有一台主路由器提供服务,其他路由器处于几余状态
  • 若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务

四、LVS+Keepalived高可用部署

环境:

负载调度器1:192.168.130.20

负载调度器2:192.168.130.30

节点服务器1:192.168.130.40

节点服务器2:192.168.130.50

1、配置负载调度器

①关闭防火墙和安全机制

②使用本地yum安装keepalived程序

 yum -y install keepalived

③备份配置文件,并修改原配置文件

cd  /etc/keepalived/

cp  keepalived.conf keepalived.conf.bak        #备份配置文件

vim  keepalived.conf

主服务器:

keepalived占用的端口号_服务器

keepalived占用的端口号_运维_02

keepalived占用的端口号_服务器_03

keepalived占用的端口号_keepalived占用的端口号_04

备服务器:

keepalived占用的端口号_lvs_05

keepalived占用的端口号_keepalived占用的端口号_06

systemctl restart keepalived

④配置ipvsadm

yum -y install ipvsadm

ipvsadm-save > /etc/sysconfig/ipvsadm

systemctl enable --now ipvsadm

systemctl  start keepalived

ipvsadm -ln    #此时便会自动生成策略

2、配置节点服务器

①关闭防火墙和安全机制

②安装nginx

③前往nginx网页文件路径下,准备两个节点服务器的网页文件vim

keepalived占用的端口号_nginx_07

systemctl start nginx

④准备内核参数

vim /etc/sysctl.conf

keepalived占用的端口号_keepalived占用的端口号_08

sysctl -p

keepalived占用的端口号_nginx_09

⑤设置lo网卡

cd /etc/sysconfig/network-scripts/

cp ifcfg-ens33 ifcfg-lo:0

vim ifcfg-lo:0

keepalived占用的端口号_keepalived占用的端口号_10

⑥添加路由(将访问VIP的数据报文限制在本地,避免通信紊乱)

keepalived占用的端口号_运维_11

keepalived占用的端口号_运维_12

keepalived占用的端口号_服务器_13

3、浏览器测试

keepalived占用的端口号_lvs_14

五、keepalived的抢占与非抢占模式

抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP。

非抢占式俩节点state必须为bakcup,且必须配置nopreempt。

注意:这样配置后,我们要注意启动服务的顺序,优先启动的获取master权限,与优先级没有关系了。

①systemctl stop keepalived.service  

② vim /etc/keepalived/keepalived.conf

keepalived占用的端口号_服务器_15

③启动keepalived时要注意,两台负载调度器先启动keepalived的就是主,后启动keepalived就成为备。

六、keepalived的脑裂故障

现象:主服务器和备服务器同时拥有VIP地址,主和备都认为自己是MASTER,都会通过ip 命令生成VIP地址。

原因:因为主服务器和备服务器之间的通信链路中断,导致备服务器无法收到主服务器发送的VRRP通告消息,备服务器误认为主服务器故障了并通过命令生成VIP

解决:关闭主服务器或备服务器其中一个的keepalived服务

预防:(1)主服务器和备服务器之间添加双链路通信

在主服务器上添加脚本进行判断与备服务器通信链路是否中断,如果确实是链路中断则自行关闭keepalived服务

           (3)利用第三方应用或监控系统检测是否发生脑裂故障,如果发生脑裂故障则通过第三方应用或监控系统来关闭主服务器或备服务器上的keepalived服务

脚本:

keepalived占用的端口号_keepalived占用的端口号_16

chmod +x keepalived.sh 

七、Nginx+Keepalived高可用部署

1、配置nginx负载调度器

①关闭防火墙和安全机制

②安装nginx和keepalived

③准备nginx配置文件做反向代理(四层)

vim  /etc/nginx/nginx.conf

keepalived占用的端口号_nginx_17

systemctl enable --now nginx

keepalived占用的端口号_keepalived占用的端口号_18

2、准备Keepalived

①准备脚本

cd /etc/keepalived/

vim check_nginx.sh

keepalived占用的端口号_nginx_19

 chmod +x check_nginx.sh

②准备Keepalived配置文件

cp keepalived.conf keepalived.conf.bak

vim keepalived.conf

keepalived占用的端口号_nginx_20

scp keepalived.conf 192.168.130.30:`pwd`

scp check_nginx.sh 192.168.130.30:`pwd`

keepalived占用的端口号_服务器_21

systemctl enable --now keepalived
3、浏览器检测

keepalived占用的端口号_nginx_22