目录
一、Keepalived
1. 基本概念:
- 定义:Keepalived是一个轻量级别的高可用解决方案,是一个免费开源的、用C编写的类似于Layer 3、4 & 7(也有说法为Layer 3、4 & 5)交换机制的软件,它具备第3层、第4层和第7层(或第5层)交换机的功能。
- 作用:Keepalived主要用于检测服务器的状态,如果服务器宕机或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作。当服务器工作正常后,Keepalived会自动将服务器加入到服务器群中。
2. Keepalived工具介绍:
Keepalived是专为LVS和HA设计的一款健康检查工具
支持故障自动切换(Failover)
支持节点健康状态检查(Health Checking)
判断LVS负载调度器、节点服务器的可用性,当master主机出现故障及时切换到backup节点保证业务正常,当master故障主机恢复后将其重新载入到群集服并且业务重新切换回master节点。
3. Keepalived工作原理:
Keepalived是基于VRRP协议实现多机热备的高可用方案。
默认情况下通过优先级决定主备服务器的角色(优先级最高的为主),主服务器(MASTER)会通过ip命令在本地生成VIP,并通过VIP接受并处理客户端发送的请求消息;同时主服务器还会定时发送VRRP报文给备服务器(BACKUP)告知主服务器的存货状态。当主服务器异常时,备服务器就会接管VIP(也是通过ip命令生成VIP)继续提供服务,保证服务的高可用。
4. Keepalived工作模式:
- 抢占模式:
Keepalived的默认模式,MASTER节点从故障中恢复后,会将VIP从BACKUP节点中抢占过来。 - 非抢占模式:
MASTER节点恢复后不抢占VIP。(主备节点的state都配置为BACKUP,且都要添加nopreempt配置)
二、配置实例
LVS + Keepalived
1. 环境配置:
客户机: 192.168.100.88
LVS1代理服务器 安装 Keepalived: 192.168.100.66
LVS2代理服务器 安装 Keepalived: 192.168.100.77 vip 虚拟ip: 192.168.100.99
web1服务器: 192.168.100.44
web2服务器: 192.168.100.55
2. 实操:
① 代理服务器 LVS1、LVS2 关闭防火墙 安装keepalived、ipvsadm
#关闭防火墙
systemctl disable firewalld.service --now
setenforce 0
yum -y install ipvsadm keepalived #安装 ipvsadm keepalived
#查看keepalived版本
rpm -qa | grep keepalived
#查看keepalived安装路径
rpm -ql keepalived
② 修改LVS1代理主服务器配置(主)
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.100.99
}
}
virtual_server 192.168.100.99 80 { #指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
delay_loop 6 #健康检查的间隔时间(秒)
lb_algo rr #指定调度算法,轮询(rr)
lb_kind DR #指定群集工作模式,直接路由(DR)
persistence_timeout 0 #连接保持时间(秒)
protocol TCP #应用服务采用的是 TCP协议
real_server 192.168.100.44 80 { #指定第一个Web节点的地址、端口
weight 1 #节点的权重
TCP_CHECK {
connect_port 80 #添加检查的目标端口
connect_timeout 3 #添加连接超时(秒)
nb_get_retry 3 #添加重试次数
delay_before_retry 3 #添加重试间隔
}
}
real_server 192.168.100.55 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
③ 加载IPVS模块、保存当前的IPVS配置,并且查看当前系统上的IPVS配置信息
#加载 IP 虚拟服务器 (IPVS) 模块
modprobe ip_vs
#将当前 IPVS 的配置保存到 /etc/sysconfig/ipvsadm 文件中
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
systemctl restart keepalived.service
#列出当前系统上的 IPVS 配置信息
ipvsadm -ln
④ 修改LVS2代理主服务器配置(备)
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.100.99
}
}
virtual_server 192.168.100.99 80 {
delay_loop 6
lb_kind DR
persistence_timeout 0
protocol TCP
real_server 192.168.100.44 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.100.55 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服务,测试高可用
Nginx + Keepalived
1. 环境配置:
客户机: 192.168.100.88
Nginx1代理服务器 安装 Keepalived: 192.168.100.66
Nginx2代理服务器 安装 Keepalived: 192.168.100.77 vip 虚拟ip: 192.168.100.99
web1服务器: 192.168.100.44
web2服务器: 192.168.100.55
2. 实操:
① 编写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
② 配置Nginx1代理服务器(主)
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.100.99
}
track_script {
check_nginx
}
}
③配置Nginx2代理服务器(备)
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.100.99
}
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服务