Keepalived 集群
最编程
2024-10-09 13:16:48
...
目录
一、Keepalived工具介绍
二、Keepalived实现原理
三、Keepalived的工作模式
四、配置实例
1. LVS + Keepalived
2.Nginx + Keepalived
一、Keepalived工具介绍
Keepalived是专为LVS和HA设计的一款健康检查工具
- 支持故障自动切换(Failover)
- 支持节点健康状态检查(Health Checking)
判断LVS负载调度器、节点服务器的可用性,当master主机出现故障及时切换到backup节点保证业务正常,当master故障主机恢复后将其重新载入到群集服并且业务重新切换回master节点。
二、Keepalived实现原理
Keepalived是基于VRRP协议实现多机热备的高可用方案。
默认情况下通过优先级决定主备服务器的角色(优先级最高的为主),主服务器(MASTER)会通过ip命令在本地生成VIP,并通过VIP接受并处理客户端发送的请求消息;同时主服务器还会定时发送VRRP报文给备服务器(BACKUP)告知主服务器的存货状态。当主服务器异常时,备服务器就会接管VIP(也是通过ip命令生成VIP)继续提供服务,保证服务的高可用。
三、Keepalived的工作模式
- 抢占模式:
Keepalived的默认模式,MASTER节点从故障中恢复后,会将VIP从BACKUP节点中抢占过来。 - 非抢占模式:
MASTER节点恢复后不抢占VIP。(主备节点的state都配置为BACKUP,且都要添加nopreempt配置)
四、配置实例
1. LVS + Keepalived
对应IP:
- LVS-Master - 192.168.2.100
- LVS-Backup - 192.168.2.102
- VIP - 192.168.2.188
- Web-A - 192.168.2.103
- Web-B - 192.168.2.104
- Client - 192.168.2.200
①前置准备
#关闭防火墙
systemctl disable firewalld.service --now
setenforce 0
yum -y install ipvsadm keepalived #安装keepalived
#加载ip_vs内核模块
modprobe ip_vs
cat /proc/net/ip_vs
②修改主服务器配置
cp /etc/keepalived.conf /etc/keepalived.conf.bak #备份配置文件
vim /etc/keepalived.conf
......
global_defs { #定义全局参数
smtp_server 127.0.0.1 #邮件服务指向本地
router_id LVS_01 #指定主服务器(路由器)的名称
#vrrp_strict #加注释,取消严格遵守VRRP协议功能,否则VIP无法被连接
}
vrrp_instance VI_1 { #定义VRRP热备实例参数
state MASTER #指定热备状态,主为MASTER,备为BACKUP
interface ens33 #指定承载vip地址的物理接口
virtual_router_id 10 #指定虚拟路由器的ID号,每个热备组保持一致
#nopreempt #如果设置非抢占模式,两个节点state必须为BACKUP,并加上配置 nopreempt
priority 100 #指定优先级,数值越大优先级越高,这里设置主为100,备为90
advert_int 1 #通告间隔秒数(心跳频率)
authentication { #定义认证信息,每个热备组保持一致
auth_type PASS #认证类型
auth_pass abc123 指定验证密码,主备服务器保持一致
}
virtual_ipaddress { #指定群集vip地址
192.168.2.188
}
}
virtual_server 192.168.2.188 80 { #指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
delay_loop 6 #健康检查的间隔时间(秒)
lb_algo rr #指定调度算法,轮询(rr)
lb_kind DR #指定群集工作模式,直接路由(DR)
persistence_timeout 0 #连接保持时间(秒)
protocol TCP #应用服务采用的是 TCP协议
real_server 192.168.2.103 80 { #指定第一个Web节点的地址、端口
weight 1 #节点的权重
TCP_CHECK {
connect_port 80 #添加检查的目标端口
connect_timeout 3 #添加连接超时(秒)
nb_get_retry 3 #添加重试次数
delay_before_retry 3 #添加重试间隔
}
}
real_server 192.168.2.104 80 { #添加第二个 Web节点的地址、端口
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
systemctl start keepalived
ip a #查看虚拟网卡vip
③修改备服务器配置文件
与主服务器大致相同
global_defs {
smtp_server 127.0.0.1
router_id LVS_02 #指定备服务器(路由器)的名称
#vrrp_strict #加注释,取消严格遵守VRRP协议功能,否则VIP无法被连接
}
vrrp_instance VI_1 {
state BACKUP #指定热备状态,主为MASTER,备为BACKUP
interface ens33
virtual_router_id 10
priority 90 #指定优先级,数值越大优先级越高,这里设置主为100,备为90
advert_int 1
authentication {
auth_type PASS
auth_pass abc123
}
virtual_ipaddress {
192.168.2.188
}
}
virtual_server 192.168.2.188 80 {
delay_loop 6
lb_kind DR
persistence_timeout 0
protocol TCP
real_server 192.168.2.103 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.2.104 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
systemctl start keepalived
ip a #查看虚拟网卡vip
④LVS – DR模式构建负载均衡集群
#启动 ipvsadm 服务(主备皆如此)
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
ipvsadm -ln
#如没有VIP 的分发策略,则重启 keepalived 服务,systemctl restart keepalive
⑤配置节点服务器,准备测试页面
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
⑥浏览器访问测试结果
⑦关闭主服务器的Keepalived服务,测试高可用
systemctl stop keepalived
浏览器访问VIP地址
2.Nginx + Keepalived
对应IP:
- Nginx-Master - 192.168.2.100
- Nginx-Backup - 192.168.2.102
- VIP - 192.168.2.188
- Web-A - 192.168.2.103
- Web-B - 192.168.2.104
- Client - 192.168.2.200
①编写Nginx服务监控脚本
#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
/usr/local/bin/nginx
sleep 2
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
/etc/init.d/keepalived stop
fi
fi
②配置主服务器
global_defs {
router_id Nginx_01
}
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight -5
fall 3
rise 2
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.188
}
track_script {
check_nginx
}
}
③配置备服务器
global_defs {
router_id Nginx_02
}
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight -5
fall 3
rise 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.188
}
track_script {
check_nginx
}
}
④Nginx负载均衡配置
#主备nginx均配置四层反向代理
vim /apps/nginx/conf/nginx.conf
stream{
upstream iserver {
server 192.168.2.103:80;
server 192.168.2.104:80;
}
server {
listen 80;
proxy_pass iserver;
}
}
systemctl restart nginx
⑤负载均衡测试
使用curl命令访问VIP地址
⑥高可用测试
systemctl stop nginx #关闭主服务器的nginx服务
使用curl命令测试
推荐阅读
-
从 Aliyun Milvus Beta 或自建集群到 Aliyun Milvus Edition 的迁移方案
-
Docker-Consul 概述和集群环境设置 - II,consul 部署
-
Redis 集群入门
-
024 elasticsearch 集群
-
针对 Linux 的 HBASE 数据库集群部署
-
云服务器架构详解:X86 计算_ARM_GPU/FPGA/ASIC_裸金属_超级计算集群
-
43 | 单例模式(第二部分):如何在集群环境中设计和实施分布式单例模式?
-
研究-Oracle-11-ORALCE19C-ADG 集群构建
-
lvs+keepalived 高可用性集群
-
Keepalived 集群