LVS+Keepalived群集

keepalived概述及其功能

· 故障自动切换failover

· 实现lvs群集中节点健康检查

· 节点服务器的高可用性

keepalived软件就是通过vrrp协议来实现高可用功能

Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。

在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP,主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时 候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

keepalived体系主要模块及其作用

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

●core模块:

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

●vrrp模块:

是来实现VRRP协议的。

●check模块:

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

VRRP通信原理和keepalived工作原理

VRRP协议

是虚拟路由冗余协议,它的出现就是为了解决静态路由的单点故障

VRRP是通过一种竞选协议机制,来将路由交给某台VRRP路由器

VRRP用多播的方式(多播地址:224.0.0.18)实现高可用之间的通信,工作时主节点发包,当备节点接受不到主节点发的数据包的时候,就主动接管主节点的资源,备节点可以有多个,通过优先级来进行竞选,但一般keepalived系统运维工作是一对的,所以vrrp就是使用加密协议加密数据,但keepalived官方目前还是推荐用明文的方式认证类型和密码

keepalived工作原理

keepalived高可用之间是通过vrrp进行通信的,vrrp是通过竞选的来确定主备,主的优先级高于备,因此工作时主优先获得所有资源,备的节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,就顶替主的节点资源对外提供服务

在keepalived服务之间,只用作为主的服务器会一直发送vrrp广播包,告诉备我还活着,此时备不会去抢占主,当主不可用的时候,即备要监听不到主发送的广播包时,他就会启动相关服务,来取接管资源保证业务的连续性,接管速度是最快大概小于一秒钟。

Keepalived经常会出现的问题

脑裂现象

出现脑裂现象产生的原因

Master一直发送心跳消息给backup主机,如果中间的链路突然断掉,backup主机将无法收到master主机发送过来的心跳消息(也就是vrrp报文),backup这时候会立即抢占master的工作,但其实这时候的master是正常工作的,此时就会出现脑裂的现象。

怎么预防脑裂现象

1.使用shell脚本对这两个主机之间的连通性进行监测,如果发现有问题,就会立即关闭keepalived服务来防止脑裂的产生。

2.增加一条链路作为备用链路,即使主链路挂掉了,备用链路也会顶上来,master主机可以继续给backup主机发送心跳消息。

3.监控软件的方法,这边主要是采用的zabbix来监控的,主要就是创建监控项,创建触发器来测试关闭keepalived服务。

实验:LVS+Keepalived 高可用群集实验部署

主DR 服务器:ens33(192.168.10.14) ipvsadm 、keepalived(热备) 虚拟IP:192.168.10.188 网卡 ens33:0

备DR 服务器:ens33(192.168.10.15) ipvsadm 、keepalived

虚拟IP:192.168.10.188 网卡 ens33:0

Web 服务器1:ens33 192.168.10.16

lo:0(VIP)192.168.10.188

Web 服务器2:ens33 192.168.10.17

lo:0(VIP)192.168.10.188

vip:192.168.10.188

客户端:192.168.10.100

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

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必须为bakcup,并加上配置 nopreempt

--23行--修改,指定优先级,数值越大优先级越高,这里设置主为100,备为90

priority 100

advert_int 1 #通告间隔秒数(心跳频率)

authentication { #定义认证信息,每个热备组保持一致

auth_type PASS #认证类型

--27行--修改,指定验证密码,主备服务器保持一致

auth_pass abc123

}

virtual_ipaddress { #指定群集vip地址

192.168.10.188

}

}

--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数

virtual_server 192.168.10.188 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.10.16 80 {

weight 1 #节点的权重

--45行--删除,添加以下健康检查方式

TCP_CHECK {

connect_port 80 #添加检查的目标端口

connect_timeout 3 #添加连接超时(秒)

nb_get_retry 3 #添加重试次数

delay_before_retry 3 #添加重试间隔

}

}

real_server 192.168.10.17 80 { #添加第二个 Web节点的地址、端口

weight 1

TCP_CHECK {

connect_port 80

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

##删除后面多余的配置##

}

192.168.10.14和15都需要配置vip(虚拟IP)

vim /etc/sysconfig/network-scripts/ifcfg-ens33:0

DEVICE=ens33:0

ONBOOT=yes

IPADDR=192.168.10.188

NETMASK=255.255.255.255

重启网卡 systemctl restart network

ifup ens33:0

systemctl start keepalived

ip addr #查看虚拟网卡vip

(2)启动 ipvsadm 服务

--192.168.10.14---

ipvsadm-save > /etc/sysconfig/ipvsadm

systemctl start ipvsadm

ipvsadm -C ##清空规则

ipvsadm -A -t 192.168.10.188:80 -s rr

ipvsadm -a -t 192.168.10.188:80 -r 192.168.10.16:80 -g

ipvsadm -a -t 192.168.10.188:80 -r 192.168.10.17:80 -g

ipvsadm -ln

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

--192.168.10.15---

ipvsadm-save > /etc/sysconfig/ipvsadm

systemctl start ipvsadm

ipvsadm -ln

(3)调整 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.10.16---

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

--192.168.10.17---

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.10.188

NETMASK=255.255.255.255

service network restart 或 systemctl restart network

ifup lo:0

ifconfig lo:0

route add -host 192.168.10.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.10.188/

再在主服务器关闭 keepalived 服务后再测试, systemctl stop keepalived

相关推荐
IT闫17 小时前
ONLYOFFICE 8.2深度测评——助力自动化办公
运维·自动化·可用性测试
田猿笔记1 天前
RabbitMQ 实现消息队列负载均衡
分布式·rabbitmq·负载均衡
Elastic 中国社区官方博客3 天前
什么是 OpenTelemetry?
大数据·数据库·elasticsearch·搜索引擎·全文检索·可用性测试
cgqyw4 天前
Apache 负载均衡详细配置步骤
运维·apache·负载均衡
会飞的爱迪生5 天前
centos7之LVS-DR模式传统部署
网络·lvs
金牌服务刘5 天前
KPaaS助力抖音数据分析操作步骤
微服务·数据挖掘·数据分析·负载均衡
努力的小T5 天前
Linux LVS详解
linux·运维·服务器·云计算·负载均衡
wei_shuo5 天前
Spring Cloud Ribbon:负载均衡的服务调用
spring cloud·ribbon·负载均衡
AF016 天前
nodejs 服务器实现负载均衡
运维·服务器·负载均衡
会飞的爱迪生6 天前
centos7之LVS-TUNNEL模式
lvs·tunnel