keepalived高可用

一:keepalived高可用(私网)

1.什么是高可用?
一般是指2台机器启动着完全相同的业务系统,当有一台机器down机了,另外一台服务器就能快速的接管,对于访问的用户是无感知的。
2.keepalived是如何实现高可用的?
keepalived软件是基于VRRP协议实现的,VRRP虚拟路由冗余协议,主要用于解决单点故障问题

ARP广播
VRRP协议
vip负责IP漂移
vmac负责通知ARP广播修改mac地址

image

3.什么是keepalived?
Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点。

  后来Keepalived又加入了VRRP的功能,VRRP(Vritrual Router Redundancy Protocol,虚拟路由冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此Keepalvied 一方面具有服务器状态检测和故障隔离功能,另外一方面也有HA cluster功能,下面介绍一下VRRP协议实现的过程。
  • 私网: 用于公司等私有内网搭建使用
    image
4.什么是LVS?
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一
LVS 个人理解就是利用多个物理机集群虚拟出一个虚拟ip(Virtual Server IP,简称VIP),虚拟ip不是实际存在的物理机,所以虚拟ip不会挂,而 LVS 的实现 Linux 内核已经帮助我们实现了,结构如下图:

image

5.keepalived作用
	部署在整个集群中的一个高可用软件,作用是创建一个VIP(虚拟IP),在整个集群中有且只有一个机器上生成VIP,当这台机器出现问题时,keepalived将自动将VIP切换至其他的某一台服务器上。

image

6.什么是Haproxy?
Haproxy是高可用代理软件,它是一种比较流行的开源软件,基于TCP(四层)/HTTP(七层)协议的负载均衡代理解决方案,可以在Linux、FreeBSD等平台下运行,常见于跨多个服务器,比如:web、应用程序、数据库、MQ消息队列、MC数据库等等。通过多个Haproxy服务来提高服务的性能和可靠性。
7.高可用keepalived核心概念
1.如何确定谁是主节点谁是备节点(选举投票,优先级)
2.如果Master故障,Backup自动接管,那么Master恢复后会夺权吗(抢占试、非抢占式)
3.如果两台服务器都认为自己是Master会出现什么问题(脑裂)
  • 注意:
1.虚拟VIP无法在云服务器上使用,因为云服务器不支持虚拟IP。
当前配置只限(私网)高可用
云服务器不支持虚拟VIP

2.公网高可用,只能在(云服务器)使用
  • 部署前设备需求
lb01 192.168.15.5 负载均衡代理
lb02 192.168.15.6 负载均衡代理
VIP 192.168.15.3 虚拟网卡VIP
web 192.168.15.0 web服务器等

二:实现虚拟VIP,部署keepalived

  • 实现VIP,解决web服务器的单点故障
1.安装keepalived之前要保证lb01 lb02服务器配置是一样的
lb01将game.conf 传给 lb02
[root@lb01 conf.d]# scp game.conf 172.16.1.6:/etc/nginx/conf.d/
lb02服务器(将lb02原有配置文件压缩,只留一个与lb01服务器统一)
[root@lb02 conf.d]# ll
         total 8
         -rw-r--r-- 1 root root 1072 Nov 16 23:02 default.conf
         -rw-r--r-- 1 root root  462 Jan  9 10:25 game.conf	
lb01与lb02保持一致配置文件
[root@lb02 conf.d]# gzip default.conf
测试
nginx -t
重启
systemctl restart nginx
2.部署keepalived
lb01与lb02统一安装keepalived
3.安装keepalived
yum install keepalived -y
4.lb01服务器(配置keepalived文件)
编写配置文件
vim /etc/keepalived/keepalived.conf
        #全局配置
        global_defs {
        #身份识别(全局唯一)
        router_id lb01
        }

# 配置VRRP协议
vrrp_instance VI_1 {
# 	主机节点   备用节点(当主机节点出现问题,就使用备用节点)
# 状态,MASTER和BACKUP(这里仅仅是一个标记,正真确认VIP的是权重)
state MASTER
# 绑定网卡(配置网卡与虚拟VIP 相符)
interface eth0
# 虚拟路由标示,可以理解为分组(相当于频道50)
virtual_router_id 50
# 优先级(数字越大,权重越大 越大oen)
priority 100
# 监测心跳间隔时间
advert_int 1
# 配置认证
authentication {
# 认证类型
auth_type PASS
# 认证的密码
auth_pass 111111111
}
# 设置VIP(配置那个网卡就需要配置该网段)
virtual_ipaddress {
# 虚拟的VIP地址
192.168.15.3
}
}
5.lb02服务器(配置keepalived文件)
编写配置文件
vim /etc/keepalived/keepalived.conf
        #全局配置
        global_defs {
        #身份识别(全局唯一)
        router_id lb02
        }

# 配置VRRP协议
vrrp_instance VI_1 {
# 	主机节点   备用节点(当主机节点出现问题,就使用备用节点)
# 状态,MASTER和BACKUP(这里仅仅是一个标记,正真确认VIP的是权重)
state BACKUP
# 绑定网卡(配置网卡与虚拟VIP 相符)
interface eth0
# 虚拟路由标示,可以理解为分组(相当于频道50)
virtual_router_id 50
# 优先级(数字越大,权重越大 越大oen)
priority 90
# 监测心跳间隔时间
advert_int 1
# 配置认证
authentication {
# 认证类型
auth_type PASS
# 认证的密码
auth_pass 111111111
}
# 设置VIP(配置那个网卡就需要配置该网段)
virtual_ipaddress {
# 虚拟的VIP地址
192.168.15.3
}
}
5.启动测试(lb01 与 lb02)
systemctl start keepalived
ip a

image

三:测试lb01主机节点服务器宕机

1.测试lb01主机节点服务器宕机
1.lb01服务器优先级(会显示虚拟VIP地址)
2.当lb01服务器宕机会将(虚拟VIP切换到)lb02服务器
3.以实现备用自启动(防止一台服务器故障导致的损失)

当lb01主机节点服务器宕机
keepalived自动开启备用服务器lb02

image

四:实战测试(服务器宕机状态)

1.(统一配置文件)
lb01服务器 与 lb02服务器


* 切换路径
[root@lb01 ~]# cd /etc/nginx/

1.将nginx全局配置文件移动至 备用服务器lb02
[root@lb01 nginx]# scp nginx.conf 172.16.1.6:/etc/nginx/
root@172.16.1.6's password:
nginx.conf                                                      100%  645   779.0KB/s   00:00


2.将证书移动至 备用服务器lb02
[root@lb01 nginx]# scp -r ssl 172.16.1.6:/etc/nginx
root@172.16.1.6's password:
server.key                                                      100% 1708     1.1MB/s   00:00
server.crt                                                      100% 1220   985.4KB/s   00:00


3.将proxy_params代理缓存区 移动至 备用服务器lb02
[root@lb01 nginx]# scp proxy_params 172.16.1.6:/etc/nginx
root@172.16.1.6's password:
proxy_params                                                    100% 1173     1.1MB/s   00:00
2.lb02服务器

image

3.lb01 与 lb02 服务器
测试
nginx -t

重启
systemctl restart nginx

开启keepalived
systemctl start keepalived
4.DNS解析域名

image

5.网址测试
www.game.com

实现 负载均衡宕机自启动(备用服务器)

1.当lb01主机节点服务器宕机
2.keepalived自动开启备用服务器(负载均衡)lb02

image

6.当主机节点出现 宕机时
1.自动切换服务器(抢占式)
2.在切换过程中会有延时
3.延时途中 如网站访问量较多时
4.会导致报错造成(不可估量)的损失

解决方法:
所以就用到了以下的方法来解决以上所存在的问题
(非抢占式)

image

五:抢占式和非抢占式(通常建议开启非抢占式)

  • 抢占模式:
harpxy的实际运行过程中,当master发生异常,且后期恢复master正常后,存在抢占或非抢占两种情况。简单点说抢占模式就是,当master宕机后,backup 接管服务。后续当master恢复后,vip漂移到master上,master重新接管服务,多了一次多余的vip切换,而在实际生产中是不需要这样。
  • 非抢占模式:
实际生产中是,当 原先的master恢复后,状态变为backup,不接管服务,这是非抢占模式。

image

1.非抢占模式(配置)
state BACKUP	(所有的机器全部设置成BACKUP)
#开启非抢占式	
nopreempt

image

六:高可用时如果出现脑裂问题时怎么解决

1.什么是脑裂?
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
  • 当其他服务不可用时如nginx,出现不可用时的解决方法,除了keepalived。
2.以下解决方法
使用脚本,并进行检测nginx等其他服务出现问题,并直接处理!如:
1.当nginx出现宕机,关机,脚本会自动检测,并自动开启nginx。
2.当nginx出现宕机,无法开启,脚本则会将keepalived关闭,自动切换备用服务器。

keepalived.conf	: 每5秒执行一次脚本,作用于脚本(开关)
check.sh	    : 执行内容脚本,作用于(脚本)

image

3.lb01服务器(搭建脚本)
切换路径
[root@lb01 ~]# cd /etc/keepalived/
4.编写执行内容脚本(执行内容)
[root@lb01 keepalived]# vim check.sh
#!/bin/bash
# 1、判断端口
# 2、通过进程的方式
# 过滤nginx 不过滤进程
ps -aux | grep [n]ginx
# 判断内容是否不等于0
if [ $? -ne 0 ];then
	# 代表nginx宕机 重启nginx
	systemctl restart nginx
	# 3秒
	sleep 3;
	# 过滤nginx 不过滤进程
	ps -aux | grep [n]ginx
	# 判断内容是否不等于0
	if [ $? -ne 0 ];then
		# 关闭虚拟VIP 直接切换到另一台服务器
		systemctl stop keepalived 
	fi
	
fi

5.增加可执行权限
[root@lb01 keepalived]# chmod +x check.sh
4.搭建(脚本开关)
5.编写执行用来启动检测作用脚本(启动开关)
[root@lb01 ~]# vi /etc/keepalived/keepalived.conf
vrrp_script check_web {
# 指定脚本路径    
script "/etc/keepalived/check.sh"
# 5秒钟执行一次    
interval 5
}

# 配置VRRP协议
vrrp_instance VI_1 {
#       主机节点   备用节点(当主机节点出现问题,就使用备用节点)
# 状态,MASTER和BACKUP(这里仅仅是一个标记,正真确认VIP的是权重)
state MASTER
# 绑定网卡(配置网卡与虚拟VIP 相符)
interface eth0
# 虚拟路由标示,可以理解为分组(相当于频道50)
virtual_router_id 50
# 优先级(数字越大,权重越大 越大oen)
priority 100
# 监测心跳间隔时间
advert_int 1
# 配置认证
authentication {
# 认证类型
auth_type PASS
# 认证的密码
auth_pass 111111111
}
# 设置VIP(配置那个网卡就需要配置该网段)
virtual_ipaddress {
# 虚拟的VIP地址
192.168.15.3
}

#调用计划的脚本            
track_script {
check_web
}
}
6. lb01服务器将启动脚本文件传入lb02服务器(lb02服务器并再次编写脚本内容 达成一致)
[root@lb01 nginx]# scp nginx.conf 172.16.1.6:/etc/nginxroot

@172.16.1.6's password:
nginx.conf                                                       100%  645
665.3KB/s   00:00 
7.实战模拟测试脑裂(nginx)
  • 情况一:
当除了keepalived的其他服务如nginx出现关闭(宕机)情况
1.脚本会检测到,然后自启动nginx服务

image

  • 情况二:
当除了keepalived的其他服务如nginx出现(宕机)脚本无法自启动时
1.脚本会自启动关闭keepalived,切换到备用服务器。
1.1编辑nginx.conf全局配置文件,模拟宕机无法启动

image

1.22.实战测试
当除了keepalived的其他服务如nginx出现关闭(宕机)情况
1.脚本会检测到,然后自启动nginx服务

image

posted @ 2022-01-09 18:28  AlexEvans  阅读(132)  评论(0编辑  收藏  举报