LVS+Keepalived高可用负载均衡群集

LVS+Keepalived高可用负载均衡群集

  • 一、keepalived
    • 1、简介
    • 2、工作原理
    • 3、VRRP协议(虚拟路由冗余协议)
    • 4、Keepalived主要模块及作用
    • 5、健康检查(探针)
    • 6、脑裂的形成和解决方法
      • 6.1什么是脑裂
      • 6.2发生脑裂时的现象及原因
      • 6.3解决方法
      • 6.4脑裂的预防
  • 二、LVS+Keepalived高可用群集部署
    • 1、配置负载调度器(主、备相同)
    • 2、配置节点服务器
    • 3、测试验证
  • 三、keepalived模式
  • 四、知识补充

一、keepalived

1、简介

  • keepalived是集群管理中保证高可用的一个服务软件,用来防止单点故障。
  • keepalived的作用是监测服务器的状态,如果有一台服务器岩机,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器工作。
  • keepalived起初是为LVS设计的专门用来监控集群系统中各个服务节点的状态如果某个服务节点出现异常或者工作出现故障,keepalived将检测到,并将出现故障的服务节点从集群系统中剔除,而在故障节点恢复正常后,keepalived又可以自动将该服务节点重新加入集群中,这些工作全部自动完成。这部分功能类似于nginx 等反向代理的应用探活功能实现后端服务高可用。
  • 后来又加入了VRRP的功能,VRRP(Virtual Router Redundancy Protocol),虚拟路由协议出现的目的是为了解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此keepalived一方面具有服务器状态检测和故障隔离功能,另一方面也有HA cluster功能;这个功能实现各种中间件高可用。

2、工作原理

keepalived是以VRRP为实现基础的,即虚拟路由冗余协议;
虚拟路由冗余协议:可以认为是实现路由器高可用的协议,即将多个提供相同功能的路由器组成一个路由器组,这个组里面有master和backup,master上面有一个对外服务的vip地址,master会发组播,当backup收不到vrrp包时就认为master岩机了,这时就需要根据vrrp的优先级选举出一个backup当master,这样就实现了高可用。

3、VRRP协议(虚拟路由冗余协议)

  • VRRP是一种容错协议,它通过把几台路由设备联合组成一台虚拟的路由设备,并通过一定的机制来保证当主机的下一跳设备出现故障时,可以及时将业务切换到其它设备,从而保持通讯的连续性和可靠性。

  • VRRP将局域网内的一组路由器划分在一起,称为一个备份组。备份组由一个Master路由器和多个Backup路由器组成,功能上相当于一台虚拟路由器。局域网内的主机只需要知道这个虚拟路由器的IP地址,并不需知道具体某台设备的IP地址,将网络内主机的缺省网关设置为该虚拟路由器的IP地址,主机就可以利用该虚拟网关与外部网络进行通信。

  • VRRP将该虚拟路由器动态关联到承担传输业务的物理路由器上,当该物理路由器出现故障时,再次选择新路由器来接替业务传输工作,整个过程对用户完全透明,实现了内部网络和外部网络不间断通信。

4、Keepalived主要模块及作用

keepalived体系架构中主要有三个模块,分别是core、check和vrrp

模块 作用
core模块 为keepalived的核心,负责进程的启动、维护及全局配置文件的加载和解析
vrrp 是来实现VRRP协议的(调度器之间的健康检查和主备切换)
check模块 负责健康检查,常见的方式有端口检查及URL检查(节点服务器的健康检查)

5、健康检查(探针)

健康检查方式 说明
发送心跳信息 例如ping/pang命令等
TCP端口检查 例如向一台主机的IP:PROT发送TCP三次握手
HTTP URL检查 例如向一台主机的http://IP+PROT/…URL路径发送HTTP GET{}请求方法,主机响应返回2xx或者3xx为正常,若响应返回4xx或者5xx则认为健康检查异常

6、脑裂的形成和解决方法

6.1什么是脑裂

脑裂(split-brain):指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏

对于无状态服务的HA,无所谓脑裂不脑裂;但对有状态服务(比如MySQL)的HA,必须要严格防止脑裂

6.2发生脑裂时的现象及原因

Master主机一直发送心跳消息给backup主机,如果中间的链路突然断掉,backup主机将无法收到Master主机发送的心跳信息(VRRP报文),backup主机就会抢占MAster主机的工作,但其实此时Master主机是正常工作的,此时Master主机和backup主机同时工作的现象就被称为脑裂现象。

6.3解决方法

关闭两个称为Master主机的一个,一般是关闭原本就是Master的主机。

6.4脑裂的预防

1)使用shell脚本监测两个主机间的连通性,发现不通后,立即关闭Master主机
2)增加一条链路作为备用链路,当主链路断掉后,立刻启用备用链路,Master主机还可以继续给backup主机发送心跳消息
3)使用监控软件

###Shell脚本判断主机之间是否时链路断开
###主调度器
###判断主从调度器之间链路是否断连
ping -c 3 -i 0.5 -w 2 192.168.58.63 &> /dev/null 

if [ $? -ne 0 ];then
  ssh 192.168.58.61 ping -c 3 -i 0.5 -w 2 -I 192.168.58.61 192.168.58.64  &> /dev/null 
  if [ $? -eq 0 ];then
      systemctl stop keepalived
  fi
fi

二、LVS+Keepalived高可用群集部署

主DR 服务器:192.168.80.10
备DR 服务器:192.168.80.11
Web 服务器1:192.168.80.12
Web 服务器2:192.168.80.13
vip:192.168.80.188
客户端:192.168.80.200

1、配置负载调度器(主、备相同)

systemctl stop firewalld.service
setenforce 0

yum -y install ipvsadm keepalived
modprobe ip_vs
cat /proc/net/ip_vs
  1. 配置keeplived(主、备DR 服务器上都要设置)
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
......
global_defs {						#定义全局参数
--10行--修改,邮件服务指向本地
	smtp_server 127.0.0.1
--12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02
	router_id LVS_01
--14行--注释掉,取消严格遵守VRRP协议功能,否则VIP无法被连接
	#vrrp_strict
}

vrrp_instance VI_1 {				#定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUP
    state MASTER
--21行--修改,指定承载vip地址的物理接口
    interface ens33
--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致	
    virtual_router_id 10
	#nopreempt		#如果设置非抢占模式,两个节点state必须为BACKUP,并加上配置 nopreempt
--23行--修改,指定优先级,数值越大优先级越高,这里设置主为100,备为90
    priority 100
    advert_int 1					#通告间隔秒数(心跳频率)
    authentication {				#定义认证信息,每个热备组保持一致
		auth_type PASS				#认证类型
--27行--修改,指定验证密码,主备服务器保持一致
        auth_pass abc123
    }
    virtual_ipaddress {				#指定群集vip地址
        192.168.80.188
    }
}
--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.80.188 80 {
    delay_loop 6					#健康检查的间隔时间(秒)
    lb_algo rr						#指定调度算法,轮询(rr)
--39行--修改,指定群集工作模式,直接路由(DR)
    lb_kind DR
    persistence_timeout 0			#连接保持时间(秒)
    protocol TCP					#应用服务采用的是 TCP协议
--43行--修改,指定第一个Web节点的地址、端口
    real_server 192.168.80.12 80 {
        weight 1					#节点的权重
--45行--删除,添加以下健康检查方式		
        TCP_CHECK {
			connect_port 80			#添加检查的目标端口
			connect_timeout 3		#添加连接超时(秒)
			nb_get_retry 3			#添加重试次数
			delay_before_retry 3	#添加重试间隔
		}
	}

	real_server 192.168.80.13 80 {		#添加第二个 Web节点的地址、端口
        weight 1
        TCP_CHECK {
			connect_port 80
			connect_timeout 3
			nb_get_retry 3
			delay_before_retry 3
		}
	}
##删除后面多余的配置##
}


systemctl start keepalived
ip addr						#查看虚拟网卡vip
  1. 启动 ipvsadm 服务
--192.168.80.10---
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm

ipvsadm -ln
#如没有VIP 的分发策略,则重启 keepalived 服务,systemctl restart keepalived

--192.168.80.11---
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm

ipvsadm -ln
  1. 调整 proc 响应参数,关闭Linux 内核的重定向参数响应
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

sysctl -p

2、配置节点服务器

systemctl stop firewalld
setenforce 0

yum -y install httpd
systemctl start httpd

--192.168.80.100---
echo 'this is kgc web!' > /var/www/html/index.html

--192.168.80.101---
echo 'this is benet web!' > /var/www/html/index.html

vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.80.188
NETMASK=255.255.255.255

service network restart 或 systemctl restart network
ifup lo:0
ifconfig lo:0
route add -host 192.168.80.188 dev lo:0

vim /etc/sysctl.conf

net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

sysctl -p

3、测试验证

在客户端访问 http://192.168.80.188/
再在主服务器关闭 keepalived 服务后再测试,
systemctl stop keepalived

三、keepalived模式

keepalived模式分为两种:抢占模式和非抢占模式

  • 抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。
  • 非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP。
    非抢占式俩节点state必须为bakcup,且必须配置nopreempt。

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

四、知识补充

Keepalived通过什么判断哪台主机为主服务器,通过什么方式配置浮动IP?

  • Keepalived首先做初始化先检查state状态,master为主服务器,backup为备服务器。
  • 然后再对比所有服务器的priority,谁的优先级高谁是最终的主服务器。
  • 优先级高的服务器会通过ip命令为自己的电脑配置一个提前定义好的浮动IP地址。

你可能感兴趣的:(lvs,负载均衡,网络)