HA高可用服务搭建

1、HA Cluster高可用集群

HA是High Available缩写。 HA Cluster是指高可用性集群,是保证业务连续性的有效解决方案,一般 有两个或两个以上的节点,且分为活动节点及备用节点。

FailOver:故障自动切换,MASTER/BACKUP,MASTER宕机了,BACKUP 充当主机使用。

2、为什么要引入HA高可用

答:主要是为了解决Web服务的单点故障。 HA高可用软件架构原理:keepalived/mha

3、Keepalived软件概述

Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS 集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功 能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务 (例如:Nginx、HAproxy、MySQL等)的高可用解决方案软件。

4、Keepalived组成和原理

Keepalived软件主要是通过VRRP协议实现高可用功能的(故障切换方 式)。VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协 议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它 能够保证当个别节点宕机时,整个网络可以不间断地运行。 (FailOver+VIP漂移)

使用Keepalived进行VIP(虚拟的IP地址),所有服务器共享一个虚拟的 VIP的实现。

虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供 相同功能的路由器组成一个路由器组,这个组里面有一个master和多个 backup,master上面有一个对外提供服务的vip(该路由器所在局域网内 其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp 包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个 backup当master。这样的话就可以保证路由器的高可用了。

Keepalived的功能体系结构,大致分两层:用户空间(user space)和内 核空间(kernel space)

内核空间:主要包括IPVS(IP虚拟服务器,用于实现网络服务的负载均 衡)和NETLINK(提供高级路由及其他相关的网络功能)两个部份。

用户空间:

WatchDog:负则监控checkers和VRRP进程的状况
VRRP Stack:负载均衡器之间的失败切换FailOver,如果只用一个负载均衡
器,则VRRP不是必须的。
Checkers:负责真实服务器的健康检查healthchecking,是keepalived
最主要的功能。换言之,可以没有VRRP Stack,但健康检查
healthchecking是一定要有的。
IPVS wrapper:用户发送设定的规则到内核ipvs代码.
Netlink Reflector:用来设定vrrp的vip地址等。

keepalived主要使用三个模块,分别是core、check和vrrp。core模块为 keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和 解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现 VRRP协议的。
在这里插入图片描述

5、安装Keepalived软件

第一步:关闭防 火墙与SELinux、关闭NetworkManager、时间同步。

第二步:在Web01与Web02(两台机器组建高可用集群)使用yum命令安 装Keepalived软件

yum install keepalived -y

第三步:了解keepalived配置文件与日志信息输出的位置

配置文件:

vim /etc/keepalived/keepalived.conf

日志文件:

cat /var/log/messages
6、设置Keepalived配置文件

Web01与Web02同时操作:

vim /etc/keepalived/keepalived.conf 

第一步:使用冒号:末行模式,切换光标到35行,然后按dG,删除35行以 后的所有内容

第二步:了解一下配置文件中每一行的含义19~34行

vrrp_instance #组建vrrp实例组的组名(Web01与Web02要保持一致) {
	state #角色名称(MASTER/BACKUP)
	interface #网卡名称(eth0=>ens33)
	virtual_router_id #vrrp组的编号(Web01与Web02要保持一致)
	priority #权重(选举=>权重高=>当选几率大)
	advert_int 1 #心跳间隔时间
	authentication {
		auth_type PASS #=> 授权类型(PASS密码)
		auth_pass 1111 #=> 组密码(想组建集群,其密码必须一致)
	}
	virtual_ipaddress {
		10.1.1.100 #=> VIP,虚拟的IP地址,需要与集群中的机器保持在同一网段
	}
}

设置完成后,保存并退出

第三步:启动Keepalived软件

systemctl start keepalived
systemctl status keepalived

分别在Web01/Web02中使用ip a命令,查看网卡上是否挂载VIP地址:

ip a

7、解析www.shop.com到VIP虚拟IP地址

Windows中找到hosts文件:

ip 域名
例如:
192.168.1.100 www.baidu.com

8、让VIP可以ping通

把域名解析到VIP,通过VIP访问到提供服务的服务器。

特别注意:1.3以后版本要注释vrrp_strict,否则虚拟IP无法ping通

设置完成后,重启keepalived软件

systemctl restart keepalived

9、模拟服务器故障,VIP漂移

MASTER:网络无法连接,keepalived软件关闭
Web01 # systemctl stop network

10、让Keepalived可以监测Nginx服务

问题:当我们在MASTER服务器中,手工停止Nginx,VIP会发生漂移么?

答:不会,因为keepalived软件主要检测keepalived服务状态以及网络情 况。只要这两者正常,这个VIP就不会发生漂移。

这个时候就产生了一个问题:Nginx都已经停止了,实际上这台MASTER服 务器就无法对外提供Web服务了,所以这个时候VIP也应该正常发生漂移。

第一步:编写nginx.sh脚本,自动检测Nginx的运行状态 (Web01/Web02)

# mkdir /scripts
# vim /scripts/nginx.sh
#!/bin/bash
nginx_status=`ps -C nginx --no-header |wc -l`
if [ $nginx_status -eq 0 ]; then
	systemctl stop keepalived
fi

第二步:给nginx.sh文件添加一个可执行权限

chmod +x /scripts/nginx.sh

设置完成后,不要着急继续向下操作。首先测试一下nginx.sh脚本是否可用

/scripts/nginx.sh

第三步:在Web01/Web02两台机器的keepalived.conf文件中配置 nginx.sh脚本

vim /etc/keepalived/keepalived.conf
vrrp_script 健康检测脚本对象名称 {
	script STRING | QUOTED-STRING ## 指定:<外部脚本>的<调用路径>
	interval INTEGER ## 设置:<健康跟踪检测>的<时间间隔>,默认为 1 秒
}

以上只是在keepalived配置文件中定义了一个检测脚本,但是还没有真正 的调用。

第四步:在vrrp_instance标签中真正调用check_nginx这个检测脚本

vrrp_instance VI_1 {
...
track_script {
check_nginx
}
...
}

第五步:设置完成后,重启keepalived

systemctl restart keepalived

二、Keepalived配置补充

1、抢占与非抢占模式

☆ 什么是抢占模式

MASTER:权重100

BACKUP:权重90

当MASTER发生故障时(宕机),VIP会自动从MASTER漂移到BACKUP服 务器。但是当MASTER维修完毕后,启动keepalived的瞬间,其就会把VIP 从BACKUP服务器中抢占过来。我们把这种情况就称之为“抢占模式”。

扩展:keepalived中,到底是如何决定谁是MASTER?

答:主要通过权重配置以及IP地址的大小

① 如果Web01与Web02其权重不同,当我们同时启动keepalived的时候, 其默认会选择权重比较大的服务器充当MASTER。

② 如果Web01与Web02其权重相同,则IP地址大的,优先成为MASTER Web02(10.1.1.13) > Web01(10.1.1.11)

☆ 非抢占模式

问题:如果让我们的HA Cluster集群成为非抢占模式呢?

答:一共分三步

第一步:更改keepalived.conf配置文件

vrrp_instance VI_1 {
	virtual_router_id 51
------------------------ 华丽的分割线 ------------------
	nopreempt => 非抢占模式
------------------------ 华丽的分割线 ------------------
	priority 100
}

第二步:配置state角色都为BACKUP

vrrp_instance VI_1 {
------------------------ 华丽的分割线 ------------------
	state BACKUP => 所有服务器都设置为BACKUP,没有MASTER/BACKUP之分
------------------------ 华丽的分割线 ------------------
	virtual_router_id 51
	nopreempt
	priority 100
}

第三步:重启keepalived软件

systemctl restart keepalived
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐