LVS+Keepalived高可用群集

目录

一:Keepalived

二:keepalived实现原理剖析

三:vrrp虚拟路由冗余协议

四:Keepalived体系主要模块及其作用

4.1core模块

4.2vrrp模块

4.3check模块

五:LVS+Keepalived高可用群集的搭建

5.1配置主负载均衡调度器(192.168.137.10)

5.1.1关闭防火墙、增强机制和下载httpd服务

5.1.2安装 ipvsadm和keepalived服务

5.1.3修改配置文件keeplived.conf

5.1.4启动服务、查看虚拟网卡VIP

5.1.5调整proc响应参数,关闭Linux内核的重定向参数响应

5.1.6配置负载分配策略,并启动服务

5.1.7清空ipvsadm,并做策略

5.1.8保存设置 

5.2配置备负载均衡调度器(192.168.137.15) 

5.2.1关闭防火墙、增强机制和下载httpd服务

5.2.2安装ipvsadm、keepalived服务

5.2.3修改配置文件keeplived.conf

5.2.5调整proc响应参数,关闭Linux内核的重定向参数响应

5.2.6配置负载分配策略,并启动服务

5.2.7清空ipvsadm,并做策略

5.2.8保存设置

5.3配置节点服务器web1(192.168.137.20)

5.3.1关闭防火墙、增强机制和下载httpd服务

5.3.2配置站点文件

5.3.3配置虚拟VIP

5.3.4重启网络服务,开启虚拟网卡

5.3.5设置路由

5.3.6调整proc响应参数

5.3.7刷新proc参数

5.4配置节点服务器web2(192.168.137.30)

5.4.1关闭防火墙、增强机制和下载httpd服务

5.4.2配置站点文件

5.4.3配置虚拟vip 

5.4.4重启网络服务,开启虚拟网卡

5.4.5设置路由

5.4.6调整proc响应参数 

5.4.7刷新proc参数

5.5进行测试 

5.5.1当前使用的为主DR服务器

5.5.2断开主DR服务器的Keepalived测试 

5.5.3在客户端进行测试

六:Keepalived脑裂及解决办法

6.1Keepalived脑裂

6.2脑裂的原因

6.3对应策略

七:总结

前言:我们要理解Keepalived实现原理,掌握Keepalived的部署,掌握LVS+Keepalived高可用集群部署

一:Keepalived

专为LVS和HA设计的一款健康检查工具

判断LVS负载调度器、节点服务器的可用性,当master主机出现故障及时切换到backup节点保证业务正常,当 master 故障主机恢复后将其重新加入群集并且业务重新切换回 master 节点

二:keepalived实现原理剖析

keepalived采用vrrp热备份协议实现linux服务器的多机热备功能

vrrp(虚拟路由冗余协议)是针对路由器的一种备份解决方案​​​​​​​

  • 是针对路由器的一种备份解决方案

  • 由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务

  • 每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态

  • 若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务

三:vrrp虚拟路由冗余协议

vrrp会把多台路由组成一个虚拟路由组vrid,vrrp会生成一个虚拟路由(包含虚拟ip和虚拟mac,局域网内用户不关心哪个是主哪个是备,他们只用虚拟路由器的虚拟ip作为他们的网关)实际上虚拟ip是承载在master路由器,也就是说实际的数据通过master进行转发backup是通过优先级来决定哪个是master路由,优先级最大的那台就是master,backup只是用来监听master定时发送的vrrp报文,如果超时未收到master发来的vrrp报文backup就会抢占master虚拟ip也会飘移到backup上

四:Keepalived体系主要模块及其作用

keepalived体系架构中主要有三个模块:core、check和vrrp

4.1core模块

为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析

4.2vrrp模块

是来实现vrrp协议的

4.3check模块

负责健康检查,常见的方式有端口检查及url检查

五:LVS+Keepalived高可用群集的搭建

#环境
主DR服务器:192.168.137.10     ipvsadm、keepalived
备DR服务器:192.168.137.15     ipvsadm、keepalived
web服务器1:192.168.137.20     httpd
web服务器2:192.168.137.30     httpd
VIP(虚拟ip):192.168.137.60
客户端:192.168.137.100

5.1配置主负载均衡调度器(192.168.137.10)

5.1.1关闭防火墙、增强机制和下载httpd服务

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

yum install httpd -y

5.1.2安装 ipvsadm和keepalived服务

yum -y install ipvsadm keepalived

5.1.3修改配置文件keeplived.conf

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

5.1.4启动服务、查看虚拟网卡VIP

#启动服务、查看虚拟网卡vip
systemctl start keepalived
ip addr show dev ens33

5.1.5调整proc响应参数,关闭Linux内核的重定向参数响应

vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

#刷新一下
sysctl -p

刷新一下

5.1.6配置负载分配策略,并启动服务

ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm.service

5.1.7清空ipvsadm,并做策略

ipvsadm -C
ipvsadm -A -t 192.168.137.60:80 -s rr
ipvsadm -a -t 192.168.137.60:80 -r 192.168.137.20:80 -g
ipvsadm -a -t 192.168.137.60:80 -r 192.168.137.30:80 -g

5.1.8保存设置 

ipvsadm
ipvsadm -ln
ipvsadm-save > /etc/sysconfig/ipvsadm

5.2配置备负载均衡调度器(192.168.137.15) 

5.2.1关闭防火墙、增强机制和下载httpd服务

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

yum install httpd -y

5.2.2安装ipvsadm、keepalived服务

yum -y install ipvsadm keepalived

5.2.3修改配置文件keeplived.conf

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

5.2.4启动服务、查看虚拟网卡VIP 

systemctl start keepalived
ip addr show dev ens33

5.2.5调整proc响应参数,关闭Linux内核的重定向参数响应

vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
#刷新一下
sysctl -p

刷新一下

5.2.6配置负载分配策略,并启动服务

ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm.service

5.2.7清空ipvsadm,并做策略

ipvsadm -C
ipvsadm -A -t 192.168.137.60:80 -s rr
ipvsadm -a -t 192.168.137.60:80 -r 192.168.137.20:80 -g
ipvsadm -a -t 192.168.137.60:80 -r 192.168.137.30:80 -g

5.2.8保存设置

ipvsadm
ipvsadm -ln
ipvsadm-save > /etc/sysconfig/ipvsadm

5.3配置节点服务器web1(192.168.137.20)

5.3.1关闭防火墙、增强机制和下载httpd服务

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

yum install httpd -y

5.3.2配置站点文件

vim /var/www/html/index.html
ming zhen tan ke nan

5.3.3配置虚拟VIP

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

5.3.4重启网络服务,开启虚拟网卡

systemctl restart network
ifup lo:0
ifconfig lo:0

5.3.5设置路由

route add -host 192.168.137.60 dev lo:0
route -n

5.3.6调整proc响应参数

#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
vim /etc/sysctl.conf
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

5.3.7刷新proc参数

sysctl -p

5.4配置节点服务器web2(192.168.137.30)

5.4.1关闭防火墙、增强机制和下载httpd服务

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

yum install httpd -y

5.4.2配置站点文件

vim /var/www/html/index.html
gui mie zhi ren

5.4.3配置虚拟vip 

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

5.4.4重启网络服务,开启虚拟网卡

systemctl restart network
ifup lo:0
ifconfig lo:0

5.4.5设置路由

route add -host 192.168.137.60 dev lo:0
route -n

5.4.6调整proc响应参数 

#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
vim /etc/sysctl.conf
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

5.4.7刷新proc参数

sysctl -p

5.5进行测试 

5.5.1当前使用的为主DR服务器

5.5.2断开主DR服务器的Keepalived测试 

systemctl stop keepalived.service

5.5.3在客户端进行测试

六:Keepalived脑裂及解决办法

6.1Keepalived脑裂

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

6.2脑裂的原因

高可用服务器对之间心跳线链路发生故障,导致无法正常通信。如心跳线坏了(包括断了,老化)。
因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)。
因心跳线间连接的设备故障(网卡及交换机)。
因仲裁的机器出问题(采用仲裁的方案)。
高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输。
Keepalived配置里同一 VRRP实例如果 virtual_router_id两端参数配置不一致也会导致裂脑问题发生。
vrrp实例名字不一致、优先级一致。

6.3对应策略

添加冗余的心跳线,例如:双线条线(心跳线也HA),尽量减少“裂脑”发生几率
启用磁盘锁。正在服务一方锁住共享磁盘,“裂脑”发生时,让对方完全“抢不走”共享磁盘资源。但使用锁磁盘也会有一个不小的问题,如果占用共享盘的一方不主动“解锁”,另一方就永远得不到共享磁盘。现实中假如服务节点突然死机或崩溃,就不可能执行解锁命令。后备节点也就接管不了共享资源和应用服务。于是有人在HA中设计了“智能”锁。即:正在服务的一方只在发现心跳线全部断开(察觉不到对端)时才启用磁盘锁。平时就不上锁了
设置仲裁机制。例如设置参考IP(如网关IP),当心跳线完全断开时,2个节点都各自ping一下参考IP,不通则表明断点就出在本端。不仅“心跳”、还兼对外“服务”的本端网络链路断了,即使启动(或继续)应用服务也没有用了,那就主动放弃竞争,让能够ping通参考IP的一端去起服务。更保险一些,ping不通参考IP的一方干脆就自我重启,以彻底释放有可能还占用着的那些共享资源。
利用脚本检测、报警

vim check_keepalived.sh
 
#!/bin/bash
$ip=192.168.233.9
while true
do
if [ `ip a show ens33 |grep $ip|wc -l` -ne 0 ]
then    echo "keepalived is error!"
else    echo "keepalived is OK !"
fi
done

七:总结

通过本章内容的学习,我们了解了Keepalived的主要功能,在生产环境中我们会经常使用到,我们需要知道Keepalived主服务器与从服务器的区别,其原理和vrrp差不多。知道如何构建负载均衡、高可用群集。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值