LVS+Keepalived 高可用集群

一、Keepalived工具介绍

支持故障自动切换(Failover)

支持节点健康状态检查(Health Checking)

基于vrrp协议完成地址流动

为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)

为ipvs集群的各RS做健康状态检测

基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务

官方网站:https://keepalived.org/

用户空间核心组件:

vrrp stack:VIP消息通告

checkers:监测real server(简单来说 就是监控后端真实服务器的服务)

system call:实现 vrrp 协议状态转换时调用脚本的功能

SMTP:邮件组件(报警邮件)

IPVS wrapper:生成IPVS规则(直接生成ipvsadm)

Netlink Reflector:网络接口(将虚拟地址ip(vip)地址飘动)

WatchDog:监控进程(整个架构是否有问题)

控制组件:提供keepalived.conf 的解析器,完成Keepalived配置

IO复用器:针对网络目的而优化的自己的线程抽象

内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限

二.vrrp协议(虚拟路由冗余协议)

Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能

2.1 vrrrp是什么?

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

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

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

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

2.2 vrrp工作过程

选举Master,比较优先级,高的为Master,若优先级相同无Master时,比较接口IP地址,大的为Master,Master设备发送ARP报文,承担报文转发工作;

状态维持,Master设备周期发送通告报文,公布配置信息和工作状态;

Backup设备根据收到的通告报文判断Master设备是否工作正常,如果Master设备主动放弃Master地位时,会发送优先级为0的通告报文,Backup设备收到后会快速切换成Master设备或者定时器超时后Backup设备认为Master设备无法正常工作,会切换状态为Master。

2.3 Keeplived、VRRP及其工作原理

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

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

2.4.Keepalived体系主要模块

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

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

vrrp模块:是来实现VRRP协议的。

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

三.实验:搭建LVS+Keepalived 高可用集群

实验环境:

主keepalived服务器:192.168.200.12
备keepalived服务器:192.168.200.13
web1服务器:192.168.200.14
web2服务器:192.168.200.15
vip:192.168.200.200
客户机:192.168.200.17

配置负载调度器(主keepalived服务器:192.168.200.12)

**############################ 配置Keepalived master服务器 #############

  1. #关闭防火墙
    systemctl stop firewalld.service
    setenforce 0
  2. #安装服务
    yum install ipvsadm keepalived -y
  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_1,备为LVS_2
    router_id LVS_1
    }
    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 123
    }
    virtual_ipaddress { #指定群集vip地址
    192.168.79.25
    }
    }
    --36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
    virtual_server 192.168.200.200 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.200.14 80 {
    weight 1 #节点的权重
    --45行--删除,添加以下健康检查方式
    TCP_CHECK {
    connect_port 80 #添加检查的目标端口
    connect_timeout 3 #添加连接超时(秒)
    nb_get_retry 3 #添加重试次数
    delay_before_retry 3 #添加重试间隔
    }
    }
    real_server 192.168.200.15 80 { #添加第二个 Web节点的地址、端口
    weight 1
    TCP_CHECK {
    connect_port 80
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    }
    }
    }
    ##删除后面多余的配置##
  4. #启动服务、查看虚拟网卡vip
    systemctl start keepalived
    ip addr show dev ens33
  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
  6. #刷新一下
    sysctl -p
    ############################# 配置ipvsadm #######################
  7. #配置负载分配策略,并启动服务
    ipvsadm-save >/etc/sysconfig/ipvsadm
    systemctl start ipvsadm.service

#清空ipvsadm,并做策略
ipvsadm -C
ipvsadm -A -t 192.168.200.200:80 -s rr
ipvsadm -a -t 192.168.200.200:80 -r 192.168.200.14:80 -g
ipvsadm -a -t 192.168.200.200:80 -r 192.168.200.15:80 -g
9. #保存设置
ipvsadm
ipvsadm -ln
ipvsadm-save >/etc/sysconfig/ipvsadm**

配置负载调度器(备keepalived服务器:192.168.200.13)

复制代码
############################ 配置Keepalived master服务器 ######################
1. #关闭防火墙
systemctl stop firewalld.service
setenforce 0
 
2. #安装服务
yum -y install ipvsadm keepalived
 
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_1,备为LVS_2
	router_id LVS_1
}
 
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 123
    }
    virtual_ipaddress {				#指定群集vip地址
        192.168.200.200
    }
}
--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.200.200 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.200.14 80 {
        weight 1					#节点的权重
--45行--删除,添加以下健康检查方式		
        TCP_CHECK {
			connect_port 80			#添加检查的目标端口
			connect_timeout 3		#添加连接超时(秒)
			nb_get_retry 3			#添加重试次数
			delay_before_retry 3	#添加重试间隔
		}
	}
 
	real_server 192.168.200.15 80 {		#添加第二个 Web节点的地址、端口
        weight 1
        TCP_CHECK {
			connect_port 80
			connect_timeout 3
			nb_get_retry 3
			delay_before_retry 3
		}
	}
}
##删除后面多余的配置##
 
4. #启动服务、查看虚拟网卡vip
systemctl start keepalived
ip addr show dev ens33	
 
5. #调整proce响应参数,关闭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
 
6. #刷新一下
sysctl -p
 
############################# 配置ipvsadm #################################
 
7. #配置负载分配策略,并启动服务
ipvsadm-save >/etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
 
8. #清空ipvsadm,并做策略
ipvsadm -C
ipvsadm -A -t 192.168.200.200:80 -s rr
ipvsadm -a -t 192.168.200.200:80 -r 192.168.200.14:80 -g
ipvsadm -a -t 192.168.200.200:80 -r 192.168.200.15:80 -g
 
9. #保存设置
ipvsadm
ipvsadm -ln
ipvsadm-save >/etc/sysconfig/ipvsadm

配置节点服务器(web1服务器:192.168.200.14)

复制代码
1. #关闭防火墙
systemctl stop firewalld
setenforce 0
 
2. #安装并开启httpd服务
yum -y install httpd
systemctl start httpd
 
3. #配置站点文件
vim /var/www/html/index.html
this is 123 web1!
 
4. #配置虚拟vip
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.200.200
NETMASK=255.255.255.255
 
5. #重启网络服务,开启虚拟网卡
systemctl restart network
ifup lo:0
ifconfig lo:0
 
6. #设置路由
route add -host 192.168.200.200 dev lo:0
route -n
 
7. #调整 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
 
8. #刷新proc参数
sysctl -p

配置节点服务器(web2服务器:192.168.200.15)

复制代码
1. #关闭防火墙
systemctl stop firewalld
setenforce 0
 
2. #安装并开启httpd服务
yum -y install httpd
systemctl start httpd
 
3. #配置站点文件
vim /var/www/html/index.html
this is lmz web2!
 
4. #配置虚拟vip
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.200.200
NETMASK=255.255.255.255
 
5. #重启网络服务,开启虚拟网卡
systemctl restart network
ifup lo:0
ifconfig lo:0
 
6. #设置路由
route add -host 192.168.200.200 dev lo:0
route -n
 
7. #调整 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
 
8. #刷新proc参数
sysctl -p

测试验证:

在客户机上测试(客户机:192.168.200.16)

主keepalived服务器:192.168.200.12

备keepalived服务器:192.168.200.13 备份服务器中没有VIP

断开主keepalived服务器:192.168.200.12

备keepalived服务器:192.168.79.220

相关推荐
梁辰兴2 小时前
计算机网络基础:以太网的 MAC 层
网络·计算机网络·macos·计算机·mac·以太网·梁辰兴
车载测试工程师2 小时前
CAPL学习-CAN相关函数-CANdb API类函数
网络·数据库·学习·capl·canoe
hunter14502 小时前
2025.12.18 cisco NAT配置
网络·智能路由器
lusasky2 小时前
基于 LangChain 的海量 API 动态检索与调用架构
网络·架构·langchain
蜜獾云2 小时前
charles抓包原理
服务器·https·ssl
vortex52 小时前
Linux 处理以 Null 字节分隔内容的文件
linux·运维·服务器
人工智能训练2 小时前
Docker Desktop WSL 集成配置宝典:选项拆解 + 精准设置指南
linux·运维·服务器·人工智能·docker·容器·ai编程
刺客xs2 小时前
TCP网络通信
网络·网络协议·tcp/ip
TG:@yunlaoda360 云老大3 小时前
华为云国际站代理商的CBR支持哪些云服务备份?
网络·人工智能·华为云
遇见火星3 小时前
Linux 如何设置开机自启:全面指南!
linux·运维·服务器·systemd