Keepalived LVS群集

keepalived群集

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

群集具备的特性

1)负载均衡 提高群集的性能
2)健康检查(探针) 探测调度器和节点服务器是否在正常运行
3)故障转移 通过VIP漂移实现主备切换

健康检查(探针)常用的工作方式

1)发送心跳消息 vrrp报文 ping/pong
2)TCP端口检查 向目标主机的 IP:PORT 发起TCP连接请求,如果TCP连接三次握手成功则认为健康检查正常,否则认为健康检查异常
3)HTTP URL检查 向目标主机的URL路径发起HTTP GET请求方法,如果响应状态码为 2XX 或 3XX,则认为健康检查正常;如果响应状态码为 4XX 或 5XX,则认为健康检查异常
http://IP:PORT/URI路径 http://www.nbpl.com/test.html

keepalived的工作原理

keepalived是基于 VRRP 协议实现多机热备的高可用方案。

默认情况下通过优先级决定主备服务器的角色(优先级最高的为主),主服务器(MASTER)会通过ip命令在本地生成VIP,并通过VIP接收并处理客户端发送的请求消息;同时主服务器还会定时发送VRRP报文给备服务器(BACKUP)告知主服务器的存活状态。当主服务器异常时,备服务器就会接管VIP(也是通过ip命令生成VIP)继续提供服务,保证服务的高可用。

keepalived的工作模式

1)抢占模式:keepalived的默认模式,MASTER节点从故障中恢复后,会将VIP从BACKUP节点中抢占过来

2)非抢占模式:MASTER节点恢复后不抢占VIP。(主备节点的state都配置为BACKUP,且都要添加nopreempt配置)

nginx做负载均衡器 + keepalived 实现高可用

1)先准备好对 nginx 进程做健康检查的脚本
2)修改keepalived配置文件,添加调用健康检查脚本的配置 使用vrrp_script XXX {}定义脚本路径 使用track_script { XXX }调用脚本
3)启动 nginx 和 keepalived

实验

keepalived + LVS

环境配置

客户机: 20.0.0.100
LVS1代理服务器 安装 Keepalived: 20.0.0.13
LVS2代理服务器 安装 Keepalived: 20.0.0.14

vip 虚拟ip: 20.0.0.200
web1服务器: 20.0.0.11
web2服务器: 20.0.0.12

实操

1) 代理服务器 LVS1、LVS2 关闭防火墙 安装keepalived、ipvsadm

systemctl disable firewalld.service --now
setenforce 0         #关闭防火墙、核心防护

yum -y install ipvsadm keepalived    #安装 ipvsadm keepalived
rpm -qa | grep keepalived  #查看keepalived版本

rpm -ql keepalived   #查看keepalived安装路径

2) 修改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地址
        20.0.0.200
    }
}

virtual_server 20.0.0.200 80 {    #指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
    delay_loop 6    #健康检查的间隔时间(秒)
    lb_algo rr    #指定调度算法,轮询(rr)
    lb_kind DR    #指定群集工作模式,直接路由(DR)
    persistence_timeout 0    #连接保持时间(秒)
    protocol TCP    #应用服务采用的是 TCP协议
    
real_server 20.0.0.11 80 {    #指定第一个Web节点的地址、端口
        weight 1    #节点的权重	
        TCP_CHECK {
			connect_port 80    #添加检查的目标端口
			connect_timeout 3    #添加连接超时(秒)
			nb_get_retry 3    #添加重试次数
			delay_before_retry 3    #添加重试间隔
		}
	}

real_server 20.0.0.12 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

3) 加载IPVS模块、保存当前的IPVS配置,并且查看当前系统上的IPVS配置信息

modprobe ip_vs   #加载 IP 虚拟服务器 (IPVS) 模块

ipvsadm-save > /etc/sysconfig/ipvsadm  #将当前 IPVS 的配置保存到 /etc/sysconfig/ipvsadm 文件中

systemctl start ipvsadm.service
systemctl restart keepalived.service 

ipvsadm -ln    #列出当前系统上的 IPVS 配置信息

4)修改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 {
        20.0.0.200
    }
}

virtual_server 20.0.0.200 80 {
    delay_loop 6
    lb_kind DR
    persistence_timeout 0
    protocol TCP
    
real_server 20.0.0.11 80 {
        weight 1
        TCP_CHECK {
			connect_port 80
			connect_timeout 3
			nb_get_retry 3
			delay_before_retry 3
		}
	}

real_server 20.0.0.12 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

5) LVS – DR模式构建负载均衡集群

#启动 ipvsadm 服务(主备皆如此)
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm

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

6) 配置节点服务器,准备测试页面

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

7)浏览器访问测试结果

8) 关闭主服务器的Keepalived服务,测试高可用

Nginx + Keepalived

环境配置

客户机: 20.0.0.100
Nginx1代理服务器 安装 Keepalived: 20.0.0.13
Nginx2代理服务器 安装 Keepalived: 20.0.0.14

vip 虚拟ip: 20.0.0.200
web1服务器: 20.0.0.11
web2服务器: 20.0.0.12

实操

1)编写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

2) 配置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 {
       20.0.0.200
    }
    track_script {
    	check_nginx
    }
}

3)配置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 {
      20.0.0.200
    }
    track_script {
    	check_nginx
    }
}

4) Nginx负载均衡配置

#主备nginx均配置四层反向代理
vim /apps/nginx/conf/nginx.conf
stream{

upstream iserver {
    server 20.0.0.103:80;
    server 20.0.0.104:80;
}

server {
        listen       80;
        proxy_pass   iserver;
        }     
   }

systemctl restart nginx

5)负载均衡测试

用curl命令对VIP地址进行访问

6)高可用测试

systemctl stop nginx     #关闭主服务器的nginx服务

脑裂故障问题

现象
主服务器和备服务器都同时拥有相同的VIP
原因
因为主服务器和备服务器之间的通信中断,导致备服务器无法收到主服务器发送的VRRP报文,备服务器误认为主服务器已经故
障了并通过ip命令在本地生成VIP

解决

关闭主服务器或备服务器其中一个的keepalived服务

预防

(1)如果是系统防火墙导致,则关闭防火墙或者添加防火墙规则放通VRRP组播地址(224.0.0.18)的传输
(2)如果是主备服务器之间的通信链路中断导致,则可以在主备服务器之间添加双链路通信或者做链路聚合
(3)在主服务器使用脚本定时判断与备服务器之间的通信链路是否中断,如果判断主备服务器之间的链路中断则自行关闭主服务器的keepalived服务
(4)利用第三方应用或监控系统检测是否发送了脑裂故障现象,如果确认发生脑裂故障则通过第三方应用或监控系统来关闭主备服务器其中一个的keepalived服务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值