Keepalived

发布时间:2023年12月20日

目录

1.Keepalived简介

一个合格的集群应该具备的特性

健康检查(探针)的方式

Keepalived体系主要模块及其作用

2.LVS+keepalived部署

配置keeplived(主、备DR 服务器上都要设置)

web01 02配置

实验

3.Nginx+keepalived部署

web01 02配置

主配置

备配置

测试?

4.脑裂故障?

现象:

原因

解决

预防

脚本监控


1.Keepalived简介

  • Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。
  • 在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP(VIP),主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

一个合格的集群应该具备的特性

  1. 负载均衡?
  2. 健康检查(探针)
  3. 故障转移

健康检查(探针)的方式

  1. 发送心跳消息 ?ping/pong
  2. TCP端口检查 ? 向目标主机的 IP:PORT 发起TCP连接请求,如果TCP连接三次握手成功则认为健康检查探测成功,否则认为健康检查探测失败
  3. HTTP URL检查 ?向目标主机的 http://IP:PORT/URL路径 发送 HTTP GET 请求方法,如果响应消息是2XX 3XX状态码则认为健康检查探测成功,如果响应消息是4XX 5XX状态码则认为健康检查探测失败

Keepalived体系主要模块及其作用

  • core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
  • vrrp模块:是来实现VRRP协议的。(调度器之间的健康检查和主备切换)
  • check模块:负责健康检查,常见的方式有端口检查及URL检查。(节点服务器的健康检查)

2.LVS+keepalived部署

实验准备

主DR 服务器:192.168.88.22
备DR 服务器:192.168.88.40
Web 服务器1:192.168.88.50
Web 服务器2:192.168.88.51
vip:192.168.88.250

systemctl stop firewalld.service
setenforce 0

配置keeplived(主、备DR 服务器上都要设置)

yum -y install ipvsadm keepalived
modprobe ip_vs
cat /proc/net/ip_vs
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf

mtp_server 127.0.0.1                  #10行修改,邮件服务指向本地
router_id LVS_01                      #12行修改,指定服务器(路由器)的名称,主01,备02
#vrrp_strict                          #14行注释掉
state MASTER                          #20行修改,指定热备状态,主为MASTER,备为BACKUP
interface ens33                       #21行修改,指定承载vip地址的物理接口
priority 100                          #23行修改,指定优先级,主为100,备为90
virtual_ipaddress {				      #指定群集vip地址
      192.168.88.250
virtual_server 192.168.88.250 80      #36行修改,指定虚拟服务器地址(VIP)、端口
     delay_loop 6                     #健康检查的间隔时间
     lb_algo rr                       #指定调度算法,轮询(rr)
lb_kind DR                            #39行修改,指定群集工作模式,直接路由(DR)
persistence_timeout 0                 #连接保持时间(秒)
real_server 192.168.88.50 80          #43行修改,指定第一个Web节点的地址、端口
##45行删除,添加以下健康检查方式
TCP_CHECK {
			connect_port 80			  #添加检查的目标端口
			connect_timeout 3		  #添加连接超时(秒)
			nb_get_retry 3			  #添加重试次数
			delay_before_retry 3	  #添加重试间隔
		}
}
##添加第二个 Web节点的地址、端口
real_server 192.168.88.51 80 {
weight 1
        TCP_CHECK {
			connect_port 80
			connect_timeout 3
			nb_get_retry 3
			delay_before_retry 3
		}
}                                    #删除后面多余的配置
systemctl start keepalived
ip addr						         #查看虚拟网卡vip


##启动 ipvsadm 服务##
--192.168.88.22---
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
ipvsadm -ln
#如没有VIP 的分发策略,则重启 keepalived 服务,systemctl restart keepalived

--192.168.88.40---
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
ipvsadm -ln

##调整 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

web01 02配置

yum -y install httpd
systemctl start httpd

--192.168.88.50---
echo 'this is yy web!' > /var/www/html/index.html

--192.168.88.51---
echo 'this is cc web!' > /var/www/html/index.html

cd /etc/sysconfig/network-scripts
cp ifcfg-lo ifcfg-lo:0
vim /etc/sysconfig/network-scripts/ifcfg-lo:0

DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.88.250
NETMASK=255.255.255.255

ifup lo:0
ifconfig lo:0
route add -host 192.168.88.250 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
systemctl start httpd

实验

3.Nginx+keepalived部署

实验准备

主DR 服务器:192.168.88.22
备DR 服务器:192.168.88.40
Web 服务器1:192.168.88.50
Web 服务器2:192.168.88.51
vip:192.168.88.250

systemctl stop firewalld.service
setenforce 0

web01 02配置

yum -y install httpd
systemctl start httpd

--192.168.88.50---
echo 'this is yy web!' > /var/www/html/index.html

--192.168.88.51---
echo 'this is cc web!' > /var/www/html/index.html

cd /etc/sysconfig/network-scripts
cp ifcfg-lo ifcfg-lo:0
vim /etc/sysconfig/network-scripts/ifcfg-lo:0

DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.88.250
NETMASK=255.255.255.255

ifup lo:0
ifconfig lo:0
route add -host 192.168.88.250 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
systemctl start httpd

主配置

yum install -y keepalived
yum install -y nginx
vim /usr/local/nginx/conf/nginx.conf

stream{
   upstream backends{
       server 192.168.88.50:80 weight=1 max_fails=2 fail_timeout=30s;
       server 192.168.88.51:80 weight=1 max_fails=2 fail_timeout=30s;
   }
   server {
       listen 9527;
       proxy_pass backends;
   }
 }

nginx -t
systemctl restart nginx.service
cd /etc/keepalived/
cp keepalived.conf{,.bak}

vim check_nginx.sh         #编写监控脚本

A=`ps -C nginx --no-header |wc -l`
 if [ $A -eq 0 ];then
   systemctl restart nginx
   B=`ps -C nginx --no-header |wc -l`
   if  [ $B -eq 0 ];then
    systemctl stop keepalived
    fi
 fi

chmod +x check_nginx.sh
vim keepalived.conf

smtp_server 127.0.0.1     #10行修改
router_id NGINX_01        #12行修改

vrrp_script check_nginx {
   cript "/etc/keepalived/check_nginx.sh"
   interval 2
   weight 1
 }                        #14行添加

state MASTER              #20行修改
interface ens33           #21行修改

virtual_ipaddress {
    192.168.88.250
 }
 track_script {
   check_nginx
 }
}                         #29行添加

systemctl restart keepalived.service

?

备配置

yum install -y keepalived
yum install -y nginx
vim /usr/local/nginx/conf/nginx.conf

stream{
   upstream backends{
       server 192.168.88.50:80 weight=1 max_fails=2 fail_timeout=30s;
       server 192.168.88.51:80 weight=1 max_fails=2 fail_timeout=30s;
   }
   server {
       listen 9527;
       proxy_pass backends;
   }
 }

nginx -t
systemctl restart nginx.service
cd /etc/keepalived/
cp keepalived.conf{,.bak}

vim check_nginx.sh         #编写监控脚本

A=`ps -C nginx --no-header |wc -l`
 if [ $A -eq 0 ];then
   systemctl restart nginx
   B=`ps -C nginx --no-header |wc -l`
   if  [ $B -eq 0 ];then
    systemctl stop keepalived
    fi
 fi

chmod +x check_nginx.sh
vim keepalived.conf

smtp_server 127.0.0.1     #10行修改
router_id NGINX_02        #12行修改

vrrp_script check_nginx {
   cript "/etc/keepalived/check_nginx.sh"
   interval 2
   weight 1
 }                        #14行添加

state BACKUP              #20行修改
interface ens33           #21行修改

virtual_ipaddress {
    192.168.88.250
 }
 track_script {
   check_nginx
 }
}                         #29行添加

systemctl restart keepalived.service

测试?

4.脑裂故障?

现象:

  • 主服务器和备服务器同时拥有VIP

原因

  • 因为主服务器和备服务器之间的通信链路中断,导致备服务器无法收到主服务器发送的VRRP通告消息,备服务器误认为主服务器故障了并通过IP命令生成VIP

解决

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

预防

  1. 主服务器和备服务器之间添加双链路通信
  2. 在主服务器上添加脚本进行判断与备服务器通信链路是否中断,如果确实是链路中断则自行关闭keepalived服务
  3. 利用第三方应用或监控系统检测是否发送脑裂故障,如果发送脑裂故障则通过第三方应用或监控系统来关闭主服务器或备服务器上的keepalived服务

脚本监控

ping -c 4 -i 0.5 -w 2 192.168.88.41   #ping41段看能否成功
if [ $? -ne 0 ];then     #若不成功则远程连接到节点服务器ping备
    ssh 192.168.88.50 ping -c 4 -i 0.5 -w 2 -I 192.168.88.50 192.168.88.41
	   if [ $? -eq 0 ];then      #若成功成功则关闭keepalived服务
	      systemctl stop keepalived
	   else
	       exit                #若不成功则退出
	   fi
fi

文章来源:https://blog.csdn.net/Ybaocheng/article/details/135085762
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。